• 388.50 KB
  • 2022-04-22 11:51:30 发布

《C程序设计》练习及答案.doc

  • 90页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'选择题部分第一章C语言概述选择题1、一个C程序的执行是从______。A、本程序的main函数开始,到main函数的结束B、本程序文件的第一个函数开始,到本程序文件的最后一个函数的结束C、本程序文件的main开始,到本程序文件的最后一个函数的结束D、本程序文件的第一个函数开始,到本程序文件的main函数的结束2、以下叙述正确的是______。A、在C程序中main函数必须位于程序的最前面B、C程序的每行中只能写一条语句C、C语言本身没有输入输出语句D、在对一个C程序进行编译的过程中,可发现注释中的错误3、以下叙述不正确的是______。A、一个C源程序可由一个或多个函数组成B、一个C源程序必须包含一个main函数C、C程序的基本组成单位是函数D、在C程序中,注释说明只能位于一条语句的后面4、C语言规定,在一个源程序中,main函数的位置______。A、必须在最开始   B、必须在系统调用的库函数的后面   C、可以任意   D、必须在最后5、一个C语言程序是由______。A、一个主程序和若干子程序组成   B、函数组成   C、若干过程组成   D、若干子程序组成 (ACDCB)第三章数据类型、运算符与表达式(红色显示的部分为参考答案)1、如果x、i、j和k都是int型变量,则计算下面表达式后,x的值为______。  x=(i=4,j=16,k=32)A.4   B.16   C.32   D.522、设所有变量均为整型,则表达式(a=2,b=5,b++,a+b)的值是______。A.7   B.8   C.6   D.23、下列四组选项中,均不是C语言关键字的选项是______。A.defineIFtype   B.getccharprintf   C.includescanfcase   D.whilegopow4、下列四组选项中,均是C语言关键字的选项是______。A.autoenuminclude   B.switchtypedefcontinue    C.signedunionscanf    D.ifstructtype5、下列四组选项中,均是不合法的用户标识符的选项是______。A.AP_0do       B.floatgoto_A   C.b-agotoint    D._123tempINT6、C语言中的标识符只能由字母、数字、下划线三种字符组成,且第一个字符______。A.必须为字母   B.必须为下划线   C.必须为字母或下划线   D.可以是字母、数字、下划线中任意一种字符7、下列四组选项中,均是合法的整型常量的选项是______。A.160 -0xffff 011 B.-0xcdf 017 0xe   C.-01 986,012 0668   D.-0x48a 2e5 0x8、下列四组选项中,均是不合法的整型常量的选项是______。 A.--0f10xffff0011    B.-0xcdf01712,456   C.-0189995e2   D.-0x48eg-06803f8、下列四组选项中,均是不合法的浮点数的选项是______。A.160. 0.12 e3   B.123 2e4.2 .e5   C.-.18 123e4 0.0   D.-e3 .234 1e39、下列四组选项中,均是合法的浮点数的选项是______。A.+1e+1 5e-9.4 03e2   B.-.60 12e-4 -8e5    C.123e 1.2e-.4 +2e-1   D.-e3 .8e-4 5.e-010、下列四组选项中,均是合法的转义字符的选项是______。A.""" "\" "n"   B."" "17" """   C."18" "f" "xab"   D."\0" "101" "x1f"11、下列四组选项中,均是不合法的转义字符的选项是______。A.""" "\" "xf"    B."1011" "" "a"    C."11" "f" "}"   D."abc" "101" "x1f"12、下面正确的字符常量是______。A."c"   B."\""   C."W"     D.""13、下面四个选项中,均是不正确的8进制数或16进制数的选项是______。A.016 0x8f 018   B.oabc 017 0xa   C.010 -0x11 0x16   D.0a12 7ff -12314、下面四个选项中,均是正确的8进制数或16进制数的选项是______。A.-10 0x8f -011   B.0abc -017 0xc   C.0010 -0x11 0xf1   D.0a12-0x123 -0xa15、下面四个选项中,均为正确的数值或字符常量的选项是______。A.0.0 0f 8.9e "&"   B."a" 3.9E-2.5 1e1 """   C."3" 011 0xff00 0aD.+001 0xabcd 2e2 50.16、下面不正确的字符串常量是______。 A."abc"   B."12"12"   C."0"   D.""17、已知各变量的类型说明如下:   intk,a,b;   unsignedlongw=5;   doublex=1.42;则以下不符合C语言语法的表达式是______。A.x%(-3)   B.w+=-2   C.k=(a=2,b=3,a+b)   D.a+=a-=(b=4)*(a=3)18、已知各变量的类型说明如下:   inti=8,k,a,b;   unsignedlongw=5;   doublex=1.42,y=5.2;则以下符合C语言语法的表达式是______。A.a+=a-=(b=4)*(a=3)   B.a=a*3=2   C.x%(-3)   D.y=float(i)19、以下不正确的叙述是______。A.在C程序中,逗号运算符的优先级最低B.在C程序中,APA和apa是两个不同的变量C.如果a和b类型相同,在计算了赋值表达式a=b后b中的值将放入a中,而b中的值保持不变D.当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值20、以下正确的叙述是______。A.在C程序中,每行只能写一条语句B.若a是实型变量,C程序允许赋值a=10,因此实型变量中允许存放整型数C.在C程序中,无论是整数还是实数,都能够准确无误地表示 D.在C程序中,%是只能用于整数运算的运算符21、以下符合C语言语法的赋值表达式是______。A.d=9+e+f=d+9   B.d=9+e,f=d+9   C.d=9+e,e++,d+9   D.d=9+e++=d+722、已知字母A的ASCII编码为10进制数65,且c2为字符型,则执行语句c2="A"+"6"-"3"后,c2中的值为______。A.D       B.68       C.不确定的值       D.C23、在C语言中,要求运算数必须为整型的运算符是______。A./       B.++       C.!=       D.%24、若以下变量均是整型,且num=sum=7,则计算表达式sUM=num++,sUM++,++num后,num的值为______。A.7       B.8       C.9       D.1025、在C语言中,intcharshort三种类型数据在内存中所占用的字节数______。A.由用户自己定义   B.均为2个字节       C.是任意的       D.由所用机器的机器字长决定26、若有说明语句charc="72",则变量c______。A.包含一个字符       B.包含两个字符       C.包含3个字符       D.说明不合法,C的值不能确定27、若有定义inta=7;floatx=2.5,y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值是______。A.2.500000       B.2.750000       C.3.500000       D.0.00000028、sizeof(float)是______。A.一个双精度型表达式       B.一个整型表达式       C.一种函数调用       D.一个不合法的表达式29、设变量a是整型,f是实型,i是双精度型,则表达式10+"a"+i*f值的数据类型为______。 A.int       B.float       C.double       D.不确定30、下面四个选项中,均是非法常量的选项是______。A."as" -0fff "xa"   B."\" "1" 12,456   C.-0x18 01177 0xf   D.0xabc "" "a"31、若有代数式|x3+log10x|,则正确的C语言表达式为______。A.fabs(x*3+log(x)))   B.abs(pow(x,3)+log(x))   C.abs(pow(x,3.0)+log(x))   D.fabs(pow(x,3.0)+log(x))32、在C语言中,char型数据在内存中的存储形式为______。A.补码       B.反码       C.原码       D.ASCII码33、设变量n为float型,m为int类型,则以下能实现将n中的值保留小数点后两位,第三位进行4舍5入的表达式是______。A.n=(n*100+0.5)/100.0       B.m=n*100+0.5,n=m/100.0C.n=n*100+0.5/100.0         D.n=(n/100+0.5)*100.034、表达式18/4*sqrt(4.0)/8值的数据类型为______。A.int       B.float       C.double       D.不能确定35、设C语言中,一个int型数据在内存中占2个字节,则unsignedint型数据的取值范围为______。A.0~255       B.0~32767       C.0~65535       D.0~214748364736、设有说明:charw;intx;floaty;doublez;则表达式w*x+z-y值的数据类型为______。A.float       B.char       C.int       D.double37、若有以下定义,则能使值为3的表达式是______。intk=7,x=12; A.x%=(k%=5)       B.x%=(k-k%5)       C.x%=k-k%5       D.(x%=k)-(k%=5)38、设以下变量均为int类型,则值不等于7的表达式是______。A.(x=y=6,x+y,x+1)   B.(x=y=6,x+y,y+1)       C.(x=6,x+1,y=6,x+y)   D.(y=6,y+1,x=y,x+1)第四章最简单的C程序设计(红色显示的部分为参考答案)1、putchar函数可以向终端输出一个______A.整型变量表达式值   B.实型变量值   C.字符串       D.字符或字符型变量值2、以下程序的输出结果是______(注:□表示空格)main(){   printf("n*s1=%15s*","chinabeijing");    printf("n*s2=%-5s*","chi");}A.*s1=chinabeijing□□□*   *s2=**chi*       B.*s1=chinabeijing□□□*     *s2=chi□□*C.*s1=*□□chinabeijing*    *s2=□□chi*     D.*s1=□□□chinabeijing*     *s2=chi□□□*3、printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。如果字符串的长度大于5,则输出按方式___B____,如果字符串长度小于5,则输出按方式___C___A.从左起输出该字符串,右补空格       B.按原字符串长度从左向右全部输出C.右对齐输出该字符串,左补空格       D.输出错误信息4、已有定义inta=-2;和输出语句:printf("%8lx",a);以下正确的叙述是______ A.整型变量的输出格式符只有%d一种B.%x是格式符的一种,它可以适用于任何一种类型的数据C.%x是格式符的一种,其变量的值按16进制输出,但%8lx是错误的用法D.%8lx不是错误的格式符,其中数字8规定了输出字段的宽度5、以下程序的输出结果是______(注:□表示空格)main(){   longy=-43456;    printf("y=%-8ldn",y);    printf("y=%-08ldn",y);    printf("y=%08ldn",y);    printf("y=%+8ldn",y);}A.y=□□-43456 y=-□□43456 y=-0043456 y=-43456B.y=-43456     y=-43456    y=-0043456 y=+□-43456C.y=-43456    y=-43456     y=-0043456 y=□□-43456D.y=□□-43456 y=-0043456  y=00043456 y=+434566、以下程序的输出结果是______(注:□表示空格)main(){   inty=2456;    printf("y=%3on",y);    printf("y=%8on",y);    printf("y=%#8on",y);}A.y=□□□2456 y=□□□□□□□□2456 y=########2456 B.y=□□□4630 y=□□□□□□□□4630 y=########4630C.y=2456 y=□□□□2456 y=□□□02456D.y=4630 y=□□□□4630 y=□□□046307、以下程序的输出结果是______(注:□表示空格)main(){   long y=23456;    printf("y=%3xn",y);    printf("y=%8xn",y);    printf("y=%#8xn",y);}A.y=5ba0 y=□□□□5ba0 y=□□0x5ba0B.y=□□□5ba0 y=□□□□□□□5ba0 y=□□0x5ba0C.y=5ba0 y=5ba0 y=0x5ba0D.y=5ba0 y=□□□□5ba0 y=####5ba08、若x,y均定义为整型,z定义为double型,以下不合法的scanf函数调用语句是______A.scanf("%d%lx,%le",&x,&y,&z);B.scanf("%2d*%d%lf",&x,&y,&z);C.scanf("%x%*d%o",&x,&y,&z);D.scanf("%x%o%6.2f",&x,&y,&z);9、已有如下的定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的输入方式是______(注:□表示空格,表示回车)   inta1,a2;charc1,c2;   scanf("%d%c%d%c",&a1,&c1,&a2,&c2); A.10A□20B       B.10□A□20□B       C.10A20B       D.10A20□B10、已有定义intx;floaty;且执行scanf("%3d%f",&x,&y);语句时,从第一列开始输入数据12345□678,则x的值为______,y的值为______(注:□表示空格,表示回车)第一空:A.12345    B.123    C.45    D.345第二空:A.无确定值   B.45.000000   C.678.000000   D.123.00000011、已有如下的定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的输入方式是______(注:□表示空格,表示回车)   inta1,a2;charc1,c2;   scanf("%d%d",&a1,&a2);   scanf("%c%c",&c1,&c2);A.1020AB       B.1020 AB     C.10□□20□□AB       D.10□20AB12、已有程序段和输入数据的形式,程序中输入语句的正确形式应当为______(注:□表示空格,表示回车)main(){   inta;floatf;    printf("nInputnumber:");    输入语句    printf("nf=%f,a=%dn",f,a);}   Inputnumber:4.5□□2A.scanf("%d,%f",&a,&f);       B.scanf("%f,%d",&f,&a);       C.scanf("%d,%f",&a,&f);   D.scanf("%f%d",&f,&a);13、根据定义和数据的输入方式,输入语句的正确形式为______    已有定义:floatf1,f2;   数据的输入方式:4.52                  3.5A.scanf("%f,%f",&f1,&f2);   B.scanf("%f%f",&f1,&f2);   C.scanf("%3.2f,%2.1f",&f1,&f2);   D.scanf("%3.2f%2.1f",&f1,&f2);14、阅读以下程序,当输入的数据形式为:25,13,10时,正确的输出结果为______main(){   intx,y,z;    scanf("%d%d%d",&x,&y,&z);    printf("x+y+z=%dn",x+y+z);}A.x+y+z=48       B.x+y+z=35       C.x+z=35       D.不能确定15、根据题目中已给出的数据和输入和输出形式,程序中输入输出语句的正确内容是______main(){   intx;floaty;    printf("enterx,y:");    输入语句    输出语句}   输入形式enterx,y:2□3.4   输出形式x+y=5.40A.scanf("%d,%f",&x,&y);  printf("nx+y=%4.2f",x+y); B.scanf("%d%f",&x,&y);  printf("nx+y=%4.2f",x+y);C.scanf("%d%f",&x,&y);  printf("nx+y=%6.1f",x+y);D.scanf("%d%3.1f",&x,&y);  printf("nx+y=%4.2f",x+y);16、以下说法正确的是______A.输入项可以为一个实型常量,如scanf("%f",5.2);B.只有格式控制,没有输入项,也能进行正确输入,如scanf("a=%d,b=%d");C.当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf("%4.2f",&f);D.当输入数据时,必须指明变量的地址,如scanf("%f",&f);17、根据下面的程序及数据的输入和输出形式,程序中输入语句的正确形式应该为______main(){   charch1,ch2,ch3;    输入语句    printf("%c%c%c",ch1,ch2,ch3);}   输入形式ABC   输入形式ABA.scanf("%c%c%c",&ch1,&ch2,&ch3);           B.scanf("%c,%c,%c",&ch1,&ch2,&ch3);C.scanf("%c%c%c",&ch1,&ch2,&ch3);         D.scanf("%c%c",&ch1,&ch2,&ch3);18、有输入语句:scanf("a=%d,b=%d,c=%d",&a,&b,&c);为使用变量a、b、c的值分别为1、3、2,从键盘输入数据的正确形式应当是______(注:□表示空格,表示回车) A.132           B.1,3,2       C.a=1□b=3□c=2       D.a=1,b=3,c=219、以下能正确定义整型变量a,b,c并为其赋初值5的语句是______A.inta=b=c=5;       B.inta,b,c=5;       C.a=5,b=5,c=5;       D.a=b=c=5;20、已知ch是字符型变量,下面正确的赋值语句是______A.ch="123";       B.ch="xff";       C.ch="8";       D.ch="";21、已知ch是字符型变量,下面不正确的赋值语句是______A.ch="a+b";       B.ch="";        C.ch="7"+"9";      D.ch=5+9;22、若有定义inta,b; floatx;则正确的赋值语句是______A.a=1,b=2,       B.b++;       C.a=b=5       D.b=int(x);23、设x,y均是float型变量,则以下不合法的赋值语句是______A.++x;           B.y=(x%2)/10;     C.x*=y+8;   D.x=y=0;24、设x,y,z均为int型变量,则执行语句x=(y=(z=10)+5)-5;后,x,y,z的值是______A.101510       B.101010       C.101015      D.1051025、设有说明:doubley=0.5,z=1.5;intx=10;则能够正确使用C语言库函数的赋值语句是______A.y=log10(y)+pow(y);       B.z=sqrt(y-z);       C.x=(int)(atan2((double)x,y)+exp(y-0.2));   D.z=exp(y)+fabs(x);第七章数组 (共有选择题52道,答案见本章后面) 1、在C语言中,引用数组元素时,其数组下标的数据类型允许是________。   A、整型常量   B、整型表达式   C、整型常量或整型表达式   D、任何类型的表达式2、以下对一维整型数组a的正确说明是________。   A、inta(10);           B、intn=10,a[n];      C、intn;               D、#defineSIZE10      scanf("%d",&n);         inta[SIZE];      inta[n];3、若有说明:inta[10];则对数组元素的正确引用是________。   A、a[10]   B、a[3,5]   C、a(5)   D、a[10-10]4、在C语言中,一维数组的定义方式为:类型说明符数组名________。   A、[常量表达式]   B、[整型表达式]   C、[整型常量或整型表达式]   D、[整型常量]5、以下能对一维数组a进行正确初始化的语句是________。   A、inta[10]=(0,0,0,0,0);   B、inta[10]={};   C、inta[]={0};             D、inta[10]={10*1};6、以下对二维数组a的正确说明是________。   A、inta[3][];             B、floata(3,4);   C、doublea[1][4];         D、floata(3)(4);7、若有说明:inta[3][4];则对a数组元素的正确引用是________。   A、a[2][4]   B、a[1,3]   C、a[1+1][0]   D、a(2)(1)8、若有说明:inta[3][4];则对a数组元素的非法引用是________。   A、a[0][2*1]   B、a[1][3]   C、a[4-2][0]   D、a[0][4]9、以下能对二维数组a进行正确初始化的语句是________。    A、inta[2][]={{1,0,1},{5,2,3}};   B、inta[][3]={{1,2,3},{4,5,6}};   C、inta[2][4]={{1,2,3},{4,5},{6}};   D、inta[][3]={{1,0,1},{},{1,1}};10、以下不能对二维数组a进行正确初始化的语句是________。   A、inta[2][3]={0};   B、inta[][3]={{1,2},{0}};   C、inta[2][3]={{1,2},{3,4},{5,6}};   D、inta[][3]={1,2,3,4,5,6};11、若有说明:inta[3][4]={0};则下面正确的叙述是________。   A、只有数组元素a[0][0]可得到初值0   B、此说明语句不正确   C、数组a中各元素都可得到初值,但其值不一定为0   D、数组a中每个元素均可得到初值012、若有说明:inta[][4]={0,0};则下面不正确的叙述是________。   A、数组a中的每个元素都可得到初值0   B、二维数组a的第1维大小为1   C、因为二维数组a中第二维大小的值除以初值个数的商为1,故数组a的行数为1   D、只有数组元素a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值013、若有说明:inta[3][4];则数组a中各元素________。   A、可在程序的运行阶段得到初值0   B、可在程序的编译阶段得到初值0    C、不能得到确定的初值   D、可在程序的编译或运行阶段得到初值014、以下各组选项中,均能正确定义二维实型数组a的选项是________。   A、floata[3][4];                   B、floata(3,4);      floata[][4];                       floata[3][4];      floata[3][]={{1},{0}};             floata[][]={{0},{0}};    C、floata[3][4];                   D、floata(3,4);      staticfloata[][4];                floata[3][];      autofloata[4][]={{0},{0},{0}};    floata[][4]; 15、下面程序________(每行程序前的数字为行号)   1 main{}   2 {   3    inta[3]={3*0};   4    inti;   5    for(i=0;i<3;i++)scanf(%d",&a[i]);   6    for(i=1;i<3;i++)a[0]=a[0]+a[i];   7    printf("%dn",a[0]);   8  }   A、第3行有错误       B、第7行有错误   C、第5行有错误       D、没有错误16、下面程序________(每行程序前的数字为行号)   1 main{}   2 {   3    floata[10]={0.0};   4    inti;   5    for(i=0;i<3;i++)scanf(%d",&a[i]);   6    for(i=1;i<10;i++)a[0]=a[0]+a[i];   7    printf("%fn",a[0]);   8  }    A、没有错误          B、第3行有错误   C、第5行有错误       D、第7行有错误17、下面程序中错误的行是________(每行程序前的数字为行号)   1 main{}   2 {   3    floata[3]={1};   4    inti;   5    scanf(%d",&a);   6    for(i=1;i<10;i++)a[0]=a[0]+a[i];   7    printf("a[0]=%dn",a[0]);   8  }   A、3          B、6   C、7          D、518、下面程序________(每行程序前的数字为行号)   1 main{}   2 {   3    inta[3]={0};   4    inti;   5    for(i=0;i<3;i++)scanf(%d",&a[i]);   6    for(i=1;i<4;i++)a[0]=a[0]+a[i];   7    printf("%dn",a[0]);   8  }   A、没有错误          B、第3行有错误   C、第5行有错误       D、第6行有错误19、若二维数组a有m列,则计算任一元素a[i][j]在数组中位置的公式为________。(假设a[0][0]位于数组的第1个位置上)   A、i*m+j       B、j*m+i       C、i*m+j-1       D、i*m+j+120、对以下说明语句的正确理解是________。   inta[10]={6,7,8,9,10};   A、将5个初值依次赋给a[1]至a[5]   B、将5个初值依次赋给a[0]至a[4]    C、将5个初值依次赋给a[6]至a[10]   D、因为数组与初值的个数不相同,所以此语句不正确21、以下不正确的定义语句是________。   A、doublex[5]={2.0,4,0,6,0,8,0,10.0};   B、inty[5]={0,1,3,5,7,9};   C、charc1[]={"1","2","3","4","5"};   D、charc2[]={"x10","xa","x8"};22、若有说明:inta[][3]={1,2,3,4,5,6,7};则数组a第一维的大小是________。   A、2   B、3   C、4   D、无确定值23、若二维数组a有m列,则在a[i][j]前的元素个数为________。   A、j*m+i   B、i*m+j   C、i*m+j-1   D、i*m+j+124、定义如下变量和数组:   intk;   inta[3][3]={1,2,3,4,5,6,7,8,9};   则下面语句的输出结果是________。   for(k=0;k<3;k++)printf("%d",a[k][2-k]);   A、357   B、369   C、159   D、14725、若有以下程序段:   ……   inta[]={4,0,2,3,1},i,j,t;   for(i=1;i<5;i++)   {t=a[i];j=i-1;     while(j>=0&&t>a[j])     {a[j+1]=a[j];j--;}     a[j+1]=t;}   ……   则该程序段的功能是________。   A、对数组a进行插入排序(升序)   B、对数组a进行插入排序(降序)    A、对数组a进行选择排序(升序)   B、对数组a进行选择排序(降序)26、以下正确的定义语句是________。   A、inta[1][4]={1,2,3,4,5};   B、floatx[3][]={{1},{2},{3}};   C、longb[2][3]={{1},{1,2},{1,2,3}};   D、doubley[][3]={0};27、下面程序的运行结果是________。   main()   {inta[6][6],i,j;     for(i=1;i<6;i++)     for(j=1;j<6;j++)       a[i][j]=(i/j)*(j/i);     for(i=1;i<6;i++)     {for(j=1;j<6;j++)          printf("%2d",a[i][j]);          printf("n");}   }   A、11111   B、00001   C、10000   D、10001      11111      00010      01000      01010      11111      00100      00100      00100      11111      01000      00010      01010      11111      10000      00001      1000128、下面程序的运行结果是________。   main()   {inta[6],i;     for(i=1;i<6;i++)     {a[i]=9*(i-2+4*(i>3))%5;        printf("%2d",a[i]);     }   }   A、-40404   B、-40403   C、-40443   D、-4044029、下面是对s的初始化,其中不正确的是________。   A、chars[5]={"abc"};       B、chars[5]={"a","b","c"};   C、chars[5]="";            D、chars[5]="abcdef";30、下面程序的运行结果是________。   charc[5]={"a","b","","c",""};   printf("%s",c);   A、"a""b"   B、ab   C、abc   D、abc31、对两个数组a和b进行如下初始化   chara[]="ABCDEF";   charb[]={"A","B","C","D","E","F"};   则以下叙述正确的是________。   A、a与b数组完全相同       B、a与b长度相同   C、a和b中都存放字符串     D、a数组比b数组长32、有两个字符数组a、b,则以下正确的输入语句是________。   A、gets(a,b);             B、scanf("%s%s",a,b);   C、scanf("%s%s",&a,&b);   D、gets("a");gets("b");33、有字符数组a[80]和b[80],则正确的输出语句是________。   A、puts(a.b);             B、printf("%s,%s",a[],b[]);   C、pitchar(a,b);          D、puts(a);puts(b);34、下面程序的运行结果是________。   chara[7]="abcdef";   char b[4]="ABC";   strcpy(a,b);   printf("%c",a[5]);   A、       B、       C、e       D、f    (注:选择项A表示输出为空格)35、有下面的程序段   chara[3],b[]="China";   a=b;   printf("%s",a);   则________。   A、运行后将输出China   B、运行后将输出Ch   C、运行后将输出Chi     D、编译时出错36、下面程序的运行结果是________。   charc[]="tv\willn";   printf("%d",strlen(c));   A、14   B、3   C、9   D、字符串中有非法字符,输出值不能确定37、判断字符串a和b是否相等,应当使用________。   A、if(a==b)   B、if(a=b)   C、if(strcpy(a,b))   D、if(strcmp(a,b))38、判断字符串s1是否大于字符串s2,应当使用________。   A、if(s1>s2)               B、if(strcmp(s1,s2))      C、if(strcmp(s2,s1)>0)     D、if(strcmp(s1,s2>0))39、下面程序段是输出两个字符串对应相等的字符,请选择填空   charx[]="programming";   chary[]="fortran";   inti=0;   while(x[i]!=""&&y[i]!="")       if(x[i]==y[i])printf("%c",【 】);       elsei++;    A、x[i++]       B、y[++i]       C、x[i]       D、y[i]40、下面描述正确的是________。   A、两个字符串所包含的字符个数相同时,才能比较字符串   B、字符个数多的字符串比字符个数少的字符串大   C、字符串"STOP"与"STOP"相等   D、字符串"That"小于字符串"The"41、下列对C语言字符数组的描述中错误的是________。   A、字符数组可以存放字符串   B、字符数组的字符串可以整体输入、输出   C、可以在赋值语句中通过赋值运算符"="对字符数组整体赋值   D、不可以用关系运算符对字符数组中的字符串进行比较42、有已排好序的字符串a,下面的程序是将字符串s中的每个字符按升序的规律插入到a中,请选择填空:   #include"stdio.h"   main()   {  chara[20]="cehiknqtw";       chars[]="fbla";       inti,j,k;       for(k=0;s[k]!="";k++)       {  j=0;           while(s[k]>=a[j]&&a[j]!="")j++;           for(【1】)【2】;             a[j]=s[k];       }       puts(a);   }【1】A、i=strlen(i)+k;i>=j;i--       B、i=strlen(a);i>=j;i--    C、i=j;i<=strlen(a)+k;i++       D、i=j;i<=strlen(a);i++【2】A、a[i]=a[i+1]                  B、a[i+1]=a[i]     C、a[i]=a[i-1]                  D、a[i-1]=a[i]43、下面程序的功能是将已按升序排好序的两个字符串a和b中的字符按升序归并到字符串c中,请选择填空:   #include"stdio.h"   main()   {  chara[]="acegikm";       charb[]="bdfhjlnpq";       charc[80],*p;       inti=0,j=0,k=0;       while(a[i]!=""&&b[j]!="")       {  if(a[i]="0"&&ch[i]<="9";i+=2)           s=10*s+ch[i]-"0";       printf("%dn",s);   }   A、1       B、1256       C、12ab56       D、1 2 5 647、当运行以下程序时,从键盘输入:aabb                                  ccdd   (表示回车键),则下面程序的运行结果是________。   #include"stdio.h"   main()   {  chara1[5],a2[5],a3[5],a4[5];       scanf("%s%s",a1,a2);       gets(a3);gets(a4);       puts(a1);puts(a2);       puts(a3);puts(a4);   }   A、aa           B、aa       C、aa           D、aabb      bb              bb          bb              cc                       cc          ccdd           dd       ccdd           dd          ee48、当运行以下程序时,从键盘输入:ab                                 c                                 def   表示回车,则下面程序的运行结果是________。    #include"stdio.h"   #defineN6   main()   {  charc[N];       inti=0;       for(;i   表示回车,则下面程序的运行结果是________。    #include"stdio.h"   main()   {  chars[80],c="a";       inti=0;       scanf("%s",s);       while(s[i]!="")       {  if(s[i]==c)s[i]=s[i]-32;           elseif(s[i]==c-32)s[i]=s[i]+32;           i++;       }       puts(a);   }   A、ahAMa       B、AhAMa       C、AhAMaahA       D、ahAMaahA50、下面程序的运行结果是________。    #include"stdio.h"    #include"string.h"   main()   {  chara[80]="AB",b[80]="LMNP";       inti=0;       strcat(a,b);       while(a[i++]!="")b[i]=a[i];       puts(b);   }   A、LB       B、ABLMNP         C、AB       D、LBLMNP51、下面程序的运行结果是________。    #include"stdio.h"   main()   {  charstr[]="SSSWLIA",c;       intk;       for(k=2;(c=str[k])!="";k++)       {   switch(c)           {  case"I":++k;break;               case"L":continue;               default:putchar(c);continue;           }       putchar("*");       }   }   A、SSW*       B、SW*       C、SW*A       D、SW52、下面程序的运行结果是________。    #include"stdio.h"   main()   {  chara[]="morning",t;       inti,j=0;       for(i=1;i<7;i++)if(a[j]b)*pmin=b;if(*pmin>c)*pmin=c;return;}intmain(void){inta,b,c,max,min;printf("inputa,b,c=?");scanf("%d,%d,%d",&a,&b,&c);f(a,b,c,&max,&min);printf("max=%dmin=%d",max,min); getch();return0;}评析:此题与上题类似,关键在于使用指向整型变量的指针作为函数的参数,这样即可以在一个函数中同时解决多个问题。注意:当使用指针作为函数的参数时,在函数中应使用间接引用符*才能改变指针所指向的变量的值。注意实参与形参的对应关系。      填空题部分第一章C语言概述填空题1、C源程序的基本单位是______(函数)2、一个C源程序至少应包括一个______(main函数)3、在一个C源程序中,注释部分两侧的分界符分别为______和______(/*和*/)4、在C语言中,输入操作是由库函数______完成的,输出操作是由库函数______完成的(scanfprintf)第三章数据类型、运算符与表达式 (红色显示的部分为参考答案)1、在C语言中(以16位PC机为例),一个char型数据在内存中所占的字节数为______;一个int型数据在内存中所占的字节数为______(12) 2、在C语言中(以16位PC机为例),一个float型数据在内存中所占的字节数为______;一个double型数据在内存中所占的字节数为______(48)3、若有以下定义,则计算表达式y+=y-=m*=y后的y值是______(-16)  intm=5,y=2;4、设C语言中,一个int型数据在内存中占2个字节,则int型数据的取值范围为______(-32768---+32767)5、在C语言中的实型变量分为两种类型,它们是______和______(floatdouble)6、C语言所提供的基本数据类型包括:单精度型、双精度型、______、______、______(整型字符型枚举)7、若s是int型变量,则下面表达式的值为______(1)  s%2+(s+1)%28、若x和a均是int型变量,则计算表达式(1)后x的值为______(12),计算表达式(2)后x的值为______(4)  (1)x=(a=4,6*2)  (2)x=a=4,6*29、若a、b和c均是int型变量,则计算表达式后,a的值为______,b的值为______,c的值为______(642)  a=(b=4)+(c=2)10、若a是int型变量,且a的初值为6,则计算表达式后,a的值为______(-60)  a+=a-=a*a11、若a是int型变量,则计算表达式后,a的值为______(2)  a=25/3%312、若x和n均是int型变量,且x和n的初值均为5,则计算表达式后x的值为______,n的值为______(106)  x+=n++13、若有定义:intb=7;floata=2.5,c=4.7;则下面表达式的值为______(5.500000)   a+(int)(b/3*(int)(a+c)/2)%414、若有定义:inta=2,b=3;floatx=3.5,y=2.5;则下面表达式的值为______(3.500000)  (float)(a+b)/2+(int)x%(int)y15、若有定义:charc="10";则变量f中包含的字符个数为______(1)16、若有定义:intx=3,y=2;floata=2.5,b=3.5;则下面表达式的值为______(1)  (x+y)%2+(int)a/(int)b17、若x和n均是int型变量,且x和n的初值分别为12和5,则计算表达式后x的值为______(0)  x%=(n%=2)18、设所有变量均为整型,则表达式(a=2,b=5,a++,b++,a+b)的值为______(9)19、c语言中的标识符只能由三种字符组成,它们是______、______、______(字母数字下划线)20、已知字母a的ASCII码为10进制数97,且设ch为字符型变量,则表达式ch="a"+"8"-"3"的值为______(102或"f")21、若x和y都是double型变量,且x的初值为3.0,y的初值为2.0,则表达式pow(y,fabs(x))的值为______(8.000000)22、若有定义:inte=1,f=4,g=2;floatm=10.5,n=4.0,k;则表达式k=(e+f)/g+sqrt((double)n)*1.2/g+m的值为______(13.700000)23、表达式8/4*(int)2.5/(int)(1.25*(3.7+2.3))的值的数据类型为______(int)24、表达式pow(2.8,sqrt((double)x))的值的数据类型为______(double)25、设m是一个3位数,从左到右用a、b、c表示各位的数字,则从左到右各个数字是bac的三位数的表达式是______(b*100+a*10+c)  第四章最简单的C程序设计(红色显示的部分为答案) 1、以下程序的输出结果为______main(){  shorti=-4;   printf("ni:dec=%d,oct=%o,hex=%x,unsigned=%un",i,i,i,i);}i:dec=-4,oct=177774,hex=fffc,unsigned=655322、以下程序的输出结果为______main(){  printf("*%f,%4.3f*n",3.14,3.1415);}*3.140000,3.142*3、以下程序的输出结果为______main(){  charc="x";   printf("c:dec=%d,oct=%o,hex=%x,ASCII=%c",c,c,c,c);}c:dec=120,oct=170,hex=78,ASCII=x4、已有定义intd=-2,执行以下语句后的输出结果是______   printf("*d(1)=%d*d(2)=%3d*d(3)=%-3d*n",d,d,d);  *d(1)=-2*d(2)=-2*d(3)=-2*   printf("*d(4)=%o*d(5)=%7o*d(6)=%-7o*n",d,d,d); *d(4)=177776*d(5)=177776*d(6)=177776*5、已有定义intd=-2,执行以下语句后的输出结果是______   printf("*d(1)=%d*d(2)=%3d*d(3)=%-3d*n",d,d,d); *d(1)=-2*d(2)=-2*d(3)=-2*    printf("*d(4)=%x*d(5)=%6x*d(6)=%-6x*n",d,d,d); *d(4)=fffe*d(5)=fffe*d(6)=fffe*6、已有定义floatd1=3.5,d2=-3,5,执行以下语句后的输出结果是______ printf("*d(1)=%e*d(2)=%.4e*d(3)=%10.4e*n",d1,d1,d1);  *d(1)=3.50000e+00*d(2)=3.500e+00*d(3)=3.500e+00* printf("*d(4)=%e*d(5)=%.6e*d(6)=%12.5e*n",d2,d2,d2); *d(4)=-3.50000e+00*d(5)=-3.50000e+00*d(6)=-3.5000e+00*7、以下程序的输出结果为______main(){  intx=1,y=2;   printf("x=%dy=%d*sum*=%dn",x,y,x+y);   printf("10Squaredis:%dn",10*10);}x=1y=2*sum*=310Squaredis:1008、以下程序的输出结果为______#includemain(){  intx=10;floatpi=3.1416;   printf("(1)%dn",x);   printf("(2)%6dn",x);   printf("(3)%fn",56.1);   printf("(4)%14fn",pi);   printf("(5)%en",568.1);   printf("(6)%14en",pi);    printf("(7)%gn",pi);   printf("(8)%12gn",pi);}(1)10(2)10(3)56.100000(4)3.141600(5)5.68100e+02(6)3.14160e+00(7)3.1416(8)3.1416 9、以下程序的输出结果为______#includemain(){  floata=123.456;doubleb=8765.4567;   printf("(1)%fn",a);   printf("(2)%14.3fn",a);   printf("(3)%6.4fn",a);   printf("(4)%lfn",b);   printf("(5)%14.3lfn",b);   printf("(6)%8.4lfn",b);   printf("(7)%gn",b);   printf("(8)%.4fn",b);}(1)123.456001(2)123.456(3)123.4560(4) 8765.456700(5)8765.457(6)8765.4567(7)8765.46(8)8765.4567 10、以下printf语句中"*"号的作用是______,输出结果是______main(){  inti=1;   printf("##%*dn",i,i);   i++;   printf("##%*dn",i,i);   i++;   printf("##%*dn",i,i);}##1##2##311、以下printf语句中"-"号的作用是______,输出结果是______main(){  intx=12;doublea=3.1415926;   printf("%6d##n",x);   printf("%-6d##n",x);     printf("%14.10lf##n",a);      printf("%-14.10lf##n",a);} 12##12 ##3.1415926000##3.1415926000##12、以下程序的输出结果为______#includemain(){  inta=325;doublex=3.1415926;   printf("a=%+06d x=%+en",a,x);}a=+00325x=+3.14159e+0013、以下程序的输出结果为______#includemain(){  inta=252;   printf("a=%o a=%#on",a,a);   printf("a=%x a=%#xn",a,a);}a=374a=0374a=fca=0xfc 14、以下程序段的输出结果为______   intx=7281;   printf("(1)x=%3d,x=%6d,x=%6o,x=%6x,x=%6un",x,x,x,x,x);   printf("(2)x=%-3d,x=%-6d,x=$%-06d,x=$%06d,x=%%06dn",x,x,x,x,x);   printf("(3)x=%+3d,x=%+6d,x=%+08dn",x,x,x);    printf("(4)x=%o,x=%#on",x,x);   printf("(5)x=%x,x=%#xn",x,x);(1)x=7281,x=7281,x=16161,x=1c71,x=7281(2)x=7281,x=7281,x=$7281,x=$007281,x=%06d(3)x=+7281,x=+7281,x=+0007281(4)x=16161,x=016161(5)x=1c71,x=0x1c7115、假设就是a,b均为整型,以下语句可以不借助于任何变量把a,b中的值进行交换,请填空。(参见第19题)   a+=_______;b=a-_______;a-=_______16、假设变量a,b,c均为整型,以下语句借助于中间变量t把a,b和c中的值进行交换,即:把b中的值赋给a,把a中的值赋给c。例如交换前a=10,b=20,c=30,交换后a=20,b=30,c=10。请填空。   ____t=a_______;a=b;b=c;___c=t________17、设x,y,z都是整型变量,m为长整型变量,则在16位计算机上执行下面的赋值语句后,y=_32766______,z=___-1______,m=___-1_______   y=(x=32767,x-1);   z=m=0xFFFF;18、若x为int型变量,则执行以下语句后,x=___-14_____.   x=7;   x+=x-=x+x;19、若a,b均为整型变量,则以下语句的功能是___交换a,b的值____   a+=b;b=a-b;a-=b;20、在scanf函数调用语句中,可以在格式字符和%号之间加一星号“*”,它的作用是______;当输入以下数据:10□□20□□30□□40,下面语句的执行结果是______   inta1,a2,a3;   scanf("%d%*d%d%d",&a1,&a2,&a3); 21、有一输入函数scanf("%d",k);则不能使float类型变量k得到正确值的原因是__格式描述符错误,float应使用%f____和__在scanf中变量应使用其地址,即&k____22、已有定义inta;floatb,x;charc1,c2;为了使a=3,b=6.5,x=12.6,c1="a",c2="A",正确的scanf函数调用语句是______,输入数据的方式为_______(无唯一答案)23、若有以下定义和语句,为了使变量c1得到字符"A",变量c2得到字符‘B’,正确的输入形式为______A□□□B□□□   charc1,c2;   scanf("%4c%4c",&c1,&c2);24、已有定义inti,j;floatx;为将-10赋给i,12赋给j,410.34赋给x,则对应以下scanf函数调用的数据输入形式是______-120xc4.1034E2   scanf("%o%x%e",&i,&j,&x);25、执行以下程序时,若从第一列开始输入数据,为使变量a=3,b=7,x=8.5,y=71.82,c1="A",c2="a",正确的数据输入形式是______a=3b=7x=8.5y=71.82c1=Ac2=a   main()   {       inta,b;floatx,y;charc1,c2;       scanf("a=%db=%d",&a,&b);       scanf("x=%fy=%f",&x,&y);       scanf("c1=%cc2=%c",&c1,&c2);       printf("a=%db=%dx=%fy=%fc1=%cc2=%c",a,b,x,y,c1,c2);   } 第五章选择结构程序设计填空题1.当a=3,b=2,c=1时,表达式f=a>b>c的值是______02.当a=5,b=2,c=2时,表达式a>b!=c的值是______13.以下程序的运行结果是______   main()   {  intx=1,y,z;       x*=3+2;       printf("%dt",x);       x*=y=z=5;       printf("%dt",x);       x=y==z;       printf("%dn",x);}5   25   14.在C语言中,表示逻辑“真”值使用整型值______15.设y为int型变量,请写出描述“y是奇数”的表达式_____y%2==16.C语言中的三种逻辑运算符号是______,______,______!&&||7.设x,y,z均是int型变量,请写出描述“x或y中有一个小于z”的表达式______x=0)||(x<0&&y>=0&&z<0)||(x>=0&&y<0&&z<0)9.已知a=7.5,b=2,c=3.6,表达式a>b&&c>a||ab的值是______010.若a=6,b=4,c=2,则表达式!(a-b)+c-1&&b+c/2的值是______111.若a=2,b=4,则表达式!(x=a)||(y=b)&&0的值是______有编译错误 12.若a=1,b=4,c=3,则表达式!(a2&&x<3)||x<-1017.当m=2,n=1,a=1,b=2,c=3时,执行完d=(m=a!=b)&&(n=b>c)后,n的值为______,m的值为______0  118.以下程序的运行结果是______   main()   {  intx,y,z;       x=1;y=2;z=3;       x=y--<=x||x+y!=z;       printf("%d,%d",x,y);   }1,1   第六章循环控制填空题(红色显示的部分为参考答案)1.下面程序段是从键盘输入的字符中统计数字字符的个数,用换行符"n"结束循环,请填空.   intn-0,c;   c=getchar();   while(【1】)   {  if(【2】)n++;       c=getchar();   } 【1】:c!="n"  【2】:c>="0"&&c<="9"2.有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完?请填空.   #inlcude"stdio.h"   main()   {intday,x1,x2;   day=0;x1=1020;   while(【1】){x2=【2】;x1=x2;day++;}   printf("day=%dn",day);   }1:x1>02:x2=x1/2-23.下面的程序是用辗转相除法求两个正整数的最大公约数,请填空.#include"stdio.h"   main()   {intr,m,n;   scanf("%d,%d",&m,&n);   if(m(注:表示回车),则下面程序的运行结果是______.sjhku   #include"stdio,h"   main()   {charc;   while((c=getchar())!="?")putchar(++c);   }5.下面程序的运行结果是______ s=254   #include"stdio.h"    main()   {inta,s,n,count;   a=2;s=0;n=1;count=1;   while(count<=7){n=n*a;s=s+n;++count;}   printf("s=%d",s);   }6.当运行以下程序时,从键盘输入China#(注:表示回车),则下面程序的运行结果是______.5,5   #include"stdio.h"   main()   {intv1=0,v2=0;charch;   while((ch=getchar())!="#")       switch(ch)       {case"a":        case"h":        default:v1++;        case"o":v2++;       }   printf("%d,%d",v1,v2);   }7.执行下面的程序段后,k的值是______.36   k=1;n=263;   do{k*=n%10;n/=10;}while(n);8.下面程序段中循环的执行次数是______.3   a=10;b=0;   do{b+=2;a-=2+b;}while(a>=0);9.下面程序段的运行结果是______.**   x=2;   do{printf("*");x--;}while(!x==0);10.下面程序段的运行结果是______.a=-5   i=1;s=1;a=0;   do{a=a+s*i;s=-s;i++;}while(i<=10);   printf("a=%d",a);11.下面程序的功能是:使用do-while语句求1至1000之间满足"用3除余2,用5除余3,用7除余2"的数,且一行只显示5个结果,请填空.    #include"stdio.h"   main()   {       inti=1,j=0;       do{if(【1】)           {   printf("%4d",i);                j=j+1;                if(【2】)printf("n");           }           i=i+1;          }while(i<1000);   } 【1】:i%3==2&&i%5==3&&i%7==2【2】:j%5==012.下面程序的功能是统计正整数的各位数字中零的个数,并求各位数字中的最大者,请填空.#include"stdio.h"   main()   {       intn,count,max,t;       count=max=0;       scanf("%d",&n);       do       {           t=【1】;           if(t==0)++count;           elseif(max(注表示回车),则下面程序的运行结果是______.#include"stdio.h"   main()   {       intk=0,n;       do{scanf("%d",&n);k+=n;}while(n!=-1);       printf("k=%d,n=%d",k,n);   }k=14,n=-116.下面程序的运行结果是______.#include"stdio.h"   main()   {       inti,x,y;       i=x=y=0;       do{           ++i;           if(i%2!=0){x=x+i;i++;}           y=y+i++;           }while(i<=7);       printf("x=%d,y=%d",x,y);   }x=1,y=2017.下面程序的运行结果是______.#include"stdio.h"   main()   {       inta,b,i;       a=1;b=3;i=1;       do{               printf("%d,%d,",a,b);               a=(b-a)*2+b;               b=(a-b)*2+a;               if(i++%2==0)printf("n");           }while(b<100);    }1,3,7,15,31,6518.当运行以下程序时,从键盘输入-10(注表示回车),则下面程序的运行结果是______.#include"stdio.h"   main()   {       inta,b,m,n;       m=n=1;       scanf("%d%d",&a,&b);       do{           if(a>0){m=2*n;b++;}                     else{n=m+n;a+=2;b++;}           }while(a==b);       printf("m=%d,n=%d",m,n);   }m=4,n=219.下面的程序段功能是找出整数x的所有因子,请填空. scanf("%d",&x);   i=1;   for(;【1】;)       {           if(x%i==0)printf("%3d",i);i++;}【1】:x>=2*i20.鸡兔共有30只,脚共有90,下面程序段功能是计算鸡兔各有多少只,请填空.for(x=1;x<=29;i++)   {       y=30-x;       if(【1】)printf("%d,%d",x,y);   }【1】:2*x+4*y==9021.下面程序段的运行结果是______.for(a=1,i=-1;-1<=i<1;i++)   {       a++;printf("%2d",a);}   printf("%2d",i);-122.如果for循环使用以下形式表示:       for(表达式1;表达式2;表达3)循环体语句   则执行语句for(i=0;i<3;i++)printf("*");时,表达式1执行【1】次,表达式3执行【2】次.【1】:1【2】:323.下面程序的功能是计算1-3+5-7+...-99+101的值,请填空.#include"stdio.h"   main()   {       inti,t=1,s=0;       for(i=1;i<=101;i++)       {           【1】;s=s+t;【2】;}       printf("%d",s);   } 【1】:i=i+1【2】:t=-t24.下面程序的运行结果是______.#include"stdio.h"   main()   {       inti,t,sum=0;       for(t=i=1;i<=10;)       {           sum+=t;++i;           if(i%3==0)t=-i;           elset=i;       }       printf("sum=%d",sum);   }sum=1925.下面程序的运行结果是______.   #include"stdio.h"   main()   {       inti;       for(i=1;i<=5;i++)           switch(i%2)           {               case0:i++;printf("#");break;               case1:i+=2;printf("*");               default:printf("n");           }       }26.下面程序的运行结果是______.   #include"stdio.h"   main()   {       inti,j=4;       for(i=j;i<=2*j;i++)           switch(i/j)           {               case 0:               case1:printf("*");break;               case2:printf("#");           }       }*#27.下面程序的功能是求出用数字0至9可以组成多少个没有重复数字的三位偶数,请填空.#include"stdio.h"   main()   {       inti,j,k,n;       n=0;       for(i=1;i<=9;i++)       for(k=0;k<=8;【1】;)           if(k!=i)               for(j=0;j<=9;j++)                   if(【2】)n++;       printf("n=%d",n);   }【1】:k++【2】:j!=k&&j!=i28.下面程序的功能是输出1-100之间每位数的乘积大于等于每位数的和的数,请填空.   #include"stdio.h"   main()   {       intn,k=1,s=0,m;       for(n=1;n<=100;n++)       {           k=1;s=0;           【1】;m=n;           while(【2】)           {               k*=m%10;               s+=m%10;               【3】;            }           if(k>s)printf("%d",n);       }   }29.下面程序的功能是求1000以内的所有完全数,请填空.   #include"stdio.h"   main()   {       inta,i,m;       for(a=1;a<=100;a++)       {           for(【1】;i<=a/2;i++)if(!(a%i))【2】;           if(m==a)printf("%4d",a);       }   }30.下面程序的功能是完成用一元人民币换成一分两分五分的所有兑换方案,请填空.   #include"stdio.h"   main()   {       inti,j,k,l=1;       for(i=0;i<=20;i++)       for(j=0;j<=50;j++)       {           k=【1】;           if(【2】){               printf("%2d%2d%2d",i,j,k);               l=l+1;               if(i%5==0)printf("n");               }       }   } 第七章数组 1、在C语言中,二维数组的定义方式为:类型说明符数组名[【1】][【2】]。 2、在C语言中,二维数组的元素在内存中的存放形式是【  】。3、若有定义:doublex[3][5];则x数组中行下标的下限为【1】,列下标的上限为【 2】。4、若二维数组a有m列,则计算任一元素a[[i][j]在数组中位置的公式为:【  】。5、若有定义:inta[3][4]={{1,2},{0},{4,6,8,10}};则初始化后,a[1][2]得到的初值是【1】,a[2][1]得到的初值是【2】。6、若有以下输入(表示回车符,各数据之间有一空格符): 7105467983246122-1  则下面程序的运行结果是【   】。   main()   {  intb[51],x,i,j=0,n=0;       scanf("%d",&x);       while(x>-1){b[++n]=x;scanf("%d",&x);}       for(i=1;i<=n;i++)           if(b[i]%2==0)b[++j]=b[i];       for(i=1;i<=j;i++)printf("%3d",b[i]);       printf("n");   }7、下面程序以每行4个元素的形式输出a数组,请填空:#defineN20   main()   {  inta[N],i;       for(i=0;i代表回车换行符),则下面程序的运行结果是【   】。   1423341233222331114111-1#define  M50   main()   {  inta[M],c[5],i,n=0,x;       printf("Enter0or1or2or3or4,toendwith-1n");       scanf("%d",&x);       while(x!=-1)       {   if(x>=0&&x<=4)            {   a[n]=x;n++;}            scanf("%d",&x);       }       for(i=0;i<5;i++)c[i]=0;       for(i=0;imax){max=a[i];【2】;}       【3】;       printf("nThepositionofminis:%3dn",k);       printf("nThepositionofmaxis:%3dn",j);       for(i=0;i<5;i++)           printf("%5d",a[i]);   }20、下面程序的运行结果是【   】。main()   {  inti,f[10];       f[0]=f[1]=1;       for(i=2;i<10;i++)           f[i]=f[i-2]+f[i-1];       for(i=0;i<10;i++)       {  if(i%5==0)printf("n");           printf("%3d",f[i]);}   }11235813213455 21、下面程序的运行结果是【   】。   main()   {  inta[10]={1,2,2,3,4,3,4,5,1,5};       intn=0,i,j,c,k;       for(i=0;i<10-n;i++)       {  c=a[i];           for(j=i+1;j<10-n;j++)               if(a[j]==c)               {  for(k=j;k<10-n;k++)a[k]=a[k+1];                   n++;}}       for(i=0;i<10-n;i++)printf("%d",a[i]);       printf("n");}1234522、下面程序的功能是给一维数组a输入任意6个整数,假设为:   748915   然后建立一个具有以下内容的二维数组并打印。请填空。       574891       157489       915748       891574       489157       748915main()   {  inta[6],i,j,k,m;       for(i=0;i<6;i++)scanf("%d",&a[i]);       for(i=5;i>=0;i--)       {  k=a[5];           for(【1】;j>=0;j--)a[j+1]=a[j];           【2】;           for(m=0;m<6;m++)printf("%d",a[m]);           printf("n");}    }第10章指针练习题一、填空题: 1、以下程序的输出结果是( 110)#include"Stdio.h"#include"Conio.h"intmain(void){int*var,ab;ab=100;var=&ab;ab=*var+10;printf("%dn",*var);getch();return0;}2、以下程序的输出结果是( 7,1)#include"Stdio.h"#include"Conio.h"voidast(intx,inty,int*cp,int*dp){*cp=x+y;*dp=x-y;}intmain(void){inta,b,c,d;a=4;b=3;ast(a,b,&c,&d);printf("%d,%dn",c,d);getch();return0;}3、若有定义char ch;(1)使指针p可以指向变量ch的定义语句是( char*p=&ch).(2)使指针p可以指向变量ch的赋值语句是(char*p;p=&ch;).(3)通过指针p给变量ch读入字符的scanf函数调用语句是(scanf("%c",*p);).(4)通过指针p给变量ch赋字符的语句是( *p="字符").(5)通过指针p输出ch中字符的语句是( putchar(*p);). 4、若有图中所示五个连续的int类型的存储单元并赋值如图,且p和s的基类型皆为int,p已指向存储单元a[1].(1)通过指针p给s赋值,使其指向最后一个存储单元a[4]的语句是( s=p+3;).(2)用以移动指针s,使之指向中间的存储单元a[2]的表达式是( s=s-3;).(3)已知k=2,指针s已指向存储单元a[2],表达式*(s+k)的值是( 50).(4)指针s已指向存储单元a[2],不移动指针s,通过s引用存储单元a[3]的表达式是( *(s+1)).(5)指针s已指向存储单元a[2],p指向存储单元a[0],表达式s-p的值是( 2).(6)若p指向存储单元a[0],则以下语句的输出结果是( 1020304050).   for(i=0;i<5;i++) printf("%d",*(p+i));   printf("n");二、编程题:1、编写一个函数,其功能是对传送过来的两个浮点数求出和值与差值,并通过形参传送回调用函数。#include"Stdio.h"#include"Conio.h"voidf(floatx,floaty,float*ps,float*pd){*ps=x+y;*pd=x-y;return;}intmain(void){floatx,y,sum,diff;printf("inputx,y=?");scanf("%f,%f",&x,&y); f(x,y,&sum,&diff);printf("%f+%f=%f%f-%f=%f",x,y,sum,x,y,diff);getch();return0;}评析:此题要求编写的函数需要返回两个结果(和值和差值),而函数的返回值只能返回一个值。因此使用指针作为函数参数,题目要求编写的函数没有返回值,即类型为void。注意实参与形参的对应关系。2、编写一个函数,对传送过来的三个数求出最大和最小数,并通过形参传送回调用函数。#include"Stdio.h"#include"Conio.h"voidf(inta,intb,intc,int*pmax,int*pmin){*pmax=*pmin=a;if(*pmaxb)*pmin=b;if(*pmin>c)*pmin=c;return;}intmain(void){inta,b,c,max,min;printf("inputa,b,c=?");scanf("%d,%d,%d",&a,&b,&c);f(a,b,c,&max,&min);printf("max=%dmin=%d",max,min);getch();return0;}评析:此题与上题类似,关键在于使用指向整型变量的指针作为函数的参数,这样即可以在一个函数中同时解决多个问题。注意:当使用指针作为函数的参数时,在函数中应使用间接引用符*才能改变指针所指向的变量的值。注意实参与形参的对应关系。第10章指针填空题(补充)注意:注释内的内容为参考答案。1、以下程序使用递归的方法求数组中的最大值及其下标值。请填空: #defineM10voidfindmax(int*a,intn,inti,int*pk){if(ia[*pk])【1】;/**pk=i*/findmax(【2】);/*a,n,i+1,pk*/}}main(){inta[M],i,n=0;printf("nEnter%ddata:n",M);for(i=0;i*b)【1】;/*num=*b*/if(num>*c)【2】;/*num=*c*/printf("输出最小整数:%dn",num);getch();return0;}5、在C程序中,指针变量能够赋【1】或【2】值。    /* 地址 或 NULL空值 */6、请填空:   建立如图所示的存储结构所需的说明语句是【1】   建立如图所示的给a输入数据的输入语句是【2】   建立如图所示的存储结构所需的赋值语句是【3】7、如果输入的值分别是1,3,5,下面程序的运行结果是(  )  #include"Stdio.h"#include"Conio.h"ints(int*p){intsum=10;sum+=*p;return(sum);}intmain(void){inta=0,i,*p,sum;for(i=0;i<=2;i++){scanf("%d",p);sum=s(p);printf("sum=%dn",sum);}getch();return0;}8、以下程序的运行结果是(  )/**/#include"Stdio.h"#include"Conio.h"int*p;voidpp(inta,int*b){intc=4;*p=*b+c;a=*p-c;printf("(2)%d%d%dn",a,*b,*p);}intmain(void) {inta=1,b=2,c=3;p=&b;pp(a+c,&b);printf("(1)%d%d%dn",a,b,*p);getch();return0;}9、以下程序的运行结果是(  )  /* 10111316 */#include"Stdio.h"#include"Conio.h"intsub(int*s){staticintt=10;t=*s+t;}intmain(void){inti,k;for(i=0;i<4;i++){k=sub(&i);printf("%3d",k);}printf("n");getch();return0;}10、下面程序段是把从终端读入的一行字符作为字符串放在字符数组中,然后输出。请填空:#include"Stdio.h"#include"Conio.h"intmain(void){inti;chars[80],*p;for(i=0;i<79;i++){s[i]=getchar();if(s[i]=="n")break;}s[i]=【1】;/*""*/p=【2】;/*s*/ while(*p)putchar(*p++);getch();return0;}11、下面程序段的运行结果是(  )   /*  hELLO!   */#include"Stdio.h"#include"Conio.h"#include"String.h"intmain(void){chars[80],*sp="HELLO!";sp=strcpy(s,sp);s[0]="h";puts(sp);getch();return0;}12、下面程序段的运行结果是(  ) /* bcdABCD */#include"Stdio.h"#include"Conio.h"#include"String.h"intmain(void){chars[20]="abcd";char*sp=s;sp++;puts(strcat(sp,"ABCD"));getch();return0;}13、下面程序段的运行结果是(  ) /* 1 */#include"Stdio.h"#include"Conio.h"#include"String.h"intmain(void){char*s1="AbcdEf",*s2="aB";intt;s1++; t=(strcmp(s1,s2)>0);printf("%dn",t);getch();return0;}14、下面程序段的运行结果是(  ) /* 21385 */#include"Stdio.h"#include"Conio.h"#include"String.h"intmain(void){chara[]="12345",*p;ints=0;for(p=a;*p!="";p++)s=10*s+*p-"";printf("%dn",s);getch();return0;}15、下面程序段的运行结果是(  ) /* ef */#include"Stdio.h"#include"Conio.h"intmain(void){charstr[]="abcdefghi",*p=str;printf("%sn",p+5);getch();return0;}16、下面程序段的运行结果是(  ) /* 1*0* */#include"Stdio.h"#include"Conio.h"#include"Ctype.h"intmain(void){char*p="PDP1-0";inti,d;for(i=0;i<7;i++){d=isdigit(*(p+i));if(d!=0)printf("%c*",*(p+i)); }getch();return0;}注:isdigit是一个定义在头文件Ctype.h中的宏,其功能是判断一个字符是否为一个数字字符。17、当运行以下程序时,从键盘输入book book   (表示回车,第2次输入的book后有一个空格),则下面程序的运行结果是(  )  /*   #9    */#include"Stdio.h"#include"Conio.h"#include"Ctype.h"intmain(void){chara1[80],a2[80],*s1=a1,*s2=a2;gets(s1);gets(s2);if(!strcmp(s1,s2))printf("*");elseprintf("#");printf("%d",strlen(strcat(s1,s2)));getch();return0;}18、下面程序段的运行结果是(  ) /* *2*4*6*8* */#include"Stdio.h"#include"Conio.h"intmain(void){chara[]="123456789",*p;inti=0;p=a;while(*p){if(i%2==0)*p="*";p++;i++;}puts(a);getch();return0;} 19、下面的程序的功能是利用插入排序法将10个字符从小到大进行排序。插入法的思路是:先对数组的头两个元素进行排序,然后根据前两个元素的情况把第三个元素插入,然后插入第四个元素……。请填空。#include"Stdio.h"#include"Conio.h"【1】/*voidinsert(char*aa)*/{inta,b,t;for(a=1;a<=9;a++){t=aa[a];b=a-1;while((b>=0)&&(t"9"){s[j]=s[i];j++;}/*||*/【2】;/*s[j]=""*/}intmain(void){char*item;printf("nInputastring:");gets(item);delnum(item);printf("n%s",item);getch();return0;}22、下面程序的功能是将字符串b复制到字符串a。请填空: voids(char*s,char*t){inti=0;while(【1】)【2】;/*【1】(*s=*t)!=""【2】s++,t++*/}main(){chara[20],b[10];scanf("%s",b);s(【3】);/*a,b*/puts(a);getch();return;}23、下面程序的功能是比较两个字符串是否相等,若相等则返回1,否则返回0。请填空:   注:请认真阅读理解此题及其答案intf(chars[],chart[]){inti=0;while(【1】&&【2】)i++;/*【1】s[i]==t[i]【2】s[i]!=""*/return(【3】);/*【3】s[i]==""&&t[i]==""?1:0*/}main(){chara[6],b[7];inti;scanf("%s",a);scanf("%s",b);i=f(a,b);printf("%dn",i);getch();return;}24、本程序用于计算一个英文句子中最长单词的长度(字母个数)max。假设英文句子中只含有字母和空格,在空格之间连续的字符串称为单词,句子以英文句号"."结束。请填空:#include"Stdio.h"#include"Conio.h"intmain(void){char*p,a[]="Iamhappy.";intmax=0,k=0; p=a;while(1){while(((*p<="Z")&&(*p>="A"))||((*p<="z")&&(*p>="a"))){【1】}/*【1】k++;p++;*/if(【2】maxk*/}【2】;/*【2】s++;*/}return(【3】);/*【3】k==r?1:0*/}intmain(void){charc[80];intd;gets(c);d=check(c);printf("d=%d",d);getch();return0;}27、下面程序的功能是将十进制正整数转换成十六进制。请填空:#include"Stdio.h"#include"Conio.h"#include"String.h"voidc10_16(char*p,intb){intj;while(b>0){j=b%16;if(【1】j<=9)*p=j+48;/*【1】j<=9*/else*p=j+55;b=b/16;【2】;/*【2】p++;8/}*p="";}intmain(void){inta,i;chars[20]; printf("inputa:");scanf("%d",&a);c10_16(s,a);for(【3】;i>=0;i--)printf("%c",*(s+i));/*【3】i=strlen(s)-1*/printf("n");getch();return0;}28、下面程序是判断输入的字符串是否是“回文”,(顺读和倒读都一样的字符串称“回文”,如level)。请填空:#include"Stdio.h"#include"Conio.h"#include"String.h"intmain(void){chars[81],*p1,*p2;intn;gets(s);n=strlen(s);p1=s;p2=【1】;/*【1】s+n-1*/while(【2】)/*【2】p1(表示回车键),则下面程序的运行结果是(   )/*ThisIsAText.*/#include"Stdio.h"#include"Conio.h"#defineTRUE1#defineFALSE0intchange(char*c,intstatus){if(*c=="")returnTRUE;else{if(status&&*c<="z"&&*c>="a")*c+="A"-"a";returnFALSE;}}intmain(void){intflag=TRUE;charch;do{ch=getchar();flag=change(&ch,flag);putchar(ch);}while(ch!=".");printf("n");getch();return0;}评析:1、本题程序的功能是将一个英文句子的每个单词的首字母改为大写。注意程序中变量flag的使用。这个变量的用法与教材P138例7-8中变量word的用法相似。      2、程序中定义了两个宏TRUE和FALSE,其取值分别为1与0,定义宏两个的目的是使程序具有较高的可读性33、下面程序的运行结果是(  )  /* 3 */#include"Stdio.h"#include"Conio.h"#defineN5fun(char*s,chara,intn){intj;*s=a;j=n;while(*s表示回车,如下右图为运行时屏幕显示结果,其中第一个bed为键盘输入,第二个bed为程序显示)   则下面程序运行的结果是(  )#include"Stdio.h"#include"Conio.h"intmain(void){chars[80],*p;p=s;gets(p);while(*p!="-"){if(*p=="a"||*p=="b")puts(p);gets(p);}getch();return0;}36、当运行以下程序时,从键盘输入:(表示回车,如下右图为运行时屏幕显示结果,其中输入apple后程序无输出,输入cat后程序显示at)/* */   则下面程序运行的结果是(  )#include"Stdio.h"#include"Conio.h"intmain(void){char*s,c[80]; s=c;gets(s);while((*(++s))!="")if(*s=="a")break;else{s++;gets(s);}puts(s);getch();return0;}37、下面程序的运行结果是(  )  /*  abcdefglkjih  */#include"Stdio.h"#include"Conio.h"#defineSIZE12voidsub(char*a,intt1,intt2){charch;while(t1="a"&&*p<="z"){a[i]=*p;i++;}else{b[j]=*p;j++;}p++;}a[i]=b[j]="";puts(a);puts(b);getch();return0;}评析:本题中程序的功能是将一个字符串中的小写字母存入字符串(字符数组)a中,将其他字符存入到字符串(字符数组)b中。39、当运行以下程序时,从键盘输入6(表示回车),则下面程序的运行结果是(  ) /*  976531  */#include"Stdio.h"#include"Conio.h"voidfun(char*a,charb){while(*(a++)!="");while(*(a-1) cde(表示回车),则下面程序的运行结果是(  )/*6*/#include"Stdio.h"#include"Conio.h"intfun(char*p,char*q){inti;char*p1=p,*q1;for(i=0;*p!="";p++,i++){p=p1+i;if(*p!=*q)continue;for(q1=q+1,p=p+1;*p!=""&&*q1!="";q1++,p++)if(*p!=*q1)break;if(*q1=="")returni;}return(-1);}intmain(void){inta;chars[80],t[80];gets(s);gets(t);a=fun(s,t);printf("a=%dn",a);getch();return0;}评析:本题中程序的功能是判断字符串t是否在字符串s中出现,如果没有出现过,则返回值为-1,否则返回字符串t在字符串s中首次出现的位置,程序写法巧妙,须认真阅读。41、下面程序的运行结果是(  ) /*n=4*/#include"Stdio.h"#include"Conio.h"intmain(void){inti=0,n=0;chars[80],*p; p=s;strcpy(p,"Itisabook.");for(;*p!="";p++)if(*p=="")i=0;elseif(i==0){n++;i=1;}printf("n=%dn",n);getch();return0;}42、当运行以下程序时,从键盘输入ASDFGHJ AFH表示回车),则下面程序的运行结果是(  )/*SDGJ*/#include"Stdio.h"#include"Conio.h"fun(char*s1,char*s2){intj;char*s=s1;for(;*s2!="";s2++){for(j=0,s1=s;*s1!="";s1++)if(*s1!=*s2){s[j]=*s1;j++;}s[j]="";}}intmain(void){chara1[80],a2[80];gets(a1);gets(a2);fun(a1,a2);puts(a1);getch();return0;}43、当运行以下程序时,从键盘输入abcdef和ABCD,则下面程序的运行结果是(  )/*10*/#include"Stdio.h"#include"Conio.h"#include"String.h"fun(char*a,char*b){intnum=0,n=0;while(*(a+num)!="")num++;while(b[n]){*(a+num)=b[n];num++;n++;}returnnum;} intmain(void){chars1[81],s2[81],*p1=s1,*p2=s2;gets(p1);gets(p2);printf("%dn",fun(p1,p2));getch();return0;}44、以下程序的运行结果是( ) /*x=13*/#include"Stdio.h"#include"Conio.h"intfib(intn,int*s){intf1,f2;if(n==1||n==2)*s=1;else{fib(n-1,&f1);fib(n-2,&f2);*s=f1+f2;}}intmain(void){intx;fib(7,&x);printf("nx=%dn",x);getch();return0;}评析:本题使用递归函数调用计算斐波那契数列的第7项的值。参见教材P116例6.7。45、以下程序的功能是(  )/*运行结果如图所示*/#include"Stdio.h"#include"Conio.h" intmain(void){char*str[]={"ENGLISH","MATH","MUSIC","PHYSICS","CHEMISTRY"};char**q;intnum;q=str;for(num=0;num<5;num++)printf("%sn",*(q++));getch();return0;}46、若有以下定义语句:inta[4]={0,1,2,3},*p; p=&a[1];则++(*p)的值是【  】/*2*/47、若有定义:inta[2][3]={2,4,6,8,10,12};则*(&a[0][0]+2*2+1)的值是【1】,*(a[1]+2)的值是【2】    /* 【1】12  【2】12*/48、若有以下的定义和语句:inta[4]={0,1,2,3},*p;p=&a[2];则*--p的值是【  】/*1*/49、若有以下的定义和语句:ints[2][3]={0},(*p)[3];p=s;则p+1表示数组【  】/*s[1][0],s[1][1],s[1][2]*/50、若有定义:inta[2][3]={2,4,6,8,10,12};则a[1][0]的值是【1】,*(*(a+1)+0)的值是【2】/*【1】8,【2】8*/51、若有以下定义和语句:int*p[3],a[6],i;                       for(i=0;i<3;i++)p[i]=&a[2*i];则*p[0]引用的是a数组元素【1】,*(p[1]+1)引用的是a数组元素【2】。/*【1】a[0]的地址,【2】a[3]的值*/'