C语言复习大纲与往届试题.doc_第1页
C语言复习大纲与往届试题.doc_第2页
C语言复习大纲与往届试题.doc_第3页
C语言复习大纲与往届试题.doc_第4页
C语言复习大纲与往届试题.doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

一、读程序(每小题3分,共39分)1. 读下面的程序#include void main( ) char c; printf(输入一个字符(m、n、h):); scanf(%c, &c); /* 输入 */ switch(c) /* 根据输入的字符来决定输出 */ case m : printf(Good morning!); break; case n : printf(Good night!); break; case h : printf(Hello!); break; default : printf(?);如果执行时输入n,则输出是什么?2. 读下面的程序#include #include void main( ) int m, i, k; printf (输入一个整数:); scanf (%d, &m); k = sqrt ( (double) m ); for ( i = 2; i k ) printf (%d是素数n, m ); else printf (%d不是素数n, m); 如果输入的值为19,则程序运行结果为何?3. 读下面的程序,写出运行结果#include #define S(a, b) a*b void main( ) int a = 3, area; area = S ( a, a+3 );printf(area=%dn, area);4. 下面的程序从文本文件out.txt逐个读入字符,并显示在屏幕上。请将程序补充完整#include #include void main( ) ; char ch, *filename= out.txt; if ( ( fp=_ _(filename, r) ) =NULL ) printf(cannot open filen); exit(0); while ( ! feof ( fp ) ) ch=fgetc ( );putchar(ch); fclose(fp);5. 读下面的程序,写出执行结果#include int func ( int a, int b ) static int m=0; m+= a+b;return m;void main( ) int k=4, m=3, p; p=func(k, m); printf ( %d , p); p=func(k, m); printf ( %d n, p);6. 读下面的程序,写出执行结果#include void swap( int *p1, int *p2) int p; p=*p1; *p1=*p2; *p2=p;void main( ) int a=5, b=9;int *p1, *p2;printf(%d, %dn, a, b); p1=&a;p2=&b; swap(p1, p2); printf(%d, %dn, a, b);7. 读程序,写出执行程序结果#include struct student int num; char name20; char sex; int age;struct student stu = 101, Wanglin, M, 20 , 103, Ligang, M, 19 , 107, Liuyan, F, 19 ; void main( ) int i; for ( i = 0; i 3; i+) stui.age+; printf(%d,%s,%c,%d, stui.num, , stui.sex, stui.age);printf(n); 8. 读下面的程序,写出执行结果#include void resort ( int x , int n ) int i , t; t=x0; for ( i = 0; i n-1; i+ ) x i = x i+1 ; xn-1=t; void main( )int i, a10= 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ; resort ( a , 10 ); printf (the resorted array:n ); for ( i = 0 ; i 10 ; i+ ) printf ( %d , a i );printf (n );9. 读程序,写出下面函数的功能void cpystr( char dest , char src )char *p = src; char *q = dest; while ( *p != 0 ) *q+ = *p+;*q = 0;10. 读程序,写出执行结果#include int max = 0, min =100;int max_min( int score , int n )int max, min; int i ; max = min = score0; for ( i =1; i n; i+ ) if ( max scorei ) min = scorei; printf (Max: %d Min: %d n, max, min);return max ;void main ( )int score10= 78, 79, 80, 81, 82, 83, 84, 85, 86, 90; max = max_min ( score , 10 ) ; printf (Max: %d Min: %d n, max, min);11. 以下程序的功能是计算:s=1+12+123+1234+12345,请填空。#include void main( ) int t=0, s=0, i; for( i=1; i=5; i+) t = i + ;s = s + t; printf(s=%dn, s);12. 读程序,写出执行结果#include void fun ( int m, int n, int ar 4, int *br) int i, j, x; for ( i=0; im; i+ ) x=ari0;for ( j=0; jn; j+ )if ( x arij ) x=arij;bri=x;void main( )int a34= 12,41,36,28, 19,33,15,27, 3,27,19,1 , b3, i; fun(3, 4, a, b); for ( i=0; i3; i+ ) printf(%4d, bi); printf(n);13. 读程序,写出执行结果#includevoid main( ) char a =123456789, *p; int i=0; p=a; while ( *p != 0 ) if ( i%2=0 ) *p=*;p+; i+; puts(a);二、程序设计(共61分)1. 编程序求如下分段函数的值:(8分y=e的x次方+x的绝对值(x=0);x的3次方+x的2次方+1(0x=1);2. 编程序计算s=1-2+3-4+99-100并输出结果。(8分)3从键盘输入50个整数,找出其中的偶数,以每行10个数打印出来。(9分)4写出求数列:2,3,4,6,9,13,19,28,的前20项的程序。(9分)Mi= 2(i=1);3(i=2); 4(i=3); M(i-1)+M(i-3) ,(i3);5编写一个函数,求二维数组a1010上三角(主对角线以上,含主对角线)元素之和。(9分)6编写一个函数,将一整型数组m中的N个元素倒置。(9分)例如: 原数组m为:20 18 31 15 7 倒置后的数组m为:7 15 31 18 207给一个不多于5位的正整数,要求:(9分)求出它是几位数;分别输出每一位数字;按逆序输出各位数字,例如原数为321,应输出123。答案一 读程序(每题3分,共39分)1. Good night!2. 19是素数3. area=124. FILE *fp fopen fp5. 7 , 146. 5 , 99 , 57. 101 , Wanglin , M , 21103 , Ligang , M , 20 107 , Liuyan , F , 208. the resorted array:12 13 14 15 16 17 18 19 20 119. 实现字符串复制功能,将字符串src的内容复制给字符串dest。10. Max: 90 Min: 78 Max: 90 Min: 10011. 10*t12. 41 33 2713. *2*4*6*8*二、程序设计(共61分)1. (8分)#include #include void main() float x , y; printf(“请输入x的值:”); scanf(“%f” , &x); if(x0 & x=1) y=x+2*sqrt(x); printf(“y=%fn” , y);2. (8分)#include void main() int i , t , s;s=0;for(i=1; i=100; i+) t=i; if(i%2=0) t=-t; s=s+t;printf(“s=%dn”, s);3. (9分)#include void main() int i , num , a50;printf(“请输入50个整数:”);for(i=0; i50; i+) scanf(“%d”, &ai); printf(“偶数为:n”);num=0;for(i=0; i50; i+) if(ai%2=0) num+; printf(“%d ”, ai); if(num%10=0) printf(“n”); 4. (9分)#include void main() int i, a20=2, 3, 4;for(i=3 ; i20 ; i+) ai=ai-1+ai-3;for(i=0; i20; i+) printf(“%d ”, ai);5. (9分)float sum(float a1010) float s=0;int i , j;for( i=0 ; i10 ; i+) for(j=i ; j10 ; j+) s=s+aij;return(s);6. (9分)void invert(int m , int n) int t, *p, *q;p=m; q=m+n-1;while(p=q) t=*p; *p=*q; *q=t; p+; q-; 7. (9分)计算是几位数、输出每位数字、逆序输出每位数字三部分,各3分。#include void main()int x , w;int x1, x2, x3, x4, x5;printf(“请输入一个不多于5位的正整数:”);scanf(“%d”, &x);if(x=10000) w=5;else if(x=1000) w=4;else if(x=100) w=3;else if(x=10) w=2;else w=1;x5=x/10000;x4=(x-x5*10000)/1000;x3=(x-x5*10000-x4*1000)/100;x2=(x-x5*10000-x4*1000-x3*100)/10;x1=x-x5*10000-x4*1000-x3*100-x2*10;switch(w) case 5: printf(“%d,%d,%d,%d,%dn”, x5, x4, x3, x2, x1); printf(“逆序数字为:”); printf(“%d,%d,%d,%d,%dn”, x1, x2, x3, x4, x5); break; case 4: printf(“%d,%d,%d,%dn”, x4, x3, x2, x1); printf(“逆序数字为:”); printf(“%d,%d,%d,%dn”, x1, x2, x3, x4); break; case 3: printf(“%d,%d,%dn”, x3, x2, x1); printf(“逆序数字为:”); printf(“%d,%d,%dn”, x1, x2, x3); break; case 2: printf(“%d,%dn”, x2, x1); printf(“逆序数字为:”); printf(“%d,%dn”, x1, x2); break; case 1: printf(“%dn”, x1); printf(“逆序数字为:”); printf(“%dn”, x1); break;一、单项选择题(每题1分,30分)1. 在C语言中,下列字符常量中合法的是 B 。A. 084 B. x43 C. ab D. “0”2. 有如下定义:long m; char c; float x; double y; 则表达式c+m*x/y的值的类型是 D 。A. long B. char C. float D. double3. 语句:printf(“%d”, (a=2)&(b=-2) ); 的输出结果是 C 。A. 无输出 B. 结果不确定 C. 1 D. 24. 有以下函数定义:void fun( int n, double x ) 若以下选项中的变量都已正确定义并赋值,则对函数fun的正确调用语句是 C 。A. fun( int y , double m ); B. k=fun( 10 , 12.5 );C. fun( 10 , 12.5 ); D. void fun( 10 , 12.5 );5. 以下选项中不能正确赋值的是 B 。A. char b =H, e, l, l, o, !;B. char b10; b=“Hello!”;C. char b10=“Hello!”;D. char *str=“Hello!”;6. 若有以下定义:char s20=programming, *ps=s; 则不能代表字符g的表达式是 A 。A. ps+3 B. s3 C. ps3 D. ps+=3; *ps7. 在下列运算符中,优先级最高的运算符是 C 。A. = B. != C. % D. |8. 在C语言中,要求运算对象必须是整型的运算符是 C 。A. B. / C. % D. !9. 以下不能正确定义二维数组的选项是 D 。A. int a22= 1, 2 ; B. int a 2= 1, 2, 3, 4 ;C. int a22= 1, 2, 3 ; D. int a2 = 1, 2, 3, 4 ;10. 计算表达式(x=4*5, x*5), x+25的值是 D 。A. 20 B. 125 C. 100 D. 4511. 当对两个字符串进行比较时,应该使用 B 函数。A. strcat() B. strcmp() C. strcpy() D. strlen()12. 以下程序运行后,输出结果是 A 。#include#define S(a,b) (a)*(b)void main() int a=3, area;area=S(a, a+3);printf(area=%dn, area);A. 18 B. 12 C. 9 D. 1513. 以下叙述中不正确的是 D 。A. 在不同的函数中可以使用相同名字的变量B. 函数中的形式参数是局部变量C. 在一个函数内定义的变量只在本函数范围内有效D. 在一个函数内的复合语句中定义的变量在本函数范围内有效14. 当执行以下程序段时,正确的选项是 A y=-1;do y+;while(y-);printf(%dn, y-);A. 循环体将执行一次 B. 循环体将执行两次C. 循环体将执行无限次 D. 系统将提示有语法错误15. 若有说明语句:int a = 1, 2, 3, 4, 5, 6, 7, 8 , *p=a; 且0i7,则 A 是对数组元素的错误表示。A. p+i B. ap-a C. *(a + i) D. pi16. 以下选项中不能正确把c1定义成结构体变量的是 B 。A. struct color B. struct color c1 int red; int red;int green; int green; ;struct color c1;C. struct color D. struct int red; int red;int green; int green; c1; c1;17. 设有int x=0, y=1, z=1; 则运行表达式:x=+x|(+y-2)&(-z+1)后,x、y、z的值分别是 A 。A. 1, 1, 1 B. 1, 2, 0 C. 0, 1, 1 D. 1, 2, 118. 已知char ch=A; 且表达式:ch=(ch=A&ch=Z)?(ch+32):ch,该表达式的值是 B 。A. A B. a C. z D. Z19. 当a=1, b=3, c=5, d=4, x=3时,执行下面一段程序后,x的值为 D 。if(ab)if(cd) x=1;else if(ad) x=2;else x=0;A. 1 B. 2 C. 3 D. 020. 现有一个文本文件,想以追加方式打开,下列方式正确的是 D 。if( (fp=fopen(“fname.dat”, “ ”)=NULL ) printf(can not open file!n, num); exit(0); A. w B. ab C. b D. a21. C语言程序中,如果对函数类型未加说明,则函数的隐含类型为 C 。A. void B. double C. int D. char22. 假设已定义char c8=“test”; int i; 则下面的输出函数调用中错误的是 D 。A. printf(%s, c); B. for(i=0; i8; i+) printf(%c, ci);C. puts(c) D. for(i=0; i8; i+) puts(ci);23. 以下关于数组的描述正确的是 C 。A. 数组大小固定,但是可以有不同类型的数组元素B. 数组大小可变,但是所有数组元素的类型必须相同C. 数组大小固定,所有元素的类型必须相同D. 数组大小可变,可以有不同类型的数组元素24. 执行下面的程序段:for(x=3; x6; x+) printf( (x%2)?(*%d):(#%dn), x); 则输出结果是 D 。A. *3 B. #3 C. #3 D. *3#4#4 *4 *4#5 *525. int x=6; 则下方程序段运行结果是 C 。switch(x) case 1: printf(“apple“); break; case 2: printf(“hello“); break; case 3: printf(“world “); default: printf(“thank you“); A. apple B. hello C. thank you D. world thank you26. 设x为int型变量,则执行以下语句后,x的值为 B 。x=10; x+=x-=x-x;A. 30 B. 20 C. 10 D. 4027. 以下说法中正确的是 C 。A. C语言程序总是从位于程序最前面的函数开始执行B. 在C语言程序中,要调用的函数必须在main()函数中定义C. C语言程序总是从main()函数开始执行D. C语言程序中的main()函数必须放在程序的开始部分28. 设有如下定义:int arr =6, 7, 8, 9, 10, *p;则下列程序段的输出结果为 D 。p=arr;*(p+2)+=2;printf(%d,%dn, *p, *(p+2) );A. 8,10 B. 6,8 C. 7,9 D. 6,1029. 给出以下定义:char X =“abcdefg”;char Y =a, b, c, d, e, f, g;则正确的叙述为 C 。A. 数组X和数组Y等价 B. 数组X和数组Y的长度相同C. 数组X的长度大于数组Y的长度 D. 数组X的长度小于数组Y的长度30. char *s=how are you!;while(*s) putchar(*s+);则对此程序段正确的叙述为 B 。A. 死循环,(*S)永真 B. 打印串s中全部内容C. while不能执行 D. 打印串s中部分内容二、读程序填空(每空1分,共10分)1. 程序说明:求一个数的绝对值,abs()是求绝对值的函数,将程序补充完整。 #include int abs(int x) if(x=0) return(x); else return(-x) ; void main() int a; while( scanf(%d, &a)!=NULL ) printf(abs=%dn, abs(a) ; 2. 以下函数的功能是计算数组中所有元素的平均值,将程序补充完整。 #include float average(int *p, int n) int i; float avg=0.0; for(i=0; in; i+) avg=avg+ *(p+i) ; avg= avg/n ; return avg; void main() int i, a5=2, 4, 6, 8, 10; float mean; mean=average(a, 5); printf(mean=%fn, mean); 3. 完善程序,使5*5数组的主对角元素为1,其他为0。 void main() int i, j, a55; for(i=0; i5; i+) for(j=0; j5; j+) if (i=j) aij=1 ; else aij=0 ; for(i=0; i5; i+) for(j=0; j5; j+) printf(“%d”, aij); 4. 以下函数的功能是打印100200间所有不能被 3 整除的数,将程序补充完整。 #include void main() int n; for(n=100; n=200; n+) if(n%3=0) continue ; printf (%d, n); 5. 将数组a中的n个整数按相反顺序存放,将程序补充完整。 #include void inv(int x , int n) int t, k, j; for(k=0; k n/2 ; k+) t=xn-1-k; xn-1-k=xk; xk=t; void main() int i, a6=3, 7, 9, 11, 0, 6; inv(a, 6) ; /*函数调用*/ for(i=0; i6; i+) printf(%d, ai); printf(n); 三、读程序,写出执行结果(每题3分,共15分)1. #include void swap(int *p1, int *p2) int p; p=*p1; *p1=*p2; *p2=p; void main() int a=5, b=9; int *p1, *p2; printf(%d,%dn, a, b); p1=&a; p2=&b; swap(p1, p2); printf(%d,%dn, a, b); 则程序的执行结果为 5,9 9,5 。2. #include void main() int i, m=0, n=0, k=0; for(i=9; i=11; i+) switch(i/10) case 0: m+; n+; break; case 10: n+; break; default: k+; n+; printf(%d %d %dn, m, n, k); 则程序的执行结果为 1 3 2 。3. #include void copy_str(char from , char to ) int k=0; while(fromk!=0) tok=fromk; k+; tok=0; /*末尾加上串结束标志*/ void main() char a =I am a teacher.; char b =You are a student.; printf(s_a=%sns_b=%sn, a, b); copy_str(a, b); printf(“s_a=%sns_b=%sn, a, b); 则程序的执行结果为 s_a=I am a teacher. s_b=You are a student. s_a=I am a teacher. s_b=I am a teacher. 。4. #include void main() int i, n= 0, 0, 0, 0, 0 ; for(i=1; i5; i+) ni=ni-1*2+1; printf(%d, ni); 则程序的执行结果为 1,3,7,15, 。5. #include void main() int n1, n2=1298; while(n2!=0) n1=n2%10; n2=n2/10; printf(%dn, n1); 则程序的执行结果为 8 9 2 1 。四、编程题(45分,在下面的空白处编写程序)1. 编程计算下面函数的值,其中x为实数,由键盘输入。(9分) -1 x-5 y= ( x-1)2 -5x10 x10#includevoid main() float x, y; printf(“请输入一个实数:”); scanf(“%f”, &x); if(x=-5) y=-1; else if(x10) y=(x-1)*(x-1); else y=1/x; printf(“y=%fn”, y);2. 编程序计算s=1-2+3-4+99-100并输出结果。(10分)#includevoid main() int i, s=0; for(i=1; i=100; i+) if(i%2=0) s=s-i; /此处注意不能使用if(i%2=0) i=-i; else s=s+i; printf(“s=%dn”, s);3. 编程将字符串s中的数字字符放入d数组中,最后输出d中的字符串。例如,输入字符串:abc123edf456gh,执行程序后输出:123456。(12分)#include#includevoid main() char s100, d100; int i, k, len; printf(“请输入一个字符串:”); gets(s); len=strlen(s); k=0; for(i=0; i=0 & si=9) dk=si; k+; dk=0; printf(“数字字符串d=%sn”, d);4. 输入10个数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。编写3个函数:(1)输入10个数;(2)进行处理;(3)输出10个数。(14分)#include#define N 2void main() struct student char num10;char name50;int score3;float aver; stuN;int i,j,max,t;for(i=0;iN;i+)printf(%dn,i+1);printf(请输入学生学号:);scanf(%s,stui.num);printf(请输入学生姓名:);scanf(%s,); printf(请输入学生三门课的成绩:);for(j=0;j3;j+)scanf(%d,&stui.scorej);for(i=0;iN;i+)stui.aver=(stui.score0+stui.score1+stui.score2)/3;printf(学号%sn姓名%sn平均成绩:%fn,stui.num,,stui.aver);max=stu0.aver;for(i=0;imax)t=stui.aver;stui.aver=max;max=t;printf(平均成绩最大的学生的学号:%sn姓名是:%sn,stu#includevoid f(int a20,int n,int m)int *p,b;b=*(a+n-1);for(p=a+n-1;pa;p-)*p=*(p-1);*a=b;m-;if(m0) f(a,n,m);void main() int num20,n,m,i; printf(you duo sh

温馨提示

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

评论

0/150

提交评论