学习中心 姓名 学号 西安电子科技大学网络与继续教育学院 高级语言程序设计 (C) 全真试题 ( 闭卷 90 分钟 ) 题号一二三总分 题分 60 20 20 得分 一 单项选择题 ( 每小题 3 分, 共 60 分 ) 1.C 语言程序的基本单位是 A) 程序行 B) 语句 C) 函数 D) 字符 2. 下列四组选项中, 均是不合法的用户标识符的选项是 A)A B)getc C)include D)while IF char scanf go type printf case pow 3.C 语言用 表示逻辑值 真 A)true B) 整数值 0 C) 非零整数值 D)T 4. 定义 int a; float f; doublei; 表达式 15+i*f+ A 的值是 A) float B) int C) char D)double 第 1 页 ( 共 8 页 )
5. 设有 :int a=1,b=2,c=3,d=4,m=2,n=2; 执行 (m=a>b)&&(n=c>d) 后 n 的值为 A) 1 B) 2 C) 3 D)4 6. 以下的 for 循环 for (x=0,y=0;(y!=321)&&(x<5);x++); A) 是无限循环 B) 循环次数不定 C) 执行 4 次 D) 执行 5 次 7. 下面程序要求从键盘上输入值并打印, 请选择正确的输入方法 main( ) { int x,y; scanf("input x and y:%d %d",&x,&y); printf("x=%d,y=%d\n",x,y); A) 2,4 B) input x and y:2 4 C) 2 4 D)2 4 8. 若有说明 :int a[3][4]; 则对 a 数组元素的非法引用是 A) int a[0][2*1]; B) a[1][3]; C) a[4-2][0] D) a[0][4] 9. 执行以下程序段后,m 的值为 int a[2][3]={{1,2,3,{4,5,6; int m,*p; p=&a[0][0]; m=(*p)+(*(p+2))+(*(p+4)); A)9 B)8 C)7 D)6 10. 以下叙述中不正确的是 A) 预处理命令行都必须以 # 号开始 B) 在程序中凡是以 # 开始的语句行都是预处理命令行 C) C 程序中在执行过程中对预处理命令进行处理 第 2 页 ( 共 8 页 )
D) 以下是正确的宏定义 #define X 5 11. 以下程序输出的结果是 int d=1; fun(int p) { int d=5; d+=p++; printf("%d ",d); main( ) { int a=3; fun(a); d+=a++; printf("%d\n",d); A)8 4 B)9 6 C)9 4 D)8 5 12. 设 char *s="\ta\018bc"; 则指针变量 s 指向的字符串所占的字节数是 A)9 B)5 C)7 D)6 13.C 语言规定, 简单变量做实参时, 它和对应形参之间的数据传递方式是 A) 地址传递 B) 单向值传递 C) 由实参传给形参, 再由形参传回给实参 D) 由用户指定传递方式 14. 请选出以下程序的输出结果 #include<stdio.h> sub(int x,int y,int *z) 第 3 页 ( 共 8 页 )
{ *z=y-x; main() { int a,b,c; sub(10,5,&a); sub(7,a,&b); sub(a,b,&c); printf("%d,%d,%d\n",a,b,c); A)5,2,3 C)-5,-12,-17 B)-5,-12,-7 D)5,-1,-7 15. 若有说明 :int *p,m=5,n; 以下正确的程序段是 A)p=&n; scanf("%d",&p); C)scanf("%d",&p); *p=n; B)p=&n; scanf("%d",*p); D)p=&n; *p=m; 16. 以下程序的输出结果是 #include<stdio.h> #include<string.h> main( ) { char *s1="abcbef",*s2="ab"; s1++;s2++; printf("%d\n",strcmp(s1,s2)); A) 正数 B) 负数 C) 零 D) 不确定的值 17. 以下对结构体变量 stu1 中成员 age 的非法引用是 struct student { int age; int num; 第 4 页 ( 共 8 页 )
stu1,*p;; p=&stu1; A)stu1.age B) student.age C)p->age D)(*p).age 18. 设有如下定义 :int x=10,y=3,z; 则语句 printf( %d\n,z=(x%y,x/y)); 的输出是 A)1 B)0 C)4 D) 3 19. 以下程序段的输出结果是 main() { int n[3],i,j,k; for(i=0;i<3;i++) n[i]=0; k=2; for(i=0;i<k;i++) for(j=0;j<k;j++) n[j]=n[i]+1; printf("%d\n",n[1]); A) 2 B) 1 C) 0 D) 3 20. 下面程序段的运行结果是 char str[ ]="ABC",*p=str; printf("%d\n",*(p+3)); A) 67 B) 0 C) 字符 C 的地址 D) 字符 C 二 填空题 ( 每小题 2 分, 共 20 分 ) 1. 若 a 是 int 型变量, 且 a 的初值为 6, 则执行表达式 a=25/3%3 后 a 的 第 5 页 ( 共 8 页 )
值为 2. 判断 char 型变量 c1 是否为小写字母的正确表达式为 3. 若有如下定义和语句 : int a[4]={0,1,2,3,*p; p=&a[2]; 则 *--p 的值是 4. 逻辑运算符两側运算对象的数据类型可是 5. 下列函数调用语句含有实参的个数为 func((exp1,exp2),(exp3,exp4)); 6. 设有程序片段 : switch(ch ) { case ˊAˊ: printf("85-100\n"); break; case ˊBˊ: printf("70-84\n"); break; case ˊCˊ: printf("60-69\n"); case ˊDˊ: printf("<60\n"); break; default : printf("error!\n"); 若 ch 的值为 D, 则输出结果是 7. 若二维数组 a 有 m 行 n 列, 则在 a[i][j] 之前的元素个数为 8. 下面程序的运行结果是 #define DOUBLE(r) r*r void main() { int x=1,y=2,t; t=double(x+y); printf("%d\n",t); 第 6 页 ( 共 8 页 )
9. 若有以下定义和语句 :int a[4]={0,1,2,3,*p; p=&a[1]; 则 ++(*p) 的值是 10.C 语言规定, 函数返回值的类型是由决定的 三 阅读程序, 按要求完成各题 ( 20 分 ) 1.( 8 分 ) 写出以下程序的功能和运行结果 若运行时输入 : Beijng Yunnan Fujian #include <stdio.h> #include<string.h> void main( ) { char s[20],str[3][20]; int i; for(i=0;i<3;i++) gets(str[i]); strcpy(s,(strcmp(str[0],str[1])<0? str[0]:str[1])); if(strcmp(str[2],s)<0) strcpy(s,str[2]); printf("%s\n",s); 程序功能 : 运行结果 : 2.( 6 分 ) 下面程序是将数组 a 的内容逆置重放 请填空 : main() 第 7 页 ( 共 8 页 )
{ int a[8],i,j,t; printf("input 8 number to the array:\n"); for(i=0;i<8;i++) scanf("%d", ); for(i=0;i<=3;i++) { j= ; t=a[i]; ; a[j]=t; printf("\n The array has been invered:"); for(i=0;i<8;i++) printf("%d ",a[i]); 3.( 6 分 ) 写出程序的功能和运行结果 #include <stdio.h> void main( ) { int i,a,b; a=b=0; for(i=1;i<=10;i++) if(i%2==0) a=a+i; else b=b+i; printf("a=%d b=%d",a,b); 程序功能 : 运行结果 : 第 8 页 ( 共 8 页 )