2011C语言习题和答案

更新时间:2024-05-04 04:25:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1 C语言基础和顺序程序设计习题 一、填空。 1、C语言中,double型数据在内存中占用 个字节来存储。 2、已知:char ch=’A’;,则下列表达式的值是 。 ch=(ch>=’A’ && ch<=’Z’)?(ch+32):ch; 3、在C语言中,规定标识符只能由字母、数字或下划线三类字符组成,且第一个字符必须为 或 。 4、下列代数式写成C表达式为: 。 (sinx)(a+b)/(a-b) 5、i为int型变量,且初值为3,有表达式i++-3,则该表达式的值是 ,变量i的值是 。 6、i为int型变量,且初值为2,有表达式++i-3,则该表达式的值是 ,变量i的值是 。 7、若x=1,y=2,z=3,则表达式z+=++x+y++之值为 。 8、若有定义int y=3;float z=5.2,x=4.8;则表达式y+=int(x)+x+z之值为 。 9、若x=2,y=3,则x%=y+3之值为 。 10、表达式a=(b=8)/(c=2)之值为 。 11、若a=1,b=2,c=3,则执行表达式(a>b)&& (c++)后,c的值为 。 12、说明变量为双精度的关键字是 。 13、一个C语句的最后至少应有一个 。 14、在16位PC机环境下,字符常量’a’在内存中占 个字节,字符串”a”占 个字节。 15、在16位PC机环境下,int类型数据占 字节,short类型数据占 个字节,long类型数据占 个字节,double类型数据占 个字节。 16、077的十进制数是 ,0111的十进制数是 ,0X29的十进制数是 ,0XAB的十进制数是 。17、若有说明char s1=’077’,s2=’\\’;则s1中包含 个字符,s2中包含 个字符。 1 2答 案 1、8 2、a或97 3、字母 下划线 4sin(x)*sin(x)*(a+b)/(a-b) 5、0 ,4 6、0 ,3 7、7 8、17 9、2 10、4 11、3 12、double 13、; 14、1,2 15、2,2,4,8 16、63,73,41,171 17、1 ,1

习 题 内 容 18、若有说明int x=10,y=20;请写出各printf语句的输出结果。 printf(“%3x\\n”,x+y); printf(“%3o\\n”,x*y); printf(“%3o\\n”,x%y,x,y); printf(“%3x\\n”,(x%y,x-y,x+y)); 19、01234 答 案 18、1E 310 12 1E 19、设有说明int a=1234;,请写出各printf语句的输出结果。 1234 printf(“d\\n”,a); printf(“%-05d\\n”,a); 01234 d 20、(1) printf(“d\\n”,a++); a=%d,b=%d,x+y=%4.1f\\n printf(“%d\\n”,--a); a,b,x+y 20、设a,b为int型变量,x,y为float型变量,c1,c2为char(2) x-y=%4.1f a-b=%d\\n 型变量,且设a=5,b=10,x=3.5,y=10.8,c1=’A’,c2=’B’。为了x-y,a-b 得到以下的输出格式和结果,请写出对应的printf语句。 (1)a=5,b=10,x+y=14.3 21、1 22、1234,1234,% ,printf(“”, ); 67 (2)x-y=-7.3 a-b=-5 printf(“ ”, ); (3)c1=’A’or 65(ASCII) c2=’B’or 66(ASCII) printf(“ c1=’%c’or %d(ASCII)c=’%c’or %d(ASCII)\\n ”, c1,c1,c2,c2 ); 21、在C语言中,用 表示逻辑“真”值。 22、若执行下列语句时,输入数据:1234 01234g 1234<回车>,则变量a的值为 ,b的值为 ,s的值为 ,c的值为 。 int a; float b,c; char s;scanf(“%d%f%c%f\\n”,&a,&b,&s,&c); 2

