C语言复习 题集

更新时间:2024-03-26 09:27:01 阅读量: 综合文库 文档下载

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

C语言复习练习题 二、 多项选择题 一、 填空题 1、与语句if(a!=0)... 等效的语句是( B )。 1、执行int a=12; a+=a-=a*a 语句后a= -264 ; (A)、if(!a)...; (B)、if(a)...; (C)、if(!a==0)...; 2、若int x=4;则表达式:x?(10?x+1:x-1):(0?2*x:x/2)的值为 5 (D)、if(a>0||a<0) 3、写出表达式的值:(注意运算符的优先级别,以及同优先级运算符的结合次序,见书73页) 9+5/2 11 ; 8+2<=9 0 ; 8%3+6 8 ;!(3<2)||(8!=7) 1 ; 3/9*180 0 ;5*‘d’ 500 ;!!(8<9) 0 ;(x=5*3,x*10,(x>100)) 0 ; 4、语句:n1=2;n2=++n1;n1=n2++;执行后,n1= 3 ;n2= 4 ; 5、若有定义:int a[6] ,*p=a;则p+3表示 ;*(p+3)表示 ;*p+3表示 ; 6、语句printf(“c:\\\\\\\\dos”)的输出结果是 c:\\\\dos ; 7、若有int x=3,y=13,z=2;执行语句z*=x-- +(++y)后,z的值是 34 8、写出下列表达式的求值结果 (1)3!=5 1 ; (2)17820*5 410 ; (3)sizeof(long int) 4 ; (4)2/4*(5+4) 0 ; (5)2 *‘e’ 202 ; (6) !!(5>4) 1 ; (7)已知x=0,x?(0?x+1:x-1):(8?x+4:x/2) 4 ; 9、设有宏定义 #define MOD(x,y) x%y 则执行下面语句的输出为 。 int z,a=15,b=100; z=MOD(b,a); printf(“%d\\n”,z); 10、 ×C语言存储字符串时,用特殊的字符 ‘\\0’ 表示字符串的结束 11、 ×定义C函数时,若函数没有返回值,则返回值类型应设为 12、 ×语句:int a=5, *p=&a;*p+=2;printf(“%d%d”,a,*p);输出的值是 2、向磁盘上已有的文本文件添加字符串,文件打开的方式可以是( )。 (A)、“r+”; (B)、“a”; (C)、“w+”; (D)、“a+” 3、若有定义int a[3][4];以下哪些是对该数组元素正确的描述( )。 (A)、a[3][2]; (B)、a[2][3]; (C)、*(a+1); (D)、*(a[1]+1) 4、能正确计算5!(5的阶乘)的程序段是( A )。 (A)、 i=1;s=1; (B)、i=1;s=1; while(i<=5) while(i<5) { { s=s*i; s=s*i; i++; i++; }; }; (C)、i=1;s=1; (D)、i=1;s=1; do{ do{ s=s*i; s=s*i; i++; i++; }while(i>=5); }while(i>5); 5、若函数头文件已被正确的包含,以下能正确输入一个字符串的C程序有( )。 (A)、char s[41]; scanf(“%s”,s); (B)、char str[41],*s;s=str;gets(s); (C)、char *s; scanf(“%s”,s); (D)、char *s;s=(char *)malloc(41);scanf(“%s”,s); 三、 读程序,写出运行结果 1、 main() { int i, j;

