C语言复习题集(2013级)

更新时间:2024-06-25 08:21:01 阅读量: 综合文库 文档下载

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

第1章 C语言概述

1.1选择题

【题1.1】以下不是C语言的特点的是( B ) A.C语言简洁、紧凑

B.能够编制出功能复杂的程序 C. C语言可以直接对硬件进行操作 D.C语言移植性好

【题1.2】以下不正确的C语言标识符是( D )。 A.ABC B.abc C.a_bc D.ab.c

【题1.3】以下正确的c语言标识符是( C )。 A.%x B.a十b C.a123 D.test! 【题1.4】一个c程序的执行是从( A ).

A.main( )函数开始,直到main( )函数结束 B.第一个函数开始,直到最后一个函数结束 C.第一个语句开始,直到最后一个语句结束 D.main( )函数开始,直到最后一个函数结束 【题1.5】一个C语言程序是由(B)。 A)一个主程序和若干子程序组成 B)函数组成 C)若干过程组成 D)若干子程序组成

【题1.6】一个c程序是由( B )。 A.一个主程序和若干子程序组成 B.一个或多个函数组成 C. 若干过程组成 D.若干子程序组成

【题1.7】C语言派程序的基本单位是( B )。 A.过程 B.函数 c子程序 D.标识符 【题1.8】编辑程序的功能是( A )。

A.建立并修改程序 B.将c源程序编译成目标程序 C.调试程序 D.命令计算机执行指定的操作

1.2填空题

【题1.9】c语言符号集包括【英文字母、数字和一些有特定含义的标点符号】。 【题1.10】一个c程序有且仅有一个【main()】函数。 【题1.11】C程序的基本单位是【函数 】。

【题1.12】一个c程序有【1】个main( )函数和【若干】个其他函数 。

【题1.13】在一个C源程序中,注释部分两侧的分界符分别是【/*】和【*/】。 【题1.14】结构化设计中的三种基本结构是【顺序结构、分支结构和循环结构】。 【 题1.15】在C语言中,输入操作是由库函数【scanf】完成的,输出函数是由库函数【printf】完成的。

1.3编程题

【题1.16】编写一个程序,在屏幕上输出你的姓名。试着上机编辑、编译、运行你的程序。 【题1.17】写出下列各题的算法(分别用自然语言、流程图) 1设计一个从n个数中取最大数及最小数的程序 2设计一个判断输入年份是否闰年的算法

3 由键盘输入三个数,计算以这三个数为边长的三角形的面积 4 按下面的近似公式计算:

e = 1+1.0/1!+1/2!+1/3!+…+1/n!

第2章数据类型

1选择题

1 、以下结果为整数的表达式(设有int i;char c;float f;) ( B ). A.i十f B.i*c C.c十f D.i十c十f

2、设char ch;以下正确的赋值语句是( B ). A.ch='123'; B.ch=?\xff ? C.ch='\08?; D.ch=”\”;

3、设n=10,i=4;则赋值运算n%=i+1执行后,n的值是( A ). A.0 B.3 C.2 D.1

4、逗号表达式(a=3*5,a*4),a十15的值为( C ),a的值为( C )。 ①A.15 B.60 C.30 D.不确定 ②A.60 B.30 C.15 D.90

5、如果a=1,b=2,c=3,d=4,则条件表达式a<b?a:c<d?c:d的值为( A ). A.1 B.2 C.3 D.4 6、下面不正确的字符串常量是( A )

A) ?abc? B)”1234” C) ”0 ” D) “ det” 7、在程序中可以用来作为变量名的合法的标识符是( c ) A.)static B) 23_b1 C)stu_1t D) #33

8、若有代数式3ae/bc,则不正确的C语言表达式是( C ) A)a/b/c*e*3 B)3*a*e/b/c C)3*a*e/b*c D)a*e/c/b*3

9、已知各变量的类型说明如下: Int k,a,b;

Unsigned long w=5; Double x=1.42;

则以下不符合C语言语法的表达式是( A ). A)x%(-3) B)w+=-2

C)k=(a=2,b=3,a+b) D)a+=a-=(b=4)*(a=3)

10、若以下变量均是整形,且num= 7;则计算表达式sum=num++,sum++,++num后sum的值为(B ).

A)7 B)8 C)9 D)10

11、若有定义:int a=7; float x=2.5 ,y=4.7; 则表达式x+a%3*(int)(x+y)%2/4的值是( A)。 A)2.500000 B)2.750000 C)3.500000 D)0.000000

12、 设变量a是整型,f是实型,i是双精度型,则表达式10+?a?+i*f值的数据类型为(C)。 A)int B)float C)double D)不确定

13、 在C语言中,char型数据在内存中的存储形式是(D)。 A)补码 B)反码 C)源码 D)ASCII码

14、设有说明: char w; int x; float y; double z; 则表达式w*x+z-y值的数据类型为(D)。 A)float B)char C)itn D)double.

15、设int a=04,b;则执行b=a>>1;语句后,b的结果是( D ). A)04 B)4 C)10 D)2

2、填空题

1、表达式10/3的结果是【 】 2、表达式10%3的结果是【 】