习 题 内 容 二、在以下每一题的四个选项中,请选择一个正确的答案。 23、在C语言中,不同类型数据混合运算时,要先转换成同一类型后再进行运算,设一表达式中包含有int、long、unsigned、char类型的变量和数据,则表达式最后的运算结果是 类型数据。 A、int B、char C、unsigned D、long 24、若int型数据占2个字节,则以下语句的输出为 。 int k=-1; printf(“%d,%u\\n”,k,k); A、-1,-1 B、-1,32767 C、-1,32768 D、-1,65535 25、若a,b均为int型变量,x,y均为float型变量,正确的输入函数调用是 。 A、scanf(“%d%d”.&a,&b); B、scanf(“%d%f”,&a,&b); C、scanf(“%d%d”,a,b); D、scanf(“%f%f”,x,y); 26、若x,y均为double型变量,正确的输入函数调用是 。 A、scanf(“%f%f”,&x,&y); B、scanf(“%d%d”,&x,&y); C、scanf(“%lf%lf”,&x,&y); D、scanf(“%lf%lf”,x,y); 27、若x为char型变量,y为int型变量,x,y均有值,正确的输出函数调用是 。 A、printf(“%c%c”,x,y); B、printf(“%c%s”,x,y); C、printf(“%f%c”,x,y); D、printf(“%f%d”,x,y); 28、若a,b,c,d都是int型变量且初值均为10,不正确的赋值语句是 。 A、a=b=c=d; B、a=b++; C、a+b++; D、d=(a=b=125)-c++; 29、若x,y均为int型变量且有值,要输出x,y的值,正确的输出函数调用是 。 A、printf(“%d%d”,&x,&y); B、printf(“%f%f”,x,y); C、printf(“%f%d”,x,y); D、printf(“%d%d”,x,y); 30、x为int型变量,且值为2345,不正确的输出函数调用是 。 A、printf(“%d”,x); B、printf(“=”,x); C、printf(“%c”,x); D、printf(“%s”,x); 3 答 案 23、D 24、D 25、B 26、A 27、A 28、C 29、D 30、D

习 题 内 容 31、设x和y均为int型变量,则执行以下语句后的输出为 。 答 案 31、A x=15; y=5; printf(“%d\\n”,s%=(y%=2)); A、0 B、1 C、6 D、12 32、B 32、若m为float型变量,则执行以下语句后的输出为 。 m=1234.123; printf(“%-8.3f\\n”,m); printf(“.3f\\n”,m); A、1234.123 B、1234.123 C、1234.123 D、1234.123 33、A 1234.123 1234.123 001234.123 001234.123 33、若n为int型变量,则执行以下语句后的输出为 。 n=32767; printf(“0d\\n”,n); printf(“d\\n”,n); 34、D A、0000032767 B、32767 C、32767 D、输出格式说明符不合法 32767 0000032767 32767 32767 34、若x为unsigned int型变量,则执行以下语句后的x的值为 。 x=65535; 35、B printf(“%d\\n”,x); A、65535 B、1 C、无定值 D、-1 35、若x为int型变量,则执行以下语句后的输出为 。 x=0xDEF; printf(“M\\n”,x); printf(“%4o\\n”,x); printf(“%4x\\n”,x); A、3567 B、3567 C、3567 D、3567 6757 6757 06757 6757 4

习 题 内 容 Def def 0xdef 0def 36、若x,y,z均为int型变量,则执行以下语句后的输出为 。 x=(y=(z=10)+5)-5; printf(“x=%d,y=%d,z=%d\\n”,x,y,z); y=(z=x=0,x+10); printf(“x=%d,y=%d,z=%d\\n”,x,y,z); A、x=10, y=15, z=10 B、x=10, y=10, z=10 x=0, y=10, z=0 x=0, y=10, z=0 C、x=10, y=15, z=10 D、x=10, y=10, z=10 x=10, y=10, z=0 x=0, y=10, z=0 37、若x是int型变量,y是float型变量,所用的scanf调用语句格式为:scanf(“x=%d,y=%f”,&x,&y);则为了将数据10和66.6分别赋给x和y,正确的输入应当是 。 A、x=10,y=66.6 <回车> B、10 66.6 <回车> C、10<回车>66.6<回车> D、x=10 <回车>y=66.6<回车> 38、若w,x,y,z均为int型变量,则为了使以下语句的输出为:1234+123+12+1,正确的输入形式应当是 。 scanf(“M+=+-+”,&x,&y,&z,&w); printf(“M+=+-+\\n”,x,y,z,w); A、1234123121<回车> B、1234123412341234<回车> C、1234+1234+1234+1234<回车> D、1234+123+12+1<回车> 39、若x,y均为int型变量,z为double型变量,则以下不合法的scanf函数调用语句为 。 A、scanf(“%d,%lx,%le”,&x,&y,&z); B、scanf(“-*%d%lf”,&x,&y,&z); C、scanf(“%x%*d%o”,&x,&y); D、scanf(“%x%o%6.2f”,&x,&y,&z); 40、设a,b均是int型变量,则以下不正确的函数调用为 。 5 答 案 36、A 37、A 38、D 39、D 40、A

