《c语言期末考试试卷a答案.doc》由会员分享,可在线阅读,更多相关《c语言期末考试试卷a答案.doc(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、北京师范大学20112012学年第 2 学期期末考试试卷(A卷)课程名称: 程序设计语言(C语言) 任课教师姓名:于福生 刘玉铭 卷面总分: 100 分 考试时长: 100 分钟 考试类别: 闭卷 院(系): 专 业: 年级: 姓 名: 学 号: 题号第一题第二题第三题第四题总分得分阅卷教师(签字): 一、判断题(正确的划,错误的划)(每题1分,共10分)123456789101. 逗号表达式的值是包含于其中的最后一个表达式的值;【 】2. 函数内的局部变量将屏蔽掉与其重名的全局变量;【 】3. 全局变量的作用域是所在的整个源程序;【 】4. C语言对文本文件和二进制文件均采用“缓冲文件系统”
2、;【 】5. 多种类型变量组成的表达式求值时进行类型的自动转换; 【 】6. 二维数组初始化时列规模可以省略不写;【 】7. 数组名作函数参数,实参数组和形参数组大小可不同,但类型须相同【 】8. continue语句和break语句都可以用于改变switch语句的执行流程【 】9. static型局部变量的作用域和全局变量的作用域一样;【 】10. C语言的所有函数之间可以相互调用【 】二、 单项选择题 (202=40分)题号12345678910答案BCCAACDCDC题号11121314151617181920答案BABBBCCDDC1. 可作为变量名的字符序列是【 】A) static
3、 B) INT C) #ptr_1tD) 1232. 若a、b为int类型,值分别为3,4,则对a+=a/=2,b*=b-=2求值后,a、b的值分别是【 】A) 4, 4 B) 2, 8C) 2, 4 D) 4, 83. 设int b, a; float c; c=(float)a+b; 则(float)的作用是【 】A) 使变量a的类型发生改变 B) 使变量a,b的类型发生改变 C) 使变量a的值的类型发生改变 D) 使变量a,b的值的类型发生改变4. 如果有说明:int a6,*p=a;不能读入a1的语句是【 】A)scanf(“%d”,+a);B)scanf(“%d”,a+1);C)sc
4、anf(“%d”,+p);D)scanf(“%d”,p+1);5. 程序段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=26. 对于函数int sub(float x, int y)return(xy?x+y:x-y);,语句printf(“%d”,sub(3.5, 3);的执行结果是【 】A)6.5 C)6 D)77. char a=”abcd”;printf(“%d,
5、%d”,sizeof(a),strlen(a);的运行结果是【 】A) 4,4 B) 5,5C) 4,5 D) 5,48. 下面陈述正确的是【 】 A)全局变量的作用域是所在的整个源程序B)任何两个函数之间可以相互调用C)逻辑表达式的求值采用部分求值规则D)对某变量实施强制类型转换运算后,变量的类型随之发生变化9. 程序段int a34 = 1,2,3,4,5,6,7,8,9,10,11,12,*p=&a11, (*q)4=&a1;printf(%d,%d,*(p+3),*(*(q+1)+1);的输出结果是【 】A) 8, 6B) 8, 10C) 9, 6D) 9, 1010. 设a为int型
6、变量,则执行语句:a=-1; a+&a+&a+;后,a的值【 】 A) -1 B) 0C) 1 D) 211. 有说明:int a10=1,2,3,4,5,6,7,8,9,10,*p=a; 则数值为5的表达式是【 】A) *p+5 B) *(p+4)C) *p+=5 D) p+412. 程序段 int k = -2; do k+; while (!(k = 0); 中while循环执行的次数是【 】A)无限次 B)2C)0 D)113. 从键盘读入含空格的字符串时,应该使用函数【 】A)scanf( ) B)gets( )C)getchar( ) D)getch( )14. 设有说明int a
7、=1,b=2; 定义函数void swap(int *p, int *q);则通过函数调用语句swap(&a,&b);能把变量a,b的值交换过来的函数体是【 】A)int *x; x=p;p=q;q=x; B)int x; x=*p;*p=*q;*q=x;C)int x=*p,y=*q,z=x;x=y;y=z; D)int *x; *x=*p;*p=*q;*q=x;15. 判断字符串s是否大于字符串t应使用【 】A)if(st) B)if(strcmp(s,t)0)C)if (strcmp (t,s) 0 ) D)if (strcmp (s,t) ) 16. 程序 int sub(int a1
8、0) return sizeof(a); void main() int a10;printf(“%d,%d”sizeof(a),sub(a);的运行结果是【 】A) 20,20 B) 2,2C) 20,2 D) 2,2017. 对于函数,以下程序段中不能对y正确求值的是【 】A) if (x 0) y = 1; else if (x = 0) y = 0; else y =-1;B) y = 0; if (x 0) y = 1; else if (x = 0); if (x 0) y = 1; else y = -1;D) f (x = 0) if (x 0) y = 1; else y =
9、 0; else y = -1;18. 若有以下定义和说明:struct std char num6;char name8;float mark4;a30;FILE *fp;不能将数组a写入二进制文件fp的语句是【 】A)for(i = 0; i 30; i+) fwrite(&ai, sizeof(struct std), 1, fp);B)for(i = 0; i 30; i+) fwrite(a + i, sizeof(struct std ), 1, fp);C)fwrite(a, sizeof(struct std), 30, fp);D)for(i = 0; i a) D) (“%
10、d”, s-a) 20. int a=12; 语句fprintf(f,“%6d”, a);和fwrite(&a,sizeof(a),1,g);导致文件f和g在大小上的增加量分别【 】A)2字节,2字节B)6字节,6字节C)6字节,2字节D)2字节,6字节三、阅读程序、写出程序的执行结果(任选5题,54=20分)第1题1a2g3a第2题20第3题15,15第4题s=162第5题61第6题181 #includevoid main()char a =language, b =123;char *p=a ,*q=b;while(*p+=*q+) p+;puts(a);2 #include int s
11、ub( int n )int a;if( n = 1) return 0;a = n + sub( n-1 );return( a );void main( )int n = 6;printf(%d,sub(n);3 #includevoid swap(int *p1, int p2)int temp;temp=*p1;*p1=p2;p2=temp;void main( ) int x=20, y=15;if( xy) swap(&x, y);printf(%d,%d, x,y);4 #includevoid main() int a34=3,2,2,3,4,5,6,4,-2,9,2,-2;i
12、nt i, j, s=1; for ( i=0; i3; i+ )for( j=0; j4; j+ )if(i = 3-j) s*=aij; printf(s=%d,s);5 #includevoid main()int i=13, s=0, t;while(t=i-)if(!(t%3)continue;s+=t;printf(%d,s); 6 # include int sub(int m) static int s=1; if(m=1) return(1); return(m*sub(m/+s);void main()printf(%d,sub(6);四、 编程题(任选两题215=30分)
13、1 编程计算:,直到最后一项的绝对值小于。#include void main() float t, s;int n, f;n=1, s=0, f=1;dot = 1.0/n;s += f*t;f *= -1;n+;while(t 0.001);printf(%fn, s);2已知二进制文件“data.old”中有若干整数,编程对这些整数从小到大排序,排序结果存储到二进制文件“data.new”中。(假定系统中整数占2个字节)。#include #include void main() int *a, t, n, i, j;FILE *fin, *fout;if( (fin=fopen(dat
14、a.old, r) = NULL)printf(data.old failn);return;if( (fout=fopen(data.new, w) = NULL)printf(data.new failn);return;for(n=0; ; n+)fread(&t, sizeof(int), 1, fin);if(feof(fin)break;a = (int*)malloc(sizeof(int)*n);rewind(fin);fread(a, sizeof(int), n, fin);for(i=0; in; i+)printf(%d, , ai);printf(n);for(i=0
15、; in-1; i+)for(j=0; j aj+1)t = aj;aj = aj+1;aj+1 = t;fwrite(a, sizeof(int), n, fout);for(i=0; in; i+)printf(%d, , ai);printf(n);fclose(fin);fclose(fout);AABCABCDEABCXY3编程打印左边的图形。(第1行1个字母,第2行3个字母,每一行比前一行多2个字母)/ 1#include void main() char *s13 = A, ABC, ABCDE, ABCDEFG, ABCDEFGHI, ABCDEFGHIJK, ABCDEFGH
16、IJKLM, ABCDEFGHIJKLMNO, ABCDEFGHIJKLMNOPQ, ABCDEFGHIJKLMNOPQRS, ABCDEFGHIJKLMNOPQRSTU, ABCDEFGHIJKLMNOPQRSTUVW,ABCDEFGHIJKLMNOPQRSTUVWXY,;int i;for(i=0; i13; i+)puts(si);/ 2#include void main() char ch;int i, j;for(i=0; i13; i+)for(j=0; j24-2*i; j+)putchar( );ch = A;for(; j25; j+)putchar(ch+);putchar(n);