一、单项选择题(每小题2分,共20分)
第一章
D 1.下列说法中错误的是( )。
A、程序的执行总是从主函数开始
B、主函数可以调用任何非主函数的其它函数 C、任何非主函数可以调用其它任何非主函数 D、程序可以从任何非主函数开始执行
C 2.若a=4,b=7,则输出4*7=28的语句是( )。 A、printf(“a*b=%d\\n”a+b); B、 printf(“a*b=%d\\n”,a*b);
C、printf(“%d*%d=%d\\n”,a,b,a*b); D、 printf(“%d*%d=%d\\n”,a+b); 第三章
C 1. C语言中int型数据占2个字节,则long型数据占(C )个字节。
A、1 B、2 C、4 D、8 D 2.若C中int型数据占2个字节,则double型数据占(D )个字节。
A、1 B、2 C、4 D、8 B 3.若a为整型变数,则以下语句(B )。 a=-2L;
printf(“%d\\n”,a);
A、赋值不合法 B、输出-2 C、输出不确定值 D、输出2
D 4. 若int型数据占2个字节,则下列语句的输出为(D )。
int k=-1;
printf(“%d,%u\\n”,k,k); A、-1,-1 B、-1,32767 C、-1,32768 D、-1,65535 B 5. 下列程序的输出是(B )。
#include
{printf(“%d\\n”,null);}
A、0 B、变量无定义 C、-1 D、1 C 6.若x为float型变数,则以下语句: x=223.82748;
printf(\ 运行结果为(C )。
1
A、223.8 B、223.82 C、223.83 D、223.827 D 7. 设有语句int a=3;则执行语句a+=a-=a*a后,变量a 的值是(D )。
A、3 B、0 C、9 D、-12 第四章
A 1. 执行语句:a=5,b=8;printf(“%d\\n”, c=a/b); 后输出的值为(A )。
A、0 B、0.6 C、0.625 D、0.625000 B 2. 下列语句(B )。
int k=8567;
printf(“|d|\\n”,k);
A、输出格式描述符不合法 B、输出为|008567| C、输出为|8567 | D、输出为|-08567| C 3. 下列语句(C )。
int k=8567;
printf(“|%-06d|\\n”,k);
A、输出格式描述符不合法 B、输出为|008567| C、输出为|8567 | D、输出为|-08567|
C 4. 若ch为字符型,k为整,则执行下列语句后的输出为(C )。 ch=’a’; k=12;
printf(“%x,%o,”,ch,ch,k); printf(“k=%%d\\n”,k)
A、因变量类型与格式描述符的类型不匹配,输出无定值; B、输出项与格式描述符个数不符,输出为0或不定值; C、61,141,k=%d; D、61,141,k= D 5. 若k,g为int型变数,则下列语句的输出为(D )。
k=017; g=111;
printf(“%d,%x\\n”,++k,g++); A、15,6f B、16,70 C、15,71 D、16,6f B 6. 有以下程序I和II,判断它们的输出(B )。 I #include
{int a=4,b=7;
printf(“%d\\n”,(a=a+1,b+a,b+1));
2
}
II #include
{int a=1,b=2;
printf(“%d\\n”,a=a+1,a+b,b+1)); }
A、I输出5,II输出2 B、I输出8,II输出2 C、I输出5,II输出3 D、I输出8,II输出3 A 7. 下列程序的输出为(A )。 #include
{int m=7,n=4;
float a=38.4,b=6.4,x; x=m/2+n*a/b+1/2; printf(“%f\\n”,x); }
A、27.000000 B、27.500000 C、28.000000 D、28.500000 第五章
D 1. 在C语言中,能代表逻辑值“真”的是(D )。 A、true B、大于0的数 C、非0整数 D、非0的数 C 2. 若给定表达式(M)?(a++):(a--),则其中表达式M(C )。
A、和(M= =0)等价 B、和(M= =1)等价 C、和(M!=0)等价 D、和(M!=1)等价 D 3. 在C语言的if语句中,用作判断的表达式为(D )。
A、关系表达式 B、逻辑表达式 C、算术表达式 D、任意表达式 D 4. 以下程序的输出是(D )。
#include
{int i,j,k,a=3,b=2;
i=(--a= =b++)?-- a:++b; j=a++;k=b;
printf(“I=%d,j=%d,k=%d\\n”,i,j,k); }
A、i=2,j=1,k=3 B、i=1,j=1,k=2 C、i=4,j=2,k=4 D、i=1,j=1,k=3
3
B 5. 执行下面的程序: main() {int x;
scanf(\
if (x++>5) printf(\ else printf(\ }
若输入5,则输出为(B )。 A、6 B、-6 C、5 D、-5 6. 有程序段: int a,b; a=9; b=10;
则表达式:(++a= =b--)?--a:++b的值为(B )。 A、8 B、9 C、10 D、11 ●7. 假设所有变量都是整型,则表达式: a=2,b=5,a>b?a++:b++,a+b 的值为(B )。
A、7 B、8 C、9 D、2 8. 下面程序的输出为(A )。
#include
a=10;b=50;c=30; if(a>b) a=b, b=c;c=a;
printf(“a=%d,b=%d,c=%d\\n”,a,b,c); }
A、a=10,b=50,c=10 B、a=10,b=30,c=10 C、a=50,b=30,c=10 D、a=50,b=30,c=50 C 9. 下面程序运行后输出的结果是( )。
main() { int n;
for(n=0;n<3;n++) switch(n)
{ case 1: printf(“%d”, n); case 2: printf(“%d”, n); default: printf(“%d”, n) }
4
}
A、012 B、120 C、011122 D、012020 10. 下面程序的输出是(B )。
#include
{ int x=1,y=0,a=0,b=0; switch(x) { case 1:
switch(y)
{ case 0: a++;break; case 1: b++;break; }
case 2: a++;b++;break; case 3: a++;b++; }
printf(“a=%d,b=%d\\n”,a,b); }
A、a=1,b=0 B、a=2,b=1 C、a=1,b=1 D、a=2,b=2 第六章
1. 下面循环的执行次数是(4 )次。 n=0;
while(++n<5)
{ printf(\
2. C语言中,用于结构化程序设计的三种基本结构是(A )。
A、顺序结构、选择结构、循环结构; B、if、switch、break; C、for、while、do- while; D、if、goto、continue:
3. 在C语言中,为了结束while语句构成的循环,while后一对圆括号中表达式的值应该为(A )。 A、0 B、1 C、true D、非0
4. 在C语言中,为了结束do-while语句构成的循环,while后一对圆括号中表达式的值应该为(A )。 A、0 B、1 C、true D、非0 5. 若k为整型,则while循环执行(C )。 k=10;
5
while(k=0) k=k-1;
A、10次 B、无限次 C、0次 D、2次 6. 若k为整型,则while循环执行(B )。
k=2;
while(k= =0) printf(“%d”,k),k--; printf(“\\n”);
A、无限次 B、0次 C、1次 D、2次 7. 下面程序执行后,k的值是(C )。 #include
int k=2; while(k==0)
printf(\ printf(\ printf(\}
A、0 B、1 C、2 D、-2 8. 下面程序的输出为(B )。
#include
{int i,j,x=0; for(i=0;i<2;i++) {x++;
for(j=0;j<=3;j++) {if(j%2) continue; x++; } x++; }
printf(\ }
A、x=4 B、x=8 C、x=6 D、x=12 第七章
1. 以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值,则在下划线处应填入的是(D )。 #define N 10
void arrin(int x[N])
6
{ int k=0; while(k scanf (“%d”, ); } A、x+k B、&x[k+1] C、x+(k++) D、&x[k++] 2. 以下能正确定义数组并正确赋值的语句是(D )。 A、int N=5,a[N][N]; B、int b[1][2]={{1},{3}}; C、int c[2][]={{1,2},{3,4}};6 D、int d[3][2]={{1,2},{34}}; 3. 不正确的字符串赋值或赋初值方式是(C )。 A、 char *str; str=”string”; B、 char str[7]={‘s’,’t’,’r’,’i’,’n’,’g’}; C、 char str[10]; str[10]=”string”; D、 char str1[]=”string”,str2[]=”12345678”; strcpy(str2,str1); 4. 若有以下定义和语句,则输出结果是(C )。 char s[12]=”a book!”; printf(“%d”, strlen(s)); A、9 B、8 C、7 D、6 5. 若有以下定义和语句,则输出结果是(B )。 char s[]=”a book!”; printf(“%d”, sizeof(s)); A、9 B、8 C、7 D、6 第八章 C 1. C语言可执行程序的开始执行点是( )。 A、第一条可执行语句 B、第一个函数 C、main函数 D、包含文件中的第一个函数 C2. C语言中规定,若对函数类型未加显示说明,则函数的隐含类型为( )。 A、void B、double C、int D、char C 3. C语言程序中,当调用函数时( )。(不确定) A、实参和形参各占一个独立的存储单元 B、实参和形参可以共享存储单元 C、可以由用户指定是否共享存储单元 D、由计算机系统自动确定是否共享存储单元 C 4. 下面程序的输出结果为( )。 #include 7 void main() {int f(); int i=2,k; k=f(i,++i); printf(\} int f(int a,int b) {int c; c=a; if(a>b) c=1; else if(a==b) c=0; else c=-1; return(c); } A、2 B、1 C、-1 D、0 A 5. 下面程序的输出结果是( )。 #include {int func(int a,int b); int k=4,m=1,p; p=func(k,m); printf(\ p=func(k,m); printf(\ } int func(int a,int b) {static int m,n=2; n+=m+1; m=n+a+b; return(m); } A、8,17 B、8,16 C、8,20 D、8,8 第九章 C 1.以下叙述正确的是( )。 A、在程序的一行上可以出现多个预处理命令行 B、预处理行是C的合法语句 C、被包含的檔不一定以 .h 作为后缀 8 D、在以下定义中C R是称为“宏名”的标识符 #define fc 4566 CR B 2. 在“檔包含”预处理语句的使用形式中,当#include后面的文件名用“”(双引号)括起时,寻找被包含檔的方式是( )。 A、直接按系统设定的标准方式搜索目录 B、先在源程序所在目录搜索,再按系统设定的标准方式搜索 C、仅仅搜索源程序所在目录 D、仅仅搜索当前目录 C 3.以下叙述中不正确的是( )。 A、预处理命令行都必需以#开始 B、在程序中凡是以#号开始的语句行都是预处理命令行 C、程序在执行过程中对预处理命令行进行处理 D、在下是正确的宏定义 #define IBM_PC C 4. 以下程序的运行结果是( )。 #define PT 3.5 #define S(x) PT*x*x main() { int a=1,b=2; printf(“%4.1f\\n”,S(a+b)); 3.5*a+b*a+b } A、14.0 B、31.5 C、7.5 D、10.5 C 5.下面程序运行后输出的结果 )。 #include\ #define MIN(x,y) (x)<(y)?(x):(y) main() { int a,b,c; a=10,b=20; c=8*MIN(a,b); printf(\} A、10 B、20 C、80 D、120 A 6.下面程序运行后输出的结果是()。 #include\ 9 #define MIN(x,y) (x)<(y)?(x):(y) main() { int a,b,c; a=10,b=20; c=8*MIN(a,b)-5; printf(\} A、75 B、15 C、20 D、155 C 7.下面程序运行后输出的结果是( )。 #include\ #define MIN(x,y) (x)<(y)?(x):(y) main() { int a,b,c; a=10,b=20; c=MIN(a+b,a-b)*8; printf(\} A、10 B、20 C、-80 D、-10 第十章 1.若有以下定义和语句,且0≤i≤10,则对数组元素的错误引用是(C )。 A、*(a+i) B、a[p-a] C、p+i D、p[i] 2. 若有以下定义和语句,且0≤i≤10,则对数组元素的正确引用是(D )。 A、&(a+1) B、a++ C、&p D、&p[i] 3.以下程序的输出结果是(A )。 char *alpha[6]= {“ABCD”,”EFGH”,”IJKL”,”MNOP”,”QRST”,”UVWXYZ”}; char **p; main() {int k; p=alpha; for(k=0;k<4;k++) printf(“%c”,*(p[k])); printf(“\\n”); } A、AEIM B、BFJN C、ABCD D、DHLP 10 4.下面程序的输出结果是(D )。 #include {int a[]={1,2,3,4,5,6},*p; p=a; *(p+3)+=2; printf(“%d,%d\\n”, *p, *(p+3)); } A、0,5 B、1,5 C、0,6 D、1,6 D 5.若由以下说明和语句,那么对C数组元素的正确引用是( )。 int c[4][5], (*cp)[5]; cp = c; A、cp+1 B、(cp+3) C、*(cp+1)+3 D、*(*cp+2) 第十一章 1. 共享体变数中起作用的成员是(C )。 A、 第一次存放的成员; B、 中间存放的成员; C、 最后一次存放的成员; D、 所有的成员。 2. 若有以下程序段,则值为101的表达式是(C )。 struct wc {int a; int *b; }*p; int x0[]={11,12},x1[]={31,32}; struct wc x[2]={100,x0,300,x1}; p=x; A、*p->b B、p->a C、++p->a D、(p++)->a D 3.如果在C程序中有main( float argc, char *argv[]),那么类型定义错误的参数是( )。 A、argv B、argv[] C、argc,argv[] D、argc B 4.若程序中由下面的说明和定义: struct stt { int x; char b; } struct stt a1, a2; 则会发生的情况是( )。 11 A、程序将顺利编译、连接、执行 B、编译出错 C、能顺利通过编译、连接,但不能执行 D、能顺利通过编译,但连接出错 C 5.下面程序的输出是( )。 #include { unsigned int a=32,b=66; printf(“%c\\n”,a|b); } A、66 B、98 C、b D、B 第十二章 1.下面程序的输出是(D )。 #include {unsigned int a=3,b=10; printf(\} A、1 B、5 C、12 D、13 3. 若int型是2个字节,下面程序运行后,输入331,则输出结果为(C )。 #include unsigned a,b,c,d; printf(\ scanf(\ b=a>>4; c=~(~0<<4); d=b&c; printf(\} A、331,217 B、13,15 C、15,13 D、217,331 4.若int型是2个字节,下面程序段运行后,若输入:a=157653,n=3,则输出的值为(A )。 main() { unsigned a,b,c,d; 12 int n; scanf(\b=a<<(16-n); c=a>>n; d=c|b; printf(\} A、75765 B、35765 C、13765 D、30000 D 5. 表达式11&10的结果用二进制表示为( )。 A、11 B、3 C、1 D、10 B 6.表达式9|5 的结果十进制表示为( )。 A、12 B、13 C、14 D、15 第十三章 1. C语言中,文件由(D )。 A、记录组成 B、由数据行组成 C、由数据块组成 D、由字符(字节)序列组成 2. C语言中的文件类型只有(B )。 A、索引文件和文本文件 B、ASCII文件和二进制文件两种 C、文本文件一种 D、二进制文件一种 3. C语言中档的存取方式(C )。 A、只能顺序存取 B、只能随机存取 C、可以顺序存取,也可以随机存取 D、只能从檔开头进行存取 二、程序填空题 第三章 1.要使下面程序的输出形式为:12+10=22,-24+10=-14,请填空。 #include int a,b,c,d; unsigned u; a=12;b=-24;u=10; c=a+u;d=b+u; printf(\【1】+【2】=%d,【3】+【4】=%d\\n\【5】); } 13 选择答案:【1】%d 【2】%d 【3】%d 【4】%d 【5】b,u,d 第四章 2. 下面程序不借助任务中间变量把a,b的值进行交换。请填空。 #include printf(“Input a,b:”); scanf(“%d,%d”, 【1】 &a,&b ); a+=【2】 b ;b=a- 【3】 b ;a- = 【4】 b ; printf(“a=%d,b=%d\\n”, 【5】 a,b ); } 第五章 3. 下面程序输入一个学生的生日(年:y0,月:m0,日:d0),并输入当前日期(年:y1,月:m1,日:d1)。求出该学生的实足年龄。请填空。 #include {int age,y0,m0,d0,y1,m1,d1; printf(\输入生日日期(年、月、日)\ scanf(\【1】 &y0,&m0,&d0 ); printf(\输入当前日期(年、月、日)\ scanf(\【2】 &y1,&m1,&d1 ); age=y1-y0; if(m0 【3】 > m1) age--; if ((m0 【4】 = = m1)&&( 【5】 d0 > d1 )) age--; printf(\ } 4. 下面程序输出乘法九九表。 #include for(i=1;i<【1】 10 ;i++) printf(\ printf(\ for(i=1;i<【2】 10 ;i++) for(j=1;j<10;j++) 14 printf((j= =【3】 9 )?\【4】\\n \【5】i*j ); } 第六章 5. 下面程序从读入的整数据中,统计大于0的整数个数i和小于0的整数个数j,当输入0时,程序运行结束。请填空。 #include {【1】 int n,i,j; printf(“Input int numbers,with 0 to end:”); i=j=0; scanf (“%d”,&n); while (【2】 n!=0 ) { if (n>0) i=【3】 i+1 ; if (n<0) j=【4】 j+1 ; 【5】 scanf (“%d”, &n) ; } printf(“i=%d,j=%d\\n”,i,j ); } 第七章 1. 设数组a和数组b中分别有an和bn个有序数,程序把数组a和数组b按由小到大的顺序合并到数组c中。请填空。 #include {int a[10]={1,2,5,8,9,10},an=5; int b[10]={1,3,4,8,12,18},bn=5; int i,j,k,c[20],max=9999; /*在a,b数组的后面都放上一个max(大于数组中所有的数),作为结束标志*/ a[an+1]=b[bn+1]=【1】 max ; i=j=k=0; /*若a[i],b[j]中有一个不等于max,则尚有数未合并到c数组中,循环继续进行*/ while((a[i]!=max)||(b[j]!=max)) if(a[i] /*如果a[i]