习 题 内 容 D、break语句是switch语句的一部分。 答 案 21、设有说明语句:int a=2,b=7,c=5;,则执行以下语句后,输出为 。 21、B switch(a>0) { case 1: switch(b<0) { case 1: printf(“@”); break; case 2: printf(“!”); break; } case 0: switch(c==5) { case 0: printf(“*”); break; case 1: printf(“#”); break; default: printf(“$”); break; } default: printf(“&”); 22、A } A、@#& B、#& C、*& D、$& 22、以下程序的输出结果是 。 #include main( ) { int a=0,i=1; switch(i) { case 0: case 1: a+=2; case 2: case 3: a+=3; default: a+=7; } printf(“%d\\n”,a); }

11

习 题 内 容 A、12 B、7 C、2 D、5 23、在下列的表达式中,能正确表示“a≥10或a≤0”的是 。 A、a>=10 or a<=0 B、a>=10 | a<=0 C、a>=10 || a<=0 D、a>=10 && a<=0 答 案 23、C

12

3 循环程序设计习题 一、填空。请在下面各叙述的空白处填入合适的内容。 答 案 1、4 1、下面的for循环语句最多可执行 次。 2、-1 for(x=0,y=0; (y!=99) && (x<4);x++); 2、下面程序的输出结果是 。 main( ) { int x=2; while(x--) printf(“%d\\n”,x); 3、x>=0 x main( ) { float x,amax,amin; scanf(“%f”,&x); amax=x; amin=x; while( ) { if(x>amax) amax=x; if( ) amin=x; scanf(“%f”,&x); 4、10 } printf(“\\namax=%f\\namin=%d\\n”,amax,amin); } 5、852 4、设i,j,k均为int型变量,则执行完以下for语句后,k的值是 。 for(i=0,j=10;i<=j;i++,j--) k=i+j; 5、下面程序的输出结果是 。

13

习 题 内 容 #include 答 案 main( ) { int y=9; for(;y>0;y--) if(y%3==0) { printf(“%d”,—y); continue; } } 6、下面程序的功能是根据以下的公式计算?/2的值,从键盘输入要求满6、n=1 ?1121232*s 足的精度值eps。?1???????? 2335357 #include main( ) { double s=0.0,t=1.0; int n; float eps; scanf(“%f”,&eps); for( ;t>eps;n++) { s+=t; t=n*t/(2*n+1); } printf(“pi=%f\\n”, ); 7、k%j==0 } j==k 7、下面的程序是输出3到100之间的所有素数。 #include main( ) { int k,j; for(k=3;k<100;k++) { for(j=2;j<=k-1;j++) if( )

14

习 题 内 容 break; 答 案 if() printf(“M”,k); } } 8、n!=0 8、输入一个十进制数,将它对应的二进制数的各位反序,形成新的十进 制数输出。如:(11)10=(1011)2 反序后,成为(1101)2=(13)10 x=x*2+t; #include main( ) { int n,x,t; printf(“请输入一个整数:”); scanf(“%d”,&n); x=0; while( ) { t=n%2; n=n/2; } 9、i<=month-1 printf(“新的整数:%d\\n”,x); i } 9、给出年月日的数值,计算出该日是该年的第几天。 #include main( ) { int year,month,day,days,i,d; printf(“请输入年,月,日:”); scanf(“%d,%d,%d”,&year,&month,&day); days=0; for(i=1; ;i++) { switch( ) { case 1: days+day

15

习 题 内 容 case 3: 答 案 case 5: case 7: case 8: case 10: case 12:d=31; break; case 4: case 6: case 9: case 11:d=30; break; case 2:if(year%4==0 && year0!=0 || year@0==0) d=29; else d=28; } days+=d; } printf(“%d年%d月%d日是该年的第%d天。\\n”,year,month, day, ); } 10、从键盘输入一个整数n,测试n是否包含数字5,若包含数字5,则输10、n=n/10 出“YES”,否则输出“NO”。 #include #include main( ) { int n; printf(“请输入整数n:”); scanf(“%d”,&n); n=fabs(n); while(n!=0 && n!=5) ;