for (i=0;i<=3;i++) if( i==j ) continue; { for (j=0;j<=5;j++) else for(k=0;k<=9;k++) { if (i==0|| j==0|| i==3|| j==5) printf (“*”); if( k!=i&&k!=i ) count++; * * * * * * else printf (“#”); printf(“%d\\n”,count); * # # # # * } * # # # # * printf(“\\n”); * * * * * * 5、 下面的程序是判断输入的字符串是否是“回文” } #include } #include 2、 当运行下面程序时,从键盘输入 book↙ main() books ↙ 运行结果是 ; { char s[81],*p1,*p2;int n; char a1[80],a2[80],*s1=a1,*s2=a2; gets(s); gets(s1);gets(s2); n=strlen(s); if(!strcmp(s1,s2)) printf(“*”); p1=s;p2=s+n-1; else printf(“#”); while( ) printf(“%d”,strlen(strcat(s1,s2))); { 3、 下面程序功能是求算式:xyz+yzz=532中x、y、z的值(其中xyz和yzz if(*p1!=*p2)break;

分别表示一个3位数)。void main() else{p1++; ;} { int x,y,z,i,result=532; } for(x=1;x<10;x++) if(p1

不同的方法 for(j=2; j<=k ;j++) void main() if(m%j = = 0)break; { int i,j,k,count=0; if(j>k)printf(“]”,m) for(i=1;i<=9;i++) } for(j=0;j<=9;j++) }

C语言程序设计第1~3章练习题

一、选择题

1、一个C语言程序总是从____

A、主过程开始执行 B、主函数开始执行 C、子程序开始执行 D、主程序开始执行

2、若num、a、b和c都是int型变量,则执行表达式num=(a=4,b=16,c=32)后num的值为_

A、4 B、16 C、32 D、52

3、下面四个选项中,均是C语言关键字的选项是____

A、auto enum include

B、switch typedef continue C、signed union scanf D、if struct type

4、下面四个选项中,均是合法整型常量的选项是____

A、160 -0xffff 011 B、-0xcdf 01a 0xe C、-01 986,012 0668 D、-0x48a 2e5 0x 5、下面四个选项中,均是合法浮点数的选项是___

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-0

6、下面四个选项中,均是合法转义字符的选项是____

A、'\\'' '\\\\' '\\n' B、'\\' '\\017' '\\\C、'\\018' '\\f' 'xab' D、'\\\\0' '\\101' 'xlf' 7、下面正确的字符常量是____

A、'\\X17' B、'\\80' C、'\\\\' D、\

8、下面四个选项中,均是正确的八进制数和十六进制数的选项是____

A、-10 0x8f -011 B、0abc -017 0xc C、010 -0x11 0xf1 D、0a12 -0x123 -0xa

9、下面四个选项中,均是正确的数值常量或字符常量的选项是____

A、0.0 0f 8.9e '&'

B、\C、'3' 011 0xFF00 0a D、+001 0xabcd 2e2 50.

10、若有代数式

2lnxcosx3x,则正确的C语言表达式是____

A、2*ln(x)*cos(x)/3*x B、2*ln(x)*cos(x)/(3*x) C、2*log(x)*cos(x)/3*x D、2*log(x)*cos(x)/(3*x)

11、若有说明语句:char ch1='\\065';char ch2=\;char ch3='2';则:ch1中___

_,ch2中____,ch3中____

A、包含1个字符 B、包含2个字符

C、包含3个字符 D、字符个数不确定,说明不正确

12、若有运算符:>、*=、?:、%、sizeof,则将它们按运算的优先级排列的正确次序为(由

低至高)____

A、*=→?:→%→>→sizeof B、?: →*=→>→%→sizeof C、*=→>→?: →sizeof→% D、*=→?: →>→%→sizeof

13、若有以下类型说明语句:char a; int b; float c; double d;

则表达式a*b+d-c的结果类型为____

A、float B、char C、int D、double

14、若有变量说明:int a=0,b=0,c=0;,以下符合C语言语法的赋值表达式是____

A、a=9+b+c=a+9 B、a=9+b;c=a+9; C、a=(9+b,b++) D、a=9+b++=a+7

15、已知字母A的ASCII码为(65)10,变量ch1为字符型,则执行语句ch1='A'+'6'-'3';

后,ch1中的值为____

A、D B、68 C、一个不确定的值 D、C 16、以下运算符中优先级最高的运算符是____

A、&& B、++ C、?: D、!=

17、若有定义:int k=7;float a=2.5,b=4.7;则表达式a+k%3*(int)(a+b)%2/4的值是___

A、2.500000 B、2.7500000 C、3.500000 D、0.000000 18、sizeof(float)是____

A、双精度型表达式 B、一个整型表达式 C、一个函数调用 D、一个不合法的表达式

19、设变量y为float类型,x为int类型,则以下能实现将y中的数值保留小数点后两位,第三位进行四舍五入运算的表达式是____

A、y=(y*100+0.5)/100.0 B、x=y*100+0.5,y=x/100.0 C、y=y*100+0.5/100.0

D、y=(y/100+0.5)*100.0

20、设int类型的数据长度为2个字节,则unsigned int类型数据的取值范围是____

A、0~255 B、0~65535 C、-32768~+32767 D、-256~+255

21、若有以下定义,则能得到值为3的表达式是____(int m=7,n=12)

A、n%=(m%=5) B、n%=(m-m%5) C、n%=m-m%5 D、(n%=m)-(m%=5)

22、若有说明:int a=1,b=2,c=3,d=4;则表达式a

A、4 B、3 C、2 D、1

23、若x为int类型,则逗号表达式(x=4*5,x*5),x+25的结果是___,x的值是___

A、20 B、100 C、表达式不正确 D、45 24、putchar函数可以向终端输出一个____

A、整型变量值 B、实型变量值

C、字符串 D、字符或字符型变量值

25、若有以下变量说明和数据的输入方式,则正确的输入语句为('└─┘'代表空格)____

变量说明:float x1,x2; 数据的输入方式:4.52<回车> 3.5<回车> A、scanf(\; B、scanf(\;

C、scanf(\└─┘%2.1f\; D、scanf(\;

26、若运行以下程序时,从键盘输入25,13,10<回车>,则输出结果为____

main( ) {

int a1,a2,a3;

scanf(\;

printf(\; }

A、a1+a2+a3=48 B、a1+a2+a3=25 B、a1+a2+a3=10 D、不确定值

27、已知a、b、c为int类型变量,若有输入语句:scanf(\;为

使a值为1,b值为3,c值为2,从键盘输入数据的正确形式应当是____ A、132<回车> B、a=1b=3c=2<回车>

C、1<回车>3<回车>2<回车> D、a=1<回车>b=3<回车>c=2<回车> 28、以下能正确定义整型变量x、y和z并为其赋初值5的语句是____

A、int x=y=z=5; B、int x,y,z=5; C、int x=5,y=5,z=5; D、x=5,y=5,z=5;

29、执行下面程序段后,x的值是____

int x;

printf(\; A、10 B、15 C、20 D、5 30、下面程序段的输出结果是____

int a=023;

printf(\;

A、23 B、17 C、18 D、24

31、已知ch是字符型变量,则不正确的赋值语句是____

A、ch=5+9; B、ch='\\0'; C、ch='7'+'9'; D、ch='a+b';

32、设x,y是float型变量,则不正确的赋值语句是____

A、++x; B、y=int(5); C、x*=y+1; D、x=y=0;

33、设有说明:double b=0.5,c=1.5; int a=10;

则正确使用了C语言库函数的赋值语句是____

A、c=asin(c)+fabs(a); B、b=log10(b)+pow(b);

C、c=sqrt(b-c); D、a=(int)(atan2((double)a,b)+exp(b-0.2));34、以下程序段的输出结果是____

int i=1,j=4,k=2; float x=5.5,y=9.0,z;

z=(i+j)/k+sqrt((double)y)*1.2/k+x; printf(\;

A、9.800000 B、9.300000 C、8.500000 D、8.000000

35、若a为int类型变量,则执行以下程序段后a的值为____

a=5;

a*=a/=a++;

A、2 B、1 C、40 D、3

36、若a和b均为int型变量,则执行以下程序断后x的输出是____

x=15;y=15;

printf(\; A、0 B、1 C、6 C、12

37、若x为unsigned int类型变量,则执行以下程序段后x的值是____

x=65535;

printf(\;

A、65535 B、1 C、无定值 D、-1

38、以下语句的执行结果是____

printf(\;

A、1 B、0 C、-1 无定值

39、若x为int类型变量,则执行以下程序段后的输出结果是____

x=0xDEF;

printf(\;

A、3567,6757,def B、3567,6757,xdef C、3567,06757,0xdef D、3567,6757,0def

40、若a、b、c均为int型变量,则执行以下程序段后的输出结果为____

b=(a=10,a+5,c=10);

printf(\; c=(a=10,b=5,a+b);

printf(\; A、a=10,b=15,c=10 B、a=10,b=10,c=10 a=10,b=5,c=10 a=10,b=5,c=10 C、a=10,b=10,c=10 D、a=10,b=10,c=10 a=10,b=5,c=15 a=10,b=5,c=5

41、若a1、a2、a3、a4均为char类型变量,则执行以下程序段后的输出结果为____

a1='1'; a2='2'; a3='3'; a4='4'; printf(\; printf(\; printf(\; printf(\;

A、1 B、1 C、1 D、输出格式的描述符不正确 2 2 02 3 3 003 4 4 0004

42、执行语句printf(\;后的输出是____

A、The program's name is c:tools book.txt B、The program's name is c:\\tools book.txt C、The program's name is c:\\\\tools book.txt D、The program's name is c:\\toolook.txt

43、设a、b、c、d均是int类型变量,为了使以下程序段的输出为:1234+123+12+1,正确

的输入形式应当是____

scanf(\; printf(\;

A、1234123121<回车> B、1234123412341234<回车> C、1234+1234+1234+1234<回车> D、1234+123+12+1<回车>

44、设c1、c2均是char类型变量,则以下不正确的函数调用是____

A、scanf(\; B、getchar( ) C、putchar(c2); D、putchar(c1,c2) 45、逻辑运算符两侧运算对象的数据____

A、只能是0或1 B、只能是0或非0正数 C、只能是整型或字符型数据 D、可以是任何类型的数据 46、判断char型变量c1是否为大写字母的正确表达式是____

A、'A'<=c1<='Z' B、(c1>='A')&(c1<='Z')

C、(c1>='A')&&(c1<='Z') D、('A'<=c1) AND ('Z'>=c1)

47、执行以下程序段后的a值是___,b的值是___,c的值是___

int a=5,b=6,c=1,x=2,y=3,z=4; c=(a=c>x)&&(b=y>z);

A、0 B、6 C、1 D、5

48、设i、j、和k是int型变量,且i=3,j=4,k=5,则以下值为0的表达式是____

A、'i'&&'j' B、i<=j

C、i||j+k&&j-k D、!((i

49、设ch是char类型变量,其值是A,则以下表达式的值是____

ch=(ch>='A'&&ch<='Z')?(ch+32):ch A、Z B、A C、a D、z

50、若希望当num的值为奇数时,表达式的值为“真”,num的值为偶数时,表达式的值为

“假”。则以下不能满足要求的表达式是____ A、num%2==1 B、!(num%2==0) C、!(num%2) D、num%2

二、填空题

1、C源程序的基本单位是____。

2、一个C语句中至少应包含一个____。

3、在C语言中,输入操作可以由库函数____完成,输出操作可以由库函数____完成。

4、若x是int型变量,且x=6,则表达式x%2+(x+1)%2的值为____。

5、若a、b、c均是int型变量,则执行表达式c=(a=5)-(b=2)+a后,c的值为____。 6、若有定义:int y=7; float x=2.5,z=4.7;,则表达式x+(int)(y/3*(int)(x+z)/2)%4的值为____。

7、若采用十进制数的表示形式,则077为___,0111为___,0x29为___,0xab为___。

8、设x为float型变量,y为double型变量,a为int型变量,b为long型变量,c为char型变量,则表达式x+y*a/x+b/y+c的结果类型为____。

9、若有说明int x=10,y=20;请写出下面各printf语句对应的输出结果。

①printf(\; ____ ②printf(\; ____ ③printf(\; ____

④printf(\; ____ 10、设有以下变量说明:

int a=5,b=10;

float x=3.5,y=10.8; char c1='A',c2='B';

请根据以下输出格式和结果,完成printf语句中的填空。 ①a=5,b=10,x+y=14.3

printf(\________\_____); ②x-y=-7.3└─┘a-b=-5

printf(\________\_____); ③c1='A' or 65(ASCII) └─┘c2='B' or 66(ASCII) printf(\________\_____); 11、若有说明:

int a=123;

float b=456.78;

double c=-123.45678;

请写出以下各printf语句的输出结果。

①printf(\; _____ ②printf(\; _____ ③printf(\; ___

12、若a1和a2都是double型变量,且a1的初值为3.0,a2的初值为2.0,则表达式

pow(a2,fabs(a1))的值为____。

13、假设变量x和y均为整型,以下语句可以不借助任何变量把x、y中的值进行交换。

请填空。

x+=__; y=x-__; x-=__;

14、已有定义int m; float n,k; char ch1,ch2;,为使m=3, n=6.5, k=12.6, ch1='a',

ch2='A',对应的scanf语句是___________________,输入数据的方式是___________。

15、已有定义int a,b; float k;,为将-10赋给a,将12赋给b,410.34赋给k;则对应

以下scanf语句的数据输入形式是________。 scanf(\;

16、在C语言中,&作为双目运算符时表示的是___,而作为单目运算符时表示的是__。 17、设x、y、z均为int型变量,且x=3, y=-4, z=5,请写出下面每个表达式对应的结果。

①、(x&&y)==(x||z) ____ ②、!(x>y)+(y!=z)||(x+y)&&(y-z) ____ ③、x++-y+(++z) ____

18、设x、y、z均为int类型变量,请用C语言的表达式描述以下命题。

①、x或y中有一个小于z

__________________ ②、x、y和z中只有两个为负数

__________________ ③、y是奇数

__________________

19、以下程序的输出结果为____

main( ) {

int x,y,z=246; x=z/100%9; y=(-1)&&(-1);

printf(\; }

参考答案

第一二三章

一、 选择题: 1 B 2 C 3 B 4 A 5 B 6 A 7 C 8 C 9 D 10 D 11 ADA 12 D 13 D 14 C 15 A 16 B 17 A 18 B 19 B 20 B 21 D 22 D 23 DA 24 D 25 B 26 D 27 B 28 C 29 B 30 C 31 D 32 B 33 D 34 B 35 A 36 A 37 D 38 B 39 A 40 C 41 B 42 D 43 D 44 D 45 D 46 C 47 ABA 48 D 49 C 50 C 二、 填空题: 1、函数

2、main函数

3、scanf() , printf() 4、1 5、8

6、5.500000

7、63,73,41,171 8、double

9、<空格>30,310,<空格>12,<空格>1e

10、1):a=%d,b=%d,x+y=%4.1f,a,b,x-y 2):x-y=%4.1f a-b=%d,x-y,a-b 3)c1=\\’%c\\’ or %d(ASCII) c2=\\’%c\\’ or %d(ASCII),c1,c1,c2,c2

11、1)456.7804.57e+02-123.4567802) 456.7804.57e+02-123.4573)123456.780 -123e+02 12、8.000000 13、y,y,y

14、scanf(“%d%f%f%c%c”,&m,&n,&k,&ch1,&ch2);3 6.5 12.6aA 15、-12 c 410.34 16、按位与,取地址 17、1,1,13

18、(x*y*z>0)&&(x<0||y<0||z<0) 19、2,1

C语言程序设计第4章练习题

一、选择题

51、以下正确的if语句是____

A、if (n>0) printf(\ printf(\; B、if (n>0)

{ n=n+m; printf(\; } else printf(\; C、if (n>0)

{ n=n+m; printf(\; }; else printf(\; D、if (n>0)

{ n=n+m; printf(\; else printf(\; 52、以下程序____ main( )

{ int x1=3, x2=0, x3=0; if(x1=x2+x3)

printf(\;

else

printf(\; }

A、输出:* * * * B、输出:# # # # C、存在语法错误 D、无输出结果

53、为了避免在嵌套的条件语句if-else中产生二义性,C语言规定:else子句总是与__

A、缩排位置相同的if配对 B、其之前最近且不带else的if配对 C、其之前最近的if配对 D、第一个if配对

54、若w、x、y、z、k均为int类型变量,则执行下面语句后的k的值是____ w=1; x=2; y=3; z=4; k=(w

A、1 B、2 C、3 D、4

55、下面程序段所表示的数学函数关系是____ x=-1;

if (a!=0)

if (a>0) x=1; else x=0;

-1 (a<0) 1 (a<0) A、x= 0 (a=0) B、x= -1 (a=0) 1 (a>0) 0 (a>0) 0 (a<0) -1 (a<0) C、x= -1 (a=0) D、x= 1 (a=0) 1 (a>0) 0 (a>0)

56、以下关于switch语句和break语句的描述中正确的是____

A、在switch语句中必须使用break语句 B、break语句只能用于switch语句体中 C、break语句只能用于循环语句中

D、在switch语句中使用break语句或continue语句的作用相同

57、设有说明:int a=1,b=0; 则执行以下语句后的输出结果是____ switch(a) { case 1:

switch(b)

{ case 0: printf(\; break; case 1: printf(\;break; }

case 2: printf(\; break;

}

A、** 0 ** B、** 0 ** ** 2 **

C、** 0 ** D、switch语句中存在语法错误 ** 1 ** ** 2 **

58、设有程序段____ int x=10; while (x=0) x=x-1;

A、while循环执行10次 B、循环是无限循环

C、循环体语句一次也不执行 D、循环体语句只执行一次 59、语句while (!y)中的表达式 !y 等价于____ A、y==0 B、y!=1 C、y!=0 D、y==1 60、以下关于do-while循环不正确的描述是___ A、d0-while的循环体至少执行一次

B、do-while循环由do开始,用while结束,在while (表达式)后面不能写分号 C、在do-while循环体中,一定要有能使while后面表达式的值变为零(\假\)的操作 D、do-while的循环体可以是复合语句

61、设x、y均是int类型变量,且x值为100,则关于以下for循环的正确判断是____ for (y=100; x!=y; ++x,y++) printf(\;

A、循环体只执行一次 B、是无限循环 C、循环体一次都不执行

D、for语句中存在语法错误

62、以下程序段中的do-while循环____ m=-1; do

{ m=m*m; }while(!m);

A、是死循环 B、执行二次 C、执行一次 D、有语法错误 63、以下关于for循环的正确描述是____

A、for循环只能用于循环次数已经确定的情况 B、for循环是先执行循环体语句,后判断表达式 C、在for循环中,不能用break语句跳出循环体

D、for循环的循环体语句中,可以包含多条语句,但必须用花括号括起来 64、语句for (表达式1; ; 表达式3)等价于____ A、for (表达式1; 0 ; 表达式3) B、for (表达式1; 1 ; 表达式3)

C、for (表达式1; 表达式1; 表达式3) D、for (表达式1; 表达式3; 表达式3)

65、若k为整型变量,则以下for循环的执行次数是____ for (k=2; k==0; ) printf(\;

A、无限次 B、0次 C、1次 D、2次 66、以下程序段的执行结果是____ int x=-3; do

{ printf(\; }while(!x);

A、-3 D、-3 B、-2 -2 C、陷入死循环 -1

67、执行以下程序段后,y的值是____,x的值是____ int x=1, y=10;

do

{ y-=x; x++;

}while(y--<0);

A、9 B、8 C、-2 D、2 E、4 F、3

68、执行以下程序段后a的值是____,b的值是____ { int m=0; while (m<=2) { m++;

printf(\; } }

int a, b;

for (b=1,a=1; b<=50; b++) { if (a>=10) break; if (a%2==1) { a+=5;

continue; }

a-=3; }

A、10 B、6 C、7 D、8 E、4 69、以下程序段的执行结果是____ int a, b;

for (a=1; a<5; a+=2) { for (b=1; b<5; b++) printf(\; if (b==5)

printf(\; }

A、 1 2 3 4 B、1 2 3 4

3 6 9 12 6 9 12 15

C、 2 3 4 6 9 12 D、 2 3 4 6 9 12 10 15 20

70、以下程序段中是死循环的是____

A、int n=1; B、int n=1; while (!n) do { n--; n++; }while(n);

C、int n=1; D、for (n=5; n<1; do { n++;

}while(n);

71、下面程序的运行结果是____ main( ) ; A、1 B、 1 2 C、1 D、1 2 2 3 3 4

72、以下能正确计算1×2×3×?×10的程序段是____

A、do B、do

{ k=1; n=1; { k=1; n=0; n=n*k; n=n*k; k++; k++;

}while(k<=10); }while(k<=10); C、k=1; n=1; D、k=1; n=0; do do

{ n=n*k; { n=n*k; k++; k++;

}while(k<=10); }while(k<=10);

73、下面程序的功能是计算1至10之间的奇数之和以及偶数之和。请选择填空。 main( )

{ int x, y, z, k; x=z=0;

for (k=0; k<=10; k+=2) { x+=k;

________; z+=y; }

printf(\偶数之和 = %d\\n\;

printf(\奇数之和 =%d\\n\________); }

①、A、y=k-- B、y=k+1 C、y=k++ D、y=k-1 ②、A、z-10 B、z C、z-11 D、z-y

) 74、下面程序段的功能是计算1000!的末尾含有多少个零。请选择填空。

(提示:只要算出1000!中含有因数5的个数即可。) for (m=0,n=5; n<=1000; n+=5) { t=n;

while (________) { m++; t=t/5; } }

A、t%5 B、t=t%5==0 C、t%5==0 D、t%5!=0 75、若有以下程序段:

for (m=1; m<=100; m++) { scanf(\; if (y<0)

continue;

printf(\; } 正确的描述是____

A、当y<0时整个循环结束 B、y>=0时什么也不输出 C、printf函数永远也不执行 D、最多允许输出100个非负整数 76、以下程序段等价于____ for (k=100; k<=200; k++) { if (k%3==0) continue;

printf(\; }

A、for (k=100; (k%3)&&k<=200; k++) printf(\;

B、for (k=100; (k%3)||k<=200; k++) printf(\; C、for (k=100; k<=200; k++)

if (k%3!=0) printf(\; D、for (k=100; k<=200; k++) { if (k%3)

printf(\; else

continue; break; }

二、填空题

20、以下程序的功能是:输入三个整数n1、n2、n3,按从大到小的顺序进行输出。请填空。 main( )

{ int n1, n2, n3, temp;

scanf(\; if (______)

{ temp=n2; n2=n3; n3=temp; } if (______)

{ temp=n1; n1=n2; n2=temp; } printf(\;

}

21、以下程序的功能是:输入一个小写字母,按字母排列顺序后移5个位置后输出(如把'a'

变为'f', 'w'变成'b')。请填空。 #include \ main( ) { char c1;

c1=getchar( );

if (c1>='a' && c1<='u') ______;

else if (c1>='v' && c1<='z') ______; putchar(c1); }

22、输入一个字符,如果它是一个大写字母,则把它变成小写字母;如果它是一个小写字

母,则把它变成大写字母;其它字符不变。请填空。 main( )

{ char ch1;

scanf(\;

if (________________) ch1=ch1+32;

else if (ch1>='a' && ch1<='z') ________; printf(\; }

23、阅读下面的程序并回答问题。

main( )

{ int m, n, x, y;

scanf(\; m=1; n=1;

if (x>0)

m=m+1;

if (x>y)

n=m+n;

else if (x==y) n=5; else

n=2*m;

printf(\; }

问题:为了使输出n=4,x的输入值应当为______,y的输入值应当为____。24、以下程序的功能是:根据输入的三条边的值判断是否能组成三角形,若能组成则输出三

角形的面积和三角形的类型。请填空。 #include \ main( )

{ float a1, a2, a3; float s, area;

scanf(\;

if (_____________________) { s=(a1+a2+a3)/2;

area=sqrt(s*(s-a1)*(s-a2)*(s-a3)); printf(\;

if (______________) printf(\等边三角形\;

else if (_________________) printf(\等腰三角形\; else if ((a1*a1+a2*a2==a3*a3)

|| (a1*a1+a3*a3==a2*a2) || (a2*a2+a3*a3==a1*a1))

printf(\直角三角形\; else

printf(\一般三角形\; } else

printf(\不能组成三角形\; }

25、以下程序的功能是判断输入的年份是否是闰年。请填空。 main( )

{ int year, yes; scanf(\; if (year@0==0) year=1;

else if (__________________) yes=1; else

____; if (yes)

printf(\; else

printf(\; printf(\; }

26、以下程序段根据输入的截止日期(年:yend,月:mend,日:dend)和出生日期(byear,bmonth,bday),计算出实际年龄。请填空。 ??

int yend, mend, bend, byear, bmonth, bday, age; age=yend-byear;

if (mend____bmonth) age--;

else if (mend___bmonth &&dend___bday) age--; ??

27、如果运行以下程序段时输入字符“t”,则程序段的运行结果是____ main( ) { char c1;

scanf(\;

c1=(c1>='A' && c1<='Z') ? (c1+32) : c1; c1=(c1>='a' && c1<='z') ? (c1-32) : c1; printf(\; }

28、以下程序的功能是找出x、y、z三个数中的最小值。请填空。 main( )

{ int x=4, y=5, z=8; int u, v;

u=x

printf(\; }

29、若运行以下程序时,输入下面指定数据,则运行结果为______ #include main( ) { int ch;

while ((ch=getchar( ))!='\\n') { switch(ch-'1') { case 0:

case 1: putchar(ch+3);

case 2: putchar(ch+3); break; case 3: putchar(ch+3);

default: putchar(ch+1); break; } }

printf(\; }

输入数据(从第一列开始): 1234<回车>

30、将以下嵌套的if语句改写成对应的switch语句,使其完成相同的功能。请填空。(假设mark的取值在1至100之间。) if 语句:

if (mark<60) k=1;

else if (mark<70) k=2; else if (mark<80) k=3; else if (mark<90) k=4;

else if (mark<=100) k=5; switch语句:

switch(______)

{ ______ k=1; break; case 6 : k=2; break; case 7 : k=3; break; case 8 : k=4; break;

____ k=5;

}

31、将以下含有switch语句的程序段改写成对应的含有非嵌套if语句的程序段,请填空。 含有switch语句的程序段: int s, t, m; t=(int)(s/10); switch( t )

{case 10: m=5; break; case 9: m=4; break; case 8: m=3; break; case 7: m=2; break; case 6: m=1; break; default: m=0;

}

含有非嵌套if语句的程序段: int s, m;

if (______) m=5;

if ((s<100) && (s>=90)) m=4; if ((s<90) && (s>=80)) m=3; if ((s<80) && (s>=70)) m=2; if ((s<70) && (s>=60)) m=1;

if (______) ________;

32、用switch语句实现以下数学关系,请填空。 -1 (x<0) y= 0 (x=0) 1 (x>0) switch(x<0)

{ case 1: y=-1; ____ case 0: switch(x==0)

{ case 1: y=0; ____ ____ y=1; }

}

33、将以下含有switch语句的程序段改写成对应的含有嵌套if语句的程序段,请填空。 含有switch语句的程序段: int s, t, m; t=(int)(s/10); switch( t )

{case 10: m=5; break; case 9: m=4; break; case 8: m=3; break; case 7: m=2; break; case 6: m=1; break; default: m=0; }

含有嵌套if语句的程序段: int s, m;

if (____) m=0; else if (s<70) m=1; else if (s<80) m=2; else if (s<90) m=3;

else if (s<100) m=4; ______;

34、设x和y均为int类型变量,则以下for循环中的scanf语句最多可执行的次数是____

for (x=0, y=0; y!=123 && x<3; x++)

scanf(\; 35、设a、b、c均是int类型变量,则执行以下for循环后,c的值为____ for (a=1, b=5; a<=b; a++)

c=a+b;

36、以下程序的运行结果为____ main( ) { int j=5;

while (j<=15)

if (++j % 2!=1) continue;

else printf(\; printf(\; }

37、设ch1为char类型变量,若从键盘上由第一列输入以下数据: right?<回车> 则以下三个程序段的输出结果分别是_____,____,____。 ①、c=getchar( ); while (c!='?')

{ putchar(c); c=getchar( ); } ②、while ((c=getchar( ))!='?') putchar(++c);

③、while (putchar(getchar( ))!='?') ;

38、下面程序段的功能是统计从键盘输入的字符中的数字字符个数,用换行符'\\n'结束循环,请填空。

int n=0, c; c=getchar( ) ; while (____) { if (____) n++;

c=getchar( ); }

39、以下do-while语句中循环体的执行次数是____ a=10; b=0; do

{ b+=2; a-=2+b; }while(a>=0);

40、以下程序段的运行结果是____ x=2; do

{ printf(\; x--; }while(!x==0);

41、下面程序段是找出整数的所有因子,请填空。 scanf(\;

for ( ; ____ ; )

{ if (x%i == 0) printf(\; i++; }

42、设鸡兔共有30只,脚共有90个,下面程序段是计算鸡兔各有多少只,请填空。 for (x=1; x<=29; x++) { y=30-x;

if (________)

printf(\; } 43、若用以下形式表示for循环语句: for (表达式1;表达式2;表达式3) 循环体语句

则执行语句for (i=0; i<3; i++) printf(\; 时,表达式1执行____次,表达式3执行____次。

44、下面程序的功能是计算1-3+5-7+??-99+101的值,请填空。 main( )

{ int i, t=1, s=0;

for (i=1; i<=101; i+=2)

{ ____; s=s+t; ____; } printf(\; }

45、以下程序的功能是求出下面算式中的X、Y、Z的值,请填空。 算式:XYZ

+YZZ 532

main( )

{ int x, y, z, k, result=532; for (x=1; x<10; x++) for (y=1; y<10; y++)

for (z=__; ___; z++)

{ k=(______)+(100*y+10*z+z); if (k==result)

printf(\; } }

46、下面程序的功能是求1000以内的所有完全数,请填空。(说明:一个数如果恰好等于它的因子之和(除自身外),则称该数为完全数,例如:6=1+2+3,6为完全数。) main( )

{ int a, i, m;

for (z=1; a<=1000; a++)

{ for (____; i<=a/2; i++) if (!(a%i)) ____;

if (m==a) printf(\; }

}

47、下面程序的运行结果是____ #include \ main( )

{ int i, j;

for (i=4; i>=1; i--) { for (j=1; j<=i; j++) printf(\;

for (j=1; j<4-i; j++) putchar('*'); putchar('\\n'); } }

48、下面程序的功能是计算100至1000之间有多少个数其各位数字之和是5,请填空。 main( )

{ int i, s, k, count=0; for (i=100; i<=1000; i++) { s=0; k=i; while (____) { s=s+k;

k=____; } if (s!=5) ____; count++; }

printf(\;

}

49、下面程序的功能是打印100以内个位数为6且能被3整除的所有数,请填空。 main( )

{ int i, j;

for (i=0; ____; i++) { j=i*10+6;

if (____) continue; printf(\; }

}

答案

一、 选择题: 51 B 52 B 53 B 54 A 55 C 56 D 57 B 58 C 59 A 60 B 61 C 62 C 63 D 64 B 65 B 66 A 67 BD 68 AB 69 A 70 C 71 C 72 C 73 BC 74 C 75 D 76 C 二、 填空题: 20、n2=’A’&&ch1<=’Z’,ch1-ch1-32 23、x>0且xx 24、a1+a2>a3&&a1+a3>a2&&a2+a3>a1,a1==a2&&a2==a3,a1==a2||a2==a3||a1==a3 25、year%4==0&&year0!=0,yes=0 26、

31、s<110&&s>=100,s<60||s>=110,m=0 32、break;,default:,case 0: 33、s<60||s>109,else m=5 34、3

35、10 36、7 9 11 13 15

37、right,sjhiu,right? 38、c!=’\\n’,c>=’0’&&c<=’9’ 39、3 40、**

41、i<=x 42、2*x+4*y==90 43、1,3 44、t=t*x,t=-t/i 45、0,z<10,100*x+10*y+z 46、I=1,m=0,m+=i 47、####

### ##*

#** 48、k!=0,k/10,continue 49、i<=9,j%3!=0

C语言程序设计第5章练习题

一、选择题

77、以下对一维数组a的正确说明是____ A、char a(10); B、int a[ ];

C、int k=5,a[k]; D、char a[ ]={'a' , 'b' , 'c'};

78、若有说明语句:int a[2][4];,则对a数组元素的正确引用是____ A、a[0][3] B、a[0][4] C、a[2][2] D、a[2][2+1] 79、以下能对二维数组y进行初始化的语句是___ A、static int y[2][ ]={{1,0,1}, {5,2,3}}; B、static int y[ ][3]={{1,2,3}, {4,5,6}}; C、static int y[2][4]={{1,2,3}, {4,5} , {6}}; D、static int y[ ][3]={{1,0,1,0}, { }, {1,1}};

80、若有说明语句:int y[ ][4]={0,0}; 则下面叙述不正确的是____ A、数组y的每个元素都可得初值0 B、二维数组y的行数为1

C、该说明等价于int y[ ][4]={0};

D、只有元素y[0][0]和y[0][1]可得到初值0,其余元素均得不到初值0 81、以下各组选项中,均能正确定义二维实型数组s的选项是____ A、float s[3][4]; B、float s(3,4);

float s[ ][4]; float s[ ][ ]={{0};{0}}; float s[3][ ]={{1},{0}}; float s[3][4]; C、 float s[3][4]; D、float s[3][4];

static float s[ ][4]={{0},{0}}; float s[3][ ]; auto float s[ ][4]={{0},{0},{0}}; float s[ ][4];

82、若有说明语句:int a[ ][3]={1,2,3,4,5,6,7,8}; ,则a数组的行数为____ A、3 B、2 C、无确定值 D、1

83、若二维数组y有m列,则在y[i][j]前的元素个数为____

A、j*m+i B、i*m+j C、i*m+j-1 D、i*m+j+1 84、下面程序中有错误的行是____

1、 main( ) 2、 {

3、 int x[3]={1}; 4、 int k;

5、 scanf(\;

6、 for (k=1; k<3; k++) 7、 x[0]=x[0]+x[i];

8、 printf(\;

A、语句void p_ch( );有错,它是函数调用语句,不能使用void说明 B、变量名不能使用大写字母

C、函数说明和函数调用语句之间有矛盾 D、函数名中不能使用下划线

106、C语言允许函数值类型的缺省定义,此时该函数值隐含的类型是_____ A、float B、int C、long D、double

107、以下程序的功能是计算函数F(x, y, z)=(x+y)/(x-y)+(z+y)/(z-y)的值,请选择填空。 #include #include

float fun1(float , float); main( )

{ float x, y, z, sum;

scanf(\;

sum=fun1(__①__)+fun1(__②__); printf(\; }

float fun1(float a, float b) { float num; num=a/b;

return(num); }

① A、x-y, x+y B、x+y, x-y C、z+y, z-y D、z-y, z+y ② A、x-y,x+y B、x+y,x-y C、z+y,z-y D、z-y,z+y 108、以下正确的描述是_____

A、函数的定义可以嵌套,但函数的调用不可以嵌套 B、函数的定义不可以嵌套,但函数的调用可以嵌套 C、函数的定义和函数的调用均不可以嵌套 D、函数的定义和函数的调用均可以嵌套

109、若使用一维数组名作函数实参,则以下正确的说法是_____ A、必须在主调函数中说明此数组的大小 B、实参数组类型与形参数组类型可以不匹配 C、在被调函数中,不需要考虑形参数组的大小 D、实参数组名与形参数组名必须一致

110、如果在一个函数中的复合语句中定义了一个变量,则以下正确的说法是_____ A、该变量只在该复合语句中有效 B、该变量在该函数中有效 C、该变量在本程序范围内有效 D、该变量为非法变量

111、以下不正确的说法为_____

A、在不同函数中可以使用相同名字的变量 B、形式参数是局部变量

C、在函数内定义的变量只在本函数范围内有效

D、在函数内的复合语句中定义的变量在本函数范围内有效 112、在一个源文件中定义的全局变量的作用域为_____ A、本文件的全部范围 B、本程序的全部范围 C、本函数的全部范围

D、从定义该变量的位置开始至本文件结束 113、以下程序的运行结果是_____ #include void ff1( )

{ extern int x, y; int a=15, b=10; x=a-b; y=a+b; }

int x, y; main( )

{ int a=7, b=5; x=a+b; y=a-b; ff1( );

printf(\; }

A、12, 2 B、不确定 C、5, 25 D、1, 12

114、凡是函数中未指定存储类别的局部变量,其隐含的存储类别为_____ A、自动(auto) B、静态(static)

C、外部(extern) D、寄存器(register) 115、以下程序的运行结果是_____ main( )

{ int a=1, k;

for (k=0; k<3; k++) printf(\;

}

f1(int x)

{ static int z=3, y=0; y++; z++;

return(x+y+z); }

A、6 8 10 B、6 6 6 C、7 8 9 D、7 9 11 116、以下程序的运行结果是_____ main( )

{ char str1[ ]=\; ff(str1);

printf(\; }

ff(char str1[ ]) { int x, y;

for (x=y=0; str1[x]!='\\0'; x++) if (str1[x]!='c') str[y++]=str1[x]; str1[y]='\\0'; }

A、str[ ]=abdef B、str[ ]=abcdef

C、str[ ]=a D、程序中存在语法错误 二、填空题

69、一个C程序是由若干个函数构成的,其中必须有一个_____

70、在C语言中,一个函数通常由两部分组成,它们是_____和_____ 71、以下程序的运行结果是_____ void f1(int x, int y, int z) { x=111; y=222; z=333; }

main( )

{ int x=100, y=200, z=300; f1(x, y, z);

printf(\; }

72、以下程序的运行结果是_____ int fun(int x, int y) { int z; while (y)

{ z=x%y; x=y; y=z; } return(x); }

main( )

{ int i=16, j=6, k; k=fun(i, j);

printf(\; }

73、以下函数用于统计一行中的单词个数,单词之间用空格分隔。请填空。 word_num(char str [ ]) { int i, num=0, word=0;

for (i=0; str[i]!= ___; i++) if (____==32) word=0; else if (word==0) { word=1;

_____; } return(num); }

74、以下函数用于找出一个2×4矩阵中的最大元素值 max_value(int arr[ ][4]) { int i, j, max; max=arr[0][0];

for (i=0; _____; i++) A(x,y)?x2 for (j=0; _____; j++) e2(x?y)?1?2e?x?y??3e2?x?y? if (arr[i][j]>max) max=_____; return(max); }

75、以下函数f1用于求两个整数a和b的最大公约数。 f1(int a, int b) { int i, j, m, n; if (a>b)

{ m=a; a=b; _____; } i=a; j=b;

while ((n= _____)!=0) { j=i; i=_____; }

return(i); }

76、以下程序的功能是:从键盘输入若干字符后,可统计出主函数调用count函数的次数,用字符“!”作为输入结束的标志。请填空。 count(_____) { static int k=0; k++;

if (ch2=='!')

printf(\_____); }

main( ) { char ch1; while (1)

{ scanf(\; count(ch1); if (ch1=='!') break; } }

77、以下程序的功能是完成下面数学函数A(x, y)的计算。请填空。 #incude #include float fun(float ff) { float f2;

f2=ff*ff+sqrt(1+_____+_____); return(f2); }

main( )

{ float x, y, f1;

scanf(\; f1=x*x/fun(exp(x-y)); printf(\; }

78、以下函数conj把两个字符串str1和str2连接起来。 conj(char str1[ ], char str2[ ]) { int i=0, j=0;

while (str1[i]!= _____) i++; while (str2[j]!= _____) str1[i++]=str2[j++]; _____='\\0'; }

79、以下函数fmin返回数组arr中最小元素的下标,数组中元素的个数由x传入。请填空。 fmin(int arr[ ], int x) { int min,q;

for (q=1, min=0; q80、以下程序的运行结果是_____ int y=2; f1(int x) { int y=3; y+=x++;

printf(\; }

main( ) { int i=2; f1(i); y+=i++;

printf(\; }

81、以下函数invert的功能是将一个字符串str1的内容倒置。请填空。 #include

void invert(char str1[ ]) { int a, b; _____;

for (a=0, b=strlen(str1); _____; a++, b--) { c=str1[a]; str1[a]=str1[b-1]; str1[b-1]=c; } printf(\; }

82、以下程序的运行结果是_____ int fun1(int num) { int x;

if (num= =1) x=10;

else x=fun(num-1)+2; return(x); }

main( ) { int y;

printf(\; }

第六章

一、 选择题 100 C 101 D 102 A 103 C 104 B 105 C 106 B 107 B 108 B 109 A 110 A 111 D 112 D 113 C 114 A 115 A 116 A 二、 填空题 69、main()函数

70、说明部分、执行部分 71、300,200,100 72、2

73、’\\0’,str[i],num++ 74、i<2,j<4,arr[i][j] 75、b=m,j%i 76、char ch2,k 77、2*ff,3*ff*ff

78、’\\0’,’\\0’,str[i] 79、min=q 80、54

81、char c,a

第七章

117、以下关于预处理的叙述中不正确的是_____

A、C源程序中凡是以“#”号开始的控制行都是预处理命令行 B、预处理命令行必须位于源程序的开始部位 C、一条有效的预处理命令行必须单独占据一行 D、预处理命令是在正式编译之前先行被处理的 118、以下关于文件包含的描述中正确的是_____

A、每个C程序必须包含预处理命令:#include

B、#include 后面的文件名用双引号(\)括起和尖括号(<>)括起完全等效 C、#include 命令行可以出现在源程序中需要的任何地方

D、用#include 所包含的文件称为头文件,必须以.h作为扩展名 119、以下有关宏替换的叙述不正确的是_____ A、宏名不具有类型

B、宏名必须用大写字母表示 C、宏替换只是字符替换 D、宏替换不占用运行时间

120、C语言的编译系统对宏命令的处理是_____ A、在对源程序中其它成分正式编译之前进行的 B、和C程序中的其它语句同时进行的 C、在程序连接时进行的 D、在程序运行时进行的

121、以下程序运行后,输出结果是_____ #define ADD(x) x+x main( )

{ int m=1, n=2, s=3; s*=ADD(m+n);

printf(\; }

A、s=8 B、s=9 C、s=6 D、s=18

122、执行以下程序后,m的值是_____

#define MIN(x, y) (x)<(y) ? (x) : (y) main( )

{ int i=12, j=8, m; m=10*MIN(i, j); printf(\; }

A、120 B、80 C、12 D、8

123、若有宏定义如下: #define X 5 #define Y X+1 #define Z Y*X/2

则执行以下语句后,输出结果是_____ int a; a=Y;

printf(\; printf(\; A 7 B 12 C 12 D 7 6 6 5 5 124、若有以下宏定义: #define N 2

#define Y(n) (N+1)*n

则执行语句int z; z=2*(N+Y(5));后z的值是____ A、50 B、34 C、19 D、无定值 125、以下程序的运行结果是_____

#define MAX(X, Y) (X)>(Y) ? (X) : (Y) #define PRINT(Y) printf(\ main( )

{ int a=1, b=2, c=3, d=4, t; t=MAX(a+b, c+d); PRINT(t); }

A、Y=3 B、存在语法错误 C、Y=7 D、Y=0

126、以下程序段中宏代换后存在错误的是_____ A、#define ar_size 100 int array1[ar_size]; B、#define PI 3.1415926 #define S(r) PI*(r)*(r) ??

area=S(a+b);

C、#define PI 3.1415926; #define S(r) (r)*(r)* PI ??

area=S(a+b);

D、#define PI 3.1415926 #define S (r) PI*(r)*(r) ?? area=S(a);

127、以下为计算x2

+2x-3之值而定义的宏中,形式正确、使用可靠的是_____ A、#define F(x) ((x)*(x)+2*(x)-3) B、#define F(x)=(x)*(x)+2*(x)-3 C、#define F(x) x*x+2*x-3 D、#define F(x) (x*x+2*x-3) 128、以下程序的输出结果是_____ #include #define F(y) 8.19-y

#define PRINT(a) printf(\ main( ) { int x=2;

PRINT(x*F(3)); }

129、以下在任何情况下计算两数积时都不会引起二义性的宏定义是_____ A、#define MUL(x,y) x*y B、#define MUL(x,y) (x)*(y) C、#define MUL(x,y) (x*y)

D、#define MUL(x,y) ((x)*(y)) 二、填空题

83、设有以下宏定义: #define WIDTH 80

#define LENGTH WIDTH+40

则执行语句:int v; v=LENGTH*2;后,v的值是_____ 84、下面程序的运行结果是_____ #define DOUBLE(r) r*r main( )

{ int x=1, y=2, t; t=DOUBLE(x+y)/(x+y); printf(\; }

85、以下程序的运行结果是_____ #define MAX(a, b, c)

( (a)>(b) ? ((a)>(c)?(a):(c)) : ((b)>(c)?(b):(c)) ) main( ) { int x, y;

x=1; y=2;

printf(\; }

86、下面程序的运行结果是_____ #define MAX(a, b) (a>b?a:b)+1 main( )

{ int i=6, j=8, k;

printf(\; }

87、下面程序的运行结果是_____

#define PR(ar) printf(\; main( )

{ int j, a[ ]={1, 3, 5, 7, 9, 11, 13, 15}, i=5; for (j=3; j; j--) { switch(j) { case 1:

case 2: PR(a[i++]); break; case 3: PR(a[--i]); } } }

88、以下程序的运行结果是_____ #define A 4

#define B(x) A*x/2 main( )

{ float c, a=4.5; c=B(a);

printf(\; }

90、为了使以下程序正确运行,应包含的命令行是__________ main( )

{ int x=2, y=3;

printf(\; }

三、编程题

1、编写函数isletter(char c),判断c是否为字母。若是返回函数值为1;否则返回函数值为0。注意:不得调用系统函数isalpha.请勿改动主函数和其它内容。 #include

isletter(char c) { }

main( ) { char ch;

ch=getchar( ); if (isletter(ch)) printf(\; else printf(\; }

答案

一、 选择题 117 B 118 C 119 B 120 A 121 D 122 D 123 D 124 B 125 C 126 D 127 A 128 D 129 D 二、 填空题 83、160 84、1 85、3 86、9

87、 9 9 11 88、9.0 89、

90、#include

C语言程序设计第8章练习题

一、选择题

133、设有定义:int a=1, *p=&a; float b=2.0; char c='A'; ,以下不合法的运算是____

A、p++; B、a--; C、b++; D、c--; 134、以下程序执行后a的值为____ main( )

{ int a, m=2, k=1, *p=&k; a=p==&m;

printf(\; }

A、-1 B、0 C、1 D、2

135、以下对指针变量的操作中,不正确的是___ A、int p, *q; q=&p;

B、int *p, *q; q=p=NULL; C、int a=5, *p; *p=a;

D、int a=5, *p, *q=&a; *p=*q;

136、以下对指针变量的操作中,不正确的是___ A、int a, *p, *q; p=q=&a; B、int a=6, *p, *q=&a; p=q; C、int a=b=6, *p; p=&a; b=*p; D、int a, *p, *q; q=&a; p=*q;

137、设有语句:int k=1, *p1=&k, *p2=&k;,以下不能正确执行的赋值语句是____ A、p1=k B、p1=p2

C、*p1=*p2 D、k=*p1+*p2

138、若有语句:int a=4, *p=&a;,下面均代表地址的一组选项是____ A、a, p, &*a B、*&a, &a, *p C、&a, p, &*p D、*&p, *p, &a

139、设已有说明语句:int i=5, *q;,若要建立如图所示的存储结构,以下正确的赋值语句是____

A、q=i; B、*q=i; C、q=&i; D、*q=&i;

140、若有说明语句:char c='9', *sp1, *sp2;,以下均正确的一组赋值语句是____

A、sp1=&c; sp2=sp1; B、sp1=&c; sp2=&sp1; C、sp1=&c; sp2=*sp1;

D、sp1=&c; *sp2=*sp1; 141、以下判断正确的是____

A、char *s=\; 等价于char *s; *s=\;

B、char str[10]={\; 等价于:char str[10]; str={\; C、char *s=\; 等价于char *s; s=\;

D、char str[10]={\; 等价:char str[10]; *str={\; 142、以下能正确进行字符串赋值操作的是____ A、char s[5]={\;

B、char s[5]={'A', 'B', 'C', 'D', 'E'}; C、char *s; *s=\; D、char *s=\;

143、下面程序段的运行结果是____ char *s=\;

s+=1;

printf(\;

A、bcde B、字符'b'的地址

C、字符'c'的地址 D、字符'b'的ASCII值 144、以下能正确读入字符串的程序段是____ A、char *p; scanf(\;

B、char str[10]; scanf(\;

C、char str[10], *p; p=str; scanf(\; D、char str[10], *p=str; scanf(\; 145、设有说明语句:

char *str=\;,则指针str所指字符串的长度为____

A、13 B、15 C、17 D、说明语句不合法 146、以下运算正确的程序段是____

A、char str1[ ]=\; strcpy(str1, str2);B、char str[10], *st=\; strcat(str, st);

C、char *st1=\; strcat(st1,st2); D、char str[10]=\; strcat(str, st); 147、下面程序段的运行结果是____

char str[ ]=\; printf(\;

A、字符'z'的地址 B、0 C、字符'z'的ASCII码 D、字符'z' 148、以下程序段的运行结果是____

char a[ ]=\; p=a;

while (*p!='g')

{ printf(\; p++; }

A、PROgram B、PROGRAM C、PRO D、proGRAM 149、下面程序段的运行结果是____

main( )

{ char c1, c2; c1='A'+'5'-'3'; c2='A'+'6'-'3';

printf(\; }

A、C,D B、67,D C、无确定值 D、B,C 150、以下程序段的运行结果是____

char b[ ]=\; for (p=b; p

则对库函数strcpy调用正确的是____

A、strcpy(s1, s4); B、strcpy(s2, s4); C、strcpy(s3, s1); D、strcpy(s4, s1);

152、以下与库函数strcpy(char *s1, char *s2)功能不相等的程序段是____

A、strcpy1(char *s1, char *s2)

{ while ((*s1++=*s2++)!='\\0') ; } B、strcpy2(char *s1, char *s2) { while (*s2)

*s1++=*s2++; }

C、strcpy3(char *s1, char *s2) { while (*s1++=*s2++) ; }

D、strcpy4(char *s1, char *s2) { while ((*s1=*s2)!='\\0') { s1++; s2++; } } 153、以下程序段的输出结果是____

char a[ ]=\; ptr=a;

for ( ; ptr

A、Program B、Porm C、有语法错 D、Por 154、以下语句不正确的是____

A、char a[6]=\;

B、char a[6], *p=a; p=\; C、char *a; a=\;

D、char a[6], *p; p=a=\; 155、下面程序段的运行结果是____

char st[8]=\; printf(\; A、output B、\C、\\\ D、编译出错 156、以下程序段的输出结果是____

char a[ ]=\; while (*ptr)

{ printf(\; ptr++; }

A、LANGUAGE B、陷入死循环 C、有语法错 D、language

157、若有定义:int b[5];,则以下对b数组元素的正确引用是____

A、*&b[5] B、b+2 C、*(*(b+2)) D、*(b+2)

158、若有以下语句,则对x数组元素引用不正确的是____

int x[ ]={1, 2, 3, 4, 5, 6}, *ptr; ptr=x;

A、*(--ptr) B、*(ptr--) C、*(ptr++) D、*(++ptr)

159、若有定义:int c[5], *p=c;,则以下对c数组元素地址的正确引用是____

A、p+5 B、c++ C、&c+1 D、&c[0]

160、若有说明语句:int a[2][3], m, n; 且0≤m≤1,0≤n≤2,则以下对数组元素的正确引用形式是__

A、a[m]+n B、(a+m)[n] C、*(a+m)+n D、*(*(a+m)+m)

161、若有定义:int a[2][3];,则以下对a数组元素地址的正确表示为____

A、*(a+1) B、*(a[1]+2)

C、a[1]+3 D、a[0][0]

162、若有定义:int (*p)[3];,则以下叙述正确的是____

A、p是一个指针数组名

B、p是一个指针,它可以指向一个一维数组中的任意元素

C、p是一个指针,它可以指向一个含有3个整型元素的一维数组 D、(*p)[3]等价于*p[3]

163、若有以下定义和语句,则对m数组元素地址的正确引用是____

int m[2][3], (*p)[3]; p=m;

A、p[2] B、p[0]+1 C、*(p+2) D、(p+1)+2

164、若有定义:int x[5], *p=x;,则不能代表x数组首地址的是____

A、x B、&x[0] C、&x D、p

165、若有以下定义和语句,则对a数组元素的正确引用是____

int a[2][3], (*p)[3]; p=a;

A、(p+1)[0] B、*(*(p+2)+1) C、*(p[1]+1) D、p[1]+2

166、若有定义:int i, x[3][4];,则不能将x[1][1]的值赋给变量i的语句是____

A、i=x[1][1] B、i=*(*(x+1)) C、i=*(*(x+1)+1) D、i=*(x[1]+1)

167、若有以下定义和赋值语句,且0≤i≤1,0≤j≤2,则以下对s数组元素地址的正确引用形式是____

int s[2][3]={0}, (*p)[3], i, j; p=s;

A、(*(p+i))[j] B、*(p[i]+j) C、*(p+i)+j D、(p+i)+j

168、设用以下程序段建立了sp与str的关系,则以下对字符串的引用不正确的是____

char str[4][8]={\; int n;

for (n=0; n<4; n++) sp[n]=str[n]; A、sp B、*sp C、sp[0] D、*(sp+1)

169、若有定义:int x[10], *p=x;,则*(p+5)表示____

A、数组元素x[5]的地址 B、数组元素x[5]的值 C、数组元素x[6]的地址 D、数组元素x[6]的值

170、若有定义语句:int s[4][6], t[6][4], (*p)[6];,则以下正确的赋值语句是____

A、p=t; B、p=s; C、p=s[2]; D、p=t[3];

171、若要对变量a进行--运算,则a应具有的说明是____

A、int p[3]; int *a=p; B、int k; int *a=&k; C、char *a[3];

D、int b[10]; int *a=b+1;

172、若有定义语句:int x[5]={0, 1, 2, 3, 4}, *p;,则以下数值不为2的表达式是____

A、p=x+1, ++(*p) B、p=x+2, *p++ C、p=x+1, *(p++) D、p=x+1, *++p 173、执行以下程序段后,y的值是____

int a[ ]={1, 3, 5, 7, 9} int x=0, y=1, *ptr; ptr=&a[1]; while (!x)

{ y+=*(ptr+x); x++; } A、1 B、2 C、4 D、24

174、执行以下程序段后,m的值是____

int a[2][3]={{1, 2, 3}, {4, 5, 6}}; int m, *ptr; ptr=&a[0][0];

m=(*ptr)*(*ptr+2)*(*ptr+4);

A、15 B、48 C、24 D、无定值

175、设有以下定义:char *ch[2]={\;,则以下正确的叙述是____

A、数组ch的两个元素中分别存放了字符串\和\的首地址

B、数组ch的两个元素分别存放的是含有3个字符的一维字符数组的首地址 C、ch是指针变量,它指向含有两个数组元素的字符型一维数组 D、数组ch的两个元素的值分别是\和\176、下面程序的运行结果是____

main( )

{ int x[5]={1, 2, 3, 4, 5}, *p=x, **q; q=&p;

printf(\; printf(\;

}

A、1, 1 B、1, 2 C、2, 2 D、2, 3

177、下面程序的运行结果是____

#include \

fun(int **a, int p[2][3]) { **a=p[1][1]; } main( )

{ int x[2][3]={2, 4, 6, 8, 10, 12}, *p; p=(int *)malloc(sizeof(int)); fun(&p, x);

printf(\; }

A、2 B、6 C、8 D、10

179、若有说明:char *pc[ ]={\;,则以下叙述正确的是____

A、*pc[0]代表的是字符串\B、*pc[0]代表的是字符'a' C、pc[0]代表的是字符串\D、pc[0]代表的是字符'a'

180、以下程序的运行结果是____

void sub(int x, int y, int *z) { *z=y-x; } main( )

{ int a, b, c; sub(10, 15, &a); sub(6, a, &b); sub(a, b, &c);

printf(\; }

A、5, 1, 6 B、-5, -11, -6 C、-5, 11, 6 D、5, -1, -6

181、设有变量定义和函数调用语句:int a=20; print_value(&a);,下面函数的输出结果是____

void print_value(int *x)

{ printf(\; } A、20 B、21 C、变量a的地址 D、随机值 182、语句int (*ptr)( );的含义是____

A、ptr是指向一维数组的指针变量 B、ptr是指向int 型数据的指针变量

C、ptr是指向函数的指针,该函数返回一个int 型数据

D、ptr是一个函数名,该函数的返回值是指向int 型数据的指针

183、 若有函数max (a ,b) ,并且已使函数指针变量p 指向函数 max ,则利用函数指针调

用 max 函数的正确形式是____

A、(*p ) max (a , b) B、*p max(a, b) C、p-> max (a, b) D、 ( *p ) (a, b ) 184、若有定义:int (*p)( );,则指针p___

A、代表函数的返回值 B、指向函数的入口地址 C、表示函数的类型 D、表示函数返回值的类型

185、下面程序的运行结果是____

main( )

{ int b[10]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int *q=b;

printf(\; }

A、1 B、2 C、3 D、4 187、下面程序的运行结果是____

#include #include main()

{ int a[3][3]={{2},{4},{6}}; int k,*q=&a[0][0];

for(k=0;k<2;k++) { if(k= =0)

a[k][k+1]=*q+1; else ++q;

printf(“%d”,*q); } }

A、26 B、23 C、36 D、33 188、下面程序的运行结果是____

void prt(int *a)

{printf(“%d\\n”,++*a);}

A、mZ bPPk B、my book C、Ny Cook D、My Book 212、下面程序的运行结果是____

# include # include fun(char *s)

{ char t,*a,*z;

a=s; z=s+strlen(s)-1; while(a++

{ t=*a++; *a=*z--; *z=t;} }

main()

{ char *p; p=\; fun(p); puts(p); }

A、abdddfg B、afcdebg C、gbedcfa D、gfedcba 213、以下函数Abc的功能是____

int Abc(char *ps) { char *p; p=ps;

while(*p++); return(p-ps); }

A、计算字符串的长度 B、比较两个字符串的大小 C、实现字符串的复制 D、以上三种说法都不对 214、以下函数的功能是____

fun(char *s1,char *s2) { int j; char *s=s1; for ( ;*s2!='\\0';s2++)

{ for (j=0, s1=s;*s1!='\\0';s1++) if(*s1!=*s2)

{ s[j]=*s1; j++; }

s[j]='\\0';

}

}

A、比较两个字符串的长度是否相等 B、将字符串s2连接到字符串s1后 C、找出字符串s1和s2中不相同的字符 D、找出字符串s1和s2中相同的字符 215、下面程序的运行结果是____

# include main()

{ char *p,s[ ]=\; for(p=s;*p!='\\0'; ) { printf(\,p); p++;

if(*p!='\\0') p++; else break; } } A ABCDEFG B ABCDEFG C A ABCDE CDEFG C ABC EFG E A G G

216、下面程序的运行结果是____

# include # include main()

{ char *p1,*p2,str[50]=\; p1=\; p2=\;

strcpy(str+1,strcat(p1,p2)); printf(\,str); }

A、abcabcabc B、bcabcabc C、aabcabc D、cabcabc

217、以下与库函数strcmp(char *s,char *t)的功能相等的程序段是____

A、strcmpA(char *s,char *t) { for( ;*s++= =*t++; ) if(!*s) return 0;

return(*s-*t); }

B、strcmpB(char *s,char *t) { for( ;*s++= =*t++; ) if(*s= ='\\0') return 0; return(*s-*t); }

C、strcmpC(char *s,char *t)

{ for( ;*s++= =*t;s++,t++) if(!*s) return 0; return(*s-*t); }

D、strcmpD(char *s,char *t) { for( ;*t= =*s; )

{ if(!*t) return 0;

t++; s++; }

return(*s-*t); } 第八章

一、 选择题 133 A 134 B 135 CD 136 CD 137 A 138 C 139 C 140 A 141 C 142 D 143 B 144 C 145 A 146 D 147 B 148 C 149 B 150 A 151 D 152 B 153 B 154 D 155 B 156 A 157 D 158 A 159 D 160 D 161 A 162 C 163 B 164 C 165 C 166 B 167 C 168 A 169 B 170 B 171 D 172 C 173 C 174 A 175 A 176 B 177 D 178 D 179 B 180 D 181 B 182 C 183 D 184 B 185 C 186 187 B 188 A 189 190 B 191 C 192 A 193 B 194 D 195 C 196 CC 197 BBC 198 CAC 199 AC 200 CB 201 BD 202 AC 203 DA 204 ADD 205 DA 206 B 207 A 208 B 209 C 210 D 211 C 212 A 213 D 214 C 215 B 216 C C语言程序设计第9章、第10 章练习题 一、选择题

219、已知学生记录描述如下,下面对结构体成员\的赋值方式正确的是_______

struct student { int num;

char name[8]; struct

{ float math; float engl; float computer; } mark; } std;

A、student.computer=84; B、mark.computer=84; C、std.mark.computer=84; D、std.computer=84;

220、当定义一个结构体变量时系统分配给它的内存是________

A、结构中第一个成员所需的内存量 B、结构中最后一个成员所需的内存量

C、结构体成员中占内存量最大者所需的容量 D、结构体中各成员所需内存量的总和

221、以下对结构体类型变量rcard的定义中不正确的是________

A、#define REC struct card REC { int id;

float sala;} rcard;

B、struct card { int id;

floar sala;}; card rcard; C、struct card

{ int id; float sala;}; struct card rcard; D、struct

{ int id; float sala;} rcard;

222、设有以下说明语句,则下面的叙述不正确的是________

struct abc

{ int m; float n;} stype; A、struct是结构体类型的关键字

B、abc是用户定义的结构体类型名 C、m和n都是结构体成员名

D、stype是用户定义的结构体变量名

223、以下程序中编译和运行结果均正确的一个是________

A、main() { union

{ int n; float x; } comm={1};

printf(\,comm.n); }

B、main() { union

{ int n;

float x;} comm={12.5};

printf(\,comm.x); }

C、main() { union

{ float x;

int n;} comm=12.5;

printf(\,comm.x); }

D、main() { union

{ int n;

float x;} comm=5;

printf(\,comm.n); }

224、以下程序的运行结果是________

# include \main()

{ struct date

{ int y,m,d;} today;

printf(\; }

A、2 B、3 C、6 D、出错

225、根据下面的定义,能输出字符串\的语句是________ struct person

{ char name[10]; int age;

} class[10]={\,18, \ \ \ };

A、printf(\,class[2].name); B、printf(\,class[2].name[0]); C、printf(\,class[1].name); D、printf(\,class[1].name[0]); 226、下面程序的运行结果是________

main()

{ struct cmplx { int x; int y;

} cm[2]={1,2,3,4}; printf(\

cm[1].y/cm[0].y);

}

A、5 B、2 C、3 D、4

227、若有以下定义和语句,则以下对结构体成员的引用不正确的是________

struct student

{ int num; int age;};

struct student stu[3]={{1001,20},

{1002,19}, {1003,20}};

main()

{ struct student *p; p=stu; ? }

A、(p++)->num B、p++->age C、(*p).num D、p=&stu.age

228、若有如下定义,则下面在scanf函数调用语句中对结构体成员的引用不正确的是 ________

struct pupil

{ char name[20];

int age; int sex; } pup[5],*p;

A、scanf(\,p->age);

B、scanf(\,pup[0].name); C、scanf(\,&pup[0].age); D、scanf(\,&(p->sex));

229、设有以下定义和语句,则以下表达式值为6的是________

struct ss

{ int a; struct ss *b;}; static struct ss x[3]={5,&x[1],

7,&x[2],

9,'\\0'},*ptr;

ptr=&x[0];

A、ptr->a++ B、ptr++->a C、ptr->a D、++ptr->a

230、设有如下定义,若要使px指向rec中的x域,正确的赋值语句是________

struct aa

{ int x; float y; } rec,*px; A、*px=rec.x; B、px=&rec.x

C、px=(struct aa *)rec.x D、px=(struct aa *)&rec.x;

231、若有以下说明和语句,则对结构体变量std中成员id的引用方式不正确的是_______

struct work { int id; int name; } std,*p; p=&str;

A、std.id B、*p.id C、(*p).id D、p->id

232、若有以下程序段,则下面表达式中值为20的是________

struct com

{ int a; int *b;}; int x=10,y=20,z=30;

struct com s[3]={{1010,&x}, {1020,&y},

{1030,&z}}; main( )

{ struct com *p; p=s; ? }

A、(p++)->b B、*(p++)->b C、(*p).b D、*(++p)->b

233、若有以下说明和语句,则对ttd中lab域的正确引用方式是________

struct example { char lab; int num; } ttd,*p; p=&ttd;

A、(*p).lab B、p->ttd.lab C、(*p).ttd.lab D、p.ttd.lab 234、以下程序的输出结果是________

struct s

{ int n; int *m; } *p;

int d[3]={10,20,30};

struct s arr[3]={100,&d[0],

200,&d[1], 300,&d[2]};

main( ) { p=arr;

printf(\,++p->n); printf(\,(++p)->n); printf(\,++(p->m)); }

A、101,200,21 B、101,20,30 C、200,101,21 D、100,101,10

235、若要使指针变量p指向一个动态开辟的字符型存储单元,则①中应选择填入的是 ________

char *p;

p= ① malloc(sizeof(char)); A、char B、char *

C、(*char) D、(char *)

236、当说明一个共用体变量时系统分配给它的内存是________

A、共用体中第一个成员所需内存量

B、共用体中最后一个成员所需内存量

C、共用体成员中占内存量最大者所需的容量 D、共用体中各成员所需内存量的总和

237、以下对C语言中共用体类型数据的叙述正确的是________

A、可以对共用体变量名直接赋值

B、一个共用体变量中可以同时存放其所有成员 C、一个共用体变量中不能同时存放其所有成员 D、共用体类型定义中不能出现结构体类型的成员

238、若有以下定义和语句,则下面对共用体变量a的引用正确的是________

union data { int i; char c; float f; } a; int n;

A、a=5; B、a={1,'x',5.0}; C、a.i=10;printf(\,a); D、n=a{5};

239、设有以下说明,则下面不正确的叙述是________

union data { int i; char c; float f; } aa,bb;

A、aa所占的内存长度等于成员f的长度 B、aa的地址和它的各成员地址都是同一地址 C、aa可以作为函数参数

D、不能执行诸如aa=bb;的整体赋值操作 240、以下程序的运行结果是________

# include \main( ) { union

{ long a; int b; char c;

struct

{ int x; int y;} ss;

} m; printf(\,sizeof(m)); }

A、2 B、4 C、6 D、8

241、设有如下定义,若字符型变量占1字节、整型变量占2字节、双精度变量占8字节,则共用体变量b占用内存的字节数是____ ____

union data

{ int i; char ch; double f;} b; A、14 B、15 C、8 D、11 242、下面对typedef的叙述中不正确的是 ________

A、用typedef不能定义变量名

B、用typedef可以定义新的数据类型

C、用typedef只是将已存在的类型用一个新的标识符来代表 D、使用typedef有利于程序的通用和移植 243、以下程序的运行结果是________

typedef union { long a[2]; int b[4];

char c[8]; } EXAM; main( )

{ printf(\,sizeof(EXAM));} A、32 B、16 C、8 D、报错

244、已知字符0的ASCⅡ码为十六进制的30,下列程序的运行结果是________

main( )

{ union { char ch;

unsigned int k[4]; } x; x.k[0]=0x39; x.k[1]=0x36;

printf(\,x.ch); }

A、6 B、9 C、3 D、0 245、设有如下枚举类型定义:

enum language { English=6,French,Chinese=1,Japanese,Italian}; 则枚举量Italian的值为________ A、10 B、4 C、3 D、5

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

Top