C语言学习知识程序设计试题及其规范标准答案.doc
C语言程序设计( 卷)考核班级学生数 印数 考核方式 闭卷 考核时间 120 分钟 (本试卷包括第一卷和第二卷,答卷时间总共120分钟)第一卷第一部分:基础知识(20项,共40分)1一个C语言程序是由( ) 组成的。 A主程序 B子程序 C函数 D过程2转换说明符%x的输出形式是( )。 A十进制 B八进制 C十六进制 D二进制3若a、b均为int型变量,且a=100,则关于循环语句for(b=100;a!=b;+a,+b) printf ( “ -“) ;的正确说法是( ) 。 A循环体只执行一次 B死循环 C循环体一次也不执行 D输出-4若x、y、z均为int 型变量,则执行下列语句后的z值为 ( )。 x=1; y=2; z=3; z=(x>y)?z :y ; z = (z<y)?z:x; A1 B4 C2 D35下面标识符中,合法的用户标识符为( )。 AP#Ad B12a Cchar D_int 6 A + 3 的结果是( )。 AA BD的ASC码 C65 D37语句char str20;说明str是一个字符串,最多能表示 ( ) 。 A20个字符 B19个字符 C18个字符 D21个字符8将int 型变量n转换成float型变量的方法是 ( )。Afloat n B(float)n Cfloat(n) D21个字符9以下不正确的描述是 ( )。A 使用while和do-while循环时,循环变量初始化的操作应在循环语句之前完成B while循环是先判断表达式后执行循环体语句C do-while和for循环均是先执行循环体语句,后判断表达式D for、while、do-while循环中的循环体均可以由空语句构成10在循环中使用break 语句的功能是( )。A 使程序的执行跳出break所在的那一重循环B 使程序执行结束C 跳出包含此break语句的所有循环D 终止本次循环,继续下次循环11下面是一个初始化指针的语句:int *px = &a;其中指针变量的名字应该是( )。 A*pz Ba Cpx D&a12若指针 px为空指针,则 ( )。 Apx指向不定 Bpx的值为零 Cpx的目标为零 Dpx的地址为零13对于语句int *px10,以下说法正确的是( ) 。A. px是一个指针,指向一个数组,数组的元素是整数型。B. px是一个数组,其数组的每一个元素是指向整数的指针。C. A和B均错,但它是C语言的正确语句。D. C语言不允许这样的语句。14具有相同基类型的指针变量P和数组变量Y,下列写法中不合法的是 ( ) 。AP = Y B*P = Yi CP + &Yi DP = &Y15已知static int a=5,4,3,2,1,*p=a+3,a+2,a+1,a,*q=p,则表达式 *(p0+1)+*(q+2)的值是( )。 A5 B4 C6 D716已知for(;n>=1;n-),下列语句实现将S2所指字符数组中前n个字符复制到S1所指字符数组中,其中代码不正确的是( )。 A*S1+=*S2+ BS1n-1=S2n-1 C*(S1+n-1)=*(S2+n-1) D*(+S1)=*(+S2)17调用函数的实参与被调用函数的形参应该有如下关系( ) 。 A只要求实参和形参个数相等 B只要求形参和实参顺序相同 C只要求实参和形参数据类型相同 D上述三点均需具备18联合体成员的数据类型 ( )。A相同 B可以不同也可以相同 C长度一样 D是结构体变量19由系统分配和控制的标准输出文件为( ) 。 A键盘 B磁盘 C打印机 D显示器20C语言标准库函数fread(fd,buffer,n)的功能是( )。 A从文件fd中读取长度不超过n个字节的数据送入buffer指向的内存区域 B从文件fd中读取长度不超过n-1个字节的数据送入buffer指向的内存区域 C从文件fd中读取长度不超过n个字符送入buffer指向的内存区域 D从文件fd中读取长度不超过n-1个字符送入buffer指向的内存区域第二部分:简单程序(12项,共30分)21下列程序main() int x,y,z; x=y=2;z=3;y=z+-1; printf(“%dt%dt”,x,y); y=+x-1;printf(“%d t%dn”,x,y); y=z-1; printf(“%dt%dt”,z,y); y=-z-1; printf(“%dt%dn”,z,y);运行后输出的数据为_。A. 3 1 4 2 B. 3 1 3 3 C. 2 2 3 2 D. 2 1 3 2 2 4 1 3 2 4 2 2 3 3 2 1 1 3 1 222.下列程序main() int i,j;char *a,c;a=”computer”;printf(“%s”,a);for(i=0,j=7;i<j;i+,j-) c=ai;*(a+i)=*(a+j);aj=c;printf(“->%sn”,a);c=aj-1,i=2+j;printf(“a%d=%cn”,i,c);运行后输出的数据为_ .A. computer->computer B. computer->retupmoca3=u a5=mC. computer->retupmoc D. computer->retupmoca4=p a2=t23.下列程序int sum(int n) int p=1,s=0,i;for(i=1;i<=n;i+) s+=(p*=i);return s;main() printf(“sum(5)=%dn”,sum(5);运行后输出的数据为_ _A.sum(5)=151 B.sum(5)=152 C.sum(5)=153 Dsum(5)=15524.下列程序main() static int a=5,6,7,3,2,9;int s1,s2,i,*ptr;s1=s2=0;ptr=&a0;for(i=0;i<5;i+2=2) s1+=*(ptr+i);s2+=*(ptr+i+1);printf(“s1=%d,s2=%dn”,s1,s2);运行后输出的数据为_A.s1=18,s2=14 B.s1=14,s2=32 C.s1=14,s2=18 D.s1=15,s2=1925.下列程序int c=1;main()static int a=5;int b=6;printf(“a=%d b=%d c=%dn”,a,b,c);func();printf(“a=%d,b=%d,c=%dn”,a,b,c);func();func() static int a=4;int b=10;a+=2;c+=10;b+=c;printf(“a=%d,b=%d,c=%dn”,a,b,c);运行后输出的数据为_ _.A. a=5 b=6 c=1 B. a=5 b=6 c=1 a=6 b=21 c=11 a=7 b=17 c=11 a=5 b=6 c=11 a=5 b=6 c=11 a=8 b=31 c=21 a=9 b=17 c=21 C. a=5 b=6 c=1 D. a=5 b=6 c=1a=6 b=21 c=11 a=7 b=17 c=11a=6 b=21 c=11 a=7 b=17 c=11a=8 b=31 c=21 a=9 b=38 c=2126已知struct studentchar name; int student_n; char grade; struct student temp,*p=&temp;temp.name=”chou”;则下面不正确的是_。 表达式 值A.pname chou B.(*p)name+2 h C.*pname+2 e D.*(pname+2) o27.下列程序 #define MAX 10 main() int i,sum,a =1,2,3,4,5,6,7,8,9,10; sum=1;for(i=0;i<MAX;i+)sum-=ai;printf(“SUM=%d”,sum); 程序运行结果是: A.SUM=55 B.SUM=-54 C.SUM=-55 D.SUM=5428.下列程序 void inv(int*x,int n) int *p,t,*i,*j,m=(n-1)/2;i=x;j=x+n-1;p=x+m;for(;i<p;i+,j-) t=*i;*i=*j;*j=t; return; main( ) static int i,a10=3,7,9,11,0,6,7,5,4,2; inv(a,10);for(i=0;i<10;i+) printf(“%d,”,ai); 程序运行结果: A.0,2,3,4,5,6,7,7,9,11 B.11,9,7,7,6,5,4,3,2,0 C.3,7,9,11,0,6,7,5,4,2 D.2,4,5,7,6,0,11,9,7,329.下列程序 main() int a10,b10,*pa,*pb,i; pa=a;pb=b; for(i=0;i<3;i+,pa+,pb+) *pa=i;*pb=2*i; printf(“%dt%dn”,*pa,*pb);printf(“n”);pa=&a0;pb=&b0;for(i=0;i<3;i+) *pa=*pa+i; *pb=*pb*i; printf(“%dt%dn”,*pa+,*pb+); 运行后输出的数据为_。A. 0 0 B.0 0 C. 0 0 D. 0 0 1 2 1 2 1 2 2 2 2 4 2 4 2 4 2 4 0 0 0 0 0 0 0 0 2 2 2 2 1 2 1 2 4 8 2 4 2 4 4 830.下列程序 copy_string(from,to) char *from,*to; while(*from) *to+=*from+; *to=0; main() static char s1 =”c_program.”; static char s280; copy_string(s1,s2); printf(“%sn”,s2);copy_string(“123”,s2);printf(“%sn”,s2); 运行后输出的数据为( )。 A. c_program 123 B.123 C. c_program123 D. c_program 12331.下列程序: #include <stdio.h> main() char a40,b40; int i,j;printf(“Enter the string:”);scanf(“%s”,a); i=j=0;while(ai!=0) if(!(ai>=0&&ai<=9) bj=ai; j+; +i; bj=0;printf(“%s”,b); 运行后输出的结果是( ) 。A. 把键盘输入的字符串显示在屏幕上B. 把键盘输入的字符串中的数字字符删掉,然后显示该字符串C. 把键盘输入的字符串中的字符0和9删掉,然后显示该字符串D. 只保留由键盘输入的字符串中的字母数字,然后显示该字符串32下列程序#include<stdio.h>main() char a80; int i,j; printf(“Enter the string:”);scanf(“%s”,a);i=0;while(ai!=0) if(ai>=A&&ai<=Z) ai=ai-A+a; printf(“%s”,a);运行后输出的结果是( )。A. 把键盘输入的字符串中的大写字母变换成小写字母,然后显示变换后的字符串。B. 把键盘输入的字符串中的数字字符删除掉,然后显示该字符串。C. 把键盘输入的字符串中的小写字母变换成大写字母,然后显示变换后的字符串。D. 把键盘输入的字符串原封不动地显示在屏幕上。第二卷说明:(1)第二卷含二大题,均属填空题,每题各有5个空栏,在阅读和理解原题程序的基础上,在空栏处填入适当的字符、语句,以构成一个正确的C语言程序。 (2)每空栏填对得3分,两大题共10个空栏,全填对得30分。试题一一个整数称为完全平方数,是指它的值是另一个整数的平方。如81是个完全平方数,因为它是9的平方。下列程序是在三位的正整数中寻找符合下列条件的整数:它既是完全平方数,且三位数字中又有两位数字相同:例如144(12*12)、676(26*26)等,从程序中找出并输出所有满足上述条件的三位数。程序如下:main() int n,k,a,b,c; for(k=1; ;k+)_ if(n<100) _ if(n<999) _ a=n/100; b=_ c=n%10, if(flag(a,b,c) printf(“n=%d=%d*%dn”,n,k,k); flag_ return(!(x-y)*(x-z)*(y-z);试题二以下程序所列函数replace(char *s1,char *s2,char str1,char *str2)的功能是将已知字符串s1中的所有与字符串str1相同的子串替换成字符串str2,并将替换后所生成的新的字符串存于字符数组s2中。说明:生成字符串s2的过程是一个循环,顺序访问字符串s1的每个字符;当从某个字符开始不能构成与str1相同的子字符时,就把该字符拷贝到数组s2,当从某个字符开始能构成一个与str1相同的子字符串时,就将字符串str2的各字符拷贝到字符数组s2,并继续访问字符串s1中那个子串之后的字符,直至字符串s1被访问完毕,字符复制即告结束。下列程序运行的结果是输出:ABCXYZdefg abABCXYZd abab程序如下:replace(char *s1,char *s2,char *str1,char *str2) char *t0,*t1,*t2; while( ) for(t0=s1,t1=str1;*t1!=0&& ;t0+,t1+); if(*t1!=0)*s2+= ; else for(t1=str2;*t1!=0;) *s2+= ; ; *s2=0; main() char s1=”abcdefg ababcd abab.”; char s280; replace(s1,s2,”abc”,”ABCXYZ”); printf(“%sn”,s2); 参考答案第一卷一基础知识(20项,共40分) 1.C 2.C 3.C 4.A 5.D 6.B 7.B 8.B 9.C 10.A 11.C 12.B 13.B 14.D 15.A 16.D 17.D 18.B 19.D 20.A 二简单程序 21.C 22.B 23.C 24.C 25.A 26.B 27.B 28.D 29.A 30.D 31.B 32.A第二卷 试题一:n=k*k continuebreakn%100/10或(n-100*a)/10或n/10-(n/100)*10int x,int y,int z试题二:*s1或s1!=0 *t0=*t1或*t1=*t0 *s1+ *t1+ s1=t0或s1=s1+strlen(str1)C语言程序设计( 卷)考核班级学生数 印数 考核方式 闭卷 考核时间 120 分钟(本试卷包括第一卷和第二卷,答卷时间总共120分钟)第一卷说明:(1)第一卷全部为选择题,每题可供选择的答案中,只有一个正确答案。 (2)答本卷的题目时,要在标准答题纸上编号对应的栏口中,用铅笔将正确答案涂黑。在试题上直接勾划不得分。 (3)本卷共分70分,其中第126题每题2分,第2732题每题3分。第一部分:基础知识(20题,共40分)1、一个C语言的源程序中,( ) 。(A)必须有一个主函数 (B)可以有多个主函数(C)必须有主函数和其他函数 (D)可以没有主函数2、下列数据中,为字符串常量的是( ) 。(A)A (B)“house” (C)How do you do (D)$abc3、若有定义:int a=8,b=5,c;,执行语句c=a/b十0.4;后,c的值为( ) 。(A)1.4 (B)1 (C)2.0 (D)24、设有int x=11;则表达式(x+*l/3)的值为( )。(A)3 (B)4 (C)11 (D)125、执行x=5>1+2&&2|2*4<4-!0后,x的值为( )。(A)-l (B)O (C)1 (D)56、以下变量x、y、z均为double类型且已正确赋值,不能正确表示数学式子:(x)/(yz)的c语言表达式是( )。(A)x/y*z (B)x*(1/(y*z) (C) x/y*1/z (D)x/y/z7、设有以下说明语句struct exint x;float y; char z;example;则下面的叙述不正确的是( )。(A)struct是结构体类型的关键字 (B)example是结构体类型名(C)x,y,z都是结构体成员名 (D)struct ex是结构体类型8、假定w、x、y、z、m均为int型变量;有如下程序段:w=1;x=2;y=3;z=4;m=(w<x)?w:x; m=(m<y)?m:y; m=(m<z)?m:z;则该程序段执行后,m的值是( )。(A)4 (B)3 (C)2 (D) 19、在调用函数时,如果实参是简单变量,它与对应形参之间的数据传递方式是( ) 。 (A) 地址传递 (B) 单向值传递(C) 由实参传给形参,再由形参传回实参 (D) 传递方式由用户指定10、以下定义语句中,错误的是 ( )。(A)int a=1,2; (B) char *a3;(C)char s10="text"; (D) int n=5,an;11、下列程厅执行后的输出结果是( ) 。 main() char arr24; strcpy(arr,"you");strcpy(arr1,"me"); arr03=&; printf("%sn",arr); (A)you&me (B)you (C) me (D)err12、标有/* */的语句的执行次数是( )。 int y,i; for(i=O;i<20;i+) if(i%2=0) continue; y+=i; /* */ (A) 20 (B) 19 (C) 10 (D) 913、若用数组名作为函数调用的实参,传递给形参的是( )。 (A) 数组的首地址 (B) 数组第一个元素的值 (C) 数组中全部元素的值 (D) 数组元素的个数14、下列语句执行后的结果是( )。 y=5;p=&y;x=*p+; (A) x=5,y=5 (B) x=5,y=6 (C) x=6,y=5 (D) x=6,y=615、执行下面的语句后,表达式*(p0+1)+*(q+2)的值为 ( )。 int a=5,4,3,2,1,*p=a+3,a+2,a+1,a,*q=p; (A) 8 (B) 7 (C) 6 (D) 516、经过下面的语句后 int i,a10,*p; 定义后,下列语句中合法的是 ( )。 (A) p=100: (B) p=a5; (C) p=a+2; (D) p=&(i+2);17、若有以下说明和语句,则对pup中sex域的正确引用方式是( )。 struct pupilchar name20; int sex; pup,*p;p=&pup;(A)p.pup.sex (B)p->pup.sex (C)(*p).pup.sex (D)(*p).sex18、若已定义了如下的共用体类型变量x,则x所占用的内存字节数为( ) 。union data int i; char ch; double f; x;(A) 7 (B) 11 (C)8 (D) 1019、若有下面的说明和定义:struct test int m1;char m2;float m3; union uu char u15;int u22;ua; myaa;则sizeof(struct test)的值是 ( ) 。 (A) 12 (B) 16 (C) 14 (D)920、若要打开:A盘上user子目录下名为abc.txt的文本文件进行读、写操作,下面符合此要求的函数调用是( ) 。 (A)fopen("A:userabc.txt","r") (B) fopen("A:userabc.txt","r+") (C)fopen("A:userabc.txt","rb") (D) fopen("A:userlabc.txt","w")第二部分:简单程序(12题,共30分)21、以下程序的运行情况是( ) 。 main() int i=1,sum=0; while(i<10) sum=sum+1; i+; printf("i=%d,sum=%d",i,sum); (A) i=10,sum=9 (B) i=9,sum=9 (C) i=2,sum=l (D) 运行出现错误22、若输入B,以下程序的运行结果为( ) 。main() char grade; scanf("%c",&grade); switch(grade) case A:printf(">=85"); case B: case C:printf(">=60"); case D:printf("<60");default:printf("error"); (A)>=85 (B)>=60 (C)>=60<60error (D) error23.有如下程序 main() int x=23; do printf("%d",x-);while(!x); 该程序的执行结果是( ) 。(A)321 (B)23 (C)不输出任何内容 (D)陷入死循环24.有如下程序int func(int a,int b) return (a+b);main()int x=2,y=5,z=8,r; r=func(func(x,y),z); printf("%dn",r); 该程序的输出结果是 ( ) 。 (A) 12 (B) 13 (C)14 (D)1525.以下程序的输出结果是( ) 。main() int a,b; for(a=1,b=1;a<=100;a+) if(b>=10) break; if(b%3=1) b+=3;continue; printf("%dn",a);(A)101 (B) 6 (C)5 (D)426.以下程序的输出结果是( ) 。 int a,b; void fun() a=100;b=200; main() int a=5,b=7; fun(); printf("%d%dn",a,b); (A) 100200 (B)57 (C)200100 (D)75 27.下面的程序执行后,文件testt中的内容是 ( ) 。#include <stdio.h>void fun(char *fname,char *st) FILE *myf; int i;myf=fopen(fname,"w");for(i=0;i<strlen(st);i+)fputc(sti,myf);fclose(myf);main() fun("test.t","new world");fun("test.t","hello,"); (A) hello, (B)new,worldhello (C) new,world (D)hello,rld 28.以下程序的运行结果是( ) 。#include <stdio.h>main() static char s30="abcdefg"; static char t="abcd"; int i,j; i=0; while(si!=0) i+; j=0; whi1e(tj!=0) si+j=tj; j+; si+j=0; printf("%sn",s); (A) abcdabcdefg (B)abcdefg (C)abcd (D)abcdefgabcd 29.有如下程序 main() char ch25="6937","8254",*p2; int i, j, s=0; for(i=0;i<2;i+) pi=chi; for(i=0;i<2;i+) for(j=0;pij>0;j+=2) s=10*s+pij-0; printf("%dn",s); 该程序的输出结果是( ) 。 (A)69825 (B)63825 (C)6385 (D)69382530.若已建立如下图所示的单向链表结构 在该链表中,指针p,s分别指向图中所示结点,则不能将s所指的结点插入到链表末尾仍构成单向链表的语句组是( ) 。(A) p=p->next;s->next=p;p->next=s;(B) p=p->next;s->next=p->next;p->next=s;(C) s->next=NULL;p=p->next;p->next=s(D) p=(*p).next;(*s).next=(*p).next; (*p).next =s;31.请选择正确的运行结果填入( ) 中。include <stdio.h>int x,y;num() int a=15,b=10; int x,y; y=a-b; y=a+b; return;main() int a=7,b=5; x=a+b; y=a-b; num(); printf("%d,%dn",x,y);(A) 12,2 (B) 5,25 (C)2,12 (D)不确定32.以下程序的输出结果是( ) 。 #define M(x,y,z) x*y+z main() int a=1,b=2,c=3; printf("%dn",M(a+b,b+c,c+a); (A)19 (B)17 (C)15 (D)12 第二卷说明:(1)第二卷含两大题,均属填空题,每题各有5个空栏,在阅读和理解原题程序的基础上,在空栏处填入适当的字符、语句,以构成一个正确的C语言程序。 (2)每空栏填对得3分,两大题共10个空栏,全对得30分。试题一: 有一函数,实参传来一个字符串,统计此字符串中字母、数字、空各和其他字符的个数,在主函数中输入字符串以及输出上述的结果。int letter,digit,space,others; /*是全局变量*/ main() int count(char _(1)_)