2006年广西区计算机等级考试二级C语言笔试试题及答案(共11页).doc
精选优质文档-倾情为你奉上第一卷(共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的结果类型是( )。 Achar Bint Cdouble Dfloat 4、若有说明语句: int w=1,x=2,y=3,z=4; 则表达试w>x?w:z>y?z:x的值是( ) A4 B3 C2 D1 5、设x,y 为int型变量,则执行下列语句后,y的值是( ) x=5; y=x+*x+; y=-y*-y; A529 B2401 C1209 D625 6、C语言中函数返回值的类型是( ) Areturn语句中的表达式类型 B调用函数的类型 C总是int型 D定义函数时所指定的函数类型 7、凡是在函数中未指定存储类别的变量,其隐含的存储类别是( ) A自动 B静态 C外部 D寄存器 8、在源程序的一个文件中定义的全局变量的作用域是( ) A本文件的全部范围 B该程序的全部范围 C一个函数的范围 D从定义该变量的位置开始至该文件的结束 9、以下不正确的描述是( ) Abreak语句只能用于循环语句和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(“%dn”,z+); A11 B10 C6 D宏定义不合法11、若有说明语句: char s14=”12”; char *ptr; 则执行下列语句后输出为( ) ptr=s1; printf(“%cn”,*(ptr+1); A字符2 B整数2 C字符串“12” D字符1 12、若有以下语句 int x=2,4,6,8,10,12,*ptr; ptr=x; 则对数组元素的正确引用为( ) Ax Bx6 C*(-ptr) D *(+ptr) 13、若有说明语句:int i,x34;则不能实现将x11的值赋给变量i的语句是( ) Ai=*(*(x+1)+1) Bi=*(*(x+1) Ci=x11 Di=*(x1+1) 14、若已定义了如下的共用体类型变量x,则x所占用的字节数(在16位PC机条件下)为( ) union data int i; char ch; double f; x; A7 B11 C8 D10 15、如下说明语句: enum A A0=1,A1=3,A2,A3,A4,A5; enum A B; 执行: B=A3; printf(“%dn”,B); 输出的是( ) A5 B3 C2 D编译时出错 16、while(!x)中的条件表达式(!x)与下面条件( )等价。 Ax=0 Bx=1 Cx=0| x=1 Dx!=0 17、有以下说明语句,则对结构体变量s的成员num的不正确引用是( ) struct student int num; int age; s,*p; As.num B*p.num Cp->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=&a1; for(x=0;x<3;x+) y+=*(p+x); printf(“%dn”,y); A17 B18 C19 D20 22、运行下面的程序,其输出是( ) main() int i=1; while(i<19) if(i+%5!=3) continue; else printf(“M”,i); printf(“n”); A2 5 7 9 11 13 15 17 B3 6 9 12 15 18 C4 9 14 19 D3 8 13 17 19 23、运行下面的程序后,其正确的输出是( ) main() static int a5=7,2,8,4,5; static int *pa5=&a0, &a1, &a2, &a3, &a4; int *p,i; p=pa; for(i=0;i<5;i+) printf(“%dt”,*p+2); p+; printf(“n”); A9 4 10 6 7 B7 2 8 4 5 C7 4 10 4 5 D2 3 4 5 6 24、下面程序运行后,其输出是( ) main() int i; int n=2; while(+n<20) i=1; while(+iif(n%i=0) break; if(i=n-1) printf(“%dt”,n); printf(“n”); A2 5 7 9 13 17 19 B3 5 7 11 13 17 19 C2 3 5 7 11 13 17 19 D3 5 7 11 13 17 20 25、下面程序运行后,其输出是( ) main() int i,j,k; int func(); i=1,j=2,k=3; printf(“%dn”,func(j+=k,j+),(i,i+,+i); int func(int x,int y) int z; z=x%y; return(z); A2 B0 C1 D3 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,%dn”,x,y); A14,4 B14,35 C15,35 D15,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); A123 B321 C3 D1 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.ch2=x; printf(“%dn”,parm.a); printf(“%sn”,parm.ch); A1000 B1100 C1100 D100 Abcd abcd abxd abcd29、下面程序运行后,其输出是( ) main() static char s30=”abcdefg”; static char t=”abcd”; int i,j; i=0; while(si!=0) i+; j=0; while(tj!=0) si+j=tj; j+; si+j=0; printf(“%sn”,s); A. abcdabcdefg B. abcdefg C. abcd D. abcdefgabcd 30、下面程序运行后,其输出是( ) main() int a44,i,j,k; for(i=0;i<4;i+) for(j=0;j<4;j+) aij=i+j; for(i=1;i<4;i+) for(j=i+1;j<4;j+) k=aij; aij=aji; aji=k; for(i=0;i<4;i+) printf(“n”); for(j=0;j<4;j+) printf(“M”,aij); A0 1 2 3 B0 1 2 3 C0 1 2 3 D3 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 s10=”a program”; int num=4; sub(s,0,num-1); sub(s,num,6); sub(s,0,6); printf(“%sn”,s); void sub(char *s,int num1,int num2) char t,*p; p=s+num2;s=s+num1; while(st=*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); Axyz# Bxyz#xyz# Cxyz#zyx Dxyzxyz 第二卷(共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 tmaxline; i=0; isdigit=no; while(c=_)!=eof&&i if(c>=0&&c<=9|c>=a&&c<=f| c>=A&&c<=F) isdigit=yes; ti+=_; else if(isdigit=yes) isdigit=no; ti=0; printf(“%d”,_); i=0; int htoi(char *s) int i,n; n=0; for(i=0;si!=0;i+) if(si>=0&&si<=9) n=n*16+si-_; if(si>=a&&si<=f) n=n*16+si-a+10; if(si>=A&&si<=F) n=n*16+si-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(“%fn”,x); for(n=1;nexp=_; printf(“x=%f,exp(x)=%fn”,x,_); 答案: 第一卷: 15 BCCAA 610 DADBB 1115 ADBCA 1620 ABBDD 2125 CCABA 2630 CBCDA 3132 DC 第二卷: 试题一: getchar() c htoi(t) 0 n 试题二: f2(n-1)*n 1 i<=n exp+f1(x,n)/f2(n) exp专心-专注-专业