C语言题海,题库(含答案)

申明敬告: 本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。

文档介绍

C语言题海,题库(含答案)

第一章C语言概述一单项选择题1.一个C程序的执行是从(A)。A)本程序的main函数开始,到main函数结束B)本程序文件的第一个函数开始,到本程序文件的最后一个函数结束C)本程序的main函数开始,到本程序文件的最后一个函数结束D)本程序文件的第一个函数开始,到本程序的main函数结束2.以下叙述正确的是(C)。A)在C程序中,main函数必须位于程序的最前面B)C程序的每行中只能写一条语句C)C语言本身没有输入输出语句D)在对一个C程序进行编译的过程中,可发现注释中的拼写错误3.以下叙述不正确的是(D)。A)一个C源程序可由一个或多个函数组成B)一个C源程序必须包含一个main函数C)C程序的基本组成单位是函数D)在C程序中,注释说明只能位于一条语句的后面第215页共215页n4.C语言规定,在一个源程序中,main函数的位置(C)。A)必须在最开始B)必须在系统调用的库函数的后面C)可以任意D)必须在最后5.一个C语言源程序是由(B)。A)一个主程序和若干子程序组成B)函数组成C)若干过程组成D)若干子程序组成二填空题1.C源程序的基本单位是函数。2.一个C源程序中至少应包括一个main函数。3.在一个C源程序中,注释部分两侧的分界符分别为/*和*/。4.一个函数是由两部分组成的,它们分别是函数名和函数体。5.在C语言中,一个函数的函数体一般包括声明部分和执行部分。6.在每个C语句和数据定义的最后必须有一个分号。7.C语言本身没有输入输出语句。其输入输出是由系统定义的标准输入输出函数来完成。8.程序是指(一系列可执行)指令的集合。第215页共215页n9.源程序是指(未编译的)源代码。C源程序文件的扩展名为c。10.目标程序是指由源程序经编译后产生的可连接文件。目标程序文件的扩展名为obj。11.可执行程序是指由目标程序连接后产生的可执行程序。可执行程序文件的扩展名为exe。12.上机运行一个C源程序的步骤一般为:①写(无错的)源程序;②(正确通过)编译;③连接;④运行。第三章数据类型、运算符与表达式一单项选择题1.下面四个选项中,均不是c语言关键字的选项是(A)。A)define IF Type     B)getc char printfC)include scanf case    D)while go pow2.C语言中的标识符只能由字母、数字和下划线三种字符组成,且第一个字符(C)。A)必须为字母        B)必须为下划线C)必须为字母或下划线    D)可以是字母、数字和下划线中任一种字符第215页共215页n3.下列四个选项中,均是C语言关键字的选项是(B)。A)autoenuminclude    B)switchtypedefcontinueC)signedunionscanf     D)ifstructtype4.下面四个选项中,均是不合法的用户标识符的选项是(C)。A)AP_0do      B)floatla0_AC)b-agotoint    D)_123tempint5.以下有4组用户标识符,其中合法的一组是(C)。A)For-subCase    B)4dDOSizeC)f2_G3IFabc    D)WORDvoiddefine6.下列选项中,合法的C语言关键字是(D)。A)VAR    B)cher    C)integer    D)default7.下面四个选项中,均是合法整型常量的选项是(A)。A)160-0xffff011    B)-0xcdf01a0xeC)–019860120668    D)-0x48a2e50xe8.下面四个选项中,均是正确的八进制数或十六进制数的选项是(C)。A)-100x8f-011    B)0abc-0170xcC)010-0x110xf1    D)0a12-0x123-0xa第215页共215页n9.设C语言中,一个int型数据在内存中占2个字节,则unsignedint型数据的取值范围为(C)。A)0~255    B)0~32767    C)0~65535    D)0~214748364710.在C语言中,不正确的int类型的常数是(A)。A)32768    B)0    C)037    D)0xAF11.下面四个选项中,均是不合法的整型常量的选项是(D)。A)-0f1-0xffff0011    B)-0xcdf01712456C)-0189995e2      D)-0x48eg-06803f12.下面四个选项中,均是不合法的浮点数的选项是(B)。A)160.0.12e3    B)1232e4.2.e5C)-.18123e40.0    D)-e3.2341e313.下面四个选项中,均是合法的浮点数的选项是(B)。A)+1e+15e-9.403e2    B)-.6012e-4-8e5C)123e1.2e-.4+2e-1    D)-e3.8e-45.e-014.下列变量定义中合法的是(A)。A)short_a=1-.le-1;    B)doubleb=1+5e2.5;C)longdo=0xfdaL;     D)float2_and=1-e-3;15.以下选项中合法的字符常量是(B)。第215页共215页nA)“B”    B)‘10’    C)68    D)D16.以下选项中,非法的字符常量是(C)。A)'t'    B)'17'    C)"n"    D)'xaa'17.以下所列的C语言常量中,错误的是(B)。A)0xFF    B)1.2e0.5    C)2L    D)‘72’18.在C语言中,char型数据在内存中的存储形式是(D)。A)补码    B)反码    C)原码    D)ASCII码19.下面四个选项中,均是合法转义字符的选项是(A)。A)‘’’‘\’‘n’     B)‘’‘17’‘”’C)‘18’‘f’‘xab’    D)‘\0’‘101’‘xlf’20.下面四个选项中,均是不合法的转义字符的选项是(0)。A)‘””’‘\’‘xf’    B)‘1011’‘’‘a’C)‘11’‘f’‘}’    D)‘abc’‘101’‘xlf’//上题中,红色部分表示合法的转义字符。21.下面正确的字符常量是(C)。A)“c”    B)‘\’’    C)‘W’    D)‘’22.下面四个选项中,均是正确的数值常量或字符常量的选项是(X)。第215页共215页nA)0.00f8.9e‘&’     B)‘a’3.9e-2.51e1‘’’C)‘3’0110xff000a    D)+0010xabcd2e250.23.下面不正确的字符串常量是(A)A)‘abc’    B)”1212”    C)”0”    D)””24.在C语言中(以16位PC机为例),5种基本数据类型的存储空间长度的排列顺序为(A)。A)charmain(){charc1=‘A’,c2=‘Y’;printf(“%d,%dn”,c1,c2);}A)65,89    B)A,Y    C)65,88    D)65,9050.以下程序的输出结果是(D)。#includemain(){inta=010,b=10;第215页共215页nprintf(“%d,%dn”,a++,--b);}A)10,10    B)8,10    C)10,9    D)8,951.以下程序的输出结果是(B)。main(){inta,b;a=100;b=200;printf(“%dn”,(a,b));}A)100    B)200    C)20000    D)100=20052.执行语句y=10;x=y++;的结果是(C)。A)x=10,y=10    B)x=11,y=11    C)x=10,y=11    D)x=11,y=1053.在表示C语言的整型变量时,表示“无符号长整型”的符号是(D)。A)unsignedint    B)unsignedshortC)longint      D)unsignedlong54.在下列形式的常数中,C程序不允许出现的是(B)。A).45    B)±123    C)25.6e-2    D)4e355.以下程序的输出结果是(C)。第215页共215页nmain(){floatx=3.6;inti;i=(int)x;printf(“x=%f,i=%d”,x,i);}A)x=3.600000,i=4    B)x=3,i=3C)x=3.600000,i=3    D)x=3.000000,i=3.60000056.在C语言中,要求运算数必须是整型数据的运算符是(B)。A)/    B)%    C)!    D)<57.执行下列语句的结果是(D)。i=3;printf(“%d,”,++i);printf(“%d”,i++);A)3,3    B)3,4    C)4,3    D)4,458.已知x=3,y=2,则表达式x*=y+8的值为(C)。A)3    B)2    C)30    D)1459.执行语句inti=65536;printf(“%dn”,i);的结果是(B)。A)65536    B)0    C)第215页共215页n有语法错误,无输出结果    D)-160.在C语言中,不正确的int类型的常数是(A)。A)32768    B)0    C)037    D)0xAF61.C语言提供的合法关键字是(D)。A)swicth    B)chan    C)Case    D)default62.表示“在使用x之前,先使x的值加1”的正确方式是(AA)。A)++x    B)x++    C)+x    D)+x+63.设x的值为5,则表达式(++x)+(++x)+(++x)的值是(22D)。A)24    B)20    C)15    D)2164.在C语言中,合法的字符常量是(B)。A)‘84’    B)‘x43’    C)‘ab’    D)“”65.若已定义x和y为double类型,则表达式:x=1,y=x+3/2的值是(C)。A)1    B)2    C)2.0    D)2.666.若t为double类型,表达式t=1,t+5,t++的值是(D)。A)1    B)6.0    C)2.0    D)1.067.若有以下定义和语句,则输出结果是(B)。第215页共215页ncharc1=‘b’,c2=‘e’;printf(“%d,%cn”,c2-c1,c2-’a’+’A’);A)2,M    B)3,EC)2,E    D)输出项与对应的格式控制不一致,输出结果不确定68.设有如下的变量定义:inti=8,a,b;doublex=1.42,y=5.2;则以下符合C语言语法的表达式是(A)。A)a+=a-=(b=4)*(a=3)    B)x%(-3)C)a=a*3=2         D)y=float(i)69.若有以下定义和语句:intu=010,v=0x10,w=10;printf(“%d,%d,%dn”,u,v,w);则输出结果是(A)。A)8,16,10    B)10,10,10    C)8,8,10    D)8,10,10二填空题1.若x和a均是int型变量,则计算表达式(1)后的x值为12,计算表达式(2)后的x值为4。(1)x=(a=4,6*2)第215页共215页n(2)x=a=4,6*22.若a是int型变量,则表达式(a=4*5,a*2),a+6的值为26。3.若b是int型变量,则表达式b=25/3%3的值为2。4.若s是int型变量,且s=6则下面表达式s%2+(s+1)%2的值为1。5.若a,b和c均是int型变量,则计算表达式a=(b=4)+(c=2)后,a值为6,b值为4,c值为2。6.若x和n均是int型变量,且x和n的初值均为5,则计算表达式x+=n++后x的值为10,n的值为6。7.若有定义:intb=7;floata=2.5,c=4.7;则表达式a+(int)(b/3*(int)(a+c)/2)%4的值为4.5。8.若有定义:inta=2,b=3;floatx=3.5,y=2.5;则表达式(float)(a+b)/2+(int)x%(int)y的值为3.5。9.若有定义:intx=3,y=2;floata=2.5,b=3.5;则表达式(x+y)%2+(int)a/(int)b的值为1。10.若x和n均是整型变量,且x的初值为12,n的初值为5,则计算表达式x%=(n%=2)后x的值为0。11.以下程序的输出结果是0。main(){unsignedshorta=65536;intb;printf(“%dn”,b=a);}12.请写出数学式a/bc的C语言表达式a/(b*c)。第215页共215页n13.设a、b、c为整型数,且a=2、b=3、c=4,则执行完语句a*=16+(b++)-(++c)后,a的值是28。第四章最简单的C程序设计——顺序程序设计一单项选择题1~5BDDDB1.printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列,如果字符串长度大于5,则输出按方式(B)。A)从左起输出该字符串,右补空格B)按原字符长从左向右全部输出C)右对齐输出该字串,左补空格D)输出错误信息2.已有定义inta=-2;和输出语句printf(“%8x”,a);以下正确的叙述是(D)。A)整型变量的输出形式只有%d一种B)%x是格式符的一种,它可以适用于任何一种类型的数据C)%x是格式符的一种,其变量的值按十六进制输出,但%8x是错误的D)%8x不是错误的格式符,其中数字8规定了输出字段的宽度3.若x,y均定义成int型,z定义为double型,以下不合法的scanf函数调用语句是(D)。第215页共215页nA)scanf(“%d%x,%le”,&x,&y,&z);B)scanf(“%2d*%d,%lf”,&x,&y,&z);C)scanf(“%x%*d%o”,&x,&y);D)scanf(“%x%o%6.2f”,&x,&y,&z);4.以下程序的输出结果是(D)。main(){intk=17;printf("%d,%o,%xn",k,k,k);}A)17,021,0x11     B)17,17,17B)17,0x11,021     D)17,21,115.下列程序的运行结果是(B)。#includemain(){inta=2,c=5;printf("a=%d,b=%dn",a,c);}A)a=%2,b=%5     B)a=2,b=5C)a=d,b=d      D)a=2,c=56.语句printf("abre'hi'y\boun");的输出结果是(C)。(说明:'b'是退格符)第215页共215页nA)abre'hi'y\bou     B)abre'hi'ybouC)re'hi'you         D)abre'hi'ybou7.x、y、z被定义为int型变量,若从键盘给x、y、z输入数据,正确的输入语句是(B)。A)INPUTx、y、z;        B)scanf("%d%d%d",&x,&y,&z);C)scanf("%d%d%d",x,y,z);     D)read("%d%d%d",&x,&y,&z);8.若变量已正确说明为float类型,要通过语句scanf("%f%f%f",&a,&b,&c);给a赋于10.0,b赋予22.0,c赋予33.0,不正确的输入形式是(B):A)10<回车>      B)10.0,22.0,33.0<回车>22<回车>33<回车>C)10.0<回车>     D)1022<回车>22.033.0<回车>33<回车>9.以下程序的输出结果是(A、n=24)。main(){intn;(n=6*4,n+6),n*2;第215页共215页nprintf(“n=%dn”,n);}A)24     B)12     C)26     D)2010.以下程序的输出结果是(B)。main(){intx=2,y,z;x*=3+1;printf(“%d,”,x++);x+=y=z=5;printf(“%d,”,x);x=y=z;printf(“%dn”,x);}A)8,14,1    B)8,14,5    C)8,13,5    D)9,14,511.下面程序的输出结果是(C)。main(){intx,y,z;x=0;y=z=-1;第215页共215页nx+=-z---y;printf(“x=%dn”,x);}A)x=4    B)x=0    C)x=2    D)x=312.设x为int型变量,则执行语句x=10;x+=x-=x-x;后,x的值为(B)。A)10    B)20    C)40    D)3013.只能向终端输出一个字符的函数是(B)。A)printf函数     B)putchar函数C)getchar函数     D)scanf函数14.下列程序执行后的输出结果是(小数点后只写一位)(A)。main(){doubled;floatf;longl;inti;i=f=1=d=20/3;printf("%d%ld%f%fn",i,l,f,d);}A)666.06.0    B)666.76.7C)666.06.7    D)666.76.015.在下列叙述中,错误的一条是(C)。A)printf函数可以向终端输出若干个任意类型的数据第215页共215页nB)putchar函数只能向终端输出字符,而且只能是一个字符C)getchar函数只能用来输入字符,但字符的个数不限D)scanf函数可以用来输入任何类型的多个数据16.以下程序的输出结果为(B)。main(){charc1=‘a’,c2=‘b’,c3=‘c’;printf(“a%cb%ctc%cn”,c1,c2,c3);}A)abcabcabc     B)aabbcc     C)abc     D)aaaabb17.若输入12345和abc,以下程序的输出结果是(C)。main(){inta;charch;scanf(“%3d%3c”,&a,&ch);printf(“%d,%c”,a,ch);}A)123,abc     B)123,4     C)123,a     D)12345,abc第215页共215页n18.以下程序的输出结果是(D)。main(){unsignedx1;intb=-1;x1=b;printf(“%u”,x1);}A)%u     B)-1     C)%u-1     D)6553519.在printf函数中用来输出十六进制无符号整数的格式字符是(B)。A)d格式符     B)x格式符     C)u格式符     D)o格式符20.设a=12、b=12345,执行语句printf(“%4d,%4d”,a,b)的输出结果为(B)。A)12,123     B)12,12345     C)12,1234     D)12,12345621.以下程序的输出结果是(C)。#include#includemain()第215页共215页n{inta=1,b=4,c=2;floatx=10.5,y=4.0,z;z=(a+b)/c+sqrt((double)y)*1.2/c+x;printf(“%fn”,z);}A)14.000000     B)15.400000     C)13.700000     D)14.90000022.以下程序的输出结果是(D)。main(){inta=2,c=5;printf(“a=%%d,b=%%dn”,a,c);}A)a=%2,b=%5      B)a=%2,c=%5C)a=%%d,b=%%d     D)a=%d,b=%d23.请读程序:main(){inta;floatb,c;第215页共215页nscanf(“%2d%3f%4f”,&a,&b,&c);printf(“na=%d,b=%f,c=%fn”,a,b,c);}若运行时从键盘上输入9876543210表示回车),则上面程序的输出结果是(C)。A)a=98,b=765,c=4321           B)a=10,b=432,c=8765C)a=98,b=765.000000,c=4321.000000     D)a=98,b=765.0,c=4321.024.若有定义:intx,y;chara,b,c;并有以下输入数据(此处代表回车,∪代表空格):1∪2A∪B∪C则能给x赋整数1,给y赋整数2,给a赋字符A,给b赋字符B,给c赋字符C的正确程序段是(D)。A)scanf(“x=%d,y=%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,第215页共215页n&b,&c,&c);25.下列可作为C语言赋值语句的是(C)。A)x=3,y=5;     B)a=b=6     C)i--;     D)y=int(x);26.设i是int型变量,f是float型变量,用下面的语句给这两个变量输入值:scanf(“i=%d,f=%f”,&i,&f);为了把100和765.12分别赋给i和f,则正确的输入为(B)。A)100<空格>765.12<回车>     B)i=100,f=765.12<回车>C)100<回车>765.12<回车>     D)x=100<回车>y=765.12<回车>27.以下叙述中正确的是(D)。A)输入项可以是一个实型常量,例如:scanf(“%f”,3.5);B)只有格式控制,没有输入项,也能正确输入数据到内存,例如:scanf(“a=%d,b=%d”);C)当输入一个实型数据时,格式控制部分可以规定小数点后的位数,例如:scanf(“%4.2f”,&f);D)当输入数据时,必须指明变量地址,例如:scanf(“%f”,&f);28.设x和y均为int型变量,则以下语句:x+=y;y=x-y;x-=y;第215页共215页n的功能是(D)。A)把x和y按从小到大排序     B)把x和y按从大到小排序C)无确定结果           D)交换x和y中的值二填空题1.下面程序的运行结果是     i:dec=4,oct=4,hex=4,unsigned=65531      。main(){shorti;i=-4;printf(“ni:dec=%d,oct=%o,hex=%x,unsigned=%un”,i,i,i,i);}2.若想通过以下输入语句使a=5.0,b=4,c=3,则输入数据的形式应该是5.0,4,c=3。intb,c;floata;scanf("%f,%d,c=%d",&a,&b,&c);3.下列程序的输出结果是16.00,请填空。main(){inta=9,b=2;floatx=6.6第215页共215页n,y=1.1,z;z=a/2+b*x/y+1/2;printf("%5.2fn",z); }4.在printf格式字符中,只能输出一个字符的格式字符是c;用于输出字符串的格式字符是s;以小数形式输出实数的格式字符是f;以标准指数形式输出实数的格式字符是e。三编程题1.若a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1=’a’,c2=’b’。想得到以下的输出格式和结果,请写出完整的程序(包括定义变量类型和设计输出)。要求输出的结果如下:a=<空格>3<空格><空格>b=<空格>4<空格><空格>c=<空格>5x=1.200000,y=2.400000,z=-3.600000x+y=<空格>3.60<空格><空格>y+z=-1.20<空格><空格>z+x=-2.40u=<空格>51274<空格><空格>n=<空格><空格><空格>128756c1=a<空格>or<空格>97(ASCII)c2=B<空格>or<空格>98(ASCII)/*第215页共215页nvoidmain(){inta,b,c;unsignedu;,longintn;floatx,y,z;charc1,c2;a=3,b=4,c=5,x=1.2,y=2.4,z=-3.6,u=51274,n=128765,c1='a',c2='b';printf("a=%2db=%2dc=%2dn",a,b,c);printf("x=%f,y=%f,z=%+fn");printf("x+y=%5.2fy+z=%+5.2fz+x=%+5.2fn",x+y,y+z,z+x);printf("u=%6dn=%9dn");printf("c1=%cor%d(ASCII)n",c1,c1);printf("c2=%cor%d(ASCII)n",c2-32,c2);}*/2.输入一个华氏温度,要求输出摄氏温度。公式为输出要有文字说明,取2位小数。第215页共215页n/*voidmain(){floatc,f;printf("输入一个华氏温度:n");scanf("%f",&f);c=5.0/9.0*(f-32);printf("n输入的华氏温度%.2f,摄氏温度为:%.2fn",f,c);}*/3.编程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和printf函数输出这两个字符。/*voidmain(){charc1,c2;c1=getchar();c2=getchar();putchar(c1);putchar(c2);printf("nc1=%c;c2=%cn",c1,c2);第215页共215页n}*/第五章选择结构程序设计一单项选择题1.逻辑运算符两侧运算对象的数据类型是(D)。A)只能是0或1B)只能是0或非0正数C)只能是整型或字符型数据D)可以是任何类型的数据2.已知x=43,ch='A',y=0;则表达式(x>=y&&ch<'B'&&!y)的值是(C)。A)0     B)语法错     C)1     D)“假”3.已知intx=10,y=20,z=30;以下语句执行后x,y,z的值是(B)。if(x>y)z=x;x=y;y=z;A)x=10,y=20,z=30     B)x=20,y=30,z=30C)x=20,y=30,z=10     D)x=20,y=30,z=20第215页共215页n4.执行下列语句后a的值为(2),b的值为(1)。(C)inta,b,c;a=b=c=1;++a||++b&&++c;A)错误1     B)22     C)21    D)115.若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”,则以下不能满足要求的表达式是(C)。A)A%2==1     B)!(A%2==0)     C)!(A%2)     D)A%26.设有:inta=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后n的值是(B)。A)0     B)2     C)3     D)47.判断char型变量cl是否为小写字母的正确表达式是(D)。A)‘a’<=cl<=‘z’         B)(cl>=a)&&(cl<=z)C)(‘a’>=cl)||(‘z’<=cl)     D)(cl>=‘a’)&&(cl<=‘z’)8.以下不正确的if语句形式是(C)。第215页共215页nA)if(x>y&&x!=y);B)if(x==y)x+=y;C)if(x!=y)scanf(“%d”,&x)elsescanf(“%d”,&y)D)if(x12?x+10:x-12;第215页共215页nprintf(“%dn”,y);}A)0     B)22     C)12     D)1016.语句:printf("%d",(a=2)&&(b=-2));的输出结果是(D)。A)无输出     B)结果不确定     C)-1     D)117.当c的值不为0时,在下列选项中能正确将c的值赋给变量a、b的是(C)。A)c=b=a;     B)(a=c)||(b=c);     C)(a=c)&&(b=c);     D)a=c=b;18.能正确表示a和b同时为正或同时为负的表达式是(D)。A)(a>=0||b>=0)&&(a<0||b<0)     B)(a>=0&&b>=0)&&(a<0&&b<0)C)(a+b>0)&&(a+b<=0)        D)a*b>019.能正确表示逻辑关系:“a≥10或a≤0”的C语言表达式是(C)。A)a>=10ora<=0     B)a>=0|a<=10C)a>=10&&a<=0      D)a>=10||a<=020.有如下程序段第215页共215页ninta=14,b=15,x;charc=‘A’;x=(a&&b)&&(c<‘B’);执行该程序段后,x的值为(D)。A)ture     B)false     C)0     D)121.以下程序的输出结果是(C)。A)-11     B)01     C)10     D)00main(){inta=-1,b=1,k;if((++a<0)&&!(b--<=0))printf("%d%dn",a,b);elseprintf("%d%dn",b,a);}22.与y=(x>0?1:x<0?-1:0);的功能相同的if语句是(A)。A)if(x>0)y=1;     B)if(x)elseif(x<0)y=-1;if(x>0)y=1;elsey=0;elseif(x<0)y=-1;elsey=0;C)y=-1         D)y=0;if(x)if(x>=0)第215页共215页nif(x>0)y=1;if(x>0)y=1;elseif(x==0)y=0;elsey=-1;elsey=-1;23.阅读以下程序:main(){intx;scanf("%d",&x);if(x--<5)printf("%d",x);elseprintf("%d",x++);}程序运行后,如果从键盘上输人5,则输出结果是(B)。A)3     B)4     C)5     D)624.假定w、x、y、z、m均为int型变量,有如下程序段:w=1;x=2;y=3;z=4;m=(w=85.”);case‘B’:case‘C’:printf(“>=60.”);第215页共215页ncase‘D’:printf(“<60.”);default:printf(“error.”);}}A)>=85.     B)>=60.     C)>=60.<60.error.     D)error.32.当执行以下语句后的输出结果是(D)。intx=3,y=0;printf(“%d,%d”,-1>x>-10&&1y>-10&&11+2&&2||2*4<4-!0后,x的值为(C)。A)-1     B)0     C)1     D)534.以下程序的输出结果为(C)。main(){inta,b,c,x,y,z;a=10;b=2;c=!(a%b);x=!(a/b);y=(a=0);第215页共215页nz=(a=0);printf(“c=%d,x=%d,y=%d,z=%dn”,c,x,y,z);}A)c=0,x=1,y=1,z=0     B)c=5,x=0,y=1,z=0C)c=1,x=0,y=0,z=1     D)c=10,x=2,y=0,z=135.下列运算符中,不属于关系运算符的是(D)。A)<     B)>=     C)==     D)!36.以下程序的输出结果是(B)。main(){inta,b,d=241;a=d/100%9;b=(-1)&&(-1);printf(“%d,%dn”,a,b);}A)6,1     B)2,1     C)6,0     D)2,037.设ch是char型变量,其值为A,且有下面的表达式:ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32):ch上面表达式的值是(B)。A)A     B)a     C)Z     D)z38.若k是int型变量,且有下面的程序片段:k=-3;第215页共215页nif(k<=0)printf(“####”)elseprintf(“&&&&”)上面程序片段的输出结果是(D)。A)####     B)&&&&     C)####&&&&     D)有语法错误,无输出结果39.请读程序:main(){floatx,y;scanf(“%f”,&x);if(x<0.0)y=0.0;elseif((x<5.0)&&(x!=2.0))y=1.0/(x+2.0);elseif(x<10.0)y=1.0/x;elsey=10.0;printf(“%fn”,y);}若运行时从键盘上输入2.0(表示回车),则上面程序的输出结果是(C)。A)0.000000     B)0.250000     C)0.500000     D)1.000000第215页共215页n40.请读程序:main(){intx=1,y=0,a=0,b=0;switch(x){case1:switch(y){case0:a++;break;case1:b++;break;}case2:a++;b++;break;}printf(“a=%d,b=%dn”,a,b);}上面程序的输出结果是(A)。A)a=2,b=1     B)a=1,b=1     C)a=1,b=0     D)a=2,b=241.为表示关系x≥y≥z,应使用C语言表达式(A)。A)(x>=y)&&(y>=z)     B)(x>=y)AND(y>=z)第215页共215页nC)(x>=y>=z)       D)(x>=y)||(y>=z)42.若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为(D)。A)a<>0     B)!a     C)a=0     D)a43.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是(A)。main(){intx;scanf(“%d”,&x);if(x++>5)printf(“%d”,x);elseprintf(“%dn”,x--);}A)7和5     B)6和3     C)7和4     D)6和444.以下程序的输出结果是(D)。main(){inta=-1,b=4,k;k=(++a<0)&&!(b--<=0);printf(“%d%d%dn”,k,a,b);第215页共215页n}A)104     B)103     C)003     D)00445.设a为整型变量,不能正确表达数学关系1010&&a<15     D)!(a<=10)&&!(a>=15)46.假定所有变量均已正确说明,下列程序段运行后x的值是(B)。a=b=c=0;x=35;if(!a)x--;elseif(b);if(c)x=3;elsex=4;A)34     B)4     C)35     D)347.设a=1,b=2,c=3,d=4,则表达式ad?a:d的结果是(D)。A)4     B)3     C)2     D)148.当a=1,b=3,c=5,d=4时,执行下面一段程序后,x的值为(B)。if(a0)s=s+1;if(a>b)t=s+t;elseif(a==b)t=5;elset=2*s;printf(“t=%dn”,t);}A)a>b     B)aa>b50.设intx=1,y=1;表达式(!x||y--)的值是(B)。第215页共215页nA)0     B)1     C)2     D)-151.若变量a、i已正确定义,且i已正确赋值,合法的语句是(B)。A)a==1     B)++i;     C)a=a++=5;     D)a=int(i);52.以下程序的输出结果为(C)。main(){inta=2,b=-1,c=2;if(a50)printf(“%d”,a);第215页共215页nif(a>40)printf(“%d”,a);if(a>30)printf(“%d”,a);}2.下面程序的运行结果是-1。main(){inta=2,b=3,c;c=a;if(a>b)c=1;elseif(a==b)c=0;elsec=-1;printf(“%dn”,c);}3.以下程序实现:输入三个整数,按从大到小的顺序进行输出。请填空。main(){intx,y,z,c;scanf(“%d%d%d”,&x,&y,&z);if(x=‘A’&&ch<=‘Z’)?(ch+32):ch;ch=(ch>=‘a’&&ch<=‘z’)?(ch-32):ch;printf(“%c”,ch);}5.若x为int类型,请以最简单的形式写出与逻辑表达式!x等价的C语言关系表达式x==0。6.表示“整数x的绝对值大于5”时值为“真”的C语言表达式是x>5||x<-5。7.下列程序段的输出结果是passwarn。intn='c';switch(n++){default:printf("error");break;case'a':case'A':case'b':case'B':printf("good");break;case'c':case'C':printf("pass");第215页共215页ncase'd':case'D':printf("warn");}8.以下程序将两个数从小到大输出。main(){floata,b,t;scanf("%f%f",&a,&b);if(a>b){t=a;a=b;b=t;}printf(“%5.2f,%5.2fn”,a,b);}9.若输入8642,以下程序的输出结果为(请输入一个0~99999之间的整数:)place=4,每位数字为:8,6,4,2。main(){longintnum;intgw,sw,bw,qw,ww,place;printf(“请输入一个0~99999之间的整数:”);第215页共215页nscanf(“%ld”,&num);if(num>9999)place=5;elseif(num>999)place=4;elseif(num>99)place=3;elseif(num>9)place=2;elseplace=1;printf(“place=%d,”,place);printf(“每位数字为:”);ww=num/10000;qw=(num-ww*10000)/1000;bw=(num-ww*10000-qw*1000)/100;sw=(num-ww*10000-qw*1000-bw*100)/10;gw=num-ww*10000-qw*1000-bw*100-sw*10;switch(place){case5:printf(“%d,%d,%d,%d,%d”,ww,qw,bw,sw,gw);break;case4:printf(“%d,%d,%d,%d”,qw,bw,sw,gw);break;case3:printf(“%d,%d,%d”,bw,sw,gw);break;case2:printf(“%d,%d”,sw,gw);break;case1:printf(“%d”,gw);break;}}第215页共215页n10.若输入1988,程序运行的结果为1988年是闰年。;若输入1989,则结果为1989年不是闰年。。main(){intyear,leap;scanf(“%d”,&year);if(year%4)leap=0;elseif(year%100)leap=1;elseif(year%400)leap=0;elseleap=1;if(leap)printf(“%d年是闰年。n”,year);elseprintf(“%d年不是闰年。n”,year);}11.用以下程序把大写字母A~Z转换成对应的小写字母a~z,其他字符不转换。main(){charch;scanf("%c",&ch);ch=(ch>='A'&&ch<='Z')?ch+32:ch;printf(“char=%cn”,ch);}12.条件“2020&&x<30||x<-100。13.若已知a=10,b=20,则表达式!ab)printf(“****y=%dn”,y);elseprintf(“####x=%dn”,x);第六章循环控制一单项选择题第215页共215页n1.下面程序段的运行结果是(C)。intn=0;while(n++<=2);printf(“%d”,n);A)2     B)3     C)4     D)有语法错2.设有程序段:t=0;while(printf(“*”)){t++;if(t<3)break;}下面描述正确的是(D)。A)其中循环控制表达式与0等价B)其中循环控制表达式与'0'等价C)其中循环控制表达式是不合法的D)以上说法都不对3.下面程序的功能是将从键盘输入的一对数,由小到大排序输出,当输入一对相等数时结束循环,请选择填空(B)。#includemain(){inta,b,t;第215页共215页nscanf(“%d%d”,&a,&b);while(___________){if(a>b){t=a;a=b;b=t;}printf(“%d,%dn”,a,b);scanf("%d%d",&a,&b);}}A)!a=b     B)a!=b     C)a==b     D)a=b4.C语言中,while和do-while循环的主要区别是(A)。A)do-while的循环体至少无条件执行一次B)while的循环控制条件比do-while的循环控制条件更严格C)do-while允许从外部转到循环体内D)do-while的循环体不能是复合语句5.对以下程序段描述正确的是(C)。x=-1;do{x=x*x;}while(!x);A)是死循环       B)循环执行二次C)循环执行一次     D)有语法错误第215页共215页n6.以下描述中正确的是(0)。A)do-while循环中循环体内不能使用复合语句B)do-while循环由do开始,用while结束,在while(表达式)后面不能写分号C)在do-while循环体中,一定要有能使while后面表达式的值变为零(“假”)的操作D)do-while循环中,根据情况可以省略while//此题四个选项均有错误。//对于A,当循环体不止一个语句时,可以用花括号包含成一个复合语句;//对于B,while(表达式)后面必须写分号;对于D,do-while是一个整体,不可省略while;//对于C,可能是参考答案。但出题者忽略了特殊情况:利用恒假的判断条件,故意使循//环只执行一次。因此,循环体中可以不必有C选项所强调的操作。7.若有如下语句intx=3;do{printf(“%3d”,x-=2);}while(!(--x));则上面程序段(B)。A)输出的是1       B)输出的是1和-2C)输出的是3和0     D)是死循环第215页共215页n8.下面有关for循环的正确描述是(D)。A)for循环只能用于循环次数已经确定的情况B)for循环是先执行循环的循环体语句,后判断表达式C)在for循环中,不能用break语句跳出循环体D)for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来9.对for(表达式1;;表达式3)可理解为(B)。A)for(表达式1;0;表达式3)        B)for(表达式1;1;表达式3)C)for(表达式1;表达式1;表达式3)     D)for(表达式1;表达式3;表达式3)10.若i为整型变量,则以下循环执行次数是(B)。for(i=2;i==0;)printf(“%d”,i--);A)无限次     B)0次     C)1次     D)2次11.以下不是无限循环的语句为(A)。A)for(y=0,x=1;x>++y;x=i++)i=x;B)for(;;x++=i);C)while(1){x++;}D)for(i=10;;i--)sum+=i;12.下面程序段的运行结果是(C)。第215页共215页nfor(y=1;y<10;)y=((x=3*y,x+1),x-1);printf(“x=%d,y=%d”,x,y);A)x=27,y=27     B)x=12,y=13     C)x=15,y=14     D)x=y=2713.执行语句for(i=1;i++<4;);后变量i的值是(C)。A)3     B)4     C)5     D)不定14.有一堆零件(100到200之间),如果分成4个零件一组的若干组,则多2个零件;若分成7个零件一组,则多3个零件;若分成9个零件一组,则多5个零件。下面程序是求这堆零件总数,请选择填空(D)。#includemain(){inti;for(i=100;i<200;i++)if((i-2)%4==0)if(!((i-3)%7))if(______)printf(“%d”,i);}A)i%9=5     B)i%9!=5     C)(i-5)%9!=0     D)i%9==5第215页共215页n15.下面程序的功能是把316表示为两个加数的和,使两个加数分别能被13和11整除,请选择填空(B)。#includemain(){inti=0,j,k;do{i++;k=316-13*i;}while(_______);j=k/11;printf(“316=13*%d+11*%d”,i,j);}A)k/11     B)k%11     C)k/11==0     D)k%11==016.下面程序的运行结果是(D)。#includemain(){inty=10;do{y--;}while(--y);printf(“%dn”,y--);}A)-1     B)1     C)8     D)017.若运行以下程序时,从键盘输入ADescriptor(表示回车),则下面程序的运行结果是(D)。第215页共215页n#includemain(){charc;intv0=1,v1=0,v2=0;do{switch(c=getchar()){case‘a’:case‘A’:case‘e’:case‘E’:case‘i’:case‘I’:case‘o’:case‘O’:case‘u’:case‘U’:v1+=1;default:v0+=1;v2+=1;}}while(c!=’n’);printf(“v0=%d,v1=%d,v2=%dn”,v0,v1,v2);}A)v0=7,v1=4,v2=7      B)v0=8,v1=4,v2=8C)v0=11,v1=4,v2=11     D)v0=12,v1=4,v2=1218.下面程序的运行结果是(B)。#includemain()第215页共215页n{inta=1,b=10;do{b-=a;a++;}while(b--<0);printf(“a=%d,b=%dn”,a,b);}A)a=3,b=11     B)a=2,b=8C)a=1,b=-1     D)a=4,b=919.以下程序的输出结果是(B)。main(){intnum=0;while(num<=2){num++;printf(“%dn”,num);}}A)1     B)1     C)1     D)l2      2      23      3420.设有程序段intk=10;while(k=0)k=k-1;第215页共215页n则下面描述中正确的是(C)。A)while循环执行10次      B)循环是无限循环C)循环体语句一次也不执行     D)循环体语句执行一次21.设有以下程序段intx=0,s=0;while(!x!=0)s+=++x;printf("%d",s);则(B)。A)运行程序段后输出0          B)运行程序段后输出1C)程序段中的控制表达式是非法的     D)程序段执行无限次22.语句while(!E);中的表达式!E等价于(A)。A)E==0     B)E!=1     C)E!=0     D)E==123.下面程序段的运行结果是(A)。a=1;b=2;c=2;while(a20)break;}while(a=14);A)a=12y=12     B)a=12y=12a=14y=16     a=16y=28a=16y=20a=18y=24C)a=12y=12     D)a=12y=12a=14y=26a=14y=44第215页共215页n26.t为int类型,进人下面的循环之前,t的值为0,则以下叙述中正确的是(B)。while(t=l){……}A)循环控制表达式的值为0     B)循环控制表达式的值为1C)循环控制表达式不合法     D)以上说法都不对27.有以下程序段intk=0;while(k=1)k++;while循环执行的次数是(A)。A)无限次        B)有语法错,不能执行C)一次也不执行     D)执行1次28.以下程序执行后sum的值是(C)。main(){inti,sum;for(i=1;i<6;i++)sum+=i;printf("%dn",sum);}A)15     B)14     C)不确定     D)029.有以下程序段第215页共215页nintx=3;do{printf("%d",x-=2);}while(!(--x));其输出结果是(C)。A)1     B)30     C)1-2     D)死循环30.若输入12、8,以下程序的输出结果是(A)。main(){inta,b,num1,num2,temp;scanf(“%d,%d”,&num1,&num2);if(num1>num2){temp=num1;num1=num2;num2=temp;}a=num1,b=num2;while(b!=0){temp=a%b;a=b;b=temp;}printf(“%d,%d”,a,num1*num2/a);第215页共215页n}A)4,24     B)3,24     C)5,25     D)4,2531.以下程序的输出结果是(A)。#include#includemain(){ints=1;floatn=1,pi=0;doublet=1;while(fabs(t)>=2e-6){pi+=t;n+=2;s=-s;t=s/n;}pi*=4;printf(“pi=%.6fn”,pi);}A)3.141592     B)1     C)2e-6     D)032.以下程序的输出结果是(B)。main()第215页共215页n{inti,f1,f2;f1=f2=1;for(i=0;i<4;i++){printf(“%d%d”,f1,f2);f1+=f2;f2+=f1;}}A)12345678      B)1123581321C)1135791113     D)1357911131533.下列叙述中,正确的一条是(B)。A)语句“goto12;”是合法的B)for(;;)语句相当于while(1)语句C)if(表达式)语句中,表达式的类型只限于逻辑表达式D)break语句可用于程序的任何地方,以终止程序的执行34.以下程序的输出结果是(B)。main(){inta,b;for(a=1,b=1;a<=100;a++){if(b>=20)break;if(b%3==1){b+=3;第215页共215页ncontinue;}b-=5;}printf(“%dn”,a);}A)7     B)8     C)9     D)1035.以下的for循环(C)for(x=0,y=0;(y!=123)&&(x<4);x++);A)是无限循环     B)循环次数不定C)执行4次      D)执行3次36.C语言中(D)A)不能使用do-while语句构成的循环B)do-while语句构成的循环必须用break语句才能退出C)do-while语句构成的循环,当while语句中的表达式值为非零时结束循环D)do-while语句构成的循环,当while语句中的表达式值为零时结束循环37.以下程序的输出结果是(A)。main(){inti;for(i=1;i<=5;i++)第215页共215页n{if(i%2)printf(“*”);elsecontinue;printf(“#”);}printf(“$n”);}A)*#*#*#$     B)#*#*#*$     C)*#*#$     D)#*#*$38.有以下程序,从第一列开始输入数据2473代表一个回车符),则程序的输出结果为(A)。#includemain(){intc;while((c=getchar())!=’n’){switch(c-‘2’){case0:case1:putchar(c+4);case2:putchar(c+4);break;case3:putchar(c+3);default:putchar(c+2);break;第215页共215页n}}printf(“n”);}A)668977     B)668966     C)6677877     D)668876639.执行以下程序片段的结果是(B)。intx=23;do{printf(“%d”,x--);}while(!x);A)打印出321       B)打印出23C)不打印任何内容     D)陷入死循环40.若x是int型变量,则执行以下程序片段的结果是(D)。for(x=3;x<6;x++)printf((x%2)?(“**%d”):(“##%dn”),x);A)**3##4**5     B)##3**4##5     C)##3     D)**3##4**4##5**541.有以下程序,若运行时从键盘输入3.62.4代表一个回车符),则程序的输出结果为(B)。#include第215页共215页n#includemain(){floatx,y,z;scanf(“%f%f”,&x,&y);z=x/y;while(1){if(fabs(z)>1.0){x=y;y=z;z=x/y;}elsebreak;}printf(“%fn”,y);}A)1.500000     B)1.600000     C)2.000000     D)2.40000042.以下程序的输出结果是(A)。main(){intx=10,y=10,i;for(i=0;x>8;y=++i)printf(“%d%d”,x--,y);}A)10192     B)9876     C)10990     第215页共215页nD)10109143.以下程序的输出结果是(A)。main(){intn=4;while(n--)printf(“%d”,--n);}A)20     B)31     C)321     D)21044.以下程序的输出结果是(B)。main(){inti;for(i=’A’;i<’I’;i++,i++)printf(“%c”,i+32);}A)编译通不过,无输出     B)aceg     C)acegi     D)abcdefghi45.若i、j已定义为int型,则以下程序段中内循环体的总的执行次数是(A)。for(i=5;i;i--)for(j=0;j<4;j++){}第215页共215页nA)20     B)24     C)25     D)3046.若j为int型变量,则以下for循环语句的执行结果是(B)。for(j=10;j>3;j--){if(j%3)j--;--j;--j;printf(“%d”,j);}A)63     B)74     C)62     D)7347.以下程序的执行结果是(D)。main(){inti,x;for(i=1;i<=50;i++){x=i;if(++x%2==0)if(x%3==0)if(x%7==0)printf(“%d”,i);}}A)28     B)27     C)42     D)4148.以下程序的执行结果是(B)。main(){inti,j;第215页共215页nfor(j=10;j<11;j++){for(i=9;i=j-1)printf(“%d”,j);}}A)11     B)10     C)9     D)101149.在下列选项中,没有构成死循环的程序段是(C)。A)inti=100;     B)for(;;);while(1){i=i%100+1;if(i>100)break;}C)intk=1000;     D)ints=36;do{++k;}while(s);--s;while(k>=10000);50.以下程序的输出结果是(B)。main(){inti,j,x=0;for(i=0;i<2;i++){x++;for(j=0;j<=3;j++)第215页共215页n{if(j%2)continue;x++;}x++;}printf(“x=%dn”,x);}A)x=4     B)x=8     C)x=6     D)x=1251.运行以下程序后,如果从键盘上输入6514<回车>,则输出结果是(C)。main(){intm,n;scanf(“%d%d”,&m,&n);while(m!=n){while(m>n)m-=n;while(n>m)n-=m;}printf(“m=%dn”,m);}A)m=3     B)m=2     C)m=1     D)m=052.以下程序的输出结果是(C)。main()第215页共215页n{inti,j,m=0,n=0;for(i=0;i<2;i++)for(j=0;j<2;j++)if(j>=i)m=1;n++;printf(“%dn”,n);}A)4     B)2     C)1     D)053.以下程序执行后sum的值是(C)。main(){inti,sum=0;for(i=1;i<=3;sum++)sum+=i;printf("%dn",sum);}A)6     B)3     C)死循环     D)0二填空题1.以下程序运行后的输出结果是52。main(){inti=10,j=0;do{j=j+i;i--;}第215页共215页nwhile(i>2);printf("%dn",j);}2.设有以下程序:main(){intn1,n2;scanf("%d",&n2);while(n2!=0){n1=n2%10;n2=n2/10;printf("%d",n1);}}程序运行后,如果从键盘上输入1298,则输出结果为8921。3.若输入字母b,程序输出结果为b,B;若输入字符*,程序将怎样等待重新输入。#includemain(){charc1,c2;c1=getchar();while(c1<97||c1>122)c1=getchar();c2=c1-32;第215页共215页nprintf("%c,%cn",c1,c2);}4.用以下程序计算1到100的整数的累加和。main(){inti=1,sum=0;for(;i<=100;){sum+=i;i++;}printf("sum=%dn",sum);}5.以下程序的功能是:从键盘上输入若干个学生的成绩,统计并输出最高成绩和最低成绩,当输入负数时结束。请填空。main(){floatx,amax,amin;scanf(“%f”,&x);amax=x;amin=x;while(x>=0){if(x>amax)amax=x;if(x,则以下while循环体将执行0次。while((ch=getchar())==‘e’)printf(“*”);第七章数组一单项选择题1.下列描述中不正确的是(C)。A)字符型数组中可以存放字符串B)可以对字符型数组进行整体输入、输出C)第215页共215页n可以对整型数组进行整体输入、输出D)不能在赋值语句中通过赋值运算符"="对字符型数组进行整体赋值2.执行下面的程序段后,变量k中的值为(A)。intk=3,s[2];s[0]=k;k=s[1]*10;A)不定值     B)33     C)30     D)103.设有数组定义:chararray[]="China";则数组array所占的空间为(C)。A)4个字节     B)5个字节     C)6个字节     D)7个字节4.下列程序执行后的输出结果是(A)。#includemain(){chararr[2][4];strcpy(arr,"you");strcpy(arr[1],"me");arr[0][3]=’&’;printf("%sn",arr);}A)you&me     B)you     C)me     D)err5.执行下列程序时输入:123<空格>456<空格>789<回车>,输出结果是(D)。第215页共215页nmain(){chars[100];intc,i;scanf("%c",&c);scanf("%d",&i);scanf("%s",s);printf("%c,%d,%sn",c,i,s);}A)123,456,789       B)1,456,789C)1,23,456,789      D)1,23,4566.假定int类型变量占用两个字节,若有定义:intx[10]={0,2,4};则数组x在内存中所占字节数是(D)。A)3     B)6     C)10     D)207.以下程序的输出结果是(C)。main(){inti,a[10];for(i=9;i>=0;i--)a[i]=10-i;printf("%d%d%d",a[2],a[5],a[8]);}A)258     B)741     C)852     D)3698.以下数组定义中不正确的是(D)。第215页共215页nA)inta[2][3];         B)intb[][3]={0,1,2,3};C)intc[100][100]={0};     D)intd[3][]={{1,2},{1,2,3},{1,2,3,4}};9.以下程序的输出结果是(A)。main(){inta[4][4]={{1,3,5},{2,4,6},{3,5,7}};printf("%d%d%d%dn",a[0][3],a[1][2],a[2][1],a[3][0]);}A)0650     B)1470     C)5430     D)输出值不定10.以下程序的输出结果是(B)。#includemain(){charst[20]="hellot\";printf(%d%dn",strlen(st),sizeof(st));}A)99     B)520     C)920     D)202011.以下程序的输出结果是(B)。main(){inti,k,a[10],p[3];第215页共215页nk=5;for(i=0;i<10;i++)a[i]=i;for(i=0;i<3;i++)p[i]=a[i*(i+1)];for(i=0;i<3;i++)k+=p[i]*2;printf("%dn",k);}A)20     B)21     C)22     D)2312.以下程序的输出结果是(C)。main(){inti,x[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i<3;i++)printf("%d",x[i][2-i]);}A)159     B)147     C)357     D)36913.以下程序的输出结果是(A)。main(){inta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i<3;i++)for(j=0;j<=i;j++)s+=a[i][j];printf("%dn",s);}A)18     B)19     C)20     D)21第215页共215页n14.以下程序的输出结果是(D)。main(){charw[][10]={"ABCD","EFGH","IJKL","MNOP"},k;for(k=1;k<3;k++)printf("%sn",w[k]);}A)ABCD     B)ABCD     C)EFG     D)EFGHFGHEFGJKIJKLKLIJOM15.当执行下面的程序时,如果输入ABC,则输出结果是(A)。#include#includemain(){charss[10]="12345";gets(ss);strcat(ss,"6789");printf("%sn",ss);}A)ABC6789     B)ABC67     C)12345ABC6     D)ABC45678916.若要定义c为2×3×第215页共215页n4的三维数组,正确的定义语句是(A)。A)floatc[2][3][4]     B)floatc[2,3,4]C)floatc(2,3,4)      D)floatc(2)(3)(4)17.若定义inta[2][2]={1,2,3,4},则a数组的各数组元素值分别为(A)。A)a[0][0]=1,a[0][1]=2,a[1][0]=3,a[1][1]=4B)a[0][0]=1,a[0][1]=3,a[1][0]=2,a[1][1]=4C)a[0][0]=4,a[0][1]=3,a[1][0]=2,a[1][1]=1D)a[0][0]=4,a[0][1]=2,a[1][0]=3,a[1][1]=118.在下列叙述中,正确的一条是(A)。A)以下语句是正确的:charc[]=”ab”;B)一维数组的定义可采用下列格式:inta(10);C)下面的语句定义了一个二维数组:floata[3,4];D)以下两个语句中的a[3][4]的含义相同:inta[3][4];a[3][4]=1;19.当输入的数据为2、5时,以下程序的输出结果是(C)。#includemain(){intf[100],i,j,k,m;scanf(“%d%d”,&k,&m);第215页共215页nfor(i=0;i<=m;i++)f[i]=0;f[k-1]=1;for(i=k;i<=m;i++)for(j=i-k;j<=i-1;j++)f[i]+=f[j];printf(“%d%10d%10dn”,k,m,f[m]);}A)355     B)357     C)255     D)36920.在下列语句中,正确的是(A)。A)charstr[]=”China”;B)charstr[];str=”China”;C)charstr1[5],str2[]={”China”};str1=str2;D)charstr1[],str2[];str2={”China”};strcpy(str1,str2);21.下面语句中不正确的是(D)。A)inta[5]={1,2,3,4,5};    B)inta[5]={1,2,3};C)inta[]={0,0,0,0,0};     D)inta[5]={0*5};22.若先后输入4、1、5、3、7,以下程序的输出结果为(D)。#defineMAX100main(){第215页共215页ninti,j,n,flag,t,a[MAX];printf(“输入数据个数:”);scanf(“%dn”,&n);for(i=1;i<=n;i++)scanf(“%d”,&a[i]);for(i=1;ia[j+1]){flag=0;t=a[j];a[j]=a[j+1];a[j+1]=t;}if(flag)break;}for(i=1;i<=n;i++)printf(“%-3d”,a[i]);printf(“n”);}A)2467     B)1234C)1547     D)135723.以下程序的输出结果是(B)。main()第215页共215页n{intn,a[10];for(n=0;n<=9;n++)a[n]=n;for(n=9;n>=0;n--)printf(“%d”,a[n]);}A)12345678910     B)9876543210C)10987654321     D)012345678924.若输入aefjhi、c、adfjhijk,以下程序的输出结果为(B)。#include#includemain(){inti;charstring[20],str[3][20];for(i=0;i<3;i++)gets(str[i]);if(strcmp(str[0],str[1])>0)strcpy(string,str[0]);elsestrcpy(string,str[1]);if(strcmp(str[2],string)>0)strcpy(string,str[2]);printf(“Thelargeststringisn%sn”,string);}A)adfjhi     B)c     C)aefjhijk     D)第215页共215页naefjhi25.以下程序的输出结果是(A)。#include#includemain(){charstr[12]={’s’,’t’,’r’,’i’,’n’,’g’};printf(“%dn”,strlen(str));}A)6     B)7     C)11     D)1226.有以下程序:#include#defineN6main(){charc[N];inti=0;for(;i代表一个回车符:a第215页共215页nbcdef程序的输出结果是(C)。A)abcdef     B)a     C)a     D)abbbccdddcdefef27.设有:charstr[]=“Beijing”;则执行:printf(“%dn”,strlen(strcpy(str,“China”)));后输出的结果为(A)。A)5        B)7     C)12     D)1428.请选出以下程序的输出结果(A)。#includemain(){chars1[10],s2[10],s3[10],s4[10];scanf(“%s%s”,s1,s2);gets(s3);gets(s4);puts(s1);puts(s2);puts(s3);puts(s4);}输入数据如下:(此处代表回车符)第215页共215页naaaabbbbccccddddA)aaaa     B)aaaa     C)aaaa     D)aaaabbbbbbbbbbbbbbbbccccccccccccddddddddccccddddddddeeee29.请读程序:main(){intn[2],i,j,k;for(i=0;i<2;i++)n[i]=0;k=2;for(i=0;i=‘0’&&ch[i]<=‘9’;i+=2)s=10*s+ch[i]-‘0’;printf("%dn",s);}A)12ba56     B)6521     C)6     D)6240.以下程序运行后,输出结果是(B)。main(){inty=18,i=0,j,a[8];do{a[i]=y%2;i++;y=y/2;}while(y>=1);for(j=i-1;j>=0;j--)printf("%d",a[j]);printf(“n”);}第215页共215页nA)10000     B)10010     C)00110     D)1010041.以下程序的输出结果是(D)。main(){intn[5]={0,0,0},i,k=2;for(i=0;i#includemain(){chara[]="clanguage",t;inti,j,k;k=strlen(a);第215页共215页nfor(i=0;i<=k-2;i+=2)for(j=i+2;ja[j]){t=a[i];a[i]=a[j];a[j]=t;}puts(a);printf("n");}2.若有定义语句:chars[100],d[100];intj=0,i=0;,且s中已赋字符串,请填空以实现字符串拷贝。(注:不得使用逗号表达式)while(s[i]){d[j]=s[i++];j++;}d[j]=0;3.下列程序段的输出结果是Hello。main(){charb[]="Hello,you";b[5]=0;printf("%sn",b);}4.若想通过以下输入语句使a中存放字符串1234,b中存放字符5,则输入数据的形式应该是a=1234b=5回车。chara[10],b;scanf(“a=%sb=%c”,a,&b);第215页共215页n5.以下程序可以把从键盘上输入的十进制数(long型)以二到十六进制数的形式输出,请填空。main(){intb[16]={‘0’,‘1’,‘2’,‘3’,‘4’,‘5’,‘6’,‘7’,‘8’,‘9’,‘A’,‘B’,‘C’,‘D’,‘E’,‘F’};intc[64],d,i=0,base;longn;printf(“Enteranumber:n”);scanf(“%ld”,&n);printf(“Enternewbase:n”);scanf(“%d”,&base);do{c[i]=n%base;i++;n=n/base;}while(n!=0);printf(“Transmitenewbase:n”);for(--i;i>=0;--i){d=c[i];printf("%c",b[d]);}}第215页共215页n6.以下程序用来对从键盘上输入的两个字符串进行比较,然后输出两个字符串中的第一个不相同字符的ASCII码之差。例如:输入的两个字符串分别为abcdefg和abceef,则输出为-1。请填空。main(){charstr1[100],str2[100],c;inti,s;printf(“nInputstring1:n”);gets(str1);printf(“nInputstring2:n”);gets(str2);i=0;while((str1[i]==str2[i])&&(str1[i]!=''))i++;s=str1[i]-str2[i];printf("%dn",s);}7.以下语句的输出结果是5。printf(“%dn”,strlen(“t”85xffn”));8.对数组中的元素值进行排序:main(){inta[]={2,4,15,3,17,5,8,23,9,7,11,13},i,j,k;for(k=0;k<12;k++)for(i=k;i<12;i++)if(a[i]>a[i+1]){j=a[i];a[i]=a[i+1];第215页共215页na[i+1]=j;}for(i=0;i<12;i++)printf(“%4d”,a[i]);}9.由25人围坐成圆圈,先从任意一人出发用1到25顺时针依次编号,然后从1号开始顺时针报数(1、2、3、……),凡报5的倍数者出圈,剩下者继续报数,求出最后出圈者的编号。main(){inta[26],j,n,count;for(j=1;j<=25;j++)a[j]=j;j=1;count=0;n=0;do{if(a[j]!=0){n++;if(n%5==0){a[j]=0;if(count==24)printf(“%dn”,j);count++;}}j++;第215页共215页nif(j>25)j=1;}while(count<25);}10.阅读下列程序:main(){inti,j,row,column,m;intarray[3][3]={{100,200,300},{28,72,-30},{-850,2,6}};m=array[0][0];for(i=0;i<3;i++)for(j=0;j<3;j++)if(array[i][j]=0.0&&n<1000){sum+=a;x[n]=a;n++;scanf(“%f”,&a);}ave=sum/n;printf(“Output:n”);printf(“ave=%fn”,ave);for(i=0;i2)return(fib(n-1)+fib(n-2));else第215页共215页nreturn(2);}main(){printf(“%ldn”,fib(3));}A)2     B)4      C)6      D)814.在C语言中,变量的隐含存储类别是(A)。A)auto     B)static     C)extern     D)无存储类别15.在下列的函数调用中,不正确的是(D)。A)max(a,b);     B)max(3,a+b);C)max(3,5);     D)intmax(a,b);16.以下程序的输出结果是(C)。func(intx,inty){intz;z=x+y;returnz;}main(){inta=10,b=20,c=30,s;s=func((a--,b++,a+b),c--);printf(“%dn”,s);}A)30     B)40     C)60     D)50第215页共215页n17.现有以下程序:#includeinverse(charstr[]){chart;inti,j;for(i=0,j=strlen(str);i0)p=power(x,n-1)*x;elsep=1;return(p);}main(){intx=2,n=3;printf(“%dn”,power(x,n));}A)5     B)6     C)8      D)920.在C语言的函数中(C)。A)必须有形参          B)形参必须是变量名C)可以有也可以没有形参     D)数组名不能作形参21.当输入a1b2c3d4e时,以下程序的输出结果为(A)。第215页共215页n#includemain(){charstr[40];printf(“请输入含有四个数字字符的字符串:n”);scanf(“%s”,str);insert(str);}insert(charstr[]){inti;for(i=strlen(str);i>0;i--){str[2*i]=str[i];str[2*i-1]=‘’;}printf(“n结果是:%s”,str);}A)a1b2c3d4e     B)1234C)a1b2          D)因输入错误,程序出错22.在下列叙述中,错误的一条是(A)。A)主函数main中定义的变量在整个文件或程序中有效B)不同函数中,可以使用相同名字的变量C)函数中的形式参数是局部变量第215页共215页nD)在一个函数内部,可在复合语句中定义变量,这些变量只在本复合语句中有效23.以下程序的输出结果是(A)。#includemain(){inti;for(i=0;i<2;i++)as();}as(){intlv=0;staticintsv=0;printf(“lv=%d,sv=%d”,lv,sv);lv++;sv++;}A)lv=0,sv=0,lv=0,sv=1     B)lv=0,sv=0,lv=1,sv=1C)lv=0,sv=0,lv=0,sv=0     D)lv=0,sv=1,lv=0,sv=124.在下列叙述中,错误的一条是(B)。A)全局变量存放在静态存储区中,在程序开始执行时就给全局变量分配存储区,程序执行完才释放第215页共215页nB)在有参函数中,形参在整个程序一开始执行时便分配内存单元C)用数组名作函数实参和形参时,应在主调函数和被调用函数中分别定义数组D)在同一个源文件中,全局变量与局部变量同名时,在局部变量的作用范围内,全局变量不起作用25.在下列语句中,不正确的是(D)。A)c=2*max(a,b);          B)m=max(a,max(b,c));C)printf(“%d”,max(a,b));     D)intmax(intx,intmax(inty,intz));26.若输入1.5、2.5,以下程序的输出结果为(C)。main(){intmax(floatx,floaty);floata,b;intc;scanf(“%f,%f”,&a,&b);c=max(a,b);printf(“%d”,c);}max(floatx,floaty)第215页共215页n{floatz;z=x>y?x:y;return(z);}A)1     B)2.5     C)2     D)327.下列程序结构中,不正确的是(ABC)。A)main(){floata,b,c;scanf(“%f,%f”,&a,&b);c=add(a,b);…}intadd(floatx,floaty){…}B)main(){floata,b,c;scanf(“%f,%f”,&a,&b);c=add(a,b);…}floatadd(floatx,floaty){…}第215页共215页nC)floatadd();main(){floata,b,c;scanf(“%f,%f”,&a,&b);c=add(a,b);…}floatadd(floatx,floaty){…}D)floatadd(floatx,floaty){…}main(){floata,b,c;scanf(“%f,%f”,&a,&b);c=add(a,b);…}28.在下列叙述中,错误的一条是(B)。A)scanf函数可以用来输入任何类型的多个数据B)数组名作函数参数时,也采用“值传递”方式C)如果形参发生改变,不会改变主调函数的实参值D)函数的实参与形参的类型应一致第215页共215页n29.以下程序的输出结果是(B)。main(){inti=1,j=3;printf(“%d”,i++);{inti=0;i+=j*2;printf(“%d,%d”,i,j);}printf(“%d,%dn”,i,j);}A)1,6,3,1,3     B)1,6,3,2,3     C)1,6,3,6,3     D)1,7,3,2,3//第3行的输出缺少一个“,”30.C语言中形参的缺省存储类别是(A)。A)自动(auto)        B)静态(static)C)寄存器(register)     D)外部(extern)31.设有如下函数:ggg(floatx){printf(“n%d”,x*x);}则函数的类型为(C)。A)与参数x的类型相同     B)void第215页共215页nC)int            D)无法确定32.C语言规定,程序中各函数之间(C)A)既允许直接递归调用也允许间接递归调用B)不允许直接递归调用也不允许间接递归调用C)允许直接递归调用不允许间接递归调用D)不允许直接递归调用允许间接递归调用//本题也有可能选A33.下面程序的输出结果是(A)。main(){inti=2,p;p=f(i,i+1);printf(“%d”,p);}intf(inta,intb){intc;c=a;if(a>b)c=1;elseif(a==b)c=0;elsec=-1;return(c);第215页共215页n}A)-1     B)0     C)1     D)234.以下程序的输出结果为(B)。f(intb[],intn){inti,r;r=1;for(i=0;i<=n;i++)r=r*b[i];return(r);}main(){intx,a[]={2,3,4,5,6,7,8,9};x=f(a,3);printf(“%dn”,x);}A)720     B)120     C)24     D)635.下列程序执行后的输出结果是(D)。f(inta){intb=0;staticc=3;a=c++,b++;return(a);第215页共215页n}main(){inta=2,i,k;for(i=0;i<2;i++)k=f(a++);printf(“%dn”,k);}A)3     B)0     C)5     D)436.下列程序执行后输出的结果是(A)。intd=1;fun(intp){intd=5;d+=p++;printf(“%d”,d);}main(){inta=3;fun(a);d+=a++;printf(“%dn”,d);}第215页共215页nA)84     B)96     C)94     D)8537.以下程序的输出结果是(B)。fun(intk){if(k>0)fun(k-1);printf(“%d”,k);}main(){intw=5;fun(w);}A)54321     B)012345     C)12345     D)54321038.以下说法中正确的是(C)。A)C语言程序总是从第一个定义的函数开始执行B)在C语言程序中,被调用的函数必须在main()函数中定义C)C语言程序总是从main()函数开始执行D)C语言程序中的main()函数必须放在程序的开始部分39.以下程序的输出结果是(C)。intabc(intu,intv);main(){inta=24,b=16,c;第215页共215页nc=abc(a,b);printf(“%dn”,c);}intabc(intu,intv){intw;while(v){w=u%v;u=v;v=w;}returnu;}A)6     B)7     C)8     D)9二填空题1.下列程序的输出结果是56。intt(intx,inty,intcp,intdp){cp=x*x+y*y;dp=x*x-y*y;}main(){inta=4,b=3,c=5,d=6;t(a,b,c,d);printf("%d%dn",c,d);}2.以下程序的运行结果是8,16。第215页共215页n#includemain(){intk=4,m=1,p;p=func(k,m);printf("%d,",p);p=func(k,m);printf("%dn",p);}func(inta,intb){staticintm=0,i=2;i+=m+1;m=i+a+b;returnm;}3.以下程序输出的最后一个值是120。intff(intn){staticintf=l;f=f*n;returnf;}main(){inti;for(i=1;i<=5;i++)printf("%dn",ff(i));}第215页共215页n4.以下函数的功能是:求x的y次方,请填空。doublefun(doublex,inty){inti;doublez;for(i=1,z=x;iy)z=x;elsez=y;returnz;}11.下面程序的输出结果是2,5,1,2,3,-2。main()第215页共215页n{inta=3,b=2,c=1;c-=++b;b*=a+c;{intb=5,c=12;c/=b*2;a-=c;printf(“%d,%d,%d,”,a,b,c);a+=--c;}printf(“%d,%d,%d”,a,b,c);}12.下面的findmax函数返回数组s中值为最大的元素的下标,数组中元素的个数由t传人,请填空。findmax(ints[],intt){intk,p;for(p=0,k=p;ps[k])k=p;returnk;}13.下面程序的输出结果是7。fun(intx)第215页共215页n{intp;if(x==0||x==1)return(3);p=x-fun(x-2);returnp;}main(){printf(“%dn”,fun(9));}14.函数fun的功能是:使一个字符串按逆序存放,请填空。voidfun(charstr[]){charm;inti,j;for(i=0,j=strlen(str);i#defineMIN(x,y)(x)<(y)?(x):(y)main(){inta,b,c;a=20;b=10;c=5*MIN(a,b);printf(“%dn”,c);}A)20     B)200     C)10     D)508.在下列叙述中,正确的是(C)。A)下面的程序有一个整型输出值:main(){inta;a=pp();printf(“%d”,a);}voidpp(){…}B)以下程序的运行结果为1,3,5,7main()第215页共215页n{staticinta[4]={1,3,5,7};printf(“%d,%d,%d,%dn”,a);}C)以下两个语句是等价的for(;(c=getchar())!=‘n’;printf(“%cn”,c));for(;(c=getchar())!=‘n’;)printf(“%cn”,c);D)以下程序中的PRINT()是一个函数#definePRINT(V)printf(“V=%dt”,V)main(){inta,b;a=1;b=2;PRINT(a);PRINT(b);}9.在下列#include命令中,正确的一条是(D)。A)#include[string.h]     B)#include{math.h}C)#include(stdio.h)     D)#include10.宏定义#definePI3.1415926的作用是:指定用标识符PI来代替一个(C)。A)单精度数     B)字符串     C)双精度数     第215页共215页nD)整数11.如果在用户的程序中要使用C库函数中的数学函数时,应在该源文件中使用的include命令是(B)。A)#include     B)#includeC)#include     D)#include12.若输入60和13,以下程序的输出结果是(D)。#defineSURPLUS(a,b)((a)%(b))main(){inta,b;scanf(“%d,%d”,&a,&b);printf(“%dn”,SURPLUS(a,b));}A)60     B)13     C)73     D)813.如果文件1包含文件2,文件2中要用到文件3的内容,而文件3中要用到文件4的内容,则可在文件1中用三个#include命令分别包含文件2、文件3和文件4。在下列关于这几个文件包含顺序的叙述中,正确的一条是(A)。A)文件4应出现在文件3之前,文件3应出现在文件2之前B)文件2应出现在文件3之前,文件3应出现在文件4之前C)文件3应出现在文件2之前,文件2应出现在文件4之前D)出现的先后顺序可以任意第215页共215页n14.在下面四个程序中,输出结果与其它三个不同的是(C)。A)#defineMAX(a,b)((a)>(b)?(a):(b))main(){inta,b,c;scanf(“%d,%d,%d”,&a,&b,&c);printf(“%dn”,MAX(MAX(a,b),c));}B)main(){inta,b,c;scanf(“%d,%d,%d”,&a,&b,&c);printf(“%dn”,max(a,b,c));}max(intx,inty,intz){intt;t=(x>y?x:y);return(t>z?t:z);}C)main(){inta,b,c,max;scanf(“%d,%d,%d”,&a,&b,&c);if(a>b>c)max=a;第215页共215页nif(b>c>a)max=b;if(c>a>b)max=c;printf(“%dn”,max);}D)main(){inta,b,c,max;scanf(“%d,%d,%d”,&a,&b,&c);max=a>b?a:b;if(c>max)max=c;printf(“%dn”,max);}15.以下for语句构成的循环执行了(C)次。#defineN2#defineMN+1#defineNUM(M+1)*M/2main(){inti,n=0;for(i=1;i<=NUM;i++){n++;printf(“%d”,n);}printf(“n”);第215页共215页n}A)4     B)6     C)8     D)916.以下程序的输出结果是(B)。#include#defineFUDGE(y)2.84+y#definePR(a)printf(“%d”,(int)(a))#definePRINT1(a)PR(a);putchar(‘n’)main(){intx=2;PRINT1(FUDGE(5)*x);}A)11     B)12     C)13     D)1517.以下程序的输出结果是(A)。#defineSUB(x,y)(x)*ymain(){inta=3,b=4;printf(“%dn”,SUB(a++,b++));}A)12     B)15     C)16     D)2018.设有以下宏定义:#defineN3第215页共215页n#defineY(n)((N+1)*n)则执行语句:z=2*(N+Y(5+1));后,z的值为(C)。A)出错     B)42     C)48     D)54二填空题1.以下程序的输出结果是7。#defineMAX(x,y)(x)>(y)?(x):(y)main(){inta=5,b=2,c=3,d=3,t;t=MAX(a+b,c+d)*10;printf(“%dn”,t);}2.以下程序的输出结果为10.000000。#include#include#definePOWER(x,y)pow(x,y)*y#defineONE1#defineSELEVE_ADD(x)++xmain(){intx=2;printf(“%fn”,POWER(SELEVE_ADD(x),ONE+1));}//pow函数的原型为doublepow(doublex,doubley);第215页共215页n。所以此题中x的类型定义不正确!3.填空补充以下程序:#definePRICE30main(){intnum,total;num=0;total=num*PRICE;printf(“total=%d,num=%dn”,total,num);}4.下面程序的输出结果是5。#defineCIR(r)r*rmain(){inta=1,b=2,t;t=CIR(a+b);printf(“%dn”,t);}第十章指针一单项选择题1.以下程序的输出结果是(B)。main(){chara[10]={'1','2','3','4','5','6','7','8','9',0},*p;第215页共215页ninti;i=8;p=a+i;printf("%sn",p-3);}A)6     B)6789     C)‘6’     D)7892.以下程序的运行结果是(C)。#include"stdio.h"main(){inta[]={1,2,3,4,5,6,7,8,9,10,11,12};int*p=a+5,*q=NULL;*q=*(p+5);printf("%d%dn",*p,*q);}A)运行后报错     B)66     C)611     D)553.若有以下的说明和语句,则在执行for语句后,*(*(pt+l)+2)表示的数组元素是(C)。intt[3][3],*pt[3],k;for(k=0;k<3;k++)pt[k]=&t[k][0];A)t[2][0]     B)t[2][2]     C)t[l][2]     D)第215页共215页nt[2][l]4.下面程序把数组元素中的最大值放入a[0]中,则在if语句中的条件表达式应该是(B)。main(){inta[10]={6,7,2,9,1,10,5,8,4,3},*p=a,i;for(i=0;i<10;i++,p++)if(________)*a=*p;printf("%d",*a);}A)p>a     B)*p>a[0]     C)*p>*a[0]     D)*p[0]>*a[0]5.以下程序的输出结果是(B)。#include#includemain(){char*a="abcdefghi";intk;fun(a);puts(a);}fun(char*s){intx,y;第215页共215页ncharc;for(x=0,y=strlen(s)-1;xmain(){char*p1,*p2,str[50]="ABCDEFG";p1="abcd";p2="efgh";strcpy(str+1,p2+1);strcpy(str+3,p1+3);printf("%s",str);}A)AfghdEFG     B)Abfhd     C)Afghd     D)Afgd8.若有以下定义和语句:doubler=99,*p=&r;*p=r;则以下正确的叙述是(D)。A)以上两处的*p含义相同,都说明给指针变量p赋值第215页共215页nB)在"doubler=99,*p=&r;"中,把r的地址赋给了p所指的存储单元C)语句"*p=r;"把变量r的值赋给指针变量pD)语句"*p=r;"取变量r的值放回r中9.若已定义:inta[]={0,1,2,3,4,5,6,7,8,9},*p=a,i;其中0≤i≤9,则对a数组元素不正确的引用是(D)。A)a[p-a]     B)*(&a[i])     C)p[i]     D)*(*(a+i))10.下列程序执行后的输出结果是(A)。voidfunc(int*a,intb[]){b[0]=*a+6;}main(){inta,b[5];a=0;b[0]=3;func(&a,b);printf("%dn",b[0]);}A)6     B)3     C)8     D)911.下列程序执行后的输出结果是(B)。第215页共215页nmain(){inta[3][3],*p,i;p=&a[0][0];for(i=0;i<9;i++)p[i]=i+1;printf("%dn",a[1][2]);}A)3     B)6     C)9     D)随机数12.请选出正确的程序段(C)。A)int*p;     B)int*s,k;     C)int*s,k;     D)int*s,k;scanf("%d",p);*s=100;char*p,c;char*p,c;s=&k;s=&k;p=&c;p=&c;*p='a';s=p;*s=1;13.已知指针p的指向如下图所示,则执行语句*--p;后*p的值是(B)。第215页共215页na[0]a[1]a[2]a[3]a[4]1020304050pA)30     B)20     C)19     D)2914.设已有定义:char*st="howareyou";下列程序段中正确的是(A)。A)chara[11],*p;strcpy(p=a+1,&st[4]);     B)chara[11];strcpy(++a,st);C)chara[11];strcpy(a,st);          D)chara[],*p;strcpy(p=&a[1],st+2);15.以下程序的输出结果是(C)。main(){inti,x[3][3]={9,8,7,6,5,4,3,2,1},*p=&x[1][1];for(i=0;i<4;i+=2)printf("%d",p[i]);}A)52     B)51     C)53     D)9716.若有说明:inti,j=2,*p=&i;,则能完成i=j赋值功能的语句是(B)。A)i=*p;     B)*p=*&j;     C)i=&j;     D)i=**p;第215页共215页n17.以下定义语句中,错误的是(D)。A)inta[]={1,2};     B)char*a[3];C)chars[10]="test";     D)intn=5,a[n];18.下列程序段的输出结果是(C)。voidfun(int*x,int*y){printf("%d%d",*x,*y);*x=3;*y=4;}main(){intx=1,y=2;fun(&y,&x);printf("%d%d",x,y);}A)2143     B)1212     C)1234     D)211219.下列程序的输出结果是(C)。main(){chara[10]={9,8,7,6,5,4,3,2,1,0},*p=a+5;printf("%d",*--p);}A)非法     B)a[4]的地址     C)5     D)320.下列程序的运行结果是(B)。第215页共215页nvoidfun(int*a,int*b){int*k;k=a;a=b;b=k;}main(){inta=3,b=6,*x=&a,*y=&b;fun(x,y);printf("%d%d",a,b);}A)63     B)36     C)编译出错     D)0021.下面程序的输出结果是(C)。main(){inta[]={1,2,3,4,5,6,7,8,9,0},*p;p=a;printf("%dn",*p+9);}A)0     B)1     C)10     D)922.假定以下程序经编译和连接后生成可执行文件PROG.EXE,如果在此可执行文件所在目录的DOS提示符下键入:PROGABCDEFGHIJKL<回车>,则输出结果为(D)。第215页共215页nmain(intargc,char*argv[]){while(--argc>0)printf("%s",argv[argc]);printf("n");}A)ABCDEFGH    B)IJHL    C)ABCDEFGHIJKL    D)IJKLEFGHABCD23.对于基类型相同的两个指针变量之间,不能进行的运算是(C)。A)<     B)=     C)+     D)-24.有以下函数:char*fun(char*p){returnp;}该函数的返回值是(B)。A)无确切的值           B)形参p中存放的地址值C)一个临时存储单元的地址     D)形参p自身的地址值25.若有以下说明和定义fun(int*c){…}main(){int(*a)()=fun,*b(),w[10],c;┆第215页共215页n}在必要的赋值之后,对fun函数的正确调用语句是(B)。A)a=a(w);     B)(*a)(&c);     C)b=*b(w);     D)fun(b);26.有如下说明inta[10]={1,2,3,4,5,6,7,8,9,10},*p=a;则数值为9的表达式是(B)。A)*p+9     B)*(p+8)     C)*p+=9     D)p+827.有如下程序:main(){charch[2][5]={“6937”,“8254”},*p[2];inti,j,s=0;for(i=0;i<2;i++)p[i]=ch[i];for(i=0;i<2;i++)for(j=0;p[i][j]>‘’;j+=2)s=10*s+p[i][j]-‘0’;printf(“%dn”,s);}该程序的输出结果是(C)。A)69825     B63825     C)6385     D)第215页共215页n69382528.若有以下定义和语句:char*s1=“12345”,*s2=“1234”;printf(“%dn”,strlen(strcpy(s1,s2)));则输出结果是(B)。A)4     B)5     C)9     D)10//同选择题第5题。(在有的系统下也可能无输出)29.下面程序的输出结果是(C)。main(){char*s=“121”;intk=0,a=0,b=0;do{k++;if(k%2==0){a=a+s[k]-‘0’;continue;}b=b+s[k]-‘0’;a=a+s[k]-‘0’;}while(s[k+1]);printf(“k=%da=%db=%dn”,k,a,b);}A)k=3a=2b=3     B)k=3a=3b=2C)k=2a=3b=2     D)k=2a=2b=3第215页共215页n30.若有以下的定义:inta[]={1,2,3,4,5,6,7,8,9,10},*p=a;则值为3的表达式是(A)。A)p+=2,*(p++)    B)p+=2,*++p    C)p+=3,*p++    D)p+=2,++*p31.以下程序的输出结果是(A)。#includesub1(chara,charb){charc;c=a;a=b;b=c;}sub2(char*a,charb){charc;c=*a;*a=b;b=c;}sub3(char*a,char*b){charc;c=*a;*a=*b;*b=c;}main(){chara,b;a=‘A’;b=‘B’;sub3(&a,&b);putchar(a);putchar(b);a=‘A’;b=‘B’;sub2(&a,b);putchar(a);putchar(b);a=‘A’;b=‘B’;sub1(a,b);putchar(a);putchar(b);}A)BABBAB     B)ABBBBA     C)BABABA     D)BAABBA32.设p1和p2是指向同一个int型一维数组的指针变量,k为int型变量,则不能正确执行的语句是(B)。A)k=*p1+*p2;     B)p2=k;     C)p1=p2;     第215页共215页nD)k=*p1*(*p2);33.设有如下定义:intarr[]={6,7,8,9,10};int*ptr;则下列程序段的输出结果是(D)。ptr=arr;*(ptr+2)+=2;printf(“%d,%dn”,*ptr,*(ptr+2));A)8,10     B)6,8     C)7,9     D)6,1034.以下程序的输出结果是(D)。main(){chara[]=“programming”,b[]=“language”;char*p1,*p2;inti;p1=a;p2=b;for(i=0;i<7;i++)if(*(p1+i)==*(p2+i))printf(“%c”,*(p1+i));}A)gm     B)rg     C)or     D)ga35.以下程序运行后,输出结果是(C)。main(){char*s=“abcde”;第215页共215页ns+=2;printf(“%ldn”,s);}A)cde     B)字符c的ASCII码值     C)字符c的地址     D)出错36.以下程序运行后,如果从键盘上输入ABCDE<回车>,则输出结果为(D)。#include#includefunc(charstr[]){intnum=0;while(*(str+num)!=’’)num++;return(num);}main(){charstr[10],*p=str;gets(p);printf(“%dn”,func(p));}A)8     B)7     C)6     D)537.以下程序执行后,a的值是(C)。第215页共215页nmain(){inta,k=4,m=6,*p1=&k,*p2=&m;a=p1==&m;printf(“%dn”,a);}A)4     B)1     C)0     D)运行时出错,a无定值38.以下程序运行后,如果从键盘上输入:book<回车>book<空格><回车>则输出结果是(B)。#includemain(){chara1[80],a2[80],*s1=a1,*s2=a2;gets(s1);gets(s2);if(!strcmp(s1,s2))printf(“*”);elseprintf(“#”);printf(“%dn”,strlen(strcat(s1,s2)));}A)*8     B)#9     C)#6     D)*9第215页共215页n39.若有以下调用语句,则不正确的fun函数的首部是(D)。main(){…inta[50],n;…fun(n,&a[9]);…}A)voidfun(intm,intx[])     B)voidfun(ints,inth[41])C)voidfun(intp,int*s)      D)voidfun(intn,inta)40.假定下列程序的可执行文件名为prg.exe,则在该程序所在的子目录下输入命令行:prghellogood<回车>后,程序的输出结果是(B)。main(intargc,char*argv[]){inti;if(argc<=0)return;for(i=1;imain(){char*p1,*p2,str[50]="xyz";p1="abcd";p2="ABCD";strcpy(str+2,strcat(p1+2,p2+1));printf("%s",str);}A)xyabcAB     B)abcABz     C)ABabcz     D)xycdBCD//无答案,解释同第5题。(如果有输出,则答案为xycd,所以最接近的答案是D)第215页共215页n46.设有以下定义:inta[4][3]={1,2,3,4,5,6,7,8,9,10,11,12};int(*prt)[3]=a,*p=a[0];则下列能够正确表示数组元素a[1][2]的表达式是(D)。A)*((*prt+1)[2])     B)*(*(p+5))C)(*prt+1)+2       D)*(*(a+1)+2)47.阅读程序:main(){inta[10]={1,2,3,4,5,6,7,8,9,0},*p;p=a;printf("%xn",p);printf("%xn",p+9);}该程序有两个printf语句,如果第一个printf语句输出的是194,则第二个printf语句的输出结果是(D)。A)203     B)204     C)1a4     D)1a648.以下程序的输出结果是(C)。#include#includevoidfun(char*w,intm){chars,*p1,*p2;第215页共215页np1=w;p2=w+m-1;while(p1voidfun(int*s){staticintj=0;dos[j]+=s[j+1];while(++j<2);}main(){intk,a[10]={1,2,3,4,5};for(k=1;k<3;k++)fun(a);第215页共215页nfor(k=0;k<5;k++)printf(“%d”,a[k]);}A)34756     B)23445     C)35745     D)1234550.请读程序:#includechar(char*c){if(*c<=‘Z’&&*c>=‘A’)*c-=‘A’-‘a’;return*c;}main(){chars[81],*p=s;gets(s);while(*p){*p=fun(p);putchar(*p);p++;}putchar(‘n’);}若运行时从键盘上输入OPENTHEDOOR<回车>,则上面程序的输出结果为(B)。A)oPENtHEdOOR     B)openthedoorC)OPENTHEDOOR     D)OpenTheDoor第215页共215页n51.以下程序的输出结果是(A)。#includemain(){char*s1="AbCdEf",*s2="aB";s1++;s2++;printf("%dn",strcmp(s1,s2));}A)正数     B)负数     C)零     D)不确定的值52.下面各语句行中,能正确进行赋字符串操作的语句行是(BC)。A)charst[4][5]={“ABCDE”};B)chars[5]={‘A’,‘B’,‘C’,‘D’,‘E’};C)char*s;s=“ABCDE”;D)char*s;scanf(“%s”,s);53.以下程序的输出结果是(C)。fun(int*s,intn1,intn2){inti,j,t;i=n1;j=n2;while(iarray;p--)*p=*(p-1);*array=array_end;m--;if(m>0)move(array,n,m);}main(){staticintnumber[6]={1,2,3,4,5,6};intm=4,j;move(number,6,m);第215页共215页nfor(j=0;j<5;j++)printf(“%d,”,number[i]);printf(“%d”,number[5]);}A)1,2,3,4,5,6     B)6,5,4,3,2,1C)3,4,5,6,1,2     D)6,1,2,3,4,565.在下列叙述中,正确的一条是(B)。A)以下程序运行结果为Computerandc:main(){charstr[4];str=“Computerandc”;printf(“%sn”,str);}B)下面两种表示方式等价(1)intfun(intx,inty)(2)intfun(x,y)intx,y;C)若输入1、2,以下程序的运行结果为12main(){int*p,i,a[2];p=a;for(i=0;i<2;i++)scanf(“%d”,p++);第215页共215页nfor(i=0;i<2;i++,p++)printf(“%d”,*p);}D)以下程序的运行结果为3main(){int*p,a[5]={1,3,4,5,6};p=a;printf(“%d”,*p++);}66.以下程序的输出结果是(A)。point(char*pt);main(){charb[4]={‘a’,‘c’,‘s’,‘f’},*pt=b;point(pt);printf(“%cn”,*pt);}point(char*p){p+=3;}A)a     B)c     C)s     D)f67.以下程序的输出结果为(A)。voidmove(int*pointer)第215页共215页n{inti,j,t;for(i=0;i<3;i++)for(j=i;j<3;j++){t=*(pointer+3*i+j);*(pointer+3*i+j)=*(pointer+3*j+i);*(pointer+3*j+i)=t;}}main(){inta[3][3]={1,2,3,4,5,6,7,8,9},*p,i;p=&a[0][0];move(p);for(i=0;i<3;i++)printf(“%d%d%d”,a[i][0],a[i][1],a[i][2]);}A)147258369     B)123456789     C)987654321     D)12748563968.以下程序的输出结果是(A)。sub(intx,inty,int*z){*z=y-x+2;}main(){inta,b,c;第215页共215页nsub(16,7,&a);sub(9,a,&b);sub(a,b,&c);printf(“%d,%d,%dn”,a,b,c);}A)–7,-14,-5    B)–7,-16,-9    C)–7,-12,-9    D)–9,-14,-569.变量p为指针变量,若p=&a,下列说法不正确的是(D)。A)&*p==&a    B)*&a==a   C)(*p)++==a++    D)*(p++)==a++70.若输入10,以下程序的输出结果是(B)。#defineMAX50main(){inti,k,m,n,num[MAX],*p;scanf(“%d”,&n);p=num;for(i=0;imain(){charb[30],*chp;strcpy(&b[0],"GH");strcpy(&b[1],"DEF");strcpy(&b[2],"ABC");printf("%sn",b);}2.下列程序的字符串中各单词之间有一个空格,则程序的输出结果是Howdoesshe。#includemain(){charstrl[]="Howdoyoudo",*p1=strl;strcpy(strl+strlen(strl)/2,"esshe");printf("%sn",pl);}3.若有如下图所示五个连续的int类型的存储单元并赋值如下图,a[0]的地址小于a[4]的地址。p和s是基类型为int的指针变量。请对以下问题进行填空。a[0]a[1]a[2]a[3]a[4]第215页共215页n2233445566(1)若p已指向存储单元a[1]。通过指针p给s赋值,使s指向最后一个存储单元a[4]的语句是s=p+3;。(2)若指针s指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是2。4.以下程序的功能是:将无符号八进制数字构成的字符串转换为十进制整数。例如,输入的字符串为:556,则输出十进制整数366。请填空。#includemain(){char*p,s[6];intn;p=s;gets(p);n=*p-'0';while(*++p!='')n=n*8+*p-'0';printf("%dn",n);}5.设有以下程序:main(){inta,b,k=4,m=6,*p1=&k,*p2=&m;第215页共215页na=pl==&m;b=(*p1)/(*p2)+7;printf("a=%dn",a);printf("b=%dn",b);}执行该程序后,a的值为0,b的值为7。6.下列程序的输出结果是0。voidfun(int*n){while((*n)--);printf("%d",++(*n));}main(){inta=100;fun(&a);}7.以下程序的输出结果是10。main(){intarr[]={30,25,20,15,10,5},*p=arr;p++;printf("%dn",*(p+3));}第215页共215页n8.若有以下定义,则不移动指针p,且通过指针p引用值为98的数组元素的表达式是*(p+5)。intw[10]={23,54,10,33,47,98,72,80,61},*p=w;9.以下函数把b字符串连接到a字符串的后面,并返回a中新字符串的长度。请填空。strlen(chara[],charb[]){intnum=0,n=0;while(*(a+num)!='')num++;while(b[n]){*(a+num)=b[n];num++;n++;}return(num);}10.函数voidfun(float*sn,intn)的功能是:根据以下公式计算S,计算结果通过形参指针sn传回;n通过形参传入,n的值大于等于0。请填空。voidfun(float*sn,intn){floats=0.0,w,f=-1.0;inti=0;for(i=0;i<=n;i++){f=(-1)*f;w=f/(2*i+1);第215页共215页ns+=w;}*sn=s;}11.下面函数用来求出两个整数之和,并通过形参传回两数相加之和值,请填空。intadd(intx,inty,int*z){*z=x+y;}12.以下fun函数的功能是:累加数组元素中的值。n为数组中元素的个数。累加的和值放入x所指的存储单元中。请填空。fun(intb[],intn,int*x){intk,r=0;for(k=0;kmain(){charstr[81],*sptr;inti;for(i=0;i<80;i++){str[i]=getchar();if(str[i]==‘n’)break;}str[i]='';sptr=str;while(*sptr)putchar(*sptr++);}18.fun1函数的调用语句为:fun1(&a,&b,&c);它将三个整数按由大到小的顺序调整后依次放入a、b、c三个变量中,a中放最大数。请填空。voidfun2(int*x,int*y)第215页共215页n{intt;t=*x;*x=*y;*y=t;}voidfun1(int*pa,int*pb,int*pc){if(*pc>*pb)fun2(pc,pb);if(*pa<*pc)fun2(pa,pc);if(*pa<*pb)fun2(pa,pb);}19.以下函数用来在w数组中插入数x,w数组中的数已按由小到大的顺序存放,n所指存储单元中存放数组中数据的个数,x插入后数组中的数仍有序。请填空。voidfun(char*w,charx,int*n){inti,p;p=0;w[*n]=x;while(x>w[p])p++;for(i=*n;i>p;i--)w[i]=w[i-1];w[p]=x;++*n;}20.阅读程序:main()第215页共215页n{charstr1[]=“howdoyoudo”,str2[10];char*p1=str1,*p2=str2;scanf(“%s”,p2);printf(“%s”,p2);printf(“%sn”,p1);}运行上面的程序,输入字符串HOWDOYOUDO,则程序的输出结果是HOWhowdoyoudo。21.下面程序的输出结果是SO。main(){char*p[]={“BOOL”,“OPK”,“H”,“SP”};inti;for(i=3;i>=0;i--,i--)printf(“%c”,*p[i]);printf(“n”);}22.下面程序的输出结果是17。funa(inta,intb){returna+b;}funb(inta,intb){returna-b;}sub(int(*t)(),intx,inty){return((*t)(x,y));}第215页共215页nmain(){intx,(*p)();p=funa;x=sub(p,9,3);x+=sub(funb,8,3);printf(“%dn”,x);}23.下面程序的输出结果是XYZA。#includevoidfun(char*a1,char*a2,intn){intk;for(k=0;kmain(){staticcharb[]=“Goodbye”;char*chp=&b[7];while(--chp>=&b[0])putchar(*chp);putchar(‘n’);}26.若输入:thistestterminal,以下程序的输出结果为:terminaltestthis。填空补充以下程序。#include#defineMAXLINE20voidmain{inti;第215页共215页nchar*pstr[3],str[3][MAXLINE];for(i=0;i<3;i++)pstr[i]=str[i];for(i=0;i<3;i++)scanf(“%s”,pstr[i]);sort(pstr);for(i=0;i<3;i++)printf(“%sn”,pstr[i]);}sort(char*pstr[]){inti,j;char*p;for(i=0;i<3;i++){for(j=i+1;j<3;j++){if(strcmp(*(pstr+i),*(pstr+j))>0){p=*(pstr+i);*(pstr+i)=*(pstr+j);*(pstr+j)=p;}}}}27.以下程序利用指针法将两个数按从小到大的顺序输出来。main(){inta,b,*p1,*p2,*p;第215页共215页nprintf(“inputa,b:”);scanf(“%d%d”,&a,&b);p1=&a;p2=&b;if(avoidreplace(char*s1,char*s2,char*str1,char*str2){char*t0,*t1,*t2;while(*s1!=''){for(t0=s1,t1=str1;(*t1!=‘’&&*t0==*t1);t0++,t1++);if(*t1!=‘’)*s2++=*s1++;else{for(t1=str2;*t1!=‘’;)*s2++=*t1++;s1+=t1-str2;}}*s2=‘’;}main(){staticchars1[]=“abcefababcdabab.”,s2[25];replace(s1,s2,“abc”,“XYZ”);printf(“%sn”,s2);}31.以下语句的输出结果是hELLO!。chars[80],*sp=“HELLO!”;sp=strcpy(s,sp);s[0]=‘h’;puts(s);第215页共215页n第十一章结构体与共用体一单项选择题1.以下程序的输出结果是(D)。structstudent{charname[20];charsex;intage;}stu[3]={“LiLin”,‘M’,18,“ZhangFun”,‘M’,19,“WangMin”,‘F’,20};main(){structstudent*p;p=stu;printf(“%s,%c,%dn”,p->name,p->sex,p->age);}A)WangMin,F,20     B)ZhangFun,M,19C)LiLin,F,19     D)LiLin,M,182.设有以下语句:structst{intn;structst*next;};staticstructsta[3]={5,&a[1],7,&a[2],9,‘’},*p;第215页共215页np=&a[0];则表达式(D)的值是6。A)p++->n     B)p->n++     C)(*p).n++     D)++p->n3.以下四个程序中,(C)不能对两个整型变量的值进行交换。A)#includemain(){inta=10,b=20;swap(&a,&b);printf(“%d%dn”,a,b);}swap(int*p,int*q){int*t;t=(int*)malloc(sizeof(int));*t=*p;*p=*q;*q=*t;}B)main(){inta=10,b=20;swap(&a,&b);printf(“%d%dn”,a,b);}第215页共215页nswap(int*p,int*q){intt;t=*p;*p=*q;*q=t;}C)main(){int*a,*b;*a=10;*b=20;swap(a,b);printf(“%d%dn”,*a,*b);}swap(int*p,int*q){intt;t=*p;*p=*q;*q=t;}D)main(){inta=10,b=20;int*x=&a,*y=&b;swap(x,y);printf(“%d%dn”,a,b);}swap(int*p,int*q){intt;第215页共215页nt=*p;*p=*q;*q=t;}4.下面程序的输出结果是(C)。structst{intx;int*y;}*p;intdt[4]={10,20,30,40};structstaa[4]={50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]};main(){p=aa;printf(“%d”,++p->x);printf(“%d”,(++p)->x);printf(“%dn”,++(*p->y));}A)102020    B)506021    C)516021    D)6070315.若要用下面的程序片段使指针变量p指向一个存储整型数据的动态存储单元,则应填入(D)。int*p;p=malloc(sizeof(int));A)int     B)int*     C)(*int)     D)第215页共215页n(int*)6.若已建立下面的链表结构,指针p、s分别指向图中所示的结点,则不能将s所指的结点插入到链表末尾的语句组是(C)。headdatanextEFGNULLpsA)s->next=NULL;p=p->next;p->next=s;B)p=p->next;s->next=p->next;p->next=s;C)p=p->next;s->next=p;p->next=s;D)p=(*p).next;(*s).next=(*p).next;(*p).next=s;//事实上,C选项可以把G结点插到F结点后面,但是因为G的next指向了F,//所以,链表就会因无限循环而没有“末尾”。这样,依题意就选C。7.以下程序的输出结果是(D)。#include第215页共215页nvoidfun(float*p1,float*p2,float*s){s=(float*)calloc(1,sizeof(float));*s=*p1+*(p2++);}main(){floata[2]={1.1,2.2},b[2]={10.0,20.0},*s=a;fun(a,b,s);printf(“%fn”,*s);}A)11.100000     B)12.100000     C)21.100000     D)1.1000008.字符‘0’的ASCII码的十进制数为48,且数组的第0个元素在低位,则以下程序的输出结果是(0)。#includemain(){union{inti[2];longk;charc[4];}r,*s=&r;s->i[0]=0x39;s->i[1]=0x38;第215页共215页nprintf(“%cn”,s->c[0]);}A)39     B)9     C)38     D)8//以%c的格式不会输出数字。即使以%d的形式输出,0x开头的39转换成的十进//制是57,所以也没有选项符合。若要选A,则应把%c换成%x。9.若有说明:long*p,a;则不能通过scanf语句正确给输入项读入数据的程序段是(A)。A)*p=&a;scanf(“%ld”,p);B)p=(long*)malloc(8);scanf(“%ld”,p);C)scanf(“%ld”,p=&a);D)scanf(“%ld”,&a);10.以下选项中,能定义s为合法的结构体变量的是(B)。A)typedefstructabc     B)struct{doublea;{doublea;charb[10];charb[10];}s;}s;C)structABCD)typedefABC{doublea;{doublea;charb[10];charb[10];第215页共215页n}}ABCs;ABCs;11.设有以下定义和语句,则输出结果是(指针变量占2个字节)(D)。structdate{long*cat;structdate*next;doubledog;}too;printf(“%d”,sizeof(too));A)20     B)16     C)14     D)12//不含“垫补”情况下选D12.以下程序的输出结果是(D)。#includeinta[3][3]={1,2,3,4,5,6,7,8,9},*p;main(){p=(int*)malloc(sizeof(int));f(p,a);printf(“%dn”,*p);}f(int*s,intp[][3])第215页共215页n{*s=p[1][1];}A)1     B)4     C)7     D)513.设有如下定义:structsk{inta;floatb;}data,*p;若有p=&data,则对data中的成员a的正确引用是(B)。A)(*p).data.a     B)(*p).a     C)p->data.a     D)p.data.a14.以下程序的输出结果是(B)。#includestructstu{intnum;charname[10];intage;};voidfun(structstu*p){printf(“%sn”,(*p).name);}main(){structstustudents[3]={{9801,“Zhang”,20},{9802,“Wang”,19},{9803,“Zhao”,18}};fun(students+2);第215页共215页n}A)Zhang     B)Zhao     C)Wang     D)1815.以下程序运行后,输出结果是(C)。fut(int**s,intp[2][3]){**s=p[1][1];}main(){inta[2][3]={1,3,5,7,9,11},*p;p=(int*)malloc(sizeof(int));fut(&p,a);printf(“%dn”,*p);}A)1     B)7     C)9     D)1116.下列程序的输出结果是(B)。structabc{inta,b,c;};main(){structabcs[2]={{1,2,3},{4,5,6}};intt;t=s[0].a+s[1].b;printf("%dn",t);}A)5     B)6     C)7     D)8第215页共215页ndatanext5padatanext9qb17.有以下结构体说明和变量的定义,且如下图所示指针p指向变量a,指针q指向变量b。则不能把结点b连接到结点a之后的语句是(B)。structnode{chardata;structnode*next;}a,b,*p=&a,*q=&b;A)a.next=q;     B)p.next=&b;     C)p->next=&b;     D)(*p).next=q;18.变量a所占内存字节数是(C)。unionU{charst[4];inti;longl;};structA{intc;unionUu;}a;A)4     B)5     C)6     D)8第215页共215页n//不含编译器的自动“垫补”,且int型变量占2字节的情况下,选C19.有如下定义:structperson{charname[9];intage;};structpersonclass[10]={“Johu”,17,“Paul”,19,“Mary”,18,“Adam”,16};根据上述定义,能输出字母M的语句是(D)。A)printf(“%cn”,class[3].name);     B)printf(“%cn”,class[3].name[1]);C)printf(“%cn”,class[2].name[1]);    D)printf(“%cn”,class[2].name[0]);20.以下对结构体类型变量的定义中,不正确的是(C)。A)typedefstructaaB)#defineAAstructaa{intn;AA{intn;floatm;floatm;}AA;}td1;AAtd1;C)structD)struct{intn;{intn;floatm;floatm;}aa;}td1;第215页共215页nstructaatd1;21.设有以下说明语句:structex{intx;floaty;charz;}example;则下面的叙述中不正确的是(B)。A)struct是结构体类型的关键字     B)example是结构体类型名C)x,y,z都是结构体成员名       D)structex是结构体类型名22.以下程序的输出结果是(A)。unionmyun{struct{intx,y,z;}u;intk;}a;main(){a.u.x=4;a.u.y=5;a.u.z=6;a.k=0;printf(%dn",a.u.x);}A)4     B)5     C)6     D)0第215页共215页n二填空题1.设有以下结构体类型说明和变量定义,则变量a在内存中所占的字节数是22,变量p在内存中所占的字节数是4。structstud{charnum[6];ints[4];doubleave;}a,*p;//以上答案是在不含“垫补”、指针型占4字节、int型占2字节的情况下。2.若有如下结构体说明:structSTRU{inta,b;charc;doubled:structSTRUp1,p2;};请填空,以完成对t数组的定义,t数组的每个元素为该结构体类型:structSTRUt[20];3.以下程序段用于构成一个简单的单向链表,请填空。structSTRU{intx,y;floatrate;第215页共215页nstructSTRU*p;}a,b;a.x=0;a.y=0;a.rate=0;a.p=&b;b.x=0;b.y=0;b.rate=0;b.p=NULL;4.建立并输出100个同学的通讯录,每个通讯录包括同学的姓名、地址、邮政编码。#include#defineN100structcommunication{charname[20];charaddress[80];longintpost_code;}commun[N];main(){inti;for(i=0;i<100;i++){set_record(commun+i);print_record(commun+i);}}set_record(structcommunication*p){printf(“Setacommunicationrecordn”);第215页共215页nscanf(“%s%s%ld”,p->name,p->address,&p->post_code);}print_record(structcommunication*p){printf(“Printacommunicationrecordn”);printf(“Name:%sn”,p->name);printf(“Address:%sn”,p->address);printf(“Post_code:%ldn”,p->post_code);}5.以下函数creatlist用来建立一个带头节点的单链表,新的结点总是插入在链表的末尾。链表的头指针作为函数值返回,链表最后一个节点的next成员中放入NULL,作为链表结束标志。读入时字符以#表示输入结束(#不存入链表)。请填空。structnode{chardata;structnode*next;};structnode*creatlist(){structnode*h,*s,*r;charch;h=(structnode*)malloc(sizeof(structnode));r=h;ch=getchar();第215页共215页nwhile(ch!=‘#’){s=(structnode*)malloc(sizeof(structnode));s->data=ch;r->next=s;r=s;ch=getchar();}r->next=NULL;returnh;}6.有以下定义和语句,则sizeof(a)的值是10,而sizeof(a.share)的值是4。structdate{intday;intmonth;intyear;union{intshare1;floatshare2;}share;}a;//以上答案是在不含“垫补”、int型占2字节的情况下。第215页共215页n第十三章文件一单项选择题1.若要“向文本文件尾增加数据”,在fopen函数中应使用的文件方式是(B)。A)“ab+”     B)“a”     C)“ab”     D)“a+”//上本题也可D,因为a+包含了a的所有“功能”2.在C语言中,用于实现打开文件的库函数是(B)。A)fclose()     B)fopen()     C)fseek()     D)rewind()3.若要“为读/写建立一个新的二进制文件”,在fopen函数中应使用的文件方式是(D)。A)“w+”     B)“rb+”     C)“ab+”     D)“wb+”4.若在fopen函数中使用文件的方式是“ab”,该方式的含义是(B)。A)为读/写打开一个文件     B)向二进制文件尾增加数据C)为输出打开一个文本文件     D)第215页共215页n为读/写建立一个新的二进制文件5.若在fopen函数中使用文件的方式是“r”,该方式的含义是(A)。A)为输入(读)打开一个文本文件     B)为输出(写)打开一个文本文件C)为读/写打开一个文本文件        D)为读/写建立一个新的二进制文件6.在C程序中,可把整型数以二进制形式存放到文件中的函数是(C)。A)fprintf函数    B)fread函数    C)fwrite函数    D)fputc函数7.若fp是指向某文件的指针,且已读到此文件末尾,则库函数feof(fp)的返回值是(C)。A)EOF     B)0     C)非零值     D)NULL8.下面的程序执行后,文件test.t中的内容是(A)。#includevoidfun(char*fname.,char*st){FILE*myf;inti;myf=fopen(fname,"w");for(i=0;iFILE*fp;{inti,j;if((fp=fopen(“bi.dat”,“wb”))==NULL)exit(0);for(i=0;i<10;i++){scanf(“%d”,&j);fwrite(&j,sizeof(int),1,fp);}fclose(fp);}2.以下程序的功能是:从键盘上输入一个字符串,把该字符串中的小写字母转换成大写字母,输出到文件test.txt中,然后从该文件读出字符串并显示出来。请填空。#include第215页共215页nmain(){FILE*fp;charstr[100];inti=0;if((fp=fopen(“test.txt”,"w"))==NULL){printf(“Can’topenthisfile.n”);exit(0);}printf(“Inputastring:n”);gets(str);while(str[i]){if(str[i]>=‘a’&&str[i]<=‘z’)str[i]=str[i]-32;fputc(str[i],fp);i++;}fclose(fp);fp=fopen(“test.txt”,"r");fgets(str,100,fp);printf(“%sn”,str);fclose(fp);}3.用以下程序把从键盘输入的字符存放到一个文件中,用字符#作为结束符,请按题意要求填空完善程序。#include第215页共215页nmain(){FILE*fp;charch,fname[10];printf(“Inputthenameoffile:n”);gets(fname);if((fp=fopen(fname,"w"))==NULL){printf(“can’topenfilen”);exit(0);;}while((ch=getchar())!=‘#’)fputc(ch,fp);fclose(fp);}4.下面程序用来统计文件中字符的个数,请填空。#includemain(){FILE*fp;longnum=0;if((fp=fopen(“fname.dat”,“r”))==NULL){printf(“can’topenfilen”);exit(0);}第215页共215页nwhile(feof(fp)==0){fgetc(fp);num++;}printf(“num=%dn”,num);fclose(fp);}5.以下程序中用户由键盘输入一个文件名,然后输入一串字符(用#结束输入)存放到此文件中,形成文本文件,并将字符的个数写到文件尾部。请填空。#includemain(){FILE*fp;charch,fname[32];intcount=0;printf("Inputthefilename:");scanf("%s",fname);if((fp=fopen(fname,"w+"))==NULL){printf("Can'topenfile:%sn",fname);exit(0);}printf("Enterdata:n");while((ch=getchar())!="#"){fputc(ch,fp);count++;}fprintf(fp,"n%dn",count);fclose(fp);}第215页共215页
查看更多

相关文章

您可能关注的文档