第一卷(共70分) 第一部分:基础知识(20题,共40分) 1、一个C程序总是从( )开始执行。 A.程序的第一条执行语句 B.主函数 C.子程序 D.主程序 2、在C语言中,int, char和short int三种类型变量所占用的内存大小是( )。 A.均为2个字节 B.由用户自己定义 C.由所用机器的字长决定 D.是任意的 3、若有以下类型说明语句: char a; int b; float c; short int d; 则表达式(c*b+a)*d的结果类型是( )。 A.char B.int C.double D.float 4、若有说明语句: int w=1,x=2,y=3,z=4; 则表达试w>x?w:z>y?z:x的值是( ) A.4 B.3 C.2 D.1 5、设x,y 为int型变量,则执行下列语句后,y的值是( ) x=5; y=x++*x++; y=--y*--y; A.529 B.2401 C.1209 D.625 6、C语言中函数返回值的类型是( ) A.return语句中的表达式类型 B.调用函数的类型 C.总是int型 D.定义函数时所指定的函数类型 7、凡是在函数中未指定存储类别的变量,其隐含的存储类别是( ) A.自动 B.静态 C.外部 D.寄存器 8、在源程序的一个文件中定义的全局变量的作用域是( ) A.本文件的全部范围 B.该程序的全部范围 C.一个函数的范围 D.从定义该变量的位置开始至该文件的结束 9、以下不正确的描述是( ) A.break语句只能用于循环语句和switch语句 B.在switch语句中,break语句的作用也可用continue语句来替代 C.在循环语句中,使用continue语句是为了结束本次循环,而不是终止循环的执行 D.在循环语句中,使用break语句是为了使流程跳出循环体,提前结束循环 10、若有宏定义 #define mod(x,y) x%y 则执行以下程序段后,输出为( ) int z,a=15,b=100; z=mod(b,a); printf(“%d\n”,z++); A.11 B.10 C.6 D.宏定义不合法
11、若有说明语句: char s1[4]=”12”; char *ptr; 则执行下列语句后输出为( ) ptr=s1; printf(“%c\n”,*(ptr+1)); A.字符‘2’ B.整数2 C.字符串“12” D.字符‘1’ 12、若有以下语句 int x[]={2,4,6,8,10,12},*ptr; ptr=x; 则对数组元素的正确引用为( ) A.x B.x[6] C.*(--ptr) D. *(++ptr) 13、若有说明语句:int i,x[3][4];则不能实现将x[1][1]的值赋给变量i的语句是( ) A.i=*(*(x+1)+1) B.i=*(*(x+1)) C.i=x[1][1] D.i=*(x[1]+1) 14、若已定义了如下的共用体类型变量x,则x所占用的字节数(在16位PC机条件下)为( ) union data{ int i; char ch; double f; }x; A.7 B.11 C.8 D.10 15、如下说明语句: enum A {A0=1,A1=3,A2,A3,A4,A5}; enum A B; 执行: B=A3; printf(“%d\n”,B); 输出的是( ) A.5 B.3 C.2 D.编译时出错 16、while(!x)中的条件表达式(!x)与下面条件( )等价。 A.x==0 B.x==1 C.x==0|| x==1 D.x!=0 17、有以下说明语句,则对结构体变量s的成员num的不正确引用是( ) struct student{ int num; int age; }s,*p; A.s.num B.*p.num C.p->num D.(*p).num 18、说明语句int (*p)[10]定义了p是( ) A.指针数组 B.指向数组的指针 C.返回值为整型的函数指针 D.指向整型数的指针 19、下面对文件操作函数描述正确全面的是( ) int n_read=read(int fd,char *buf,int n); 从文件fd中读n个字节存放在buf中 从文件fd中读n个整数存放在buf中 从文件fd中读n个字节存放在buf中,并将n赋给n_read 从文件fd中读n个字节存放在buf中,并将实际读入的字节数和出错代码赋给n_read 20、C语言的编译系统对宏命令是( ) A.在程序运行时进行代换处理的 B.在程序连接时进行处理的 C.与程序中其他C语句同时进行编译的 D.在对源程序其他成分正式编译之前进行处理的
第二部分:简单程序(12题,共30分) 21、运行下面的程序,其输出是( ) main() { int a[]={2,4,6,8,10},y=1,x,*p; p=&a[1]; for(x=0;x<3;x++) y+=*(p+x); printf(“%d\n”,y);} A.17 B.18 C.19 D.20 22、运行下面的程序,其输出是( ) main() {int i=1; while(i<19) if(i++%5!=3) continue; else printf(“M”,i); printf(“\n”); } A.2 5 7 9 11 13 15 17 B.3 6 9 12 15 18 C.4 9 14 19 D.3 8 13 17 19 23、运行下面的程序后,其正确的输出是( ) main() {static int a[5]={7,2,8,4,5}; static int *pa[5]={&a[0], &a[1], &a[2], &a[3], &a[4]}; int **p,i; p=pa; for(i=0;i<5;i++) {printf(“%d\t”,**p+2); p++;} printf(“\n”); } A.9 4 10 6 7 B.7 2 8 4 5 C.7 4 10 4 5 D.2 3 4 5 6 24、下面程序运行后,其输出是( ) main() {int i; int n=2; while(++n<20) {i=1; while(++i {if(n%i==0) break; if(i==n-1) printf(“%d\t”,n); } printf(“\n”); } } A.2 5 7 9 13 17 19 B.3 5 7 11 13 17 19 C.2 3 5 7 11 13 17 19 D.3 5 7 11 13 17 20
25、下面程序运行后,其输出是( ) main() {int i,j,k; int func(); i=1,j=2,k=3; printf(“%d\n”,func((j+=k,j++),(i,i++,++i))); } int func(int x,int y) {int z; z=x%y; return(z); } A.2 B.0 C.1 D.3 26、下面程序运行后,其输出是( ) int x,y; one() {int a,b; a=25,b=10; x=a-b;y=a+b; } main() {int a,b; a=9,b=5; x=a+b;y=a-b; one(); printf(“%d,%d\n”,x,y); } A.14,4 B.14,35 C.15,35 D.15,4 27、下面程序运行后,其输出是( ) #include void printd(int i); main() {int n=123; printd(n); } void printd(int n) {int i; if(n<0) {n=-n;putchar(‘-‘);} putchar(n+’0’); if((i=n/10)!=0) printd(i); } A.123 B.321 C.3 D.1 28、下面程序运行后,其输出是( ) struct sample{ int a,b; char *ch; }; void f1(struct sample parm); main() {struct sample arg; arg.a=1000;arg.b=100;arg.ch=”abcd”; f1(arg); } void f1(struct sample parm) { parm.a+=parm.b; parm.ch[2]=’x’; printf(“%d\n”,parm.a); printf(“%s\n”,parm.ch); } A.1000 B.1100 C.1100 D.100 Abcd abcd abxd abcd
29、下面程序运行后,其输出是( ) main() {static char s[30]=”abcdefg”; static char t[]=”abcd”; int i,j; i=0; while(s[i]!=’\0’) i++; j=0; while(t[j]!=’\0’) {s[i+j]=t[j]; j++;} s[i+j]=’\0’; printf(“%s\n”,s); } A. abcdabcdefg B. abcdefg C. abcd D. abcdefgabcd 30、下面程序运行后,其输出是( ) main() { int a[4][4],i,j,k; for(i=0;i<4;i++) for(j=0;j<4;j++) a[i][j]=i+j; for(i=1;i<4;i++) for(j=i+1;j<4;j++) { k=a[i][j]; a[i][j]=a[j][i]; a[j][i]=k; } for(i=0;i<4;i++) {printf(“\n”); for(j=0;j<4;j++) printf(“M”,a[i][j]);} } A.0 1 2 3 B.0 1 2 3 C.0 1 2 3 D.3 2 1 0 1 2 3 4 1 2 5 4 1 2 4 2 4 3 2 1 2 3 4 5 2 3 4 5 2 3 5 3 5 4 3 2 3 4 5 6 3 4 5 6 3 4 6 4 6 5 4 3 31、下面程序运行后,其输出是( ) main() { void sub(); char s[10]=”a program”; int num=4; sub(s,0,num-1); sub(s,num,6); sub(s,0,6); printf(“%s\n”,s); } void sub(char *s,int num1,int num2) { char t,*p; p=s+num2;s=s+num1; while(s {t=*s; *s=*p; *p=t; s++; p--;} } A.program B.gram pro C.pro gram D.ogra pram 32、运行下面程序,从键盘输入四个字符xyz#,其输出是( ) #include "stdio.h" main() { void recursion(); recursion(); } void recursion() {char c; c=getchar(); putchar(c); if(c!=’#’) recursion(); putchar(c); } A.xyz# B.xyz#xyz# C.xyz##zyx D.xyzxyz
第二卷(共30分)
说明:程序填空题,在空栏处填入适当的字符、语句,以构成一个正确的C语言程序。每空栏3分,两大题共10个空栏,全对得30分。
试题一:
下面的程序是将一个十六进制数字字符串转换成与它等价的十进制整数值并输出。十六进制数的字符是从0到9和a到f或A到F。主函数负责收集字符,并判别它们是否是十六进制字符,函数htoi负责转换工作。 #include #define maxline 100 #define eof -1 #define yes 1 #define no 0 int htoi(); main() { int c,i,isdigit; char t[maxline]; i=0; isdigit=no; while((c=_______________)!=eof&&i { if(c>=’0’&&c<=’9’||c>=’a’&&c<=’f’|| c>=’A’&&c<=’F’) { isdigit=yes; t[i++]=___________; } else if(isdigit==yes) { isdigit=no; t[i]=’\0’; printf(“%d”,______________); i=0; } } } int htoi(char *s) { int i,n; n=0; for(i=0;s[i]!=’\0’;i++) { if(s[i]>=’0’&&s[i]<=’9’) n=n*16+s[i]-______________; if(s[i]>=’a’&&s[i]<=’f’) n=n*16+s[i]-‘a’+10; if(s[i]>=’A’&&s[i]<=’F’) n=n*16+s[i]-‘A’+10; } return___________; } 试题二: 以下程序的功能是应用近似公式计算 e 计算每项分母的值,共取nmax项之和作为e 的近似值。 近似公式: e =1+x+x /2!+ x /3!+……+ x /(nmax-1)! float f2(int n) { if(n==1) return 1; else return____________________; } float f1(float x,int n) { int i;float j=______________; for(i=1;___________;i++) j=j*x; return j; } #define nmax 20 main() { float x,exp=1.0;int n; printf(“input x value:”); scanf(“%f”,&x); printf(“%f\n”,x); for(n=1;nexp=______________; printf(“x=%f,exp(x)=%f\n”,x,_______________); }
答案: 第一卷: 1~5 BCCAA 6~10 DADBB 11~15 ADBCA 16~20 ABBDD 21~25 CCABA 26~30 CBCDA 31~32 DC 第二卷: 试题一: getchar() c htoi(t) ‘0’ n 试题二: f2(n-1)*n 1 i<=n exp+f1(x,n)/f2(n) exp
|