16

习 题 内 容 if(n==0) printf(“NO\\n”); else printf(“YES\\n”); } 二、在以下每一题的四个选项中,请选择正确的答案。 11、若有以下程序段,w和k都是整型变量: ? w=k; LB:if(w==0) goto LE; w--; printf(“*”); goto LB; LE: ? 不能与上面程序段等价的循环语句是 。 A、for(w=k;w!=0;w--) printf(“*”); B、w=k; while(w--!=0) { printf(“*”); w++; } C、w=k; do { w--; printf(“*”); } while(w!=0); D、for(w=k;w;--w) printf(“*”); 答 案 11、BC

17

习 题 内 容 12、执行下列程序,输入3.6 2.4,输出结果是 。 #include #include main( ) { float x,y,z; scanf(“%f%f”,&x,&y); z=x/y; while(1) { if(fabs(z)>1.0) { x=y; y=z; z=x/y; } else break; } printf(“%d\\n”,y); A、1.500000 B、1.600000 C、2.000000 D、2.400000 13、下面程序的输出结果是 。 #include main( ) { int x=3,y=6,a=0; while(x++!=(y-=1)) { a+=1; if(y

18

习 题 内 容 15、设c为char型变量,输入以下数据: right?<回车> 则程序段的执行结果为 。 while((c=getchar())!=’?’) putchar(c); A、right? B、right C、? thgir D、thgir 16、下面程序的运行结果是 。 #include main( ) { int i; for(i=1;i<=5;i++) { if(i%2) printf(“*”); else continue; printf(“#”); } printf(“$\\n”); } A、*#*#*#$ B、#*#*#*$ C、*#*#$ D、#*#*$ 17、下面程序的运行结果是 。 #include main( ) { int n=4; while(n--) printf(“%d”,--n); } A、20 B、21 C、32 D、43 答 案 15、B 16、A 17、A

19

习 题 内 容 18、下面程序的运行结果是 。 #include main( ) { int i,j,m; for(i=5;i>=1;i--) { m=0; for(j=i;j<=5;j++) m=m+i*j; } printf(“%d\\n”,m); } A、15 B、20 C、25 D、30 答 案 18、A

20

4 函数习题 一、在以下每一题的四个选项中,请选择一个正确的答案。 1、以下对C语言函数的有关描述中,正确的是 。 A、在C语言中调用函数时,只能把实参的值转送给形参,形参的值不能转送给实参。 B、C函数既可以嵌套定义,又可以递归调用。 C、函数必须有返回值,否则不能使用函数。 D、C程序中有调用关系的所有函数必须放在同一个源程序文件中。 2、函数调用语句“f((e1,e2),(e3,e4,e5));”中参数的个数是 。 A、1 B、2 C、4 D、5 3、将一个函数说明为static后,该函数将 。 A、既能被同一源文件中的函数调用,也能被其他源文件中的函数调用。 B、只能被同一源文件中的函数调用,不能被其他源文件中的函数调用。 C、只能被其他源文件中的函数调用,不能被同一源文件中的函数调用。 D、既不能被同一源文件中的函数调用,也不能被其他源文件中的函数调用。 4、C语言中规定函数的返回值的类型由 。 A、return语句中的表达式类型所决定。 B、调用该函数时的主调用函数类型所决定。 C、调用该函数时系统临时决定。 D、在定义该函数时所指定的函数类型所决定。 5、以下正确的说法是 。 A、定义函数时,形参的类型说明可以放在函数体内。 B、return后边的值不能为表达式。 C、如果函数值的类型与返回值类型不一致,以函数值类型为准。 D、如果形参与实参的类型不一致,以实参类型为准。 6、下列存储类标识符中, 的可见性与存在性不一致。 A、外部类 B、自动类 C、内部静态类 D、寄存器类 7、以下不正确的说法是 。 答 案 1、A 2、B 3、B 4、D 5、C 6、C 7、D

