2012年C语言程序设计期末试题说明:请考生将答案写在“武汉大学答题纸”上并标明题号,否则不得分,试卷中C语言程序的开发环境是VC 6。
一、选择题(共20小题,每小题2分,共40分)。
1.以下正确的C语言的自定义标识符是_______。
A) _1a B) 2a C) do D) a12(F-32)。
已知:float C,F; 由华氏求摄氏的正2.温度华氏和摄氏的关系是C=59确计算的表达式是_______。
A) C=5/9(F-32) B) C=5*(F-32)/9 C) C=5/9*(F-32) D) 三个表达式都正确3.设float x,由键盘输入:12.45。
能正确读入数据的输入语句是_______。
A) scanf(“%5.2f”,&x) B) scanf(“%d”,&x) C)scanf(“%f”,&x) D) scanf(“%f”,x)4.一个C程序的执行是从()。
A) main()函数开始,直到main()函数结束B) 第一个函数开始,直到最后一个函数结束C) 第一个语句开始,直到最后一个语句结束D) main()函数开始,直到最后一个函数结束5.判断char型变量c1是否为数字的正确表达式为_______。
A)0<=c1<=9 B) c1>=0&&c1<=9 C) D)6.7.8.设x和y均为int型变量,则执行下面的循环后,y值为_______。
for(y=1,x=1,y<=50;y++){If(x>=10)break;If(x%2==1){x+=5;continue;}x-=3;}A)5 B) 6 C) 50 D) 519.设有数组定义:int a[5];则下列给数组元素赋值错误的是_______。
A) a[3]=93 B) scanf(“%c”,a[3]) C) a[3]=a[0]+a[1] D)a[3]=a+310.若用数组名作为函数调用时的实参,则实际上传递给形参的是_______。
A) 数组首地址 B) 数组的第一个元素值C) 数组中全部元素的值 D) 数组元素的个数11.int a[2][3]={{1},{2,3}},则a[1][1]的值是_______。
A) 0 B) 1 C) 2 D) 312.若定义数组并初始化int b[10]={1,2,3,4},以下说法错误的是_______。
A) b[8]的值为0B) b[1]的值为1C) b[3]的值为整数D) b[10]不是b数组中的元素13.若已定义的函数有返回值,则以下关于该函数调用的叙述中错误的是_______。
A) 函数调用可以作为独立的语句存在B) 函数调用可以作为一个函数的实参C) 函数调用可以出现在表达式中D) 函数调用可以作为一个函数的形参14.在C语言中,下列错误的说法是_______。
A) 函数可以递归调用B) 不允许在函数定义中再定义函数C) 递归程序不可能用非递归算法实现D) 对于continue语句,可以通过改变程序结构而不去使用它15.在一个源文件中定义的全局变量的作用域为_______。
A) 本文件的全部范围 B) 本程序的全部范围C) 本函数的全部范围 D) 从定义该变量的位置开始至本文件结束16.有以下程序void main(){int i,t[][3]={9,8,7,6,5,4,3,2,1};for(i=0;i<3;i++)printf(“%d”,t[2-i][i]);}程序执行后的输出结果是_______。
A) 753 B) 357 C) 369 D) 75117.若有说明float *p,m=3.14;则能正确表示p指向m的语句是_______。
A) p=m B)p=&m C) *p=m D) *p=&m18.若有以下定义:int a[5],*p=a;则能正确表示a数组某个元素地址的是_______。
A) &a B) p+2 C) a++ D) &a[5]19.若有以下说明,则*(a+a[3])的值为_______。
int a[10]={9,1,8,2,7,3,6,4,5,0};A) 1 B) 2 C) 8 D) 1120.C语言中,函数返回值的类型是由_______决定的。
A)调用函数时动态决定的 B) return语句中的表达式类型C)调用该函数的主调用函数类型 D) 定义函数时,所指定的函数类型二、填空题(共7小题10空,每空2分,共20分)1.已知int x=5,y=1,z=2;执行语句x%=y+z;后,x的值是 (1) 。
2.设int a[3][4]={{1,2,3,4},{5,6,7},{8,9}};则表达式a[1][2]-a[2][3]的值是 (2) 。
3.学生成绩的字母等级和分数范围如下:字母等级分数范围A 90~100B 80~89C 70~79D 60~69E 0~59其它字母输入错误下列程序输入字母等级之后,输出相应的分数范围。
#include<stdio.h>void main(){char score;scanf(“%c”,&score);switch( (3) ){case ‘A’:printf(“A:90~100\n”):break;case ‘B’:printf(“B:80~89\n”):break;case ‘C’:printf(“C:70~79\n”):break;case ‘D’:printf(“D:60~69\n”):break;case ‘E’:printf(“E:0~59\n”):break;(4) :printf(“输入错误\n”) ;}}4.设x为int型变量,请写出一个关系表达式 (5) ,用以判断x能同时被3和5整除时,关系表达式的值为真。
5.对含有10个元素的数组a先按元素的存储次序倒序输入,再按其正序输出。
#include<stdio.h>#define N 10void main(){int i,a[N];for(i=N-1; (6) ;i--)scanf(“%d”,&a[i]);for(i=0;i<N;i++)printf(“%d”,a[i]);printf(“\n”);}6.下面程序的功能是显示具有N个元素的数组s中的最大元素。
#define N 20int fmax(int s[],int n){ int k=s[0],I;for(i=1;i<n;i++);if( (7) )k=s[i];return(k);}void main(){int i,a[N];for(i=0;i<N;i++)scanf(“%d”,&a[i]);printf(“%d\n”, (8) ); 调用函数fmax}7.若有int a[5]={10,20,30,40,50}*p=a,*s=a+2;则表达式s-p的值是 (9) ,*s-*p的值是 (10) 。
三、程序阅读,写出下列程序的运行结果(共10小题,每小题2分,共20分)(下列程序均包括#include“stdio.h”)1.void main(){int x,y;scanf(“%d,%d”,&x,&y);if(x>20||x<10)if(y<=100&&y>x)printf(“Good”);elseprintf(“bad”);}如果输入30,150,输出为()2.main(){ int a=0,i;for(i=0;i<4;i++){ switch(i){ case 0;case 1:a++;case 2:a+=2;default:a+=3}}printf(“%d\n”,a);}3.void main(){ int x,y;scanf(“%d”,&x);do{y=x%10;printf(“%d”,y);x/=10;}while(x);}输入整数123454.5.6.void main(){ int a[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=1;i<3;i++)for(j=0;j<=I;j++)s+=a[i][j];printf(“s=%d”,s);}7.int f(int x){return x+3;}void main(){int a=1;while(f(a)<10)a++;printf(“a=%d\n”,a)}8.9.funa(int a){ int b=1;static int c=1;a+=c+b;b++,c++;return(a);}void main(){ int i,k=0;for(i=1;i<3;i++)k+=funa(i);printf(“%d\n”,k);}10.void main(){int a[]={1,2,3,4,5},*p;p=a;(*(p+1))++;printf(“%d,%d\n”,*p,*(p+1))}四、编程题(共2小题,每小题10分,共20分)1.请编写程序计算并输出n(包括n)以内能被3或5整除的所有似然书的倒数之和,n从键盘输入值。
2.请编写函数int prime sum(int x[],int n)求一组数x[]中所有质数的和,n为这组数的个数,在主函数中输入数据并调用该函数。