C语言程序设计综合练习题
一 、选择题
C(1)以下叙述中正确的是
A)C语言比其他语言高级
B)C语言可以不用编译就能被计算机识别执行
C)C语言以接近英语国家的自然语言和数学语言作为语言的表达形式 D)C语言出现的最晚,具有其他语言的一切优点
a.错误,c语言是由B语言发展过来,是低级语言向高级语言发展的过渡语言,而且更偏向底层~~java和C#才算是高级语言
b、明显错误,C语言是编译型语言,需要编译执行
d、这就错的更离谱了,现在微软都在研制F#,C怎么可能最晚?再说,java和c#都比它晚了,再说一下,C语言的主要优点是简洁紧凑、可移植性强,由指针这一特色,更能操作底层,它没有java的跨平台性,没有C#的通俗性。。。
最后,说下C,早期的C在贝尔实验室研制出来的,用于做数值计算和一些数学模型的求解,所以更接近自然语言和数学语言
B(2)在一个C语言程序中
A)main()函数必须出现在所有函数之前 B)main()函数可以在任何地方出现 C)main()函数必须出现在所有函数之后 D)main()函数必须出现在固定位置
B(3)下列关于C语言用户标识符的叙述中正确的是
A)用户标识符中可以出现下划线和中划线(减号) B)用户标识符中不可以出现中划线,但可以出现下划线
C)用户标识符中可以出现下划线,但不可以放在用户标识符的开头
D)用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头 A不能出现中划线 C下划线可以放在开头 D数字不能放开头
D(4)下列关于单目运算符++,--的叙述中正确的是
A)它们的运算对象可以是任何变量和常量
B)它们的运算对象可以是char型变量和int型变量,但不能是float型变量
1
C)它们的运算对象可以是int型变量,但不能是double型变量和float型变量 D)它们的运算对象可以是char型变量、int型变量和float型变量
A(5)有以下程序段:
int m=0,n=0;char c=′a′; scanf(″%d%c%d″,&m,&c,&n); printf(″%d,%c,%d\n″,m,c,n);
若从键盘上输入:10A10<回车>,则输出结果是
A)10,A,10 B)10,a,10 C)10,a,0 D)10,A,0
格式字符%d用于输入整数,%c用于输入字符。在输入时,系统把第一个10作为整数10赋给m,把随后的A作为字符赋值给c,后面的10作为整数赋给n,最后输出的结果为10,A,10printf语句中,屏幕输出时所显示的间隔符应与输出格式项之间
的间隔符一致。
C(6)有以下程序:
main()
{ int i=1,j=1,k=2; if((j++k++)&&i++) printf(″%d,%d,%d\n″,i,j,k); }
执行后输出结果是
A)1,1,2 B)2,2,1 C)2,2,2 D)2,2,3
C语言中,执行“‖”运算的两个操作数,若有1个值为1,则整个表达式的值都为1。若该运算符左边操作数的值为1,则就不继续执行其右边的操作数,故最终i,j,k的值为2,2,2。
D(7)有以下程序:
main()
{ int p[7]={11,13,14,15,16,17,18},i=0,k=0; while(i<7 && p[i]%2){k=k+p[i];i++;} printf(″%d\n″,k); }
执行后输出结果是
A)58 B)56 C)45 D)24
程序的功能是计算数组中满足条件的数的累加和(遇到第一个偶数为止)。
2
B(8)有以下程序:
main()
{ int i=10,j=1;
printf(″%d,%d\n″,i--,++j); }
执行后输出结果是
A)9,2 B)10,2 C)9,1 D)10,1
自增运算符“++”和自减运算符“--”放在变量之后表示,在使用变量之后,再使变量的值加1或减1。若放在变量之前则表示在使用变量之前,先使变量的值加1或减1。
C(9)有以下程序:
int f1(int x,int y)
{ return x>y?x:y;} int f2(int x,int y)
{ return x>y?y:x;} main()
{ int a=4,b=3,c=5,d,e,f; d=f1(a,b);d=f1(d,c); e=f2(a,b);e=f2(e,c); f=a+b+c-d-e;
printf(″%d,%d,%d\n″,d,f,e); }
执行后输出结果是
A)3,4,5 B)5,3,4 C)5,4,3 D)3,5,4
函数f1()的功能是返回两数中的较大值,函数f2()的功能是返回两数中的较小值,所以经过两次赋值后,d=5,e=3,f=a+b+c-d-e=4。
D(10)若程序中已包含头文件stdio.h,以下选项中,正确运用指针变量的程序段是
A) int*i=NULL; B) float*f=NULL; scanf(″%d″,i); *f=10.5; C) chart=′m′, *c=&t; D) long*L; *c=&t; L=′\0′;
选项C)显然不对。选项A),B),D)从语法上讲都是可以的,但内存中地址为NULL,即地址0的单元不能随意存放用户数据,因为这样可能会破坏其他程序。选项D)中尽管用了′\0′(在内存中也为0),但并未向该单元存放数据,故该项正确。
3
C(11)已定义c为字符型变量,则下列语句中正确的是
A)c=′97′; B)c=″97″; C)c=97; D)c=″a″;
字符常量是用单撇号括起来的一个字符或一串字符,故选项A)不正确。选项B),D)均为字符串。而选项C)是把ASCII码值为97的字符赋给了变量c。
B(12)以下选项中不能正确把cl定义成结构体变量的是
A)typedef struct B)struct color cl { int red; { int red; int green; int green; int blue; int blue; } COLOR; } COLORcl;
C)struct color D)struct
{ int red; { int red;
int green; int green; int blue; int blue; } cl; } cl;
选项A)是把结构体类型改名后定义为变量cl。选项C),D)则是在定义结构体类型时定义变量,而选项B)不符合结构体类型定义的语法规则。
D(13)下列选项中正确的语句组是
A)char s[8]; s={″Beijing″}; B)char *s;s={″Beijing″}; C)char s[8];s=″Beijing″; D)char *s;s=″Beijing″;
C语言不允许通过赋值语句给字符数组赋值,故选项A),C)不正确,而“{}”是在定义变量的同时对变量进行初始化时使用,在赋值时不能使用。
B(14)下列函数定义中,会出现编译错误的是
A)max(intx,inty,int*z) B) int max(int x,y) { *z=x>y ? x:y; } { intz;
z=x>y ? x:y; return z; }
C)max(intx,inty) D)int max(intx,inty) { intz; { return(x>y?x:y);}
4
z=x>y?x:y;return(z); }
定义函数时,若需要声明形式参数时,则每个形式参数都必须单独声明类型
D(15)有以下程序:
fun(inta,intb)
{ if(a>b)return(a); elsereturn(b); }
main()
{ int x=3, y=8, z=6, r; r=fun(fun(x, y),2*z); printf(″%d\n″,r); }
程序运行后的输出结果是
A)3 B)6 C)8 D)12
此题考查了带返回值的函数的调用。fun()函数的功能是求出两个数的 最大数并返回主函数r=fun(fun(x, y),2*z)处。执行过程为先调用函数fun(x,y)求得两数中的较大者,再进行自身的递归调用,此时函数中的两个参数为刚求得的数和2*z(即12)传递给子函数,找出两数中的大数。 二、填空题
1. 算术运算符与关系运算符优先次序______算术运算>关系运算
2. a和b值分别为4和5,则!a||b的值为___1___ , 4 && 0 || 2的值为______。
3. 判别某一年Year是否闰年,用逻辑表达式表示______. (year%4==0 && year%
100!=0)||year%400==0
4下面程序的运用结果是:。3
和5
void swap(int *a,int *b)
{ int *t;
t=a; a=b; b=t; }
mian()
{ int x=3, y=5, *p=&x, *q=&y; swap(p,q);
printf(“%d%d/n”,*p,*q); }
5