21

习 题 内 容 A、在不同函数中可以使用相同名字的变量。 B、形参是局部变量。 C、在函数内定义的变量只在本函数范围内有效。 D、在函数内的复合语句中定义的变量在本函数范围内有效。 8、以下叙述中正确的是 。 A、用#include包含的头文件的后缀不可以是“.a”。 B、在对某个含有错误的头文件进行修改后,包含此头文件的源程序不必重新进行编译。 C、宏名必须用大写字母表示。 D、宏替换不占用运行时间。 9、有一个如下定义的函数func(a) { printf(“%d”,a); } 则该函数的返回值的类型是 。 A、与参数a的类型相同。 B、void类型 C、没有返回值 D、无法确定 10、以下错误的描述为 。 A、在函数之外定义的变量称为外部变量,外部变量是全局变量。 B、在一个函数中既可以使用本函数中的局部变量a,又可以使用同名的外部变量a。 C、外部变量定义和外部变量说明的含义不同。 D、若在同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量不起作用。 二、判断下列各叙述的正确性。 11、( )全局变量与函数体内定义的局部变量重名时,全局变量优先。 12、( )C程序中,有调用关系的所有函数必须放在同一个源程序文件中, 13、( )对于不需要使用函数返回值的函数,可以不定义类型。 14、( )C程序文件中每个函数都将被本文件调用。 15、( )一个函数可以定义在别的函数的内部,即嵌套定义。 16、( )返回值为int或char类型时,函数声明可以缺省。 答 案 8、A 9、B 10、B 11、× 12、× 13、√ 14、× 15、× 16、√

22

习 题 内 容 17、( )在C语言中允许函数之间的嵌套调用。 答 案 17、√ 18、√ 18、( )局部静态变量是在编译时赋初值的,即只赋初值一次。 19、× 19、( )外部变量必须定义在文件的开头部分。 20、( )函数的形参在退出该函数后就被释放了。 20、√ 三、填空。 21、C语言程序的基本组成单位是 。 21、函数 22、主函数 22、C语言程序总是从 开始执行。 23、类型转换 23、当函数的返回值与函数值类型不一致时,就会发生 。 24、auto 25、 24、凡在函数中未指定存储类别的变量,其隐含的存储类别为 。 该函数的函数25、静态型局部变量的作用域是 。 体内 单向的值传26、C语言规定,调用一个函数时,实参变量和形参变量之间的数据传递26、递 方式是 。 27、若定义的函数没有返回值时,则应在该函数说明时加一个类型说明符 27、void 。 28、在C语言中,一个函数直接或间接地调用自身,便构成了函数的 。 28、递归调用 29、函数的形式参数的作用域为 29、 30、如果被调用的用户函数和主调函数不在同一编译单位,则在定义函数从调用该函的编译单位中应将该函数定义成 ,在主调函数的函数中将该函数说明数后开始直为 。 到返回主调四、阅读下面的程序,写出程序运行结果。 函数前结31、#include “stdio.h” 束 。 void f1(int s) 30、extern extern { int i,j=3; for(i=1;i<10;++i,++j) 31、s=20 { s=i+j; if(s>=100)

23

习 题 内 容 break; } printf(“s=%d\\n”,s); } main( ) { int s=10; f1(s); } 32、#include “stdio.h” main( ) { int i=0,a=10; void s( ); while(i<3) { ++a; printf(“%d,”,a++); s( ); i++; } } void f1(int s) { int z=300; z++; printf(“%d\\n”,z++); } 33、#include “stdio.h” int func(int x,int y) { int z; z=x+y; 答 案 32、11,301 13,301 15,301 33、6 13 22

24

习 题 内 容 return z++; } main( ) { int i=3,j=2,k=1; do { k+=func(i,j); printf(“%d\\n”,k); i++; j++; }while(i<=5); } 34、#include “stdio.h” #define N 5 void fun( ); main( ) { int i; for(i=1;i

25