3、 定义int x,y; 执行y=(x=1,十十x,x十2);语句后,y的值是【 】 4、 在C语言中的实型变量分为两种类型,他们是【 】和【 】 5、 若s是int型变量,且s=6,则下面表达式的值为【 】. s%2+(s+1)%2

6、 若a是int型变量,则计算表达式后a的值为【 】 a=25/3%3

7、 若有定义:int b=7; float a=2.5,c=4.7;则下面表达式的值为【 】。 a+(int)(b/3*(int)(a+c)/2)%4

8、 若有定义:int a=2,b=3;float x=3.5,y=2.5;则下面表达式的值为【 】。 (float)(a+b)/2+(int)x%(int)y 9、若x和n均是int型变量,且x的初值为12,n的初值为5,则计算表达式后x的只为【 】。 x%=(n%=2)

10、 若有定义:int e=1,f=4,g=2;float m=10.5,n=4.0,k;则计算赋值表达式k=(e+f)/g+sqrt ((double)n)*1.2/g+m后k的值是【13.700000】。

第3章顺序结构

1、选择题

【1】 若x,y定义为int型,z定义为double型,以下不合法的scanf函数调用语句是( ).

A) scanf(“%d%d,”,&x,&y,&z);

B) scanf(“=%d”,&x,&y,&z);

C) scanf(“%x%*d%lf”,&x,&y, &z);

D) scanf(“%x%o%6.2f”, &x,&y,&z);

【2】阅读以下程序,当输入数据的形式为:25,13, 10,正确的输出结果为( )。 main() { int x,y,z;

scanf(“%d%d%d”,&x,&y,&z); printf(“x+y+z=%d\\n”,x+y+z); }

结果:

A) x+y+z=48 B) x+y+z=35 C) x+z=35 D) 不确定值

【3】根据题目中已给出的数据的输入和输出形式,程序中输入输出语句的正确内容是( )。 main()

{ int x;float y; printf(“enter x,y;”) 输入语句 输出语句 }

输入形式 enter x,y: 2 3.4 输出形式 x+y=5.40

A) 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);

【4】以下说法正确的是( ).

A) 输入项可以为一个实型常量,如scanf(“%f”,3.5);

B) 只有格式控制,没有输入项,也能进行正确输入,如scanf(“a=%d,b=%d”);

C) 当输入一个实型数据时,格式控制部分应规定小数点后的位数,如scanf(“%4.2f”,&f); D) 当输入数据时,必须指明变量的地址,如scanf(“%f”,&f);

【5】 以下能正确的定义整形变量a,b,c并为其赋值5的语句是 ( ).

A int a=b=c=5; B int a,b,c=5; C int a=5 ,b=5,c=5; D int a=b=c=5;

【6 】巳知字母A的ASCII码是65,以下程序的执行结果是( )。 #include main() {

char c1='A',C2='Y';

printf(\

A.A,Y B.65,65 C.65,90 D.65,89

2、 填空题

【1 】以下程序的执行结果是( )。 #include main() {

float f=3.1415927;

printf(\}

【2】以下程序的输出结果为( ). main()

{ int x=1,y=2;

printf((“x=%d y=%d*sum*=%d\\n”,x,y,x+y);X=1 Y=2*SUM*=3 printf(“10Squared is : %d\\n”,10*10); 10Squared is :100 }

【3 】以下程序的输出结果是( ) #include main()

{int a=325;double x= 3.1415926; printf(“a=%+06d x=%+e\\n”,a,x); } 【4】有一输入函数scanf(“%d”,k);则不能使用float变量k得到正确数值的原因是( )和(scanf语句的正确形式应该是:( ) 【5 】以下程序的执行结果是( )。

, )

#include main() {

char c='A'+10; printf(\}

【6 】以下程序输入123456<CR>后的执行结果是( ). #include main() {

int a,b;

scanf(\printf(\}

3、编程题

【1 】编写摄氏温度、华氏温度转换程序。要求:从键盘输入一个摄氏温度,屏幕就显示对应的华氏温度,输出取两位小数。转换公式:F=(C+32)×9/5

【2 】编写程序,从键盘输入梯形的上下底边长度和高,计算梯形的面积。

【3 】编写程序,从键盘输入一个字符,求出与该字符前后相邻的两个字符,按从小到大的顺序输出这三个字符的ASCII码。

第4章选 择 结 构

1单选题

【1 】为了避免嵌套的if-else语句的二义性,c语言规定else总是与( C )组成配对关系。 A)缩排位置相同的if B)在其之前末配对的if

C)在其之前未配对的最近的if D)同一行上的if

【2 】选择出合法的if语句(设int x,a,b,c;) ( A ). A)if(a==b) x十十; B)if(a=<b) x十+; C)if(a<>b) x十十; D)if(a=>b) x十1;

【3 】选择出合法的if语句(设int x,y;) ( A )。 A)if(x!=y) if(x>y) printf(\>y\n”);

else prinf(”x<y\\n”); else printf(”X==y\n”); B)if(x 《》y)

if(x>y) printf(”x>y\\n”) else printf(”x<y\n”); else printf(”x==y\n”);

