一、
(一) 选择题
1. 以下不正确的C语言标识符是 A. ABC B. abc C. a_bc D. ab.c 2. 以下正确的C语言标识符是 A. %x B. a+b C. a123 D. test! 3. 一个C语言程序的执行是从 。 A. main( )函数开始,直到main( )函数结束 B. 第一个函数开始,直到最后一个函数结束 C. 第一个语句开始,直到最后一个语句结束 D. main( )函数开始,直到最后一函数结束 4. 在C语言程序中,main函数的位置 。 A. 必须作为第一个函数 B. 必须作为最后一个函数 C. 任意
D. 必须放在它所调用的函数之后 5. 一个C语言程序是由 。 A. 一个主程序和若干个子程序组成 B. 一个或多个函数组成 C. 若干过程组成 D. 若干子程序组成
6. 下列四个叙述中,错误的是_______________。 A. 一个C源程序必须有且只能有一个主函数 B. 一个C源程序可以含零个或多个子函数 C. 在C源程序中注释说明必须位于语句之后 D. C源程序的基本结构是函数 7. 编辑程序的功能是 。 A. 建立并修改程序
B. 将C源程序编译成目标程序 C. 调试程序
D. 命令计算机执行指定的操作 8. C编译程序是 。 A. C语言程序的机器语言版本 B. 一组机器语言指令
C. 将C源程序编译成目标程序的程序
第1 页/共 29页
基础知识和顺序结构
D. 由制造厂家提供的一套应用软件 9. 以下叙述不正确的是____________。 A. 分号是C语句的必要组成部分 B. C程序的注释可以写在语句的后面 C. 函数是C程序的基本单位 D. 主函数的名字不一定用main表示
10. C语言中允许的基本数据类型包括_______。 A. 整型、实型、逻辑型 B. 整型、实型、字符型 C. 整型、字符型、逻辑型 D. 整型、实型、逻辑型、字符型
11. C语言中能用八进制表示的数据类型为________。 A. 字符型、整型 B. 整形、实型
C. 字符型、实型、双精度型 D. 字符型、整型、实型、双精度型
12. 下列属于C语言合法的字符常数是___________。 A. ’\\97’ B. ”A” C. ’\’ D. ”\\0”
13. 设所有变量均为int型,则表达式(a=2,b=5,b++,a+b)的值是 A. 7 B. 8 C. 6 D. 2
14. 在C语言中,要求运算数必须是整型的运算符是: A. / B. ++
C. != D. %
15. 设C语言中,一个int 型数据在内存中占2个字节,则unsigned int 型数据的取
值范围为 A. 0-255 B. 1-32767 C. 0-65535 D. 0-2147483647
16. 下面不正确的字符串常量是: A. 'abc' B. \"12'12\" C. \"0\" D. \" \"
17. 表达式 18/4*sqrt(4.0)/8值的数据类型是:
第2 页/共 29页
A. int B. float C. double D. 不确定 18. 若有以下定义:
char a;int b; float c;double d;
则表达式a*b+d-c值的类型为:
A. float B. int C. char D. Double
19. 不属于字符型常量的是 A. 'A' B. \"B\" C. '\\n' D. '\\x72'
20. 在C语言中,合法的长整型常数是____________。 A. 0L B. 4962710 C. 0412765 D. 0xa34b7fe
21. 若有以下定义语句char c1=’b’, c2=’e’; printf(“%d,%c\\n”,c2-c1,c2-‘a’+’A’);则
输出结果是__________。 A. 2,M B. 3,E C. 2,E
D. 输出项与相应的格式控制不一致,输出结果不确定 22. 设char ch; 以下正确的赋值语句是: A. ch='123'; B. ch='\\xff'; C. ch='\\08'; D. ch=\"\\\";
23. 若t为double类型,表达式t=1,t+5,t++的值是 A. 1 B. 6.0 C. 2.0 D. 1.0
24. 设整型变量m,n,a,b,c,d均为1,执行“(m=a>b)&&(n=a>b)”后m,n的值是 A. 0,0 B. 0,1 C. 1,0 D. 1,1
第3 页/共 29页
25. 若a=1,b=2,c=3,d=4,则条件表达式a26. 设a=2,则执行b=a==!a;语句后,b的结果是 A. 0 B. 1 C. 2 D. 3
27. 设有以下语句,则c的二进制值是
char a=3,b=6,c; 解: a=00000011,b=00000110 c=a^b<<2; a^b=00000101 c=00010100 A. 00011011 B. 00010100 C. 00011100
a) 00011000
28. 设x和y均为int型变量,则以下语句:x+=y;y=x-y;x-=y;的功能是 D A. 把x和y按从大到小排列 B. 把x和y按从小到大排列 C. 无确定结果 D. 交换x和y中的值 (二) 填空题
1. C语言中的标识符只能由三种字符组成,它们是 字母 、 数字 、 下划线 。 2. 一个C语言程序有且仅有一个_main_函数。 3. 结构化设计中的三种基本结构是顺序,分支,循环。 4. C语言程序的执行是从__main函数__开始执行的。
5. C语言源程序文件后缀是_c或cpp_,经编译后生成文件的后缀是_obj__。经链接后
生成文件的后缀是_exe__。
6. C语言源程序的语句分隔符是__;__。
7. 若a是int型变量,且a的初值为6,则执行下面表达式后a的值为 -60 。
a+=a-=a*a 解:a=a-36=-30 a=a+(-30) 8. ‘\\72’在内存中占 1 个字节,”\\72”在内存中占 2 个字节。 9. 若有以下定义语句:int a=5; printf(“%d\\n”,a++); 则输出结果是___5__。 10. C语言中的基本数据类型分为 整 型、 实 型和 字符 型。 11. C语言的实型可分为 float 型和 double 型。
12. 若有以下定义语句:int u=010,v=0x10,w=10; printf(“%d,%d,%d\\n”,u,v,w); 则输出结果
是 _8,16,10_。
13. 下面程序的输出是_k=11,k=13,k=b__。
main() {int k=11;
printf(\"k=%d,k=%o,k=%x\\n\
14. 若有以下定义语句:int a=5; printf(“%d\\n”,a++); 则输出结果是_____5_____。
第4 页/共 29页
15. 设x为int型变量,执行以下语句,x=10; x+=x-=x-x; x的值为__20___。
16. 若有定义int a=10,b=9,c=8; 接着顺序执行下列语句后,变量b的值为___3____。 c=(a-=b-5);
c=(a%11)+(b=3);
17. 设有以下定义,并以赋予了确定的值:char w; int x; float y; double z;则表达式
w*x+z-y所求得值的数据类型为___double_____。
18. 设x和y均为int型变量,且x=10和y=3则以下语句的输出结果是__10,2_______。 Printf(“%d,%d\\n”,x++,--y); 19. 下列程序的输出结果是__2,1 ___。 main()
{int a=1,b=2;
a+=b; b=a-b; a-=b; printf(“%d,%d\\n”,a,b);} 20. 以下程序执行结果是: 2,1 main( ) {int a,b,d=241; a=d/100%9; b=(-1)&&(-1);
printf(\"%d,%d\\n\
21. 以下程序执行结果是: 3.14159,3.1416,3.142 main( )
{float f=3.1415927;
printf(\"%5f,%5.4f,%3.3f\
22. 以下程序输入1 2 3↙后的执行结果是: a=1,b=2,c=3 main( ) {int a,c; char b;
scanf(\"%d %c %d\printf(\"a=%d,b=%c,c=%d\\n\
23. 以下程序输入123456后的执行结果是: a=12,b=345 main( ) {int a,b;
scanf (\"%2d%3d\printf(\"a=%d,b=%d\\n\
24. 以下程序输入ABC 后的执行结果是: c=A main( ) {char c;
scanf(\"%3c\printf(\"c=%c\\n\
二、 分支结构
(一) 选择题
1. 选择合法的条件语句(设int x,a,b,c;) ( )。 A. if (a=b) ++x;
第5 页/共 29页
B. if (a=b) ++x; D. if (a>=b) ++x;
2. 执行下列程序,输入为1的输出结果是( A ),输入为4的输出结果是( C ),输
入为3的输出结果是( D )。 main( ) {int k;
scanf(\"%d\ switch(k) {case 1:
printf(\"%d\\n\ case 2:
printf(\"%d\\n\ break; case 3:
printf(\"%d\\n\ break; case 4:
printf(\"%d\\n\ case 5:
printf(\"%d\\n\ break; default:
printf(\"Full!\\n\"); } } A. 1↙2 B. 1 C. 4↙5 D. 3 (二) 填空题
1. 下列程序运行后输出结果是__end___。
main( ) {int a,b,c; a=2;b=3;c=1; if(a>b) if(a>c)
printf(\"%d\\n\ else
printf(\"%d\\n\ printf(\"end\\n\");}
2. 以下程序执行结果是__d=1_____。
main( )
{int a,b,c,d,x; a=b=c=0; d=1;
第6 页/共 29页
if(a) d=d-10; else if(!b)
if(!c) x=6; else x=7;
printf(\"d=%d\\n\
3. 若从键盘输入m,下列程序执行结果是___M____。
main( ) {char c;
printf(\"Enter a character:\"); scanf(\"%c\ if('a'<=c&&c<='z') c=c-32;
printf(\"%c\\n\
4. 若上题中,从键盘输入B,程序执行结果是___B____。
5. 若从键盘输入7,10,1,3,则下列程序执行结果是 a=7,b=10,c=1,d=3 ↙
1 3 7 10。
main( )
{int a,b,c,d,t;
scanf(\"%d,%d,%d,%d\
printf(\"\\n\\n a=%d,b=%d,c=%d,d=%d\\n\ if (a>b)
{t=a;a=b;b=t;} if (a>c)
{t=a;a=c;c=t;} if (a>d)
{t=a;a=d;d=t;} if (b>c)
{t=b;b=c;c=t;} if (b>d)
{t=b;b=d;d=t;} if (c>d)
{t=c;c=d;d=t;}
printf(\"\\n %d %d %d %d\\n\6. 以下程序的执行结果是__ first↙third_。 main( )
{int x=1,y=0; switch(x) { case 1: switch(y)
{ case 0:printf(\"first\\n\");break; case 1:printf(\"second\\n\");break; }
case 2:printf(\"third\\n\"); }}
7. 执行以下程序,输入-10的结果是__x=0_,输入5的结果是_ x=5_,输入10的结果
是_ x=10__,输入30的结果是__ x=5_。 main( ) {int a,b; float x;
scanf(\"%d\ if(a<0) b=-1; else b=a/10;
第7 页/共 29页
switch(b)
{case -1:x=0;break; case 0:x=a;break; case 1:x=10;break; case 2:
case 3:x=-0.5*a+20;break; default:x=-2; }
if(x!=-2) printf(\"x=%g\\n\
else printf(\"error!\\n\");}
三、 循环结构
(一) 选择题
1. 若i,j已定义为int型,则以下程序段中内循环体的执行次数是( for(i=5;i;i--)
for(j=0;j<4;j++) {……} A. 20 B. 24 C. 25 D. 30
2. 若i,j已定义为int型,则以下for循环是( )。 for(i=0,j=0;(j!=123)&&(i<4);i++); A. 无限循环 B. 循环次数不定 C. 执行4次 D. 执行3次
3. 对于for(表达式1; ; 表达式3)可以理解为( )。 A. for(表达式1;0; 表达式3) B. for(表达式1;1; 表达式3) C. for(表达式1; 表达式1; 表达式3) D. for(表达式1; 表达式3; 表达式3)
4. 执行下列程序段后,x值是( A ),i值是( C )。 int i,x;
for(i=1,x=1;i<=20;i++) {if(x>=10) break; if(x%2==1) {
x+=5; continue; } x-=3; } A. 10 B. 7 C. 6 D. 14
第8 页/共 29页
。 )
5. 下列程序的执行结果是( )。 #include {int s=0, k; for(k=7;k>=0;k--) {switch(k) {case 1: case 4: case 7: s++; break; case 2: case 3: case 6: break; case 0: case 5: s+=2; break; } } printf(\"s=%d\\n\",s); } A. s=4 B. s=7 C. s=3 D. s=5 6. 下列程序段执行结果是输出( )。 x=3; do { printf(\"%2d\",x--); } while(!x); A. 0 B. 3 C. 321 D. 210 (二) 填空题 1. C语言while和do…while循环的主要区别是 前者先判后做 ,后者先做后判 2. 以下程序输出结果是 1↙2↙3 。 main( ) {int num=0; while(num<=2) {num++; printf(\"%d\\n\ 3. 下列程序运行输出结果是 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 第9 页/共 29页 。 6 6 6 6 6 6 main( ) {int i,j,k; for(i=1;i<=6;i++) {for(j=1;j<=20-2*i;j++) printf(\" \"); for(k=1;k<=i;k++) printf(\"%4d\ printf(\"\\n\");} } 4. 下列程序执行结果是 237↙273 。 main( ) {int i=2,j,k; for(j=0;j<=9;j++) for(k=0;k<=9;k++) if(i*j*k==42&&i+j+k==12) printf(\"%d%d%d\\n\ 5. 下列程序执行时,若从键盘输入124cmknp 03↙,结果是 d=5 s=1 a=5 。 main( ) {char c; int d,s,a; d=s=a=0; c=getchar( ); while(c!='\\n') { if(c<='9'&&c>='0') d=d+1; if(c==' ') s=s+1; if(c<='z'&&c>='a'||c<='Z'&&c>='A') a=a+1; c=getchar( ); } printf(\"d=%d s=%d a=%d\\n\ 6. 下列程序执行结果是 72 。 main( ) {int i,j,k,s=0; for(i=0;i<3;i++) for(j=0;j<4;j++) for(k=0;k<2;k++) s=s+i+j+k; printf(\"%d\\n\",s); } 7. 下列程序执行结果是 0 1↙2 4↙6 9↙12 16↙17 19↙21 24↙27 31↙35 40↙42 45↙48 52↙56 61↙66 72 (↙代表回车换行) 。 main( ) {int i,j,k,s=0; for(i=0;i<3;i++) for(j=0;j<4;j++) {for(k=0;k<2;k++) {s=s+i+j+k; printf(\"%d \",s);} printf(\"\\n\"); } } 第10 页/共 29页 8. 下列程序执行结果是 * * * * * * 。 main( ) {int i; char j='*'; for(i=1;i<4;i++) switch(i) {case 1: printf(\" %c\\n\ break; case 2: printf(\" %c%c\\n\ break; case 3: printf(\"%c%c%c\\n\ break; } } 9. 执行下列程序,若由键盘输入4,程序执行结果是 4 7 9 10 。 main( ) { int s=0,i; scanf(\"%d\ do { if(i==0) break; else {s=s+i; printf(\"%d\\ }while(--i); } 四、 数组 (一) 选择题 1. 以下关于数组的描述正确的是( )。 A. 数组的大小是固定的,但可以有不同类型的数组元素 B. 数组的大小是可变的,但所有数组元素的类型必须相同 C. 数组的大小是固定的,所有数组元素的类型必须相同 D. 数组的大小是可变的,可以有不同类型的数组元素 2. 下面一维数组a正确定义是( )。 A. int a(10); B. int n=10,a[n]; C. int n; scanf(‘%d”,&n); int a[n]; D. # define SIZE 10 int a[SIZE]; 3. 若定义int a[10];则对a数组元素的正确引用是( )。 A. a[10] B. a[4.3] C. a(5) D. a[6-6] 4. 以下对一维数组进行正确初始化的语句是( )。 第11 页/共 29页 A. int a[3]=(0,1}; B. int a[3]={}; C. int a[]=[0]; D. int a[3]={3*2}; 5. 下列程序: # define N 6 main() {char a[N]; int i=0; for (;i 程序输出结果是( ) A. abcdef B. a↙b↙c↙d C. a↙b↙cd D. a↙b↙cdef 6. 运行下列程序的输出结果是( )。 main() {int a=5; float x=67.846; static char d[10]=\"abc\"; printf(\"%4d,%4.1f,%c\A. □□□□5,□□67.8,□□c B. □□□5,67.8,c C. □□5,□□67.8, □□b D. □□□5,67.8,b 7. 若定义int a[3][2];则printf(“%d”,a[1][0]);语句输出的是第(A. 1 B. 3 C. 4 D. 5 8. 当输出含空格的字符串时,应使用( )函数。 A. printf() B. puts () C. putchar () D. putc() 9. 在执行char str[10]=”ch\\nina”;strlen(str)的结果是( )。 A. 5 B. 6 第12 页/共 29页 )个元素。 C. 7 D. 9 10. 10.当接收用户键入的含空格的字符串时,应使用( )函数。 A. scanf() B. gets() C. getchar() D. getc() (二) 填空题 1. C语言数组元素的下标必须是正整数、0或者 整型表达式 。 2. C语言数组元素的下标下限为 0 。 3. C语言的数组名是一个 地址 常量,不能对其进行赋值运算和自加、减运算。 4. 以下程序输出结果是 4 。 # include { char s1[ ]=\"12345\ printf(\"%d\\n\5. 以下程序执行结果是 123 。 main() {char str[ ]={\"1a2b3c\ int i; for (i=0;str[i]!='\\0';i++) if(str[i]>='0'&&str[i]<='9') printf(\"%c\printf(\"\\n\");} 6. 以下程序执行结果是 11,1,0 。 main( ) { int i,j,i1=0,j1=0,m; static int s[3][3]={{101,201,301},{11,18,30},{60,20,70}}; m=s[0][0]; for (i=0;i<3;i++) for (j=0;j<3;j++) if(s[i][j] main( ) { int a[4][5]={1,2,4,-4,-4,5,-9,3}; int b,i,j,i1,j1,n; n=-9;b=0; for (i=0;i<4;i++) {for (j=0;j<5;j++) if(a[i][j]==n) {i1=i;j1=j;b=1;break;} if (b) break;} printf(\"%d,%d\\n\ 第13 页/共 29页 8. 以下程序执行结果是 s=45 。 int f(int b[][3],int n,int m) { int i,j,s; s=0; for (i=0;i printf(\"s=%d\\n\9. 以下程序输入数据如下: C++↙ BASIC↙ QUICK↙ Ada↙ Pascal↙ 执行结果是 QUICK 。 # include char s[10],st[10]; gets(st); for (i=0;i<4;i++) {gets(s); if(strcmp(st,s)<0) strcpy(st,s); } printf(\"%s\\n\(三) 程序填空题 1. 请在横线上填入合适的表达式,使数组元素按大小顺序排列。 main() {int a[12]={2,14,16,20,9,21,86,75,17,30,11,99},i,j,k; for (k=0;k<12;k++) for (i=k;i<12;i++) if(a[i]>a[k]) {j=a[i]; a[i]=a[k]; a[k]=j;} for (i=0;i<12;i++) printf(\"%4d\ printf(\"\\n\");} 2. 请在横线上填上合适的表达式,使程序完成将字符串“Hello”逆序显示。 void pt (char str[ ]) { int i=0,j=0; while (str[i]!='\\0') {j++;i++;} for (;j>=0;j--) printf(\"%c\str[j]); 第14 页/共 29页 } void main( ) {pt(\"Hello\");} 五、 (一) 选择题 1. 以下函数调用语句中有( )个实参。 func((a1,a2,a3),(a4,a5)); A. 2 B. 5 C. 1 D. 不合法 2. C语言中规定函数的返回值的类型是由( )。 A. return语句中的表达式类型所决定 B. 调用该函数时的主调用函数类型所决定 C. 调用该函数时系统临时决定 D. 在定义该函数时所指定的函数类型所决定 3. 对于C语言的函数,下列叙述中正确的是( )。 A. 函数的定义不能嵌套,但函数的调用可以嵌套 B. 函数的定义可以嵌套,但函数调用不能嵌套 C. 函数的定义和调用都不能嵌套 D. 函数的定义和调用都可以嵌套 4. 有如下函数定义: func(a) {printf(\"%d\ 则该函数的返回类型是( )。 A. 与参数a的类型相同 B. void C. 没有返回值 D. 无法确定 5. 以下程序的输出结果是( )。 int func(int a,int b) { static int m=0,i=2; i+=m+1; m=i+a+b; return(m); } main( ) { int k=4,m=1,p; p=func(k,m); printf(\"%d,\ p=func(k,m); printf(\"%d\\n\ A. 8,17 B. 8,16 第15 页/共 29页 函数 C. 8,20 D. 8,8 6. 以下程序的输出结果是( )。 int func(int a) { int b=0; static c=3; b++;c++; return(a+b+c); } main() { int a=2,i; for(i=0;i<3;i++) A. 777 B. 7□7□7 C. 789 D. 7□8□9 7. 以下程序输出结果是( )。 int i=10; int fun( ) { int k=0; k=k+i; i=i+10; return(k); } main( ) { int j=1; j=fun( ); printf(\"%d,\ j=fun( ); printf(\"%d\A. 0,0 B. 10,20 C. 10,10 D. 20,20 8. 以下程序输出结果是( )。 int i=10; main( ) { int a=3,b=2,c=1; c-=++b; b*=a+c; { int b=5,c=12; c/=b*2; a-=c; printf(\"%d,%d,%d,\ a+=--c; } printf(\"%d,%d,%d\\n\A. 3,2,1,3,2,-2 B. 2,5,1,3,5,12 第16 页/共 29页 printf(\"%d\ C. 2,5,1,2,3,-2 D. 3,2,1,3,5,12 9. 以下程序的输出结果是( )。 int func(int m) {int n; if(m==0||m==1)return(3); n=m-func(m-2); return n; } main() {printf(\"%d\\n\A. 7 B. 2 C. 0 D. 3 (二) 填空题 1. 以下程序的执行结果是 x=3 。 int x=3; void func(int x) {x=8; } main() {func(x); printf(\"x=%d\\n\ 1 2 2 3 3 3 4 4 4 4 5 5 5 5 5 2. 下列程序运行后的输出结果是 6 6 6 6 6 6 。 main() {int i,z,k; for(i=1;i<7;i++) {for(z=1;z<21-2*i;z++) printf(\" \"); for(k=1;k * * * * * * * * * 3. 下列程序运行后输出结果是 * * * * * * * * * * * * * * * * main() { int i,z,k; for(i=1;i<5;i++) { for(z=1;z<21-3*i;z++) printf(\" \"); for(k=1;k<2*i;k++) 第17 页/共 29页 printf(\"%3s\ printf(\"\\n\"); } for(i=3;i>0;i--) { for(z=1;z<21-3*i;z++) printf(\" \"); for(k=1;k<2*i;k++) printf(\"%3s\ printf(\"\\n\");}} 4. 以下程序的执行结果是 x=20 。 main() {void func(int x); int x=20; func(x); printf(\"x=%d\\n\ void func(int x) {x=30; } 5. 以下程序执行结果是 a=10,b=3 。 void main() { void swap(); extern int a,b; a=3; b=10; swap(); printf(\"a=%d,b=%d\} int a,b; void swap() { int temp; temp=a;a=b;b=temp;} 6. 以下程序的执行结果是 s=10 。 void main() { int s,i,sum(int z); for(i=1;i<11;i++) s=sum(i); printf(\"s=%d\\n\ int sum(int z) { int x=0; return(x+=z);} 7. 将上题函数sum中x变量存储类型定义为static型,即static int x=0;程序的执 行结果是 s=55 。 8. 以下程序的执行结果是 1.x=3 。 2.x=6 3.x=1 4.x=3 static int x=5; void main( ) { auto int x=3; void f1( ); void f2( ); printf(\"1.x=%d\\n\ f1( ); 第18 页/共 29页 f2( ); printf(\"4.x=%d\\n\ void f1( ) { x+=1; printf(\"2.x=%d\\n\ void f2( ) { int x=1; printf(\"3.x=%d\\n\(三) 程序填空题 1. 下列程序的功能是统计从键盘上输入的字符中大写字母的个数。输入时用“*”作为输入结束标记。请为程序填空。 # include while(( cl=getchar() )!='*') if(isupper(cl)) count++; printf(\"共有%d大写字母 \count); } 2. 完成下面的程序,使它能够输出10~1000之间的所有素数。(只有能被本身及1除尽 的数,称为素数) # include int isprime(int n); for (i=10;i<=1000; i++) if(isprime(i)) printf(\"%d,\ printf(\"\\n\"); } # include for(i=2;i<=sqrt(n);i++) if(n%i==0)return( 0 ); return( 1 ); } 六、 (一) 选择题 1. 设int *p,i;以下正确合理的语句是( )。 A. *p=10; B. i=p; C. i=*p; D. i=2*p+1; 2. 设char s[10]; int i; 以下引用数组s中元素正确的表达式是( )。 A. s(i+2); B. *(s+i) C. *(&s+i) D. *((s++)+i) 3. 若有定义和语句 第19 页/共 29页 指针 int **pp,*p,a=10,b=20; pp=&p;p=&a;p=&b; printf(“%d,%d\\n”,*p,**pp); 则输出结果是( )。 A. a=10,20 B. 10,10 C. 20,10 D. 20,20 4. 若定义char s[20]=“programming”,*ps=s;则不能代表字符o的表达式是( )。 A. ps+2 B. s[2] C. ps[2] D. ps+=2,*ps 5. 若有定义和语句 char *s1=”12345”,*s2=”1234”; printf(“%d\\n”,strlen(strcpy(s1,s2))); 则输出结果是( )。 A. 4 B. 5 C. 9 D. 10 6. 若定义 int a[ ] ={1,2,3,4,5,6,7,8,9,10},*p=a; 7. 则值为 3的表达式是 ( ) A. p+=2 ,*(p++) B. p+=2 , *++p C. p+=3 ,* p++ D. p+=2 , ++*p 8. 若有以下定义和语句 int w[2][3] , (*pw )[3] ; pw=w; 则对数组元素的非法引用是( ) A. *(w[O]+2) B. *pw[2] C. pw[O][O] D. *(pw[1]+2) 9. 设有定义 int (*ptr)[M];其中ptr是( )。 A. M个指向整型变量的指针 B. 指向M个整型变量的函数指针 C. 一个指向具有 M个整型元素的一维数组的指针 D. 具有M个指针元素的一维指针数组,每个元素都只能指向整型量 10. 设有以下一段程序 char s[ ]=”Hello”; char *p=s; 执行完上面程序段后,*(p+5)的值为( )。 A. ‘o’ 第20 页/共 29页 B. ‘\\0’ C. ‘o’的地址 D. 不确定的值 11. 以下定义与( )中的定义等价。 int *p[4]; A. Int p[4]; B. int p; C. int (*p)[4]; D. int *(p[4]); 12. 以下程序输出结果是( )。 main( ) { int a[20],*p[4],i,k=0; for(i=0;i<20;i++) a[i]=i; for(i=0;i<4;i++) p[i]=&a[i*(i+2)]; for(i=0;i<4;i++) k+=p[i][i]; printf(\"%d\\n\ A. 数组元素引用不合法,输出结果不定 B. 32 C. 10 D. 6 13. 以下程序输出结果是( )。 main( ) { int a[12]={1,2,3,4,5,6,7,8,9,10,11,12},*p[4],i; for(i=0;i<4;i++) p[i]=&a[i*3]; printf(\"%d\\n\A. 输出结果不定 B. 6 C. 8 D. 12 14. 若有以下定义和语句,则( )是对a数组元素的错误引用。 int a[12]={0},*p[3],**pp,i; for(i=0;i<3;i++) p[i]=&a[i*4]; pp=p; A. a[12] B. p[2][3] C. a[10] D. pp[0][1] 15. 以下程序输出结果是( )。 main( ) { char *p[4]={\"abcd\ char **p1; int i; p1=p; 第21 页/共 29页 for(i=0;i<2;i++) printf(\"%s\ printf(\"\\n\"); } A. abcdefghijklmnop B. abcdefgh C. abcd D. Ae 二. 填空题 1. 定义 int a[]={1,2,3,4,5,6},*p=a;表达式++(*++p)的值是 3 。 2. 若有以下定义和语句,则通过指针p引用值为98的数组元素的表达式是 *(p+5) 。 int w[10]={23,54,10,33,47,98,72,80,61,90},*p; p=w; 3. 以下函数用来在w数组中插入x,w数组中的字符已按从小到大顺序存放,n是指存储 单元中存放字符的个数。插入后数组中的字符仍有序。请填空。 void fun(char *w, char x , int *n) { int i, p; p=0; w[*n]=x; while(x>w[p]) p++; for (i=*n;i>p;i--) w[i]=w[i-1]; w[p]=x; ++*n;} 4. fun1函数的调用语句为:fun1(&a,&b,&c);它将三个整数由大到小的顺序调整后依次放入a,b,c三个变量中,a中放最大数。请填空。 void fun2(int *x , int *y) { int t ; t=*x; *x=*y; *y=t;} void fun1(int *pa, int *pb, int *pc) { if (*pc>*pb) fun2(pc,pb); if (*pa<*pc) fun2(pa,pc); if (*pa<*pb) fun2(pa,pb ); } 5. 从键盘上输入若干字符,以符号“@”结束。编一个C程序统计这些符号的个数(不 包括@)存入数组元素a[0]并将这些符号依次存入a[1]、a[2]、a[3]……中。接着利用a[0]中存放的字符个数,输出这些字符。本题要求用指向数组a的指针变量来处理数组元素,完善程序。 main( ) { char a[100]={0},*pa=a,c; scanf(\"%c\ while(c!='@') { a[0]+=1; *(pa+(*pa))=c; scanf(\"%c\ printf(\"\\nnummber of string:%d\\n string:\\n\ for(pa=a+1;pa<=a+*a;pa++) printf(\"%c\ 第22 页/共 29页 printf(\"\\n\"); } 6. 从键盘输入整型数组a[5][5]各元素的值,再按5行5列的格式输出这个数组(参见 下列程序)。然后将数组a的第i行和第j行的对应元素交换;再将数组a的第i列和第j列的对应元素交换,i和j由键盘输入(1≤i≤5、0≤j≤5)。 要求用指向数组a的指针变量处理数组元素。完善程序。 # define N 5 main( ) { int a[N][N],*pa=&a[0][0],m,n,i,j,k; for(m=0;m 7. 给出以下程序的执行结果 1,4,8↙ 3,20,56 main( ) {char *pc=NULL; int *pi=NULL; double *pd=NULL; printf(\"\\n%d,%d,%d\\n%d,%d,%d\\n\ 第23 页/共 29页 (pc+3),(int)(pi+5),(int)(pd+7)); } 解:这是因为一个char数占用一个字节,一个int数占用两个字节,一个double数占用八个字节。(int)(p+1)表示p+1距离p多少个字节,因此,(int)(p+5)的结果为5*2=10,其它结果类推。 七、 结构 (一) 选择题 1. 设有100个学生的考试成绩数据表如下形式: 学号 no 姓名name 成绩score 整型 字符数组型 实型 在下面结构体数组的定义中,不正确的是( )。 A. struct student { int no; char name[10]; float score; } sturct student stud[100]; B. struct stud[100] { int no; char name[10]; float score; } C. struct student { int no; char name; float score; } stud[100]; D. struct { int no; char name; float score; } stud [100]; 2. 设有一结构体类型变量定义如下: struct date { int year; int month; int day;} struct worklist { char name[20]; char sex; struct date birthday; } person; 若要对结构体变量person的出生年份进行赋值时,下面正确的赋值语句是( A. year=1976 第24 页/共 29页 。 ) B. birthday.year=1976 C. person.birthday.year=1976 D. prson.year=1976 (二) 填空题 1. 当说明一个结构体变量时,系统分配给它的内存是该结构体中所有成员所需存储空 间的总和。 2. C语言结构类型变量在程序执行期间 所有 成员驻留在内存中。 3. 若有以下说明和语句: struct worker { int no; char *name; } work, *p=&work; 则对成员no的三种正确引用是 work.no 、 p->no 、 (*p).no 。 4. 以下程序执行结果是 1,minicomputer 。 struct tree { int x; char *s; } t; func(struct tree t) { t.x=10; t.s=\"computer\"; } main( ) { t.x=1; t.s=\"minicomputer\"; func(t); printf(\"%d,%s\\n\ 5. 执行下列程序输出结果是 name:zhang=260.000000 name:wang=240.000000 。 main( ) { struct student { char name[10]; float k1; float k2; float k3; } a[2]={ {\"zhang\ printf(\"\\n name: %s=%f\ printf(\"\\n name: %s=%f\6. 以下程序用于在结构数组中查找分数最高和最低的同学姓名和成绩。请在程序空白 处填入一条语句或一个表达式。 main( ) { int max, min, i; static struct { char name[8]; int score; } stud[5]={\"李萍\王兵\白洋\许虎\陶金\ max=min=0; for(i=1;i<5;i++) 第25 页/共 29页 if(stud[i].score>stud[max].score) max=i; else if(stud[i].score 八、 文件 (一) 选择题 1. 若存在一个”file.txt”文件,执行函数fopen(“file.txt”,”r+”)调用的功能 是( )。 A. 打开file.txt文件,清除原有内容。 B. 打开file.txt文件,只能写入新的内容。 C. 打开file.txt文件,只能读取原有内容。 D. 打开file.txt文件,可以读取和写入新的内容。 2. fopen( )函数的mode取值”w+”和”a+”时都可以写入数据,它们之间的差别是 ( )。 A. ”w+“时可在中间插入数据,而”a+”只能在末尾追加数据 B. 文件存在时,”w+”清除原文件数据,”a+”保留原文件数据 C. ”w+”和”a+”都是只能在末尾追加数据 D. ”w+”不能在中间插入数据,”a+”只能在末尾追加数据。 3. C语言中,文件由( )组成。 A. 记录 B. 数据块 C. 数据行 D. 字符或字节序列 4. 若用fopen( )函数打开一个新的二进制文件,该文件可读可写,则文件打开模式字符 串是( ) A. ”ab+” B. ”wb+” C. ”rb+” D. ”ab” 5. 使用fseek( )函数可以实现( )操作。 A. 文件的随机读写 B. 文件的顺序读写 C. 改变文件指针的当前位置 D. 以上都不对 6. 函数rewind( )的作用是( )。 A. 使文件指针重新指向文件开头。 B. 使文件指针重新指向文件末尾。 C. 将文件指针指向文件中要求的特定位置。 D. 使文件指针自动指向下一个字符。 7. fread(buf,64,3,fp)的功能是( )。 A. 从fp文件流中读出整数64,并存放在buf中。 B. 从fp文件流中读出整数64和3,并存放在buf中。 C. 从fp文件流中读出64个字节的字符,并存放在buf中。 第26 页/共 29页 D. 从fp文件流中读出3个64个字节的字符,并存放在buf中。 8. 检测fp文件流的文件指针在文件头的条件是( )。 A. fp= =0 B. ftell(fp)= =0 C. fseek(fp,0,SEEL_SET) D. feof(fp) 9. 以下程序的功能是( )。 main( ) {FILE *fp; char str[ ]=\"GOOD!\"; fp=fopen(\"PRN\ fputs(str,fp); fclose(fp);} A. 在屏幕上显示”GOOD!” B. 把”GOOD!”存入PRN文件中 C. 在打印机上打印出”GOOD!” D. 以上都不对 10. 命令行输入file abc xyz命令的功能是( ) /*filename:file.c*/ main (int argc,char *argv[ ]) {FILE *fp1,*fp2; if (argc<3) { printf(\"Usage:file filenamel filename2\\n\"); exit(0); } fp1=fopen(argv[1],\"r\"); fp2=fopen(argv[2],\"w\"); while (!feof(fp1)) fputc(fgetc(fp1),fp2); fclose(fp1); fclose(fp2);} A. 将文件xyz复制到abc文件 B. 将文件abc复制到xyz文件 C. 读取abc文件的内容并在屏幕上显示出来 D. 读取xyz文件的内容并在屏幕上显示出来 11. 以下程序的功能是( ) #include fp=fopen(“abc”,”r+”); while (!feof(fp)) if(fgetc(fp)= =‘*’) {fseek(fp,-1L,SEEK_CUR); fputc(‘$’,fp); fseek(fp,ftell(fp),SEEK_SET); } fclose(fp); } A. 将abc文件中所有’*’替换成’$’ 第27 页/共 29页 B. 查找abc文件中所有’*’ C. 查找abc文件中所有’$’ D. 将abc文件中所有字符替换成’$’ 12. 执行下列程序后,abc文件内容是( ) main( ) {FILE *fp; char *str1=“first”; char *str2=“second”; if ((fp=fopen(“abc”,”w+”))= =NULL) {printf(“can’t open abc file\\n”); exit(1); } fwrite(str2,6,1,fp); fseek(fp,0L,SEEK_SET); fwrite(str1,5,1,fp); fclose(fp); } A. first B. second C. firstd D. secondfirst 13. 若上题将fseek语句去掉,程序执行结果是(D ) 14. 修改12题打开文件函数调用中“w+”为”a+”,程序执行结果是( D )。 (二) 填空题 1. C语言中根据数据的组织形式,把文件分为 文本文件 和 二进制文件 两种。 2. 使用fopen(“abc”,”w+”)打开文件后,写入新数据保留原数据的操作均在文件 末尾进行,这句话是 正确的 。 3. C语言中文件位置指针设置函数是 fseek( ) ;文件指针位置检测函数是 ftell( ) 。 4. 设a数组定义为:int a[10];则fwrite(a,2,10,fp)的功能是将数组a中10个整 数写入fp指定的磁盘文件中 。 5. 以下程序执行结果是 1 2 3 4 5 6 7 8 9 10 。 #include {FILE *fp;int i,n; if ((fp=fopen(“abc”,”w+”))= =NULL) {printf(“can’t open abc file\\n”); exit(0); } for (i=1;i<11;i++) fprintf(fp,”%3d”,i); for (i=0;i<10;i++) {fseek(fp,i*3l,SEEK_SET); fscanf(fp,”%d”,&n); printf(“%3d”,n); } fclose(fp); } 6. 请将下列程序填写完整。本程序完成把一系列命名文件与标准输出连接起来,并在 终端上显示出文件内容。 main (int argc,char *argv[ ]) { FILE *fp ; 第28 页/共 29页 if (argc==1) filecopy(stdin); else while (--argc>0) if ((fp= fopen(*++argv,”r”) )==NULL) {printf(“can’t open %s\\n”,*argv); break; } else {filecopy(fp); fclose(fp) ;}} filecopy(FILE *fp) {int c; while ((c= fgetc(fp) )!=EOF) putc(c,stdout);} 九、 编程题 1. 输入10个字符,统计其中英文字母、数字字符和其他字符的个数。(分支结构) 2. 输入一个正整数n,再输入n个正整数,判断它们是否为素数。素数就是只能被1 个自身整除的正整数。(循环) 3. 计算1!+2!+3!+ ……+100!。要求定义和调用函数fact(n)计算n的阶乘。(循环、 函数) 4. 输入一批正整数(以0或负数为结束标志),求其中的奇数和。要求定义和调用函数 even(n)判断数的奇偶性,当n为偶数时返回1,否则返回0。(函数) 5. 输入一个正整数n(1 6. 将一个3×2的矩阵存入一个3×2的二维数组中,找出最大值及它的行下标和列下 标,并输出该矩阵。(二维数组) 7. 输入5个字符串,将它们从大到小排序后输出。(指针数组、指向指针的指针) 8. 输入一个字符串和一个字符,如果该字符在字符串中,就从该字符首次出现的位置 开始输出字符串中的字符。例如,输入字符r和字符串program后,输出rogram。要求定义函数match(s,ch),在字符串s中查找字符ch,如果找到返回第一次找到的该字符在字符串中的位置(地址);否则,返回空指针NULL。(指针作函数返回值) 第29 页/共 29页 因篇幅问题不能全部显示,请点此查看更多更全内容