12005~2006第二学期C程序设计期末模拟试卷一、单选题(每题2分,共20分)1、若有定义:intx,y;chara,b,c;并有以下输入数据(此处CR代表换行符,u代表空格):1u2CRAuBuCCR则能给x赋整数1,给y赋整数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是:_(1)__[A]scanf(“x=%dy=%d”,&x,&y);a=getchar();b=getchar();c=getchar();[B]scanf(“%d%d”,&x,&y);a=getchar();b=getchar();c=getchar();[C]scanf(“%d%d%c%c%c”,&x,&y,&a,&b,&c);[D]scanf(“%d%d%c%c%c%c%c%c”,&x,&y,&a,&a,&b,&b,&c,&c);2、若有以下定义和语句:doubler=99,*p=&r;*p=r;则以下正确的叙述是:(2)[A]以上两处的*p含义相同,都说明给指针变量p赋值[B]在“doubler=99,*p=&r;”中,把r的地址赋值给了p所指的存储单元[C]语句“*p=r;”把变量r的值赋给指针变量p[D]语句“*p=r;”取变量r的值放回r中3、以下说法正确的是:(3)[A]输入项可以是一个实型常量,如:scanf(“%f”,3.5);[B]只有格式控制,没有输入项,也能正确输入数据到内存,例如:scanf(“a=%d,b=%d”);[C]当输入一个实型数据时,格式控制部分可以规定小数点后的位数,例如:scanf(“%4.2f”,&d);[D]当输入数据时,必须指明变量地址,例如:scanf(“%f”,&f);4、以下程序运行后,如果从键盘上输入ABCDE回车,则输出结果为:(4)[A]5[B]6[C]7[D]8#includestdio.hintfunc(charstr[]){intnum=0;while(*(str+num)!='\0')num++;return(num);}voidmain(){charstr[10],*p=str;gets(p);printf(%d\n,func(p));}5、若有以下定义:chara;intb;floatc;doubled;则表达式a*b/d-c值的类型为:(5)[A]float[B]int[C]double[D]char6、下列可作为C语言赋值语句的是:(6)[A]x=3,y=5[B]a=b=6[C]i--;[D]y=int(x);27、给出以下定义:charx[]=“abcdefg”;chary[]={'a','b','c','d','e','f','g'};则正确的叙述为:(7)[A]数组x和数组y等价[B]数组x和数组y的长度相同[C]数组x的长度大于数组y的长度[D]数组x的长度小于数组y的长度8、以下叙述中不正确的是:(8)[A]在不同的函数中可以使用相同名字的变量[B]函数中的形式参数是局部变量[C]在一个函数内定义的变量只在本函数范围内有效[D]在一个函数内的复合语句中定义的变量在本函数范围内有效9、设P1和P2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是:(9)[A]k=P1-P2;[B]P2=k;[C]P1=P2;[D]k=*P1*(*P2);10、非法的转义字符是:(10)[A]‘\t’[B]‘\018’[C]‘\n’[D]‘\xaa’二、程序填空题(阅读以下程序说明和相应程序,将空格补充完整。每小题2分,共30分)1、【程序说明】打印数字金字塔,金字塔层数由用户输入控制(1~9层)。要求金字塔最下面一行的第一个字符紧贴屏幕左侧输出。如输入6,则输出的金字塔如下图。运行示例:【程序代码】#includestdio.hvoidmain(){inti,j,n;printf(输入金字塔层数:\n);scanf(%d,&n);for(i=1;i=n;i++){for(j=1;(11);j++)(12);for(j=0;(13);j++)3printf(%d,i);(14);}}【选项】(11)[A]j=n[C]j=n-i[B]j=n-1[D]jn-i(12)[A]printf();[C]printf(\t);[B]printf(\n);[D]printf(\b);(13)[A]j=2*i-1[C]j2*i-2[B]j=2*i-2[D]j=2*i(14)[A]printf();[C]printf(\t);[B]printf(\n);[D]printf(\b);2、【程序说明】随机产生20个100~300之间的整数,选出其中能被3或能被5整除的数,并把它们从小到大排序后按每行5个数输出。运行示例:【程序代码】#includestdio.h#includestdlib.h#includetime.hvoidmain(){inti,j,k,a[20],b[20],temp,(15);srand(time(NULL));printf(原始数据:\n);for(i=0;i20;i++){a[i]=rand()%201+100;if((16)){n=n+1;b[n]=a[i];}4if(i%5==0)printf(\n);printf(%-5d,a[i]);}printf(\n上述数据中能被3或5整除的数从小到大排序后:\n);for(i=0;in-1;i++){k=i;for(j=i+1;jn;j++){if((17))(18);}if(k!=i){temp=b[k];b[k]=b[i];b[i]=temp;}}for(i=0;in;i++){if(i%5==0)printf(\n);printf(%-5d,b[i]);}printf(\n);}【选项】(15)[A]n[C]n=1[B]n=0[D]n=-1(16)[A]a[i]%3==0||a[i]%5==0[C]a[i]%3=0&&a[i]%5=0[B]a[i]%3==0&&a[i]%5==0[D]a[i]%3=0||a[i]%5=0(17)[A]b[k]b[i][C]b[k]b[j][B]b[k]b[j][D]b[i]b[j](18)[A]k=j[C]i=j[B]k=i[D]j=k3、【程序说明】从输入的字符串中找出特定的字符(由用户输入),并统一替换成另一个字符(也由用户输入)。运行示例:5【程序代码】#includestdio.h#includestring.hvoidmain(){inti;charx,y,a[100];printf(请输入一个句子(不超过80个字母):\n);gets((19));printf(请输入一个欲被替换的字母:\n);(20);getchar();printf(输入一个欲替换成的字母:\n);scanf(%c,&y);for(i=0;(21);i++)if((22))a[i]=y;printf(上述句子中的字母%c被替换成字母%c后:\n,x,y);(23)}【选项】(19)[A]a[][C]a()[B]a[100][D]a(20)[A]getchar(x);[C]x=getchar();[B]scanf(“%s”,x);[D]scanf(“%c”,x)(21)[A]a[i]!=\0[C]istrlen(a[100])[B]istrlen(a[])[D]a[i]!=’\0’(22)[A]a[i]!=x[C]a[i]==x[B]a[i]=x[D]a[i]!=’\0’(23)[A]printf(“%s\n”,a[100]);[C]putchar(a);[B]printf(“%c”,a);[D]puts(a);64、【程序说明】输入三个整数,按由小到大的顺序输出这三个数。【程序代码】#includestdio.hvoidswap((24)){inttemp;temp=*pa;*pa=*pb;*pb=temp;}voidmain(){inta,b,c,temp;scanf(%d,%d,%d,&a,&b,&c);if(ab)swap(&a,&b);if(ac)swap(&a,&c);if(bc)swap(&b,&c);printf(%d,%d,%d,a,b,c);}【选项】(24)[A]int*pa,*pb[C]double*pa,*pb[B]int*pa,int*pb[D]double*pa,double*pb5、【程序说明】将两个字符串连接起来。【程序代码】#includestdio.hvoidmain(){chars1[80],s2[40];inti=0,j=0;printf(\nInputthefirststring:);scanf(%s,s1);printf(\nInputthesecondstring:);scanf(%s,s2);while(s1[i]!='\0')7i++;while(s2[j]!='\0')(25);s1[i]='\0';printf(\nNewstring:%s,s1);}【选项】(25)[A]s1[i]=s2[j][B]s1[i++]=s2[j++][C]s1[i]=s2[j++][D]s1[i++]=s2[j]三、程序阅读题(阅读下列程序,写出运行结果,每小题2分,共20分)1、【程序代码】#includestdio.hintstring_length(chars[]){inti=0;while(s[i]!='\0')i++;returni;}voidmain(){charstring1[]=testing;charstring2[]={'t','e','s','t','\0'};intj=0;j=string_length(string1);printf(thelengthofthefirststringis\n%d\n,j);j=string_length(string2);printf(thelengthofthesecondstringis\n\%d\n,j);}【选项】(26)程序运行时,第二行输出________(26)_________[A]6[B]7[C]8[D]9(27)程序运行时,第四行输出_______(27)_________[A]4[B]5[C]6[D]72、【程序代码】#includestdio.h#includemath.hvoidmain(){intn,s=0;scanf(%d,&n);n=abs(n);8while(n!=0){s=s+n%10;n=n/10;}printf(%d\n,s);}【选项】(28)程序运行时,若输入1234,则输出____(28)_____[A]123[B]12[C]1[D]10(29)程序运行时,若输入-1280,则输出____(29)_____[A]11[B]-128[C]-12[D]–13、【程序代码】#includestdio.hvoidmain(){inta[]={5,8,7,6,2,10,3};inty,z,*p=&a[1];y=(*--p)++;printf(%3d\n,y);.printf(%3d\n,a[0]);}【选项】(30)程序运行时,第一行输出______(30)__________[A]5[B]8[C]7[D]6(31)程序运行时,第二行输出______(31)__________[A]7[B]6[C]2[D]104、【程序代码】#includestdio.h#includemalloc.h#defineformat1%d,%d\n#defineformat2%d,%dvoidmain(){inta,b,x,y;intf1(int,int),f2(int*,int*);scanf(format2,&a,&b);9x=f1(a,b);printf(format1,a,x);y=f2(&a,&b);printf(