C) if(x!=y) if(x>y) Printf(”x>y\n”) else printf(”x<y\n”) else printf(”x==y\n”); D)if(x!=y)

1f(x>y) Printf(”x>y\n”); else printf(”x<y\n”) e1se Printf(”x==y\n”);

【4 】 以下关于运算符优先顺序的描述中正确的是(C). A)关系运算符<算术运算符<赋值运算符<逻辑与运算符 B)逻辑与运算符<关系运算符<算术运算符<赋值运算符 C)赋值运算符<逻辑与运算符<关系运算符<算术运算符 D)算术运算符<关系运算符<赋值运算符<逻辑与运算符

【5 】 能正确表示当x的取值在[ l,10]或[ 200,210]范围内为真,否则为假的表达式是 ( C ) 。

A)(x>=1)&&(x<=10)&&(x>=200)&&(x<=210)

B)(x>=1) ||(x<=10)︳︳(x>=200)︳︳ (x<=210) C)(x>=1)&&(x<=10) ︳︳(x>=200)&&(x<=210) D)(x>=1) ︳︳(x<=10)&&(x>=200) ︳︳(x<;210)

【6】 设x、y和z是int型变量,且x=3,y=4,z=5,则下面表达式中值为0的是(D). A) ?x?&&?y? B) x<=y

C) x||y+z&&y-z

D)!((x<y)&&!z ||1)

【7】若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值 为“假”。则以下不能满足要求的表达式是( C ).

A) A%2==1 B) !(A%2==0) C)!(A%2) D)A%2

【8】int a=1,b=2,c=3,d=4,m=2,n=2 执行 (m=a>b&&(n=c>d)后n的值为( B ). A) 1 B) 2 C) 3 D) 4

【8 】判断char型变量cl是否为小写字母的正确表达式为 ( D ). A) ?a?<=c1<=?z? B) (c1>=a)&&(c1<=z)

C) (?a?>=c1) || (?z?<=c1) D) (c1>=?a?)&&(c1<=?z?)

【9】执行以下语句后a的值为( B ),b的值为( A )。 int a=5,b=6,w=1,x=2,y=3,z=4; (a=w>x)&&(b=y>z);

[1] A) 5 B) 0 C) 2 D 1 [2] A) 6 B) 0 C) 1 D 4

【10】 下列运算符中优先级最低的是( A ),优先级最高的是( C ). A)?: B)&& C)十 D)!=

【10】已知int x=10,y=20,z=30;以下语句执行后 x,y,z的值是(B). if(x>y)

z=x;x=y; y=z;

A)x=l0,y=20,z=30 B)x=20,y=30,z=30 C)x=20,y=30,z=10 D)x=20,y=30,z=20

【11】当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是( B ) . if(a

if(c

if(a

if(b

A) 1 B)2 C)3 D)6

【12】以下程序运行结果是( C ). main()

{int a=100,x=10,y=20,ok1=5,ok2=0; if (x

if(ok2) a=10; a=-1;

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

A)1 B)0 c)-1 D)不确定

【13】以下程序运行结果是( B ). main()

{int x=2,y=-1,z=2; if(x

if(y<0) z=o; else z+=1; printf(“%d\\n”,z); }

A)3 B)2 C)1 D)0

【14】若运行时给变量X输入12,以下程序运行结果是 ( A ). main() {int x,y;

scanf(“%d”,&x); y=x>12? x+10:x-12; Printf(“%d\\n”,y); }

A) 0 B) 22 C) 12 D) 10

【15】若w,x,y,z,m均为int型变量,则执行下面语句后的m值是(A). w=1; x=2; y=3; z=4; m=(w

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

2 填空题

【题1】以下程序的执行结果是【d=20】。 #include main() {

int a,b,c,d,x; a=c=0; b=1; d=20;

if(a) d=d-10; if(!c)x=15; else x=25;

printf(\}

【题2】以下程序在输入5,2之后的执行结果是【s=2,t=3】. #include main() {

int s,t,a,b;

scanf(\s=1; t=1;

if(a>0)s=s+1; if(a>b)t=s+t; else if(a==b) t=5; else t=2*s;

printf(\}

【题3】以下程序的执行结果是【first third】. #include main() {

int x=1,y=0; switch(x) {

case 1: switch(y) {

case 0:printf(\case 1:printf(\}

case2:printf(\} }

【题4 】当a=3,b=2,c=1时,表达式f=a>b>c 的值是【0】. 当a=5,b=4,c=2时,表达式 a>b! =c的值是【1】. 【题5】在C语言中,表示逻辑“真”值用【非0的数字】.

【题6】设y为int 型变量,请写出描述“y是奇数”的表达式【(y%2)==l】. 【题7】 C语言提供的3种逻辑运算符是【&,||,!】. 【题8 】)设x,y,z均为int型变量,请写出描述“x或y中有一个小于z“的表达式【x<z||y<z】.

【题9 】若a=6,b=4,c=2,则表达式!(a-b)+c-1&&b+c/2的值是【1】.

【题10】条件“2

【题11】以下程序运行结果是【1,1】. Main() { int x,y,z; x=1,y=2,z=3; x=y--

Printf(“%d,%d”,x,y); }

【题12】以下程序实现输出x,y,z三个数中最大者,请在横线内填入正确的内容。 main()

{int x=4,y=6,z=7; int

if u=x; else u=y;

if v=u; else v=z;

printf(“v=%d”,v); }

【题13】 以下程序对输入的一个小写字母,将字母循环后移5个位置后输出。如?a?变成?f?,?w?变成?b?。请在[ ]内填入正确的内容。 #include “stdio.h” main() {char c;

c=getchar();

if(c>=?a?&&c<=?u?) c=c+5 ;

else if(c>=?v?&&c<=?z?) c=c-21 putchar(c); }

3 程序题

【题1】编制程序要求输入整数a和b,若a*a+b*b大于100,则输出a*a+b*b百位以上的数字,否则输出两数的和。

[题2]试编程判断输入的正整数是否既是5又是7的正倍数。若是,则输出yes;否则输出no。

【题3】编程实现:输入一个整数,判断它能否被3,5,7整除,并输出以下信息之一: 能同时被3,5,7整除;

能被其中两个数(要指出哪两个)整除; 能被其中一个数(要指出哪一个)整除; 不能被3,5,7任一个整除。

【题4】 编程实现以下功能:读入两个运算数(data1和data2)及一个运算符(op),计算表达式data1 op data2的值,其中op可为+,—,*,/(用switch语句实现)。

第5章循环控制部分习题

1 选择题

【题1】语句while(!e);中的条件!e等价于 ( A )。 A) e==0 B) e!=1 C) e!=0 D) ~e 【题2】以下for循环是 ( C )。

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

