第一部分:基础知识(共30题)
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 A.’A’ B.’D’的ASCⅡ码 C.65 D.3 7.语句char str[20];说明str是一个字符串,最多能表示 ( ) 。 A.20个字符 B.19个字符 C.18个字符 D.21个字符 8.将int 型变量n转换成float型变量的方法是 ( )。 A.float n B.(float)n C.float(n) D.21个字符 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;其中指针变量的名字应该是( 1 )。 A.*pz B.a C.px D.&a 12.若指针 px为空指针,则 ( )。 A.px指向不定 B.px的值为零 C.px的目标为零 D.px的地址为零 13.对于语句int *px[10],以下说法正确的是( ) 。 A. px是一个指针,指向一个数组,数组的元素是整数型。 B. px是一个数组,其数组的每一个元素是指向整数的指针。 C. A和B均错,但它是C语言的正确语句。 D. C语言不允许这样的语句。 14.具有相同基类型的指针变量P和数组变量Y,下列写法中不合法的是 ( ) 。 A.P = Y B.*P = Y[i] C.P + &Y[i] D.P = &Y 15.已知static int a[]={5,4,3,2,1},*p[]={a+3,a+2,a+1,a},**q=p,则表达式 *(p[0]+1)+**(q+2)的值是( )。 A.5 B.4 C.6 D.7 16.已知for(;n>=1;n--),下列语句实现将S2所指字符数组中前n个字符复制到S1所指字符数组中,其中代码不正确的是( )。 A.*S1++=*S2++ B.S1[n-1]=S2[n-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.显示器 20.C语言标准库函数fread(fd,buffer,n)的功能是( )。 A.从文件fd中读取长度不超过n个字节的数据送入buffer指向的内存区域 B.从文件fd中读取长度不超过n-1个字节的数据送入buffer指向的内存区域 C.从文件fd中读取长度不超过n个字符送入buffer指向的内存区域 D.从文件fd中读取长度不超过n-1个字符送入buffer指向的内存区域 2 21.已知ch是字符型变量,下面正确的赋值语句是 ( ) 。 A.ch=’123’ B.ch=’\\x2f’ C.ch=’\\08’ D.ch=”\\” 22.已知大写字母A的ASCⅡ码值是65,小写字母a的ASCⅡ码是97,则用八进制表示的字符常量’\\101’是 ( ) A 字符A B 字符a C 字符e D 非法的常量 23.有以下程序段 int m=0,n=0; char c=’a’ scanf(“%d%c%d”,&m,&c,&n); printf(“%d,%c,%d”,m,c,n); 若从键盘上输入:10A10<回车>,则输出结果是 ( ) A 10, A,10 B 10, a, 10 C 10, a, 0 D 10, A, 0 24.若有以下定义和语句 #include 则以下选项中错误的语句是( ) A; *p=a B w=p; C *q=0; D *p=*w; 25.有以下程序 main() { int m[][3]={1,4,7,2,5,8,3,6,9}; int i,j,k=2; for(i=0;i<3;i++) { printf(“%d”,m[k][i]); } } 执行后输出结果是 ( ) A 4 5 6 B 2 5 8 C 3 6 9 D 7 8 9 26.以下叙述中正确的是( ) A 全局变量的作用域一定比局部变量的作用域范围大 B 静态(static)类别变量的生存期贯穿于整个程序的运行期间 C 函数的形参都属于全局变量 D 未在定义语句中赋初值的auto变量和static变量的初值都是随机值 27.下列关于C语言用户标识符的叙述中正确的是( ) A 用户标识符中可以出现下划线和中划线(减号) B 用户标识符中不可以出现中划线,但可以出现下划线 3 C 用户标识符中可以出现下划线,但不可以放在用户标识符的开头 D 用户标识符中可以出现下划线和数字,它们都可以放在用户标识符的开头 28.在C语言程序中,说法正确的是__ ____。 A. 函数的定义可以嵌套,但函数的调用不可以嵌套 B. 函数的定义不可以嵌套,但函数的调用可以嵌套 C. 函数的定义和函数的调用都不可以嵌套 D. 函数的定义和函数的调用都可以嵌套 29.变量的指针,其含义为指该变量的 ( ) 。 A. 值 B. 地址 C. 名 D. 一个标志 30.在宏定义# define E 2.71828中,宏名E代替一个 ( ) 。 A. 单精度数 B. 双精度数 C. 常数 D. 一个字符串 第二部分:简单程序 21.下列程序 main() { int x,y,z; x=y=2;z=3; y=z++-1; printf(“%d\%d\”,x,y); y=++x-1; printf(“%d \%d\\n”,x,y); y=z---1; printf(“%d\%d\”,z,y); y=--z-1; printf(“%d\%d\\n”,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 2 22.下列程序 main() { int i,j;char *a,c; a=”computer”; printf(“%s”,a); 4 for(i=0,j=7;i printf(“a[%d]=%c\\n”,i,c); } 运行后输出的数据为___ . A. computer->computer B. computer->retupmoc a[3]=u a[5]=m C. computer->retupmoc D. computer->retupmoc a[4]=p a[2]=t 23.下列程序 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)=%d\\n”,sum(5)); } 运行后输出的数据为_ ___ A.sum(5)=151 B.sum(5)=152 C.sum(5)=153 Dsum(5)=155 24.下列程序 main() { static int a[]={5,6,7,3,2,9}; int s1,s2,i,*ptr; s1=s2=0; ptr=&a[0]; for(i=0;i<5;i+2=2) { s1+=*(ptr+i); 5 s2+=*(ptr+i+1); } printf(“s1=%d,s2=%d\\n”,s1,s2); } 运行后输出的数据为_____ A.s1=18,s2=14 B.s1=14,s2=32 C.s1=14,s2=18 D.s1=15,s2=19 25.下列程序 int c=1; main() {static int a=5;int b=6; printf(“a=%d b=%d c=%d\\n”,a,b,c); func(); printf(“a=%d,b=%d,c=%d\\n”,a,b,c); func(); } func() { static int a=4;int b=10; a+=2; c+=10; b+=c; printf((“a=%d,b=%d,c=%d\\n”,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=1 a=6 b=21 c=11 a=7 b=17 c=11 a=6 b=21 c=11 a=7 b=17 c=11 a=8 b=31 c=21 a=9 b=38 c=21 26.已知 struct student 6 {char ﹡name; int student_n; char grade; }; struct student temp,*p=&temp; temp.name=”chou”; 则下面不正确的是_______。 表达式 值 A.p→name chou B.(*p)→name+2 h C.*p→name+2 e D.*(p→name+2) o 27.下列程序 #define MAX 10 main() { int i,sum,a[ ]={1,2,3,4,5,6,7,8,9,10}; sum=1; for(i=0;i 程序运行结果是: A.SUM=55 B.SUM=-54 C.SUM=-55 D.SUM=54 28.下列程序 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 7 } return; } main( ) { static int i,a[10]={3,7,9,11,0,6,7,5,4,2}; inv(a,10); for(i=0;i<10;i++) printf(“%d,”,a[i]); } 程序运行结果: 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,3 29.下列程序 main() { int a[10],b[10],*pa,*pb,i; pa=a;pb=b; for(i=0;i<3;i++,pa++,pb++) {*pa=i;*pb=2*i; printf(“%d\%d\\n”,*pa,*pb); } printf(“\\n”); pa=&a[0]; pb=&b[0]; for(i=0;i<3;i++) {*pa=*pa+i; *pb=*pb*i; printf(“%d\%d\\n”,*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 8 0 0 0 0 0 0 0 0 2 2 2 2 1 2 1 2 4 8 2 4 2 4 4 8 30.下列程序 copy_string(from,to) char *from,*to; { while(*from) *to++=*from++; *to=’\\0’; } main() { static char s1[ ]=”c_program.”; static char s2[80]; copy_string(s1,s2); printf(“%s\\n”,s2); copy_string(“123”,s2); printf(“%s\\n”,s2); } 运行后输出的数据为( )。 A. c_program 123 B.123 C. c_program123 D. c_program 123 31.下列程序: #include { char a[40],b[40]; int i,j; printf(“Enter the string:”); scanf(“%s”,a); i=j=0; while(a[i]!=’\\0’) { if(!(a[i]>=’\\0’&&a[i]<=’9’)) { b[j]=a[i]; j++; } ++i; 9 } b[j]=’\\0’; printf(“%s”,b); } 运行后输出的结果是( ) 。 A. 把键盘输入的字符串显示在屏幕上 B. 把键盘输入的字符串中的数字字符删掉,然后显示该字符串 C. 把键盘输入的字符串中的字符0和9删掉,然后显示该字符串 D. 只保留由键盘输入的字符串中的字母数字,然后显示该字符串 32.下列程序 #include printf(“Enter the string:”); scanf(“%s”,a); i=0; while(a[i]!=’\\0’) { if(a[i]>=’A’&&a[i]<=’Z’) a[i]=a[i]-‘A’+’a’; } printf(“%s”,a); } 运行后输出的结果是( )。 A. 把键盘输入的字符串中的大写字母变换成小写字母,然后显示变换后的字符串。B. 把键盘输入的字符串中的数字字符删除掉,然后显示该字符串。 C. 把键盘输入的字符串中的小写字母变换成大写字母,然后显示变换后的字符串。D. 把键盘输入的字符串原封不动地显示在屏幕上。 33.下面程序的运行结果是 。 #include \"stdio.h\" main() { char *ptr1, *ptr2; 10 ptr1 = ptr2 = \"abcde\"; while ( *ptr2 != '\\0' ) putchar(*ptr2++); - -ptr2; while ( - -ptr2 >= ptr1 ) putchar(*ptr2); putchar('\\n'); } 34.下列程序运行后输出的结果为 #include int k=4,m=1,p; p=func(k,m); printf(“%d,”,p); p=func(k,m); printf(“%d\\n”,p); } func(int a,int b) { static int m=0, i=2; i +=m+1; m=i+a+b; return(m); } 第二卷 说明:(1)在空栏处填入适当的字符、语句,以构成一个正确的C语言程序。 (2)三大题共13个填空 1.一个整数称为完全平方数,是指它的值是另一个整数的平方。如81是个完全平方数,因为它是9的平方。下列程序是在三位的正整数中寻找符合下列条件的整数:它既是完全平方数,且三位数字中又有两位数字相同:例如144(12*12)、676(26*26)等,从程序中找出并输出所有满足上述条件的三位数。 程序如下: main() { int n,k,a,b,c; for(k=1; ;k++) {______①______ if(n<100) _____②_____ 11 if(n<999) _____③_____ a=n/100; b=_____④_____ c=n%10, if(flag(a,b,c)) printf(“n=%d=%d*%d\\n”,n,k,k); } } flag_____⑤_____ { return(!(x-y)*(x-z)*(y-z)); } 2.以下程序所列函数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() 12 { char s1[]=”abcdefg ababcd abab.”; char s2[80]; replace(s1,s2,”abc”,”ABCXYZ”); printf(“%s\\n”,s2); } 3.下面程序实现对从键盘输入的20个数据升序排序,请填空,将程序补充完整。 #include { t=s[j];s[j]=s[j+1];s[j+1]=t; } for(i=0;i 复习题二 第一部分:基础知识(16题) 1、一个C语言的源程序中,( ) 。 (A)必须有一个主函数 (B)可以有多个主函数 (C)必须有主函数和其他函数 (D)可以没有主函数 2、下列数据中,为字符串常量的是( ) 。 (A)‘A’ (B)“house” (C)How do you do. (D)’$abc’ 3、若有定义:int a=8,b=5,c;,执行语句c=a/b十0.4;后,c的值为( ) 。 (A)1.4 (B)1 (C)2.0 (D)2 4、设有int x=11;则表达式(x++*l/3)的值为( )。 13 (A)3 (B)4 (C)11 (D)12 5、执行x=5>1+2&&2||2*4<4-!0后,x的值为( )。 (A)-l (B)O (C)1 (D)5 6、以下变量x、y、z均为double类型且已正确赋值,不能正确表示数学式子:(x)/(y×z)的c语言表达式是( )。 (A)x/y*z (B)x*(1/(y*z)) (C) x/y*1/z (D)x/y/z 7、设有以下说明语句 struct ex {int 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 { char arr[2][4]; strcpy(arr,\"you\");strcpy(arr[1],\"me\"); arr[0][3]='&'; printf(\"%s\\n\; } (A)you&me (B)you (C) me (D)err 12、标有/* */的语句的执行次数是( )。 int y,i; for(i=O;i<20;i++) { if(i%2==0) 。 14 continue; y+=i; /* */ } (A) 20 (B) 19 (C) 10 (D) 9 13、若用数组名作为函数调用的实参,传递给形参的是( )。 (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=6 15、执行下面的语句后,表达式*(p[0]+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) 5 16、经过下面的语句后 int i,a[10],*p; 定义后,下列语句中合法的是 ( )。 (A) p=100: (B) p=a[5]; (C) p=a+2; (D) p=&(i+2); 第二部分:简单程序(12题) 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\; switch(grade) {case 'A':printf(\">=85\"); case 'B': 15 case 'C':printf(\">=60\"); case 'D':printf(\"<60\"); default:printf(\"error\");} } (A)>=85 (B)>=60 (C)>=60<60error (D) error 23.有如下程序 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(\"%d\\n\; } 该程序的输出结果是 ( ) 。 (A) 12 (B) 13 (C)14 (D)15 25.以下程序的输出结果是( ) 。 main() { int a,b; for(a=1,b=1;a<=100;a++) { if(b>=10) break; if(b%3==1) { b+=3;continue;} } printf(\"%d\\n\} (A)101 (B) 6 (C)5 (D)4 26.以下程序的输出结果是( ) 。 16 int a,b; void fun() { a=100;b=200;} main() { int a=5,b=7; fun(); printf(\"%d%d\\n\",a,b); } (A) 100200 (B)57 (C)200100 (D)75 27.下面的程序执行后,文件test.t中的内容是 ( ) #include void fun(char *fname,char *st) { FILE *myf; int i; myf=fopen(fname,\"w\"); for(i=0;i (A) hello, (B)new,worldhello (C) new,world (D)hello,rld 28.以下程序的运行结果是( ) 。 #include static char s[30]=\"abcdefg\"; static char t[]=\"abcd\"; int i,j; i=0; while(s[i]!='\\0') i++; j=0; whi1e(t[j]!='\\0') { s[i+j]=t[j]; j++; } 。17 s[i+j]='\\0'; printf(\"%s\\n\",s); } (A) abcdabcdefg (B)abcdefg (C)abcd (D)abcdefgabcd 29.有如下程序 main() { char ch[2][5]={\"6937\",\"8254\ int i, j, s=0; for(i=0;i<2;i++) p[i]=ch[i]; for(i=0;i<2;i++) for(j=0;p[i][j]>'\\0';j+=2) s=10*s+p[i][j]-'0'; printf(\"%d\\n\",s); } 该程序的输出结果是( ) 。 (A)69825 (B)63825 (C)6385 (D)693825 31.请选择正确的运行结果填入( ) 中。include 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,%d\\n\",x,y); 18 } (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(\"%d\\n\",M(a+b,b+c,c+a)); } (A)19 (B)17 (C)15 (D)12 第二卷 说明:(1)在空栏处填入适当的字符、语句,以构成一个正确的C语言程序。 (2)两大题共10个空栏 试题一: 有一函数,实参传来一个字符串,统计此字符串中字母、数字、空各和其他字符的个数,在主函数中输入字符串以及输出上述的结果。 int letter,digit,space,others; /*是全局变量*/ main() {int count(char _____(1)_____); char text[80]; printf(\"\\nlnput string:\\n\"); ____(2)___; printf(\"string:\"); puts(text); letter=O; digit=O; space=O; others=O; _____(3)_____; printf(\"letter:%d,digit:%d,space:%d,other:%d\\n\, space,others); } int count(char str[]) {int i; for(i=O;str[i]!='\\0';i++) 19 if((____(4)____>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')) letter++; else if(str[i]>='0'&&str[i]<='9') digit++; else if(str[i]==' ') space++; else ____(5)____; } 试题二: 把下列程序补充完整,实现两个字符串的比较,即自己写个strcmp函数,函数原型 为:int strcmp(char *p1,char *p2) 设p1指向字符串s1,p2指向字符串s2。要求:当s1=s2时,返回值为0。当sl<>s2时,返回它们两者的第一个不同的字符的ASCII码差值(如“BOY”与“BAD”,第二个字母不同,“O”与“A”之差为79-65=14);如果s1>s2,则输出正值;如果sl scanf(\"%s\",___(7)______); p1=&strl[0]; p2=_____(8)_____; m=strcmp(p1,p2); printf(\"result:%d,\\n\ } strcmp(char ___(9)_____,char *p2) /*两个字符串比较的函数*/ { int i; ____(10)______; while(*(pl+i)==*(p2+i)) if(*(p1+i++)=='\\0') return(0); return(*(pl+i)-*(p2+i)); /*不等时返回结果为第一个不等字符ASCII码的差值*/ } 20 复习题三 单项选择题:(共19题) 1.下面程序段执行后,a的值是______。 int a; printf(\"%d \\n\ A)60 B)20 C)15 D)10 2.下列程序段的输出是______。 int x=023; printf(\"%d \\n\ A)19 B)18 C)23 D)22 3.执行下列语句后,a的值是______。 int a=8; a+=a-=a*a; A)-240 B)64 C)112 D)-112 4.执行下列语句后,输出的值是______。 int x=6; printf(\"%d,%d,%d\\n\ A)5,5,5 B)6,5,5 C)7,6,5 D)5,6,5 5.指出下列程序段所表示的逻辑关系是______。 if(aif(c==d) x=1; } else x=2; A)若a=b且c!=d,则x=2。 B)若a=b,则x=2。 C)若a6.下列程序段的执行结果是______。 int i,x; for(i=1,x=1;i<=20;i++) { if(x>=10) break; if(x%2==1) { x+=5; continue; } x-=3; } printf(\"%d,%d\\n\ A)6,4 B)7,5 C)10,6 D)14,7 7.下列程序的执行结果是______。 21 #include \"stdio.h\" #include \"string.h\" main() { static char s[10]={'C','h','i','n','a'}; printf(\"%d\\n\ } A)6 B)5 C)11 D)10 8.函数的数据类型是______决定的。 A)调用该函数时临时 B)调用函数的实参 C)return语句的表达式类型 D)函数的形参 9.执行下列程序段后,*(p+5)的值是______。 static char s[]=\"Hello\"; char *p; p=s; A)'o' B)'\\0' C)'o'的地址 D)不确定的值 10.以下程序的输出结果是______。 #include \"stdio.h\" main() { static int a[]={1,2,3,4,5,6},*p; p=a; *(p+3)+=2; printf(\"%d,%d\\n\ } A)0,5 B)1,5 C)0,6 D)1,6 11.在以下定义中,标识符P______。 int (*p)[3]; A)定义不合法。 B)是一个指针数组名,每个元素是一个指向整型变量的指针。 C)是一个指针,它指向一个具有三个元素的一维数组。 D)是一个指向整型变量的指针。 12.sizeof(int)是______。 A)一个整型表达式 B)一个不合法的表达式 C)一种函数调用 D)一条语句 13.有宏定义:#define MULT1(a,b) a*b #define MULT2(a,b) (a)*(b) 在后面的程序中有宏引用:y=MULT1(3+2,5+8); z=MULT2(3+2,5+8); 则y和z的值是______。 A)y=65,z=65 B)y=21,z=65 C)y=65,z=21 D)y=21,z=21 14.设有程序段: union MYTYPE { long x; int y[4]; char z[6];}them; main(){ printf(“%d\\n”,sizeof(them)); } 则程序的输出结果是______。 A)18 B)6 C)8 D)4 15.以读写方式打开一个已有的文本文件file1,下面fopen函数正确的调用方式 22 是______。 A)FILE *fp; B)FILE *fp; fp=fopen(\"file1\fp=fopen(\"file1\ C)FILE *fp; D)FILE *fp; fp=fopen(\"file1\fp=fopen(\"file1\ 16. 设有如下定义: struct sk {int a; float b;} data,*p; 且 p=&data; 则对data中a域的正确引用是 ( ). A) (*p).data.a B) (*p).a C) p->data.a D) p.data.a 17.若fun( int x) { printf(“%d\\n”,x);}, 则fun_______。 A)返回值为 void 类型 B)返回值无法确定 C)返回值为 int 类型 D)没有返回值 18.实参和和形参之间的数据传送是_______。 A)地址传送 B)实参传给形参,再由形参传给实参 C)值传送 D)由用户指定传送方式 19.下列程序段的输出是______。 int fun( int x) { static int a=3; a+=x; return a; } void main( void ) { int k=2, m=1, n; n=fun(k); n=fun(m); printf( “%d\\n”, n); } A)3 B)4 C)6 D)9 二. 填空题:(共20题) 1. C语言有 ⑪ 、 ⑫ 、 ⑬ 、 ⑭ 和 ⑮ 五种常量。 2. C程序的变量不仅要事先 ⑯ ,而且还必须 ⑰ 后才能使用。 3. C语言在给出逻辑运算结果时,以 ⑱ 代表“真”,以 ⑲ 代表“假”;在判断一个量是否为“真”时, 以 ⑳ 代表“假”,以 ⑴ 代表“真”。 4. C语言规定只有 ⑵ 数组和 ⑶ 数组才能初始化;这种数组不赋初值,系统会对所有数组元素自动赋以 ⑷ 值。 5. 对两个指针变量进行关系运算的条件是 ⑸ ,其结果表示 ⑹ 。 6. 一个C文件是一个 ⑺ 或 ⑻ ,它把数据看成是 ⑼ ,对文件的存取是以 ⑽ 为单位。 7. C程序一个函数的定义由__________和____________两部分组成。 8. C语言的整型变量可分为基本型、短整型、________和________。 9. C语言在判断一个量是否为“真”时,以____代表“假”,以____代表“真”。 10. C语言中的break语句只能用于______和______语句。 11. 对________和________型数组不赋初值,系统会对所有元素自动赋以0值。 12. C语言中“文件包含”是通过____________命令完成的,而符号常量是通过____________命令定义的。 23 13. 对于数组x[5][5],*(x+2)+3表示__________,*(x[3]+2)表示__________。 14. 若定义:struct {int y, m, d;} today, *pdata; 则为today分配内存 ____ 字节,为pdata分配内存 ____ 字节。 三. 程序填空题(共20空) 阅读下列程序,在横线上填入适当的内容使程序完整。 1.下列程序是求Fibonacci数列:1,1,2,3,5,8„„的前40个数,要求每行输出4个数。 main() { long int f1,f2; int i; f1=1 ; f2=1; for(i=1;i<= ⑪ ;i++) { printf(\"%12ld %12ld \ if( ⑫ ) printf(\"\\n\"); f1= ⑬ ; f2= ⑭ ; } } 2.下列程序是求一个3×4矩阵中值最小元素。 min_value( ⑮ ) { int i,j,k,min; ⑯ =array[0][0]; for(i=0;i<3;i++) for(j=0;j<4;j++) if( ⑰ ) min= ⑱ ; ⑲ ; } main() { static int a[3][4]={ 1,2,3,4,5,6,7,8,9 }; printf(\"min value is %d\\n\⑳ )); } 3.下列程序的功能是:将字符串a复制到字符串b中。 void copy_string(char *from, ⑴ ) ; { for(;*from; ⑵ ) ⑶ ; *to= ⑷ ; } main() { char *a=\"I am a boy!\"; char *b=\"This is a test!\"; ⑸ ; printf(\"a=%s\\a=%s\\n\ } 4.有一个班,3个学生,各学四门棵。下列程序的功能是:查找有一门以上课程不及格的学生,打印出他们的 24 全部课程的成绩。 main() { ⑹ ; static float score[3][4]={1,2,3,4,5,6,7,8,9,10,11,12}; search(score,3); } void search( float (*p)[4], int n) ; { int i,j,flag; for(j=0;j if( ⑺ ) flag=1; if( ⑻ ) { printf(\"No.%d is fail\\n\ for(i=0; ⑼ ;i++) printf(\"%5.1f \⑽ ); printf(\"\\n\"); } } } ************************************************************************************************ 复习题四:编程题 1、编写程序,求s=1+3+5+„..+1001的值。 2、编写程序,输出100内数字包含7且能被7整除的数,如:27,77等整数即能被7整除又包含7。一行输出5 个数。 3、编写程序 求sum=1+11+111+1111+11111。 4、编写程序,求 s = 1-3+5-7+„-99+101的值。 5、从键盘输入一串字符,对其中的的字母,数字及其他字符的数目进行统计,并输出统计结果,方法不限。 6、编写函数fun用以求x-5x+4, x作为参数传送给函数,调用此函数求 y1 = 2- 5*2 + 4 y2 = (x+15) – 5*(x+15) + 4; x的值从键盘输入 7、编写函数find,对传送过来的三个整数选出最大和最小数,并通过形参传回调用函数。 8、编写程序 ,统计一行中数字字符的个数。 9、编写程序,读入三个整数给a、b、c,然后交换它们中的数,把a中原来的值给b,把b中原来的值给c,把 c中原来的值给a。 10、编写exchange子函数,交换主函数中的两个数。要求:写出main函数和exchange函数。(利用指针完成 ) 11、编程判断输入的正整数是否既是5又是7的整倍数。若是,则输出yes;否则输出no。 25 2 2 2 12、编写函数对传过来的10个整数按升序排序。 13、输入10个学生的成绩,输出其中的最高分max和最低分min。 26 因篇幅问题不能全部显示,请点此查看更多更全内容