课程名称 学生姓名 注意:要求所有答案均写在答题纸上,写在试题卷上无效! C语言程序设计 学院 考试日期 班级 年 月 日 学号 共 题 一.单项选择题。(20小题,每小题2分,共40分) 1.C程序设计语言是( ) A)机器语言 B)只适合编写应用软件的语言 C)高级语言 D)只适合编写系统软件的语言 2.在C语言中不合法的变量名是( ) A)6A B) aBc C) Li_12 D) _jsj 3.在C语言中,合法的字符常量是( ) A)'\\018’ B)'\\\\' C) 'ab' D) \"\\0\" 4.以下说法中错误的是( ) A) 一个C程序可以由一个或多个函数构成。 B) 一个C程序必须有而且只能有一个main函数。 C) 在计算机上编辑C程序时,每行只能写一条语句。 D) C程序是由函数构成的。 5.一个可执行C程序的开始执行点是( ) A)程序的第一行语句 B)程序的第一个函数 C)包含文件的第一个函数 D)名为main()的函数 6.要使变量x被赋值为486, 变量y被赋值为-286,则运行到语句scanf(\"%d,%d\时正确的输入是( ) A)486,-286↙ B)486 -286↙ C)486↙-286↙ D)123:456↙ 7.在C语言中要求运算对象必须是整数的是( ) A) / B) + C) ? : D) % 8.C语言的if语句中,用作判断的表达式为( ) A)任意表达式 B)算术表达式 C)关系表达式 D)逻辑表达式 第 1 页(共 7 页)9.下列程序段中的循环体被运行或被执行( )次 int k=21; while(k>0) {k=k/3;k--;} A)1 B)2 C)3 D)4 10.合法的数组定义是( ) A)int a(5)={1,2,3,4,5}; B)int a[][3]={{0,1,2},{6,5,4},{9,8,7}}; C) char a[5]=\"I am a boy!\"; D)char a[]=’boy’; 11.若有以下定义,则以下关于标识符prt的正确说法是( ) int (*prt)[3]; A) 定义不合法。 B) 是一个指针数组名,每个元素是一个指向整型变量的指针。 C)是一个指针,它指向一个具有3个元素的一维数组。 D)是一个指向整型变量的指针。 12.已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是() if(x>y) z=x; x=y; y=z; A)x=10,y=20,z=30 B)x=20,y=30,z=30 C)x=20,y=30,z=10 D)x=20,y=30,z=20 13.若有以下程序片段。则( )中的表达式都是对数组元素的正确引用(0≤i<4,0≤j<3)。 main() {int a[4][3]={0},(*p)[3],i,j; p=a; ……} A)a[i][j],a[i]+j,*(*(a+i)+j) B)*(p+i)[j],p[i]+j, *(*(p+i)+j) C)*(p+i)[j],*(a+i)[j],*(p+i+j) D)p[i][j],*(p[i]+j),*(a[i]+j) 14.若有两个字符串str1,str2,要比较二者是否相等,正确的if语句是( ) A)if(str1==str2) B)if(str1=str2) C)if((str1-str2)==0) D)if(strcmp(str1,str2)==0) 15.执行如下程序,则结果为( ) #define P(a,b) a*b+1 main() {int x=1,y=2,z; z=P(x+y,4+3); printf(\"%d\A)22 B)13 C)23 D)21 第 2 页(共 7 页) 16.某结构体变量定义如下,对此结构体变量中的元素的引用形式正确的是( ) struct a {int num; char name[10]; }b1,*p; p=&b1; A)b1->num B)p.name C)(*p).name D)*p.num 17.若有两个基本类型相同的指针p1和p2,则下列运算不合理的是( ) A)p1+p2 B)p1-p2 C)p1=p2 D)p1==p2 18.下列关于C语言的文件操作叙述正确的是( ) A)先关闭文件 B)先测试文件已存在,再打开文件 C)先打开文件 D)对操作顺序无要求 19.主函数main()带参数的正确形式是() A)main(int *argc,char argv) B)main(int argc,char argv[]) C)main(int argc,char *argv) D)main(int argc,char *argv[]) 20.设有以下定义,则共用体变量d在内存中占的字节数是() union {float a; int b; char c;}d; A)7 B)4 C)6 D)8 二、程序填空题(15个空,每空2分,共30分) 1.有1020个西瓜,第1天卖一半多两个,以后每天卖剩下的一半多两个, 问几天以后能卖完?请将程序补充完整。 #include \"stdio.h\" main() { int day,x1,x2; day=0; x1=1020; while ( ___(1)____) {x2=___(2)___; x1=x2; day++;} printf(\"day=%d\\n\} 第 3 页(共 7 页) 2.求键盘输入的字符串的长度 #include \"stdio.h\" main() {char string[50]; int j=0,len=0; printf(“\\nQing shu ru 1 ge zi fu chuan:”); gets(string); while( (3) ) { (4) ;j++;} printf(\"\\nIt is %d\} 3. 求个位上是2且能被6整除的所有4位数的个数。 #include \"stdio.h\" main() {int i; int count; count=___(5)___; for(i=1002;i<___(6)____;i++) if(___(7)____) count++; printf(\"count=%d\\n\} 4.由键盘输入10个无序的数,找出其中最小数及其下标后,每5个数为1行输出这10个数,然后输出最小数及其下标 #include \"stdio.h\" main() {int a[10],i,min,temp; for(i=0;i<10;i++) scanf(\"%d\min=a[0];temp=0; for(i=1;i<10;i++) if(a[i] 四.编程题(2小题,每小题5分,共10分) 1.编程打印出所有的“水仙花数”。所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本身,例如,153是一水仙花数,因为153=13+53+33。 2.请编写一个函数int fun(float s[ ],int n),它的功能是:求高于平均分的人数,并作为函数值返回。数组s中存放n位学生的成绩。数组s的值由主函数从键盘读入,用-1来结束输入。 #define N 80 int fun( float a[ ],int m ) { /*答案开始*/ „„ /*答案结束*/ } main( ) { float s[N],x; int n=0; printf(\"\\n Please enter marks of student: \" ); scanf(\"%f\",&x); while(x>=0) { s[n]=x; n++; scanf(\"%f\",&x); } printf(\"number of student: %d\\n\",fun(s,n)); } 第 7 页(共 7 页) 2004-2005第2学期C语言期末考试A卷答案及评分标准 一.单项选择题(每小题2分,共40分) 1-5 CABCD 6-10 ADACB 11-15 CBDDB 16-20 CACDB 二.编程填空题(每空2分,共30分,注意:有些填空处正确答案不止一个) 1. (1) x1>0 或 x1 或(x1>0) 或 (x1) (2) x1/2-2 或 x1-x1/2-2 或x1-(x1/2+2) 2. (3) string[j]!=’\\0’ 或string[j] (4) len++ 或 ++len 或 len=len+1 3. (5) 0 (6) 10000 或 9993 (7) i%6==0&&i%10==2 或 (i%10==2)&&(i%6==0) 4. (8) &a[i] 或 a+i (9) min=a[i] 或 min=*(a+i) (10) i%5==0 5. (11) j 6. (13) fopen (14) ch!=’#’ 或 !(ch==’#’) (15) fclose 三.读程序写运行结果(每小题4分,共20分) 第1 小题输出格式仅缺逗号扣0.5分,缺a=,b=扣1分 第2、第3小题输出必须准确才给分 第4 小题输出格式仅缺逗号扣0.5分 第5 小题仅缺逗号扣0.5分 (1) a=2,b=1 (2) 24 (3) 16 (4) 3,1 (5) 7,5,3,1,11,(若答成9,7,5,3,1,可给3分,只扣1分) 四.编程题(每小题5分,共10分) 1、 方法一 main() {int i,j,k,n; for(n=100;n<1000;n++) {i=n/100;j=n/10-i*10;k=n%10; if (i*100+j*10+k==i*i*i+j*j*j+k*k*k) printf(\"%d \} 方法二 main( ) {int a,b,c; for( a=1; a<10;a++) for(b=0;b<10;b++) for(c=0;c<10;c++) if(a*a*a+b*b*b+c*c*c==a*100+b*10+c) printf(\"%d \ 2、 int fun(float a[],int m) {float ave=0; int i,j=0; for(i=0;i 编程评分标准: 1. 编程思路清晰、正确得3分。 2. 语句正确规范得2分。 3. 标点不正确扣1分。 4. 思路不正确不得分。 5. 语句错一处扣1分。 因篇幅问题不能全部显示,请点此查看更多更全内容