C语言练习题(第一套).doc_第1页
C语言练习题(第一套).doc_第2页
C语言练习题(第一套).doc_第3页
C语言练习题(第一套).doc_第4页
C语言练习题(第一套).doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计试题(第一套)C语言程序设计试题(第一套)一、选择题,下列各题A)、B)、C)、D)四个选项中,只有一个选项是正确的,请选择。(1) 若变量已正确定义并赋值,下面符合C语言语法的表达式是(B)A) a:=b+1 B) a=b=c+2 C) int 18.5%3 D) a=a+7=c+b讲解:用排除法。A)中包含一个不合法的运算符“:=”,错;C)明显错;D)可分解为两个表达式:a+7=c+b和a=a+7,其中第一个是错的,因为C规定:赋值号的左面只能是单个变量,不能是表达式或常量等。因此,正确答案是B),它实际上相当于:a=(b=c+2),进而可分解为两个表达式:b=c+2和a=b。(2) C语言中运算对象必须是整型的运算符是(A)A) %= B) / C) = D) =讲解:正确答案是A)。C规定:取余运算符的运算对象必须是整型,复合运算符“%=”中包含%运算,它的运算对象也必须是整型。(3) 若已定义x和y为double类型,则表达式x=1,y=x+3/2 的值是(C)A) 1 B) 2 C) 2.0 D) 2.5讲解:该题的解答请参阅“整数除法的注意事项”和“逗号表达式”。正确答案是C)。(4) 若变量a、i已正确定义,且i已正确赋值,合法的语句是(B)A) a=1 B) +i; C) a=a+=5; D) a=int(i);讲解:(A)中是一个表达式,因为缺少分号,所以不是语句;(C)错误;(D)若改为a=(int)i;则是合法的语句,小括号写错了位置,从另一个角度理解,(D)的写法应该是一个函数调用语句,函数名是int,小括号中的i是实参,这样的话,函数名int又是不合法的,因为C规定:用户标识符(包括函数名)不能是关键字,而int是一个关键字。所以,正确答案是(B),它相当于语句i=i+1;(5) 若有以下程序段,int c1=1,c2=2,c3;c3=1.0/c2*c1;则执行后,c3中的值是(B)A) 0 B) 0.5 C) 1 D) 2讲解:因为运算表达式中有一个浮点型数据1.0,所以,运算结果应该也是一个浮点类型,只有(B)符合这一条件,仅根据这一点就可以确定(B)是正确答案。该语句的执行过程(1)先将c2的值2转换为2.0;(2)计算1.0/2.0,得到中间结果0.5;(3)将c1的值1转换为1.0;(4)计算0.5*1.0,得到结果0.5;(5)将0.5赋值给变量c3。(6) 有如下程序main() int y=3,x=3,z=1;printf(“%d %dn”,(+x,y+),z+2);运行该程序的输出结果是(D)A) 3 4 B) 4 2 C) 4 3 D) 3 3讲解:printf函数输出两个表达式的值,第一个是(+x,y+),它是逗号表达式,它的值应该就是y+的值3(关于逗号表达式,请参阅课本中的一个专题的内容);第二个表达式是z+2,它的值为3。所以,正确答案是(D)。(7) 能正确表示逻辑关系:“a=10或a0”的C语言表达式是A) a=10 or a=0|a=10 &a=10a=0讲解:题目要求很明确,两个关系式a10和a0之间是“或”的关系,C语言中,逻辑“或”用运算符“|”,四个选项中只有(D)满足这一条件,它就是正确答案。(8) 有如下程序main() int x=1,a=0,b=0;switch(x)case 0: b+;case 1: a+;case 2: a+;b+;printf(“a=%d,b=%dn”,a,b);该程序的输出结果是A) a=2,b=1 B) a=1,b=1 C) a=1,b=0 D) a=2,b=2讲解:该题目的关键是要搞清楚该程序执行了哪几条语句。由于x的值等于1,所以switch结构中,程序从case 1后面的语句开始执行,又因为case 1后面的语句没有以break结束,所以程序要继续往下执行case 2后面的语句。所以,该程序共执行了这三条语句:a+;a+;b+;因此,变量a和b最后的值应该为2和1,正确答案为(A)。(9) 有如下程序main() float x=2.0,y;if(x0.0) y=0.0;else if(x10.0) y=1.0/x;else y=1.0;printf(“%fn”,y);该程序的输出结果是A) 0.000000 B) 0.250000 C) 0.500000 D) 1.000000讲解:该题目测验你对if.else if结构的理解,比较简单。x的值满足x10.0的关系,所以程序将执行y=1.0/x;语句,y的值应该等于0.5。最后,用printf函数输出时,%f的输出格式为小数点后保留6位,所以,(C)是正确答案。(10) 有如下程序main()int a=2,b=-1,c=2;if(ab)if(b0) c=0;else c+;printf(%dn,c);该程序的输出结果是A) 0 B) 1 C) 2 D) 3讲解:该题目测验你对else和if的配对规则的理解。程序中有二个if和一个else,这个else应该和哪个if配对成为一个if.else结构呢?C中规定:else总是与它前面最近的一个(还没有与else配成对的)if相配对。因此,题目中的else应该与第二个if配对成为一个if.else结构,这个if.else结构从语法上看应该视为一条语句,因此,该程序中的if.else结构相当于下面的结构:if(ab)if(b0) c=0;else c+;由此不难看出,程序中的c=0;和c+;两条语句均没有执行,所以,输出结构为2,正确答案是(C)。(11) 有如下程序main() int i,sum;for(i=1;i=3;sum+) sum+=i;printf(“%dn”,sum);该程序的执行结果是A) 6 B) 3 C) 死循环 D) 0讲解:该程序中的循环执行过程中,变量i的值经初始化后(值为1)始终没有改变,所以,循环条件i6) n-;printf(“%d”,n);该程序段的输出结果是A) 987 B) 876 C) 8765 D) 9876讲解:该题目应该根据循环体第一次和最后一次执行时的输出结果来决定哪一项是正确的。第一次进入循环时,n的值是9,循环体内,先经过n-运算,n的值变为8,所以第一次的输出值是8,由此可以排除(A)和(D)。由循环条件n6可以知道,最后一次循环开始时,n的值应该为7,所以最后一次执行循环体时输出为6,由此可以排除(C),所以,只剩下(B),它就是正确答案。(14) 设有说明语句:char a=72;则变量aA) 包含1个字符 B) 包含2个字符 C) 包含3个字符 D) 说明不合法讲解:72是一个转义字符(这里的72是八进制,对应于十进制的58,表示这是一个ASCII码值为58的字符),正确答案为(A)。(15) 有如下程序int runc(int a,int b) return(a+b);main() int x=2,y=5,z=8,r;r=func(func(x,y),z);printf(“%dn”,r);该程序的输出的结果是A) 12 B) 13 C) 14 D) 15讲解:该题的关键在于对r=func(func(x,y),z);语句的理解。该语句的执行过程是:(1)执行func(x,y),返回值是7;(2)将func(x,y)的返回值7作为一个实参,z作为第二个实参,再进行一次func函数的调用,相当于执行func(7,z)调用,返回值为15;(3)将15赋值给变量r。所以,正确答案是(D)。(14) 有如下程序段int *p,a=10,b=1;p=&a; a=*p+b;执行该程序段后,a的值为A) 12 B) 11 C) 10 D) 编译出错讲解:关键在于对指针的理解。语句p=&a;使指针p指向了变量a,在这以后,有以下两个等价关系:(1)p和&a等价;(2)*p和a等价。也即,凡是有*p的地方均可以a替代,反之也然。于是,语句a=*p+b;就相当于a=a+b;运算后a中的值为11。正确答案是(B)。(15) 对于基类型相同的两个指针变量之间,不能进行的运算是(C )A) B) = C) + D) (16)以下函数返回a所指数组中最小值所在的下标值fun(int *a,int n)int i,j=0,p;p=j;for(i=j;in;i+)if(aiap)_;return(p);在下划线处应填入的内容是A)i=pB)ap=aiC)p=jD)p=i讲解:该题目所要求的是最小数的位置(下标),而不是最小数的数值!因此,在进行逐个比较的过程中,需要记录下的是最小数的下标i,根据给出的程序可知,该下标记录在变量p中,所以,如果ai2) return(fib(n-1)+fib(n-2);else return(2);main0 printf(“%dn”,fib(3);该程序的输出结果是A) 2 B) 4 C) 6 D) 8讲解:这是一个递归函数问题。递归函数fib(int n)结束递归的条件是n2成立,所以要执行fib(n-1)和fib(n-2)的调用,因为n-1和n-2的值均小于递归条件,所以调用立即返回,返回值均为2,所以最后的返回值是4。正确答案为(B)。 (18) 有如下程序#define N 2#define M N+1#define NUM 2*M+1#main() int i;for(i=1;i=NUM;i+)printf(“%dn”,i);该程序中的for循环执行的次数是A) 5 B) 6 C) 7 D) 8讲解:该题目测试你对宏替换的理解。请参阅有关宏的内容。实际上这里遇到的宏是一种较简单的情况:不带参数的宏。关键要注意在对2*M+1进行宏替换时,要将宏名M原封不动地代进去,得到SUM的形式为2*N+1+1千万不要随意给N+1加上小括号,使SUM变为2*(N+1)+1,这就是宏名和变量名之间的区别,再将N代进去,得到SUM的值为6。所以,正确答案是(B)。(19) 有如下程序段int a=14,b=15,x;char c=A;x=(a&b)&(cB);执行该程序段后,x的值为A) ture B) false C) 0 D) 1讲解:首先应该很肯定地将(A)和(B)排除,因为C中没有这样的数据类型。因此,正确答案只能是(C)或(D)。然后,再来看(a&b)&(cB)的运算结果。该表达式先计算(a&b),结果为1,后计算(cB),结果也是1,最后的结果是1&1的值,还是1。所以,正确答案为(D)。 (20) 有如下说明int a10=1,2,3,4,5,6,7,8,9,10,*p=a;则数值为9的表达式是(B)A) *P+9 B) *(P+8) C) *P+=9 D) P+8(21) 有如下程序main()int n5=0,0,0,i,k=2;for(i=0;ik;i+) ni=ni+1;printf(%dn,nk);该程序的输出结果是A) 不确定的值 B) 2 C) 1 D) 0讲解:该题先定义数组n5并给每个元素赋了初值0,接下来的for循环共循环两次,相当于执行了以下两条语句:n0=n0+1;n1=n1+1;注意,执行这两句后,对n2和k的值都没有影响,所以,最后用printf输出nk时,输出的是n2的值,应该为0。正确答案是(D)。 (22) 有如下程序main()int a33=1,2,3,4,5,6,i,j,s=0;for(i=1;i3;i+)for(j=0;j=i;j+) s+=aij;printf(%dn,s);该程序的输出结果是A) 18 B) 19 C) 20 D) 21解答:解答该题的关键是要弄清二维数组a33的初始化结果。我们把这里的二维数组理解成三行三列的矩阵,在给数组初始化时,初始值是按行给出的,整个大括号内的第一个大括号中的初始值1,2将赋值给第一行的矩阵元素,这里给出的初始值个数(2个数)小于第一行元素的个数(3个元素),按规定应该给后面的元素自动补0(“自动补0”原则),所以,第一行元素的初始值分别为:a00=1,a01=2,a02=0。同理,第二行元素的初始值分别为:a10=3,a11=4,a12=0。第三行元素的初始值分别为:a20=5,a21=6,a22=0。接下来对for循环进行分析,这是一个二重循环,外层循环的次数为2次(循环变量i从1到2),内层循环的次数由i的值决定。当i=1时,j的循环从0到1,所以变量s中加进了a10和a11,当i=2时,j的循环从0到2,所以变量s中又加进了a20、a21和a22,最后结果:s的值就是这五个元素之和,为18。正确答案是(A)。 23)有如下程序main()char s =ABCD,*p;for(p=s+1;p5|x-5 。(3) 要使以下程序段输出10个整数,请填入一个整数。for(i=0;i= ;printf(%dn,i+=2);解答:可以这样来推导,如果填入2,则输出2个整数,如果填4,则输出3个整数,填6则输出4个整数,可以发现,若填n,则输出n/2+1个整数,所以为了输出10个整数,应该填18或19。 (4) 以下函数用来求出两整数之和,并通过形参将结果传回,请填空。void func(int x,int y, int * z) *z=x+y; (5) 若有以下定义,则不移动指针p,且通过指针p引用值为98的数组元素的表达式是 *(p+5) 。int w10=23,54,10,33,47,98,72,80,61, *p

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论