C语言程序设计综合练习题.docx

上传人:wux****ua 文档编号:7977611 上传时间:2020-03-26 格式:DOCX 页数:23 大小:44.18KB
返回 下载 相关 举报
C语言程序设计综合练习题.docx_第1页
第1页 / 共23页
C语言程序设计综合练习题.docx_第2页
第2页 / 共23页
C语言程序设计综合练习题.docx_第3页
第3页 / 共23页
点击查看更多>>
资源描述
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,%dn,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,%dn,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 p7=11,13,14,15,16,17,18,i=0,k=0; while(iy?x:y; int f2(int x,int y) return xy?y:x; main() int a=4,b=3,c=5,d,e,f; df1(a,b);d=f1(d,c); e=f2(a,b);e=f2(e,c); f=a+b+c-d-e; printf(%d,%d,%dn,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)若程序中已包含头文件stdioh,以下选项中,正确运用指针变量的程序段是 A) int*i=NULL; B) float*f=NULL; scanf(d,i); *f=105; 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 s8; s=Beijing; B)char *s;s=Beijing; C)char s8;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=xy ? x:y; intz; z=xy ? x:y; return z; C)max(intx,inty) D)int max(intx,inty) intz; return(xy?x:y); z=xy?x:y;return(z); 定义函数时,若需要声明形式参数时,则每个形式参数都必须单独声明类型D(15)有以下程序: fun(inta,intb) if(ab)return(a); elsereturn(b); main() int x=3, y=8, z=6, r; r=fun(fun(x, y),2*z); printf(dn,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是否闰年,用逻辑表达式表示_. (year4=0&year100!=0)|year400=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 name10; long sno;char sexfloat score4; STU; mian() STU a5; printf(“%d/n”,sizeof(a);【答案】80 【解析】sizeof(a) = sizeof(float score4)*5=16*5=80union的大小为最大成员的大小 6、执行以下程序后,输出“#”号的个数是 。 #include main() int i,j; for(i=1;i5;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+) ni=ni-1*2+1; printf(d,ni); 【答案】13715【解析】循环的作用是控制数组中后一个元素的值是前一个元素值的两倍加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(dn,a); 【答案】30 25【解析】当调用fun()时把c的值传给形参b,在执行子函数fun()中的a+=b+时,实际上静态变量a起作用,因此a的值变为30,然后回到主函数,执行a+=c+,此时起作用的是外部变量a,因此外部变量a的值由5变为25。9、以下程序运行后输入3,abcde,则输出的结果是 。 #include move(char*str,int n) chartemp;inti; temp=strn-1; for(i=n-1;i0;i-) stri=stri-1; str0=temp; main() char s50; int n,i,z; scanf(d,s,n,s); z=strlen(s); for(i=l;i=n;i+) move(s,z); printf(sn,s); 【答案】cdeab【解析】本题主要考查函数move()的功能。经过分析可知,每次调用该函数时,都是把最后一个字符移到串的最前端,而原先的第一个字符至倒数第二个字符顺次后移。10、已有定义如下: struct node intdata; struct node*next; *p; 以下语句调用malloc()函数,使指针p指向一个具有struct node类型的动态存储空间。请填空。 p=(struct node*)malloc( );【答案】sizeof(structnode)【解析】本题考查了结点的动态申请。动态申请需用到的函数为malloc(),malloc()中的参数应为结点占用的存储空间的大小,此题申请的结点要用来存放structnode类型的数据,因此申请的结点大小恰好可以存放structnode类型的数据,而sizeof()函数的作用是求得类型或数据占用的存储空间的大小。三、改错题1题:为一维数组输入10个整数;将其中最小的数与第一个数对换,将最大的数与最后一个数对换;输出数组元素。程序中共有4条错误语句,请改正错误。main()int a10;void input();void output();void max_min();input(a,10);max_min(a,10);output(a,10);void input(int *arr,int n) int *p,i; p=arr; printf(please enter 10 integers:n); for(i=0;in;i+)/*FOUND*/ sca(%d,&p+); void max_min(int *arr,int n) int *min,*max,*p,t; min=max=arr; for(p=arr+1;p*max) /*FOUND*/ *max=*p; else if(*p*min) min=p; t=*arr;*arr=*min;*min=t;/*FOUND*/ if(max=arr) max=min; t=*(arr+n-1);*(arr+n-1)=*max;*max=t;void output(int *arr,int n) int *p,i; p=arr; printf(The changed array is:n);/*FOUND*/while(i=0;i*max) if(*max*p)3.if(max=arr)4.for(i=0;ii;i+) for(p=arr;parr+n;) for(i=0;i=i;i+) for(p=arr;p=p;)2题:用起泡法对n个整数从小到大排序。程序中共有3条错误语句,请改正错误。/*FOUND*/void sort(int x,int n)int i,j,k,t;for(i=0;in-1;i+)/*FOUND*/ for(j=0;jxi+1) t=xj;xj=xj+1;xj+1=t; main()int i,n,a100;printf(please input the length of the array:n);scanf(%d,&n);for(i=0;in;i+)scanf(%d,&ai);sort(a,n); printf(output the sorted array:n);for(i=0;i=n-1;i+) printf(%5d,ai);printf(n);1.void sort(int *x,int n) void sort(int x,int n)2.for(j=0;jj;j+) for(j=0;jj;j+) for(j=0;jxj+1) if(xj+1xj)4.sort(a,n);(3)函数fun的功能是:求出两个非零正整数的最大公约数,并作为函数值返回。例如,若给num1和num2分别输入49 和21,则输出的最大公约数为7。 请改正程序中的错误,使它能得出正确的结果。int fun(int a,int b)int r,t;if(ab)t=a;/*FOUND*/b=a;/*FOUND*/a=t;r=a%b;while(r!=0)a=b;b=r;/*FOUND*/r=a/b;/*FOUND*/return a;main()int num1,num2,a;scanf(%d%d,&num1,&num2);a=fun(num1,num2);printf(the maximum common divisor is %dnn,a);1.a=b;2.b=t;3.r=a%b;4.return b; return (b); return(b);(4) fun函数的功能是:先从键盘上输入一个3行3列矩阵的各个元素的值,然后输出主对角线上的元素之和sum。 请改正程序中的错误,使它能得出正确的结果。#include stdio.hint fun() int a33,sum; int i,j;/*FOUND*/ a=0; for(i=0;i3;i+) for(j=0;j3;j+)/*FOUND*/ scanf(%d,aij); for(i=0;i0) sum+=si;c+; i+; /*FOUND*/sum=c;/*FOUND*/return c;main()int x1000;int i=0;do scanf(%d,&xi);while(xi+!=0);printf(%fn,fun(x);1 double sum=0.0; 或 double sum=0;2 while( si != 0 )或 while(si)3 sum/=c; 或 sum=sum/c;4 return sum; 或 return (sum);四、程序设计1、 有3 个整数a、b、c,由键盘输入,编程输出其中最大的数。2、 编写一个程序,计算33的矩阵的主对角线之和。3、某班级4个学生各学5门功课,考试成绩如下表:(1) 计算第一门课程的平均分;(2) 查找二门以上(含二门)课程不及格(成绩60)学生, 输出不及格学生各门功课的成绩;(3) 找出平均成绩在85分以上或全部成绩在80分以上的学生。 分别编不同的函数实现。4、输入10个整数,将其中最小的数与第一个数对换,最大在数与最后一个数对换,要求用指针法分别写三个函数:输入10个整数;按要求对数进行交换;输出10个数。5、编写一个程序,其中用户自定义函数strcompare函数实现两个字符串s1,s2的比较,函数原型声明如下:int strcompare( char *str1 , char *str2 ) ;分别有如下要求:(1)调用函数时实参用数组名,函数形参用指针变量。(2)调用函数时实参和函数形参都用指针变量。(3)调用函数时实参用指针变量,函数形参用数组名。6、编写一个程序,计算s=1!+2!+3!+n!。其中n由输入决定。#includemain() double i,a=1,s=0; int n; scanf(%d,&n); for(i=1;i=n;i+) a=a*i; s=s+a;printf(a=%en,a);23
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 考试试卷


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!