习 题 内 容 * *** ***** ******* #include “stdio.h” void disp(int i) { int j,k; for(j=0;j<=8-i;j++) printf(“ “); for(k=0;k< ;k++) printf(“*”); ; } main( ) { int i; for(i=0;i<4;i++) ; } 36、下面是一个计算阶乘的程序,请填空。 #include “stdio.h” double factorial(int); main( ) { int n; printf(“Enter an integer:”); scanf(“%d”,&n); printf(“\\n%d!=%lg\\n”, , ); } double factorial(int i) 答 案 35、2*i-1 printf(“\\n”) disp(i) 36、n factoria(n) return result

26

习 题 内 容 { double result=1.0; int j; for(j=1;j<=i;j++) result*=j; ; } 答 案

27

5 数组习题 一、在以下每一题的四个选项中,请选择一个正确的答案。 答 案 1、C 1、在C语言中,引用数组元素时,其数组下标的数据类型允许是 。 A、整型常量 B、整型表达式 C、整型常量或整型表达式 D、任何类型的表达式 2、D 2、以下对一维数组a中的所有元素进行正确初始化的是 。 A、int a[10]=(0,0,0,0); B、int a[10]={ }; C、int a[ ]={0}; D、int a[10]={10*2}; 3、对于所定义的二维数组a[2][3],元素a[1][2]是数组的第 个元素。 3、D A、3 B、4 C、5 D、6 4、D 4、若有说明:int a[20];,则对a数组元素的正确引用是 。 A、a[20] B、a[3.5] C、a(5) D、a[10-10] 5、C 5、若有说明:int a[3][4];,则对a数组元素的正确引用是 。 A、a[2][4] B、a[1,3] C、a[1+1][0] D、a(2)(1) 6、C 6、以下关于数组的描述正确的是 。 A、数组的大小是固定的,但可以有不同类型的数组元素。 B、数组的大小是可变的,但所有数组元素的类型必须相同。 C、数组的大小是固定的,所有数组元素的类型必须相同。 D、数组的大小是可变的,可以有不同类型的数组元素。 7、C 7、字符串”I am a student.”在存储单元中占 个字节。 A、14 B、15 C、16 D、17 8、在执行int a[ ][3]={{1,2},{3,4}};语句后,a[1][2]的值是 。 8、C A、3 B、4 C、0 D、2 9、下面程序段的运行结果是 。 9、B char c[5]={‘a’,’b’,’\\0’,’c’,’\\0’}; printf(“%s”,c); A、’a’’b’ B、ab C、ab c D、a,b 10、B 10、下面程序段的运行结果是 。 char c[ ]=”\\t\\v\\\\\\0will\\n”;

28

习 题 内 容 printf(“%d”,strlen(c)); A、14 B、3 C、9 D、字符串中有非法字符,输出值不确定 二、判断下列各叙述的正确性。 11、( )字符’\\0’是字符串的结束标记,其ASCII代码值为0。 12、( )若有说明:int a[3][4]={0};,则数组a中每个元素均可得到初值0。 13、( )若有说明:int a[ ][4]={0,0};,则二维数组a的第一维大小为0。 14、( )若有说明:int a[ ][4]={0,0};,则只有a[0][0]和a[0][1]可得到初值0,其余元素均得不到初值0。 15、( )若有说明:static int a[3][4];,则数组a中各元素在程序的编译阶段可得到初值0。 16、( )若用数组名作为函数调用时的实参,则实际上传递给形参的是数组的第一个元素的值。 17、( )调用strlen(“abc\\0ef\\0g”)的返回值为8。 18、( )在两个字符串的比较中,字符个数多的字符串比字符个数少的字符串大。 19、( )已知:int a[ ][3]={1,2,3,4,5};,则数组a的第一维的大小是不确定的。 20、( )在C语言中,二维数组元素在内存中的存放顺序由用户自己确定。 三、填空。 21、在C语言中,字符串不存放在一个变量中,而是存放在一个 中。 22、设有“int a[3][4]={{1},{2},{3}};”,则a[1][1]的值为 。 23、若有定义:double x[3][5];,则x数组中行下标的下限是0,列下标的上限是 。 24、在C语言中,二维数组元素在内存中的存放顺序是 。 答 案 11、√ 12、√ 13、× 14、× 15、√ 16、× 17、× 18、× 19、√ 20、× 21、字符数组 22、0 23、4 24、 按行优先存放

