第1页共6页杭州电子科技大学信息工程学院考试试卷(A)卷考试课程计算机应用基础与程序设计(C语言)2考试日期2011年6月13日成绩课程号教师号任课教师姓名考生姓名学号年级专业说明:请将全部答案都书写在第5页答题纸上,否则答题无效。试题一、判断题(共10分)(用‘√’或‘×’标注对错)1.void类型的函数一定无形参。×2.函数f中有语句return(x,y);则函数f可以返回x、y这两个值。×3.函数f可以用f(f(x))形式调用,这种调用形式是递归调用。×4.数组元素的下标必须是整数,不能用实数。√5.若有定义语句“inta[10];”则a[10-9/2]是合法的数组元素。√6.若有定义“inta[5][6];”,则在数组元素a[2][4]前有16个元素。。√7.若有定义语句“inta[10],i=2;”,则&a[i]与a+i等价。√8.数组定义语句“charc[]=Hello;”与“charc[]={‘H’,’e’,’l’,’l’,’o’};”等价。×9.语句“double*p=&x,x;”使指针变量p指向变量x。×10.若fp已正确定义并指向某文件,当未遇到该文件结束标志时函数feof(fp)的值为0。√试题二、单选题,根据题目从A、B、C、D中,选择一个正确的选项(共20分)1.C语言传值调用的特点是(C)。A.实参必须是变量B.实参传给形参变量的数据是地址C.在函数中形参变量值改变后,不改变实参变量的值D.在函数中形参变量值改变后,实参变量的值随之也改变2.如果在函数中定义一个变量,有关该变量作用域正确的是(A)。A.只在该函数中有效B.在该文件中有效C.在本程序中有效D.为非法变量3.C语言总是从(A)函数开始执行。A.mainB.处于最前的C.处于最后的D.随机选一个4.根据下面函数print的定义,选出调用函数print(63429)的值是(B)。voidprint(intn){if(n==0)return;else{printf(%3d,n%10);print(n/10);return;}}A.63429B.92436C.23469D.964325.以下正确的函数定义是(D)。A.doublefun(intx,inty)B.doublefun(intx,y){z=x+y;returnz;}{intz;returnz;}C.fun(x,y)D.doublefun(intx,inty){intx,y;doublez;{doublez;z=x+y;returnz;}z=x/y;returnz;}6.设有定义语句chars[]=abcDE;,则s[5]的值是(C)。A.未知字符B.'0'C.'\0'D.'E'7.当调用函数时,实参是一个数组名,则向函数传送的是(B)。A.数组的长度B.数组的首地址C.数组每一个元素的地址D.数组每个元素中的值8.能对一维数组正确初始化的语句是(C)。A.inta[5]={0,1,2,3,4,5};B.inta[5]={};C.inta[5]={10};D.inta[5]={1,……,5};9.以下数组定义中错误的是(B)。A.intx[][3]={0};B.intx[2][3]={{1,2},{3,4},{5,6}}C.intx[][3]={{1,2,3},{4,5,6}};D.intx[2][3]={1,2,3,4,5,6};10.下面程序段的输出结果是(D)。intk,a[3][3]={1,2,3,4,5,6,7,8,9};for(k=0;k3;k++)printf(“%d”,a[k][k]);A.147B.369C.357D.15911.有数组定义语句“charstr[80];”,则正确的输入语句为(C)。A.scanf(%s,*str);B.scanf(%s,&str);C.gets(str);D.gets(str[80]);12.下面程序段的输出结果是(A)。chara[10]=abcd;charb[4]=ABC;strcat(a,b);printf(“%s”,a);A.abcdABCB.abcdC.ABCD.ABCabcd13.若有以下宏定义:#defineN2#defineY(n)(N+1)*n则执行语句Z=2*Y(N+5);后的结果为:(C)第2页共6页A.语句有错误B.Z=42C.Z=17D.Z无定值14.下列程序段的运行结果为(D)。chars[]=ab\0cd;puts(s);A.abcdB.abcdC.ab0D.ab15.若有说明:inti,j=1,*p=&i;则与i=j;等价的语句是(B)。A.i=*p;B.*p=jC.i=&j;D.p=&j16.对于以下定义,(D)是正确的赋值。int*p[10],a[10];A.p=aB.p=&a[0]C.*p=a[0]D.p[0]=a17.设有下列定义chars[]=12345,*p=s;则下列表达式中错误的是(D)。A.*(p+1)B.*(s+2)C.p=ABCD.s=ABC18.设有如下定义:inta[]={1,3,5,7,9};int*p;则下列程序段的输出结果为(A)。p=a;*(p+2)+=2;printf(“%d,%d\n”,*p,*(p+2));A.1,7B.1,5C.5,9D.3,719.对以下结构体变量example中成员x的引用正确的是(C)。struct{intx;inty;}example,*p=&example;A.(*p).example.xB.*p.xC.p-xD.p-example.x20.以“只读”方式打开文本文件c:\data.txt,下列语句中哪一个是正确的(A)。A.fp=fopen(c:\\data.txt,r);B.fp=fopen(c:\data.txt,r);C.fp=fopen(c:\\data.txt,w);D.fp=fopen(c:\data.txt,w);试题三、按题目的意思,写出正确的内容(共10分)1.在C程序中,若对函数类型未加说明,则函数的隐含类型为(int)。2.若有定义inta[5][6];则元素a[3][5]之后的那一个元素是(①a[4][0])、元素a[3][0]之前的那一个元素是(②a[2][5])。3.若有定义“inta=1,b=2,*p=&a;”,执行语句*p*=10;p=&b;*p+=5;后a的值是(10)。4.已有定义:inta[5]={1,3,5,7,9},*p=a,m;,执行语句m=(*p)++;后,m的值是(①1),a[0]的值是(②2)。5.设有定义语句“struct{intx;inty;}d[10]={{1,2},{3,4},{5,6}};”,则语句:printf(“%d\n”,d[1].x+d[1].y+d[2].x+d[2].y);的输出是(18)。试题四、程序阅读题(共16分)说明:阅读下列程序,在每小题提供的程序运行结果若干可选答案中,挑选一个正确答案。A1.#includestdio.hintf(intx);voidmain(){intx=2,i;for(i=0;i3;i++)printf(%3d,f(x));}intf(intx){inty=2;staticintz=2;x++;y++;z++;return(x+y+z);}A.91011B.91113C.999D.91215C2.#includestdio.hvoidswap1(int*a){intt;t=*a;*a=*(a+1);*(a+1)=t;}voidswap2(inta,intb){intt;t=a;a=b;b=t;}voidmain(){intx[2]={3,9};inty[2]={3,9};swap1(x);swap2(y[0],y[1]);printf(x:%d%d\n,x[0],x[1]);printf(y:%d%d\n,y[0],y[1]);第3页共6页}A.x:39B.x:39C.x:93D.x:93y:39y:93y:39y:93D3.#includestdio.hvoidf(intm,intn,int*px,int*py);voidmain(){intx=1,y=1;f(2011,160,&x,&y);printf(%d#%d#,x,y);}voidf(intm,intn,int*px,int*py){intk,flag;inttab[2][13]={{0,31,28,31,30,31,30,31,31,30,31,30,31},{0,31,29,31,30,31,30,31,31,30,31,30,31},};flag=m%4==0&&m%100!=0||m%400==0;for(k=1;ntab[flag][k];k++)n=n-tab[flag][k];*px=k;*py=n;}A.1#1#B.2011#160#C.6#8#D.6#9#B4.voidsort(inta[],intn){inti,j,k,t;for(i=0;in-1;i++){k=i;for(j=i+1;jn;j++)if(a[k]a[j])k=j;t=a[i];a[i]=a[k];a[k]=t;}}#includestdio.hvoidmain(){intx[10];inti,m=1;voidsort(inta[],intn);for(i=0;i10;i++){x[i]=m*i;m=-m;}sort(x,10);for(i=0;i10;i++)printf(%3d,x[i]);}A.-8-6-4-2013579B.86420-1-3-5-7-9C.-9-7-5-3-102468D.975310-2-4-6-8试题五、程序填空题(共18分)说明:阅读下列程序说明和相应程序,在每小题提供的若干可选答案中,挑选一个正确答案。1.【程序说明】验证哥德巴赫猜想:任何一个大于6的偶数均可表示为两个素数之和。例如6=3+3,8=3+5,…,18=7+11。将6~100之间的每个偶数都表示成两个素数之和。函数prime(m)用于判断m是否为素数。素数就是只能被1和自身整除的正整数,1不是素数,2是素数。#includestdio.h#includemath.hvoidmain(){inti,k;intprime(intm);for(i=6;i=100;i=i+2)for(k=3;k=50;k++)if(____(1)C____){printf(%d=%d+%d\n,i,k,i-k);break;}}intprime(intm){intk,n;if(m==1)return0;n=(int)sqrt(m);for(k=2;k=n;k++)____(2)_B___;第4页共6页____(3)A____;}(1)A.prime(i)B.prime(i)&&prime(k)C.prime(k)&&prime(i-k)D.prime(k)(2)A.if(m%k!=0)return0B.if(m%k==0)return0C.if(m%k==0)return1D.if(m%k!=0)return1(3)A.return1B.return0C.elsereturn1D.elsereturn02.【程序说明】输入一个整数,输出它的二进制序列。#includestdio.hintchange(intx,inta[]);voidmain(){inta[32],x,i,m;scanf(%d,&x);m=change(x,a);for(i=0;im;i++)printf(%d,a[i]);}intchange(____(4)_D___){intn=0,t,k;do{a[n]=x%2;____(5)A____;n++;}while(x!=0);for(k=0;____(6)C____;k++){t=a[k];a[k]=a[n-k-1];a[n-k-1]=t;}returnn;}(4)A.intx,a[32]B.int&x,int*aC.i