A)无限循环 B) 循环次数不定 C) 执行4次 D) 执行3次 【题3】 下面有关for循环的正确描述是 ( D ) A) for循环只能用于循环次数已经确定的情况 B) for循环是先执行循环体语句,后判定表达式 C) 在for循环中,不能用break语句跳出循环体

D) for循环体语句中,可以包含多条语句,但要用花括号括起来

【题4】下面程序段的运行结果是 ( D ) int x=0 , y=0;

while (x<15) y++, x+=++y ; printf(“ %d,%d ” , y , x );

A) 20, 7 B) 6,12 C) 20,8 D) 8,20 【题5 】下面程序的功能是将从键盘输入的一组字符中统计出大写字母的个数m和小写字母的个数 n,并输入m,n中的较大数,请选择填空。 #include main()

{int m=0,n=o; char c;

while( (1) !=?\\n?) 选A {if(c>=?A?&&c<=? Z ?) m++; if(c>=?a?&&c<=?z?) n++; }

printf(“%d\\n”,m

(1) A) c=getchar() B)getchar() C)c=getchar D) scanf(“ü”,c) (2) A) n:m B) m:n C) m:m D) n:n

【题6】下面程序的功能是将小写字母变成对应的大写字母后的第二个字母。其中y变成A,z变成B。请选择填空。 #include main() {char c;

while((c=getchar())!=?\\n?) {if(c>=?a?&&c<=?z?) { (1) ; 选D fr(c>?Z”&&c<=”Z”+2) (2) ; 选C }

printf(“%c”,c); } }

(1) A) c+=2 B) c-=32 C) c=c+32+2 D) c-=30 (2) A) c=?B? B) c=?a? C) c-=26 D) c=c+26

【题7】下面程序的功能是将从键盘输入的一批正整数中求出最大者,输入0 结束循环选择填空。

#include main()

{int a,max=0; scanf(“%d”,&a);

while( ) 选B

{ if(max

printf(“%d”,max); }

A) a==0 B) a C) !a==1 D) !a

【题8】 C语言中while和do-while循环的主要区别是 (A). A) do-while的循环体至少无条件执行一次

B) while的循环控制条件比do-while的循环控制条件严格 C) do-while允许从外部转到循环体内 D) do-while的循环体不能是复合语句

【题9】下面程序是从键盘输入学号,然后输出学号中百位数字是3的学号,输入0 时结束循环。请选择填空。 #include main()

{long int num;

Scanf(“%ld”,&num);

do { if( 【1】 ) printf(“%ld”,num); 选B scanf(“%ld”,&num);

}while( 【 2】 );} 选C 【1】A) num0/10==3 B) num/100==3 C) num/10==3 D) num/10==3

【2】A) !num B) num>0 C) !num==0 D) num<=0 【题10】下面程序运行结果是(B). # include main()

{ int a=1,b=10; do

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

printf ( “ a=%d , b=%d\\n”,a,b); }

A) a=3 , b=11 B) a=2,b=8 C)a=1,b=-1 D)a=4,b=9

【题11】执行语句for(i=1;i++<4; );后变量i的值是(C). A)3 B)4 C)5 D)不定

【题12】下面程序的功能是计算1至50中是7的倍数的数值之和,请选择填空。 #include main()

{int I,sum=0;

for(i=1;i<=50;i++)

if ( ) sum+=i; 选D printf(”%d”,sum); }

A) (int)(i/7)==i/7 B) (int) i/7==i/7 C) i%7=0 D) i%7==0

【题13】 下面程序的功能是求算式xyz+yzz=532中x, y, z的值(其中xyz和yzz分别表示一个三位数),请选择填空。 #include main()

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

