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型变量 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,10 printf语句中,屏幕输出时所显示的间隔符应与输出格式项之间的间隔符一致。
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,3C语言中,执行“‖”运算的两个操作数,若有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程序的功能是计算数组中满足条件的数的累加和(遇到第一个偶数为止)。
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),但并未向该单元存放数据,故该项正确。
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);}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==04下面程序的运用结果是:。
3和5void 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.下面程序的运用结果是:。
typedef union student{ char name[10];long sno;char sexfloat score[4];}STU;mian(){ STU a[5];printf(“%d/n”,sizeof(a));}【答案】80【解析】sizeof(a) == sizeof(float score[4])*5=16*5=80union的大小为最大成员的大小6、执行以下程序后,输出“#”号的个数是。
#include<stdio.h>main(){ int i,j;for(i=1;i<5;i++)for(j=2;j<=i;j++) putchar(′#′);}【答案】6【解析】第一层循环条件成立时,i的值分别为1,2,3,4。
而第二层循环条件成立时i的值只能是2,3,4。
j<=i共执行6次。
7、以下程序运行后的输出结果是main(){ inti,n[]={0,0,0,0,0}for(i=l;i<=4;i++){ n[i]=n[i-1]*2+1;printf(″%d″,n[i]);}}【答案】1 3 7 15【解析】循环的作用是控制数组中后一个元素的值是前一个元素值的两倍加1。
8、以下程序运行后的输出结果是int a=5;fun(int b){ static int a=10;a+=b++;printf(″%d″,a);}main(){ intc=20;fun(c);a+=c++;printf(″%d\n″,a);}【答案】30 25【解析】当调用fun()时把c的值传给形参b,在执行子函数fun()中的a+=b++时,实际上静态变量a起作用,因此a的值变为30,然后回到主函数,执行a+=c++,此时起作用的是外部变量a,因此外部变量a的值由5变为25。