29

习 题 内 容 25、字符’0’的ASCII码值为 (十进制形式)。 26、要将两个字符串连接成一个字符串,使用的函数是 。 27、设有定义:char s[12]=”string”;,则printf(“%d\\n”,strlen(s));的输出是 。 28、字符串”chen jing”占 字节的存储空间。 29、如果要比较两个字符串中的字符是否相同,可使用的库函数是 。 30、若在程序中用到“putchar()”函数时,应在程序开头写上文件包含命令 。 四、阅读下面的程序,写出程序运行结果。 31、#include “stdio.h” void wr(char *st,int i) { st[i]=’\\0’; puts(st); if(i>1) wr(st,i-1); } main( ) { char st[ ]=”abcdefg”; wr(st,7); } 32、#include “stdio.h” main( ) 32、 答 案 25、48 26、strcat() 27、6 28、10 29、strcmp() 30、 #include 31、 输出结果:abcdef abcde abcd abc ab a 输出结果:1 1 121 1231 12341

30

习 题 内 容 { int a[5]={1,1}; int i,j; printf(“%d %d\\n”,a[0],a[1]); for(i=1;i<4;i++) { a[i]=a[i-1]+a[i]; a[i+1]=1; for(j=0;j<=i+1;j++) printf(“%d”,a[j]); printf(“\\n”); } } 33、#include “stdio.h” main( ) { int a[10]={1,2,3,4,5,6,7,8,9,10}; int b[10]={10,9,8,7,6,5,4,3,2,1}; int i,j; printf(“a[%d]*b[%d]=%d\\n”,a[i],b[j],a[i]*b[j]); } 34、 34、#include “stdio.h” main( ) { int i,a[10]={1,2,3,4,5,6,7,8,9,10},temp; for(i=1,j=9;i<10 && j>0;i+=2,j-=3) 33、 答 案 输出结果:a[2]*b[1]=2 a[4]*b[4]=16 a[6]*b[7]=42 输出结果:10 1 2 3 4 5 6 7 8 9

31

习 题 内 容 temp=a[9]; 答 案 for(i=9;i;i--) a[i]=a[i-1]; a[0]=temp; for(i=0;i<10;i++) printf(“%d ”,a[i]); } 五、程序填空。 35、j=i 35、下面程序的功能是将字符串a中所有的字符a删除,请填空。 #include “stdio.h” main( ) { char a[50]; int i,j; printf(“Enter a string:”); gets(a); for(i=j=0;a[i]!=’\\0’;i++) if(a[i]!=’a’) ; a[j]=’\\0’; 36、 array[i]>array[j] puts(a); } 36、下面的程序是将array数组按从小到大进行排序,请填空。 #include “stdio.h” main( ) { int array[10]; int i,j,temp; printf(“Input 10 numbers please\\n”);

32

习 题 内 容 for(i=0; i<10;i++) scanf(“%d”,&array[i]); for(i=0; i<10;i++) for(j=i+1; j<10;j++) if( ) { temp=array[i]; array[i]=array[j]; array[j]=temp; } printf(“The sorted 10 number:\\n”); for(i=0; i<10;i++) printf(“%d\\t”,array[i]); } 答 案

33