for( 【1】 ;z<10;z++)

{i=100*x+10*y+z+100*y+10*z+z;

if( 【2】 ) printf(“x=%d,y=%d,z=%d\\n”,x,y,z); } }

【1】A)z=x B)z=1 C)z=0 D)z=y

【2】A)i/result= =1 B)i=result C)i!=result D) i= =result

【题14】 以下正确的描述是(B).

A) continue语句的作用是结束整个循环的执行

B)只能在循环体内和switch语句体内使用break语句

C) 在循环体内使用break语句或continue语句的作用相同 D) 从多层循环嵌套中退出时,只能使用goto语句 【题15】 与下面程序段等价的是(C). for (n=100;n<=200;n++) { if(n%3==0) continue; printf(“M”,n); }

A)for(n=100;(n%3)&&n<=200;n++) printf(“M”,n); B)for(n=100;(n%3)︱︱n<=200;n++) printf(“M”,n); C) for(n=100; n<=200;n++) if(n%3!=0) printf(“M”,n); D) for(n=100; n<=200;n++) { if(n%3) printf(“M”,n); else continue; break; }

【题16】 下面程序的运行结果是(B). #include main()

{ int k=0;char c=?A?;

do

{ switch(c++)

{ case ?A?:k++;break; case ?B?:k--;

case ?C?:k+=2;break;

case ?D?:k=k%2;continue; case ?E?:k=k*10;beak; default:k=k/3; } k++; }

while(c

pfintf(“k=%d\\n”,k); }

A) k=3 B) k=4 C) k=2 D) k=0

【题5. 53】 下面程序的运行结果是(B). #include main() { int a,b;

for (a=1,b=1;a<=100;a++) { if(b>=20) break;

if(b%3==1) {b+=3; continue;} b-=5; }

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

A) 7 B) 8 C) 9 D) 10

2 填空题

【题1】下列程序运行后的输出结果是 #include main() {

int i,j,k;

for(i=1;i<=4;i++) {

for(j=1;j<=20-3*i;j++) printf(\

for(k=1;k<=2*i-1;k++) printf(\printf(\

{ a[i]=m; i++;} }

for(x=0;x

【题9】设数组a包括10个整形元素。下面程序的功能是求出a中各相邻两个元素的和,并将这些和存在数组b中,按每行3个元素的形式输出。请填空。 main( )

{ int a [ 10 ] ,b [ 10 ] , i; for ( i = 0 ; i < 10 ; i ++ ) scanf ( “ %d ” , &a[ i ] ) ; for (i=1 ; i < 10 ; i ++ ) b[i]=a[i]+a[i-1]

for (i = 1 ; i< 10 ; i++ ) { printf ( “ = ” ,b[ i ] ) ; if ( (i%3)= =0 ) printf ( “ \\n ” ); } }

第7章 编译预处理

1 选 择 题

【题1】以下叙述中不正确的是(C)。 A)预处理命令行都必须以#号开始

B)在程序中凡是以#号开始的语句行都是预处理命令行 C)C程序在执行过程中对预处理命令行进行处理 D)以下是正确的宏定义 #define IBM-PC

【题2】以下叙述中正确的是(C)。

A)在程序的一行上可以出项多个有效的预处理命令行 B)使用带参的宏时,参数的类型应与宏定义时的一致 C)宏替换不占用运行时间,只占编译时间

D)在以下定义中C R是称为”宏名”的标识符 #define C R 045

【题3】请读程序: #define ADD(x) x+x

main() {

int m=1,n=2,k=3;

int sum=ADD(m+n)*k; printf(“sum=%d”,sum); }

上面程序的运行结果是(B)。

A)sum=9 B)sum=10 C)sum=12 D)sum=18

【题4】以下程序的运行结果是(B)。 #define MIN(x,y) (x)<(y)?(x):(y) main()

{int i=10,j+15,k; k+10*MIN(i,j); printf(“%d\\n”,k); }

A)10 B)15 C)100 D)150

【题5】在宏定义#define PI 3.14159中,用宏名PI代替一个(D)。 A)常量 B)单精度数 C)双精度数 D)字符串

【题6】以下程序的运行结果是(B。) #include”stdio.h”

#define FUDGE(y) 2.84+y

#define PR(a) printf(“%d”,(int)(a)) #define PRINT1(a) PR(a);put char(?\\n?) main() {int x=2;

PRINT1(FUDGE(5)*x); }

A)11 B)12 C)13 D)15

【题7】以下有关宏替换的叙述不正确的是(D)。 A)宏替换不占用运行时间 B)宏名无类型

C)宏替换知识字符替换 D)宏名必须用大写字母表示

【题8】C语言的编译系统对宏命令的处理是(D)。 A)在程序运行时进行的 B)在程序连接时进行的

C)和C程序中的其它语句同时进行编译的 D)在对源程序中的其它语句同时进行编译的

【题9】若有宏定义如下: #define X 5 #define Y X+1 #define Z Y*X/2

则执行以下printf语句后,输出结果是(D)。 Int a;a=Y;

Printf(“%d\\n”,Z); Printf(“%d\\n”,--a); A)7 B)12 C)12 D)7 6 6 5 5

