专业班级:学号:姓名:一、选择题(用铅笔把选中的方格涂黑40×1=40分)1 2 3 45 6 7 89 10 11 1213 14 15 1617 18 19 2021 22 23 2425 26 27 2829 30 31 3233 34 35 3637 38 39 40二、填空题(25×2=50分)(1) (2) (3) (4) (5) (6) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16)(17)(18)(19)(20)(21)(22)(23)(24)(25)三、编程题(10分)求10个数的最大公约数和最小公倍数(定义两个函数,求两个数的最大公约数和两个数的最小公倍数)一、选择题 ( 40×1分=40分)1.以下叙述中正确的是 (1) 。
A .在编译时可以发现注释中的拼写错误B .C 语言程序的每一行只能写一条语句 C .main( ){}必须位于程序的开始D .C 语言程序可以由一个或多个函数组成2.以下选项中不能用作变量名的是 (2) 。
A ._floatB .switchC .sumD ._123 3.已知sizeof(int)的值为2,为将10!的值存储到变量f 中(10!=3628800),变量f 的类型应声明为(3) 。
A .long intB .intC .short intD .unsigned int4. 以下表示中,不能用作C 语言常量的是 (4) 。
A. 0ULB. (long)123C. 1e0D.‘\x2a’ 5.数学式ba2在C 程序中正确的表示形式为 (5) 。
A .sqrt(a)/2*b B .sqrt(a)/2/b C .sqrt(a)/2b D .sqrt a/(2*b)6.已知有程序段“char str[][10]={"Aoyun","Beijing"},*p=&str[0][0];printf("%s\n",p+10);”,则执行printf 语句后输出为 (6) 。
A .Beijing B .Aoyun C .ing D .ng 7.以下声明中错误的是 (7) 。
A .int a[2];B .int a[]={0,1};C .int a[3]=0;D .int a[3][4]={0}; 8.以下表示数学式“a<b<c ”的逻辑表达式中,错误的是 (8) 。
A. a<b<cB. a<b&&b<cC. !(a>=b)&&!(b>=c)D. !(a>=b||b>=c)9.已有声明“int a=3,b=3,c=2;”,以下选项中值为0的表达式是 (9) 。
A. !a&&!b&&cB. !a||!b||cC. a==b&&b>=cD. a>=b&&b>c 10.若有声明“char ss[8]="Red";”,则sizeof(ss)的值是 (10) 。
A .8B .4C .3D .1 11. 以下程序运行后的输出结果是 (11) 。
A. 2 2B. 7 2C. 7 5D. 6 2 main(){ char a[7]="a0\0a0\0"; int i,j; i=sizeof(a); j=strlen(a); printf("%d %d",i,j); }12. 下面关于循环语句for 、while 、do_while 的叙述中,正确的是 (12) 。
A. 三种循环语句的循环体都必须放入一对花括号中B. 三种循环语句中都可以缺省循环终止条件表达式C. 三种循环语句的循环体都至少被无条件地执行一次D.三种循环语句都可能出现无穷循环13. 若有声明“int a[]={1,2,3,4},*p,i;”,则以下程序段中不能输出13的是(13)。
A.for(i=0;i<4;i+=2) printf("%d",a[i]);B.for(p=0;p<4;p+=2) printf("%d",a[p]);C.for(p=a;p<a+4;p+=2) printf("%d",*p);D.for(p=a,i=0;i<4;i+=2) printf("%d",p[i]);14.在下列C语言源程序的错误中,通常不能在编译时发现的是(14)。
A. 括号不匹配B. 非法标识符C. 数组元素下标值越界D. 程序结构不完整15.若有声明“long a,b;”且变量a和b都需要通过键盘输入获得初值,则下列语句中正确的是(15)。
A. scanf("%ld%ld,&a,&b");B. scanf("%d%d",a,b);C. scanf("%d%d",&a,&b);D. scanf("%ld%ld",&a,&b);16.若有程序段“char c=256; int a=c;”,则执行该程序段后a的值是(16)。
A. 256B. 65536C. 0D. -117.若在一个C语言源程序中“e1”和“e3”是表达式,“s;”是语句,则下列选项中与语句“for(e1; ;e3)s;”功能等同的语句是(17)。
A. e1;while(10)s;e3;B. e1;while(10){s;e3;}C. e1;while(10){e3;s;}D. while(10){e1;s;e3;}18.若有声明“int a[3][4], *p=a[0] ,(*q)[4]=a;”,则下列叙述中错误的是 (18) 。
A. a[2][3]与q[2][3]等价B. a[2][3]与p[2][3]等价C. a[2][3]与*(p+11)等价D. a[2][3]与p=p+11,*p等价19. 若有声明“long fun(int *x,int n,long *s);int a[4]={1,2,3,4}; long b,c;”,则以下函数调用形式中正确的是(19)。
A. c=fun(a,4,b);B. c=fun(a[],4,&b);C. c=fun(a[4],4,b);D. c=fun(a,4,&b);20.已知在函数f中声明了局部变量x,如果希望f函数第一次被调用返回后变量x中存储的数据保持到下次f函数被调用时仍可以使用,则在声明x时必须指定其存储类型为(20)。
A. autoB. registerC. staticD. extern21. 若有如下的类型定义和变量声明,则在给出的选项中值不为7的表达式是(21)。
A.ptr->aB.(++ptr)->aC.x[1].aD.x[0].b->astruct ss{ int a; struct ss *b; }x[3]={{5,&x[1]},{7,&x[2]},{9,0}}, *ptr=&x[0];22. 若需要对一个数据文件abc.txt中的数据做加密处理并且限定只能做一次打开文件操作,则在“fp=fopen("abc.txt", 模式字符串); ”中,模式字符串应当是(22)。
A. "w+"B. "r+"C. "a+"D. "r"23.若有如下声明和语句:int t[3][3],*pt[3],k;for(k=0;k<3;k++) pt[k]=&t[k][0];则表达式*(*(pt+1)+2)所引用的是 (23) 。
A. t[2][0] B. &t[2][0] C. t[1][2] D. &t[1][2] 24. 若有结构类型定义“typedef struct test{ int x,y[2]; }TEST;”,则以下声明中正确的是(24)。
A.struct test x; B.struct x;C.test x ; D.struct TEST x;25. 设有声明int value=‘5’;则执行下列选项的赋值语句后,value的值不等于5的是(25)。
A. value=value-‘0’;B. value=value-0x30;C. value=value-49;D. value=value-‘\060’;26.若有枚举类型定义“enum list1{x1,x2,x3,x4=6,x5,x6};”,则枚举常量x2和x6代表的值分别是(26)。
A. 1,6B. 1,8C. 2,6D. 2,8 27.设有声明float a=1.23456; int i;,欲将a中的数值保留小数点后两位,第三位进行四舍五入运算,能实现该功能的表达式是(27)。
A. i=a*100+0.5,a=i/100.0B. a=(a*100+0.5)/100.0C. a=((int)a*100+0.5)/100.0D. a=(a/100+0.5)/100.028.若有声明“int x[10]={0,1,2,3,4,5,6,7,8,9},*p;”,则值不为4的表达式是(28)。
A.p=x,*(p+4) B.p=x+4,*p++C.p=x+3,*(p++) D.p=x+3,*++p29.若有声明“int i,k=1; unsigned j;”,则下列语句执行时会出现无限循环的语句是 (29) 。
A.for(j=15;j>0;j-=2) k++; B.for(j=0;j<15;j+=2) k++;C.for(i=0;i<15;i+=2) k++; D.for(i=15;i>0;i-=2) k++;30.已知A盘根目录下有文本文件“data.txt”且程序中已有声明“FILE *fp;”,若程序需要先从“data.txt”文件中读出数据,修改后再写入“data.txt”文件中,则调用fopen函数的正确形式是 (30) 。
A.fp=fopen("a:\\data.txt","rw");B.B. fp=fopen("a:\\data.txt","w+");C. fp=fopen("a:\\data.txt","r+");D. fp=fopen("a:\\data.txt","r");31.以下选项均为fun函数定义的头部,其中错误的是 (31) 。