指针习题 答 案 BDDDA 1. 单项选择题 CBBCC (1) 指针 pstr所指字符串的长度为 。char *pstr=\ A. 15 B. 14 C. 13 D. 12 (2) 对于 char **pstr;,以下正确的是 。 A. *pstr=\ B. pstr=\ C. *pstr=\ D. **pstr=\ (3) 以下程序段的输出结果为 。 char astr[5]=\ char *pstr=astr; printf(\ A. 1 B. 2 C. ASCII码值为 1 的字符 D. ASCII 码值为 2 的字符 (4) 下述程序段的输出结果为 。 char astr[]=\ char *pstr=&astr[5]; while(--pstr>=astr) putchar(*pstr); putchar('\\n'); A. abc B. cba C. abcde D. edcba (5) 若有定义 int a=1,*b,c;,以下不正确的是 。 A. b=a B. b=&a C. b=&a,c=*b D. c=a (6) 以下程序段的运行结果为 。 int num[]={1,2,3,4,5,6,7,8,9},*pnum=&num[2]; pnum++; ++pnum; printf(\ A. 3 B. 4 C. 5 D. 6 (7) 以下程序段的运行结果为 。 char *pstr=\ int n=0; while(*pstr++!='\\0') n++; printf(\ A. 12 B. 14 C. 16 D. 不确定 (8) 以下程序段的运行结果为 。 int num[9]={1,2,3,4,5,6,7,8,9},*p; p=num; *(p+1)=0; printf(\ A. 2,0,1 B. 1,0,1 C. 2,2,2 D. 1,1,1 (9) 以下程序段的运行结果为 。 int a=5,*p=&a,b,*q; a=10; *p=15; q=p;

34

*q=20; b=*q; p=&b; printf(\ A. a=5,b=10,*p=15,*q=20 B. a=20,b=15,*p=10,*q=5 C. a=20,b=20,*p=20,*q=20 D. a=15,b=15,*p=15,*q=15 (10) 已知 char *p,*q;,以下语句正确的是 。 A. p*5; B. p/=q; C. p+=5; D. p+=q;

35

结构体与共用体习题 一、填空题 (1) 定义结构体的关键字是 ,定义共用体的关键字是 。 (2) 结构体和共用体的相同点是 ,不同点是 。 (3) 若有以下定义和语句,则sizeof(a)的值是__ ___,而sizeof(b)的值是__ _。 struct tu { int m; char n; int y;}a; struct { float p, char q; struct tu r} b; (4) 设有下面结构类型说明和变量定义,则变量a在内存所占字节数是 。如果将该结构改成共用体,结果为 。 struct stud { char num[6]; int s[4]; double ave; } a; (5) 下面程序用来输出结构体变量ex所占存储单元的字节数,请填空。 struct st { char name[20]; double score; }; main() { struct st ex ; printf(\ )); } (6) 下面定义的结构体类型拟包含两个成员,其中成员变量info用来存入整形数据;成员变量link是指向自身结构体的指针,请将定义补充完整。 struct node { int info; link; } (7) 以下程序执行后输出结果是 。 main() { union { unsigned int n; unsigned char c; } u1; u1.c='A'; printf(\ } (8) 变量root如图所示的存储结构,其中sp是指向字符串的指针域,next是指向该结构的指针域,data用以存放整型数。请填空,完成此结构的类型说明和变量root的定义。 root sp next data struct list { char *sp ; __ __; _ _; } root; 2. 阅读下面的程序,写出程序结果 (1) struct info { char a,b,c;};

答 案 (1) struct,union (2) 由多个成员组合而成的自定义数据类型,结构体的大小是各成员大小之和,而联合体的大小是最大成员的大小。 (3) 12,20 (4) 32,16 (5) ex (6) struct node* (7) A (8) struct list* next,int data 2. (1) 2 (2) ,0 (3) 0 3. (1) struct com { int a; int b;}; void main() { struct com x,y,sum; x.a=1;x.b=2; y.a=4;y.b=3; sum.a=x.a+y.a; sum.b=x.b+y.b; } (2) #include \struct data { int y; int m; int d; }; int f(struct data day) { int n[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; int i; if(day.m<2) n[0]=day.d; else { 36

main() { struct info s[2]={{‘a’,‘b’,‘c’},{‘d’,‘e’,‘f’}};int t; t=(s[0].b-s[1].a)+(s[1].c-s[0].b); printf(\ } (2) void main() { union { char i[2]; int k; } stu; stu.i[0]='2'; stu.k=0; printf(\ } (3) union myun { struct{ int x, y, z; } u; int k; } a; main() { a.u.x=4; a.u.y=5; a.u.z=6; a.k=0; printf(“%d\\n\ 3. 程序设计题 (1)设计一个程序,用结构类型实现两个复数相加。 (2)定义一个结构类型变量(包括年、月、日)实现:输入一个日期显示它是该年第几天。 for(i=1;i

37

本文来源:https://www.bwwdw.com/article/ogig.html

Top