【题10】若有以下宏定义: #define N 2

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

则执行语句z=2*(N+Y(5));后的结果是(B)。 A)语句有错误 B)z=34 C)z=70 D)z无定值

【题11】若有宏定义:#define MOD(x,y) x%y 则执行以下语句后的输出为(B)。 Int z,a=15,b=100; Z=MOD(b,a);

Printf(“%d\\n”,z++);

A)11 B)10 C)6 D)宏定义不合法

【题12】以下程序的运行结果是(C)。 #define MAX(A,B) (A)>(B)?(A):(B) #define PARTY(Y) printf(“Y=%d\\t“,Y) 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

【题13】以下程序段中存在错误的是(D)。 A)#define array_size 100 Int array1[array_size]; B)#define PI 3.14159 #define S(r) PI*(r)*(r) ………

Area=S(3.2);

C)#define PI 3.14159 #define S(r) PI*(r)*(r) ……… Area=S(a+b);

D) #define PI 3.14159 #define S(r) PI*(r)*(r) ………….. Area=S(a); ...

area=S(a);

【题14】请读程序 #include

#defineMUL(x,y)(x)*y main()

{int a=3,b=4,c; c=MUL(a++,b++); printf(\}

上面程序的输出结果是(A)。 A.12 B.15 C.20 D.16

【题15】#define能做简单的替代,用宏替代计算多项式4*x*x+3*x+2之值的函数F,正确的宏定义是(C)。

A.#definef(x)4*x*x+3*x+2 B.#definef4*x*x+3*x+2 C.#definef(a)(4*a*a+3*a+2) D.#define(4*a*a+3*a+2)f(a)

【题16 】对下面程序段 #define A 3

#define B(a) ((A+1)*a) . .

x=3*(A+B(7));

正确的判断是(B)。

A.程序错误,不许嵌套宏定义 B.x=93 C.x=21

D.程序错误,宏定义不许有参数

【题17】以下程序中,第一个输出值(1)(D)。第二输出值是(2)(D). #include #defineM 3 #defineN (M+1) #defineNM N*N/2 main()

{printf(\printf(\}

[1]A.3 B.4 C.6 D.8 [2]A.17 B.18 C.30 D.40

【题18】以下程序的输出结果为(B)。 #include #define(y) 3.84+y

#definePR(a) printf(\#definePRINT(a) PR(a);putchar(\\'n') main() {int x=2;

PRINTF(F(3)*x)); }

A.8 B.9 C.10 D.11

【题19】以下程序的输出结果为(B)。 #definePT 5.5

#defineS(x) PT*x*x main()

{inta=1,b=2;

printf(\}

A.12.0 B.9.5 C.12.5 D.33.5

【题20】以下在任何情况下计算平方数时都不会引起二义性的宏定义是(D)。 A.#define POWER(x)x*x B.#define POWER(x)(x)*(x) C.#define POWER(x)(x*x) D.#define POWER(x)((x)*(x))

Inverp (char*a)

{ if (【C】) return 0; Inverp(a+1);

printf(“%c”,【B】); }

A) *a!=?\\0? B) *a!=NULL C) !*a D) !a*= =0 A) *(a-1) B) *a C) *(a+1) D) *(a- -)

【题23】下面程序的功能是用递归法将一个整数存放到一个字符数组中。存放时按逆序存放。如483存放成“384”,请选择填空。 # include

void convert (char *a, int n) { int i;

If((i=n/10)!=0) convert (【B】, i); *a=【D】; }

Main()

{int number; char str[10]=” “;

scanf(“%d”, & number); convert(str,number); puts(str); }

【1】A)a++ B) a+1 C) a- - D)a-1

【2】A)n/10 B)n C)n/10+?0? D) n+?0?

【24】下面程序的功能是用递归法将一个整数转换成字符形式输出。例如输入483,应输出字符串“483”。请选择填空。 #include Void convert(int n) { int i;

If ((【A】)!=0) convert (i); Putchar(【C】+?0?); } main() { int number;

Scanf(“%d”,&number);

If ( number<0) {putchar(?-?); number= -number;} Convert (number); }

【1】A) i=n/10 B) i=n%n C) i=n-- D) i=--n 【2】A) n B) n/10 C) n D)i

【题25】下面程序的功能是按字典顺序比较两个字符串s,t 的大小,如果s大于t则返回正

值,等于则返回0,小于则返回负值。请选择填空。 # include “stdio.h” s(char *s, char * t)

{ for ( ; *s= = * t; 【D】 ) if (*s = = ?0?) return(0); Return(*s -*t); }

main()

{ char a[20],b[10],*p,*q; Int i;

P=&a ; q=&b;

Scanf(“%s%s”,a,b); i=s(【A】); printf(“%d”,i); }

【1】A) s++ B) t++ C) s++;t++ D) t++,s++ 【2】A) p,q B)q,p C)a,p D)b,q

【题26】下面程序的功能是从键盘接收一个字符串,然后按照字符顺序从小到大进行排序,并删除重复的字符。请选择填空。 # include< stdio.h> # include main()

{ char string[100],*p,*q*,*r, c; printf(“Please input a string:”); gets(string);

for (p=string. *p; p++)

{for(q=r=p;*q;q++) if(【A】) r=q; if (【D】) { c=*r; *r=*p; *p=c;} }

for (p=string;*p;p++) {for(q=p; *p= = *q; q++); Strcpy(【D】,q ); }

Printf(“result:%s\\n”, string); }

【1】A) *r>*q B) *r>*p C)r>q D) r>p 【2】A) r= =q B) r!=q C) p!=q D) r!=p 【3】A) p++ B) p C) p-1 D)p+1

【题27】下面程序的功能是将字符串 a的所有字符传送到字符串b 中,要求每传送三个字符后再存放一个空格,例如字符串 a为“abcdefg” ,则字符串 b为 “abcdefg”,请选择填空。 # include main() { int i,k=0;

char a[80],b[80],*p; p=a; gets(p); while (*p)

{ for(i=1; 【D】;p++,k++,i++) b[k]=*p; If (【A】) {b[k]=? ?; k++;} } b[k]=?\\o?; puts(b); }

【1】A) i<3 B)i<=3 C) i<3 && *p!=?\\0? D)i<=3 && *p 【2】A) i= =4 B) *P = =?\\0? C) !*p D)i!=4

【题28】下面程序的运行结果是(C)。 #include #include main()

{char *p1,*p2,str[50]=”abc”; p1=”abc”; p2=”abc”; strcpy(str+1,strcat(p1,p2)); printf(“%s\\n”,str);}

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

【题29】 下面程序的运行结果是(C)。 #include main()

{char str[]=”cdalb”; abc(str); puts(str); }

abc(char *p) {int i,j;

for(i=j=0;*(p+i)!=?\\0?;i++)

if(*(p+i)>=?d?) {*(p+j)=*(p+i); j++;} *(p+j)=?\\0?; }

A)dalb B)cd C)dl D)c

【题30】 下面程序运行结果是(D)。 #include fun(char*p)

{int i,j; char ts[81]; for(i=0,t=0;p[i]!=?\\0?;i+=2)

if(! isspace(*p+i)&&(*(p+i)!=?a?)) ts[t]=?\\0?; strcpy(p,ts); }

main()

{char str[81]={“a b c d ef g”}; fun(str); puts(str); }

A) abcdeg B)bcde C)ABCDE D)BCDE

【题31】若有以下定义,则对a数组元素的正确引用是(D)。 int a[5],*p=a;

A) *&a[5] B) a+2 C) *(p+5) D)*(a+2)

【题9.32】若有以下定义,则对a数组元素地址的正确引用是(D)。 int a[5],*p=a;

A) p=5 B)*a+1 C)&a+1 D)&a[0]

【题33】若有定义:int a[2][3];则对数组a的第i行第j列(假设i,j已正确说明并赋值)元数值的正确引用为(A)。

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

【题34】若有定义:int a[2][3];则对数组a的第i行第j列(假设i,j已正确说明并赋值)元数地址的正确引用为(D)。

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

【题9.35】若有以下定义和语句,则对a数组元素地址的正确引用是(C)。 int a[2][3],(*p)[3]; p=a;

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

【题36】若有以下定义和语句,则对a数组元素地址的正确引用是(C)。 Int a[2][3],(*p)[3]; p=a; A)(p+1)[0] B)*(*(p+2)+1) C)*(p[1]+1) D)p[1]+2

【题37】若有定义:int a[5];则a数组中首元素的地址可以表示为(C)。 A)&a B)a+1 C)a D)&a[1]

【题38】 若有定义:int (*p)[4];则标识符p(C)。 A)是一个指向整型变量的指针 B)是 一个指针数组名

C)是一个指针,它指向一个含有四个整型元素的一维数组 D)定义不合法

【题39】若有以下定义和赋值语句,则对s数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的合法引用为(A)。 ints[2][3]={0},(*p)[3]; p=s;

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

【题40】 若有以下定义和赋值语句,则对b数组的第i行第j列(假设i,j已正确说明并赋值)元素地址的非法引用为(C)。 int b[2][3]={0},(*p)[3]; p=b;

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

【题41】以下与int *q[5];等价的定义语句是(C)。 A)int q[5] B)int*q C)int*(q[5]); D)int(*q)[5]

[题42]设有以下程序段:

char str[4][10]={“first”,“second”,“third”,“fourth”},*strp[4]; int n;

for(n=0;n〈4;n++) strp[n]=str[n];

若k为int型变量且0〈=k〈4,则对字符串的不正确引用是(A)。 A)strp B)str[k] C)strp[k] D)*strp }

C)main(int argc,char *argv[]) { while(++argc >0)

printf(“%s%c”,*++argc,(argc>1)?? ?:?\\n?); }

D)main(int argc,char *argv[]) {while(argc>1)

,printf(“%s”,*++argv); }

【题43】阅读以下程序: main()

{int a[10]={2,4,6,8,10,12,14,16,18,20}, *p; p=a;

printf(“%x \\n”,p);

printf(“%x \\n”,p+9); }

若第一个printf语句输出的是ffca,则第二个printf语句的输出是(B)。 A)ffdd B)ffdc C)ffde D)ffcd

第9章 结构体与共用体

1 选择题

【题1】已知学生记录描述为 struct student {int no;

char name[20]; char set; struct

{int year; int month; int day; }birth; };

struct student s;

设变量s中的“生日”应是“1984年11月11日”,下列对生日的正确赋值方式是(D). A)year=1984; B)birth.year=1984; month=11; birth.month=11; day=11; birth.day=11;

C)s.year=1984; D)s.birth.year=1984; s.month=11; s.birth.month=11; s.day=11; s.birth.day=11;

【题2】当说明一个结构体变量时系统分配给它的内存是(A). A)各成员所需内存量的总和 B)结构中第一个成员所需内存量 C)成员中占内存量最大者所需的容量 D)结构中最后一个成员所需内存量

【题3】以下对结构体类型变量的定义中不正确的是(D). A)#define STUDENT struct student STUDENT {int num; float age;

}std1;

B)struct student {int num; float age; }std1;

C)struct {int num; float age; }std1;

D)struct int num; float age; }student;

struct student std1;

【题4】设有以下说明语句 struct stu {int a; float b; }stutype;

则下面的叙述不正确的是(C). A)struct是结构体类型的关键字

B)struct stu是用户定义的结构体类型 C)stutype是用户定义的结构体类型名 D)a和b都是结构体成员名

【题5】C语言结构体类型变量在程序执行期间(A).. A)所有成员一直驻留在内存中 B)只有一个成员驻留在内存中 C)部分成员驻留在内存中 D)没有成员驻留在内存中

【题6】在16位IBM-PC机上使用C语言,若有如下定义: struct data {int i; char ch; double f; }b;

则结构变量b占用内存的字节数是(D). A)1 B)2 C)3 D)4

题【7】以下程序的运行结果是(A). #include “stdio.h” main()

{struct data

{int year,month,day; }today;

printf(“%d\\n”,sizeof(struct data)); }

A)6 B)8 C)10 D)12

【题8】根据下面的定义,能打印出字母M的语句是(D). Struct person{char name[9]; int age; };

struct person class[10]={“John”,17, “Paul”,19, “Mary”,18, “adam”,16 };

A)printf(“%c\\n”,class[3].name); B)printf(“%c\\n”,class[3].name[1]); C)printf(“%c\\n”,class[2].name[1]); D)printf(“%c\\n”,class[2].name[0]);

【题9】下面程序的运行结果是(D). main() {

struct cmplx {int x; int y;

} cnum[2]={1,3,2,7};

printf(“%d\\n”,cnum[0].y/cnum[0].x*cnum[1].x); }

A)0 B)1 C)3 D)6

【题10】 若有以下定义和语句; struct student {int age; int num ; };

struct student stu [3]={{1001,20 },{1002,19},{1003,21}}; main()

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

则以下不正确的引用是(D)。 A)(P++)—》 num B)p++

C)(*p).num D)p=&stu.age

【题11】以下scanf函数调用语句中对结构体 变量成员的不正确引用是(D)。 Stuct pupil

{char name[20 ]; int age ; int sex; }pup[5,]*p; p=pup;

A) scanf(“%s”,pup[0].name); B) scanf(“”%d),&pup[0].age; C) scanf(“%d”,&sex));?(p D) scanf(“%d”,P->age);

【题12】有以下定义和语句,则以下引用形式不合法的是(D)。 Struct s {int i1;

struct s*i2,i0; };

static struct s a[3 ]={2,&a[1],?\\0?,4,%a[2],&a[0],6,?\\0?,&a[1]}, *ptr; ptr=a;

A) ptr->i1++ B)*ptr->i2 C)++ptr->i0 D)ptr->i1

【题13】设有如下定义: struct sk {int n; float x; }data,*p;

若要使P指向data中的n域, 正确的负值语句的是(C)。 A) p=&data.n; B) *p=data.n;

C) p=(struct sk*)&data.n; D) p=(struct sk*)data.n;

【题14】若哟于以下说明和语句: struct student {int age; int num; }std,*p; p=&std;

则以下对结构体变量std中成员age的引用方式不正确的是(D)。 A)std.age B)p->age

C)(*p).age D)*p.age

【题15 】若以下程序段: struct dent { int n; int*m; };

int a=1, b=2,c=3;

struct dent s[3]={{101<&a},{102<&b},{103,&c}; main() {

struct dent *p; p=s; ?.. }

则以下表达中值为2的是--D---。 A)(p++)->m B)*(P++)->m C)(*p).m D)*(++p)->m

【题16】若有以下说明和语句,则 对中域的正确引用方式是(D)。 Struct pupil

{char name [20 ; int sex; }pup,*p; p=&pup;

A)p.pup.sex B)p->pup.sex C)(*p).pup.sex D)(*p).sex

【题17】设有以下语句: struct st {int n;

struct st *next; };

static struct st a[3 ] ={5,&a[1] ,7,&a[2],9,?\\0?},*p; p=&a=[0];

则以下表达式的值为6的是(D)。 A)p++->n B)p->n++ C)(*P).n++ D)++p->n

【题18】以下程序的输出结果是(C)。 Struct stu {int x; int*y; } *p;

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

Top