一、单项选择题(每小题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
main()
{printf(“%d\n”,null);}
A、0
B、变量无定义
C、-1
D、1
C 6.若x为float型变数,则以下语句:
x=223.82748;
printf("%6.2f\n",x);
运行结果为(C )。
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.
B 2. 下列语句(B )。
int k=8567;
printf(“|%06d|\n”,k);
A、输出格式描述符不合法
B、输出为||
C、输出为|8567 |
D、输出为|-08567|
C 3. 下列语句(C )。
int k=8567;
printf(“|%-06d|\n”,k);
A、输出格式描述符不合法
B、输出为||
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=%12
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
main()
{int a=4,b=7;
printf(“%d\n”,(a=a+1,b+a,b+1));
}
II #include
main()
{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
main()
{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.
B、27.
C、28.
D、28.
第五章
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
main()
{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
B 5. 执行下面的程序:
main()
{int x;
scanf("%d", &x);
if (x++>5) printf("%d\n", x);
else printf("%d\n",-x);
}
若输入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
void main()
{int a,b,c;
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)
}
}
A、012
B、120
C、
D、
10. 下面程序的输出是(B )。
#include
void main()
{ 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("%3d\n",n); }
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;
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
main()
{
int k=2;
while(k==0)
printf("%d",k),k--;
printf("k=%d\n",k);
printf("\n");
}
A、0
B、1
C、2
D、-2
8. 下面程序的输出为(B )。
#include
main()
{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("x=%d\n",x);
}
A、x=4
B、x=8
C、x=6
D、x=12
第七章
1. 以下函数的功能是:通过键盘输入数据,为
数组中的所有元素赋值,则在下划线处应填入的是(D )。
#define N 10
void arrin(int x[N])
{ 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[]=””; 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 void main() {int f(); int i=2,k; k=f(i,++i); printf("%d\n",k); } 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 main() {int func(int a,int b); int k=4,m=1,p; p=func(k,m); printf("%d,",p); p=func(k,m); printf("%d\n",p); } 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 作为后缀 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"stdio.h" #define MIN(x,y) (x)<(y)?(x):(y) main() { int a,b,c; a=10,b=20; c=8*MIN(a,b); printf("%d\n",c); } A、10 B、20 C、80 D、120 A 6.下面程序运行后输出的结果是()。 #include"stdio.h" #define MIN(x,y) (x)<(y)?(x):(y) main() { int a,b,c; a=10,b=20; c=8*MIN(a,b)-5; printf("%d\n",c); } A、75 B、15 C、20 D、155 C 7.下面程序运行后输出的结果是()。 #include"stdio.h" #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("%d\n",c); } 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 4.下面程序的输出结果是(D )。 #include main() {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; 则会发生的情况是()。 A、程序将顺利编译、连接、执行 B、编译出错 C、能顺利通过编译、连接,但不能执行 D、能顺利通过编译, 但连接出错 C 5.下面程序的输出是()。 #include void main() { unsigned int a=32,b=66; printf(“%c\n”,a|b); } A、66 B、98 C、b D、B 第十二章 1.下面程序的输出是(D )。 #include main() {unsigned int a=3,b=10; printf("%d\n",a<<2|b>>1); } A、1 B、5 C、12 D、13 3. 若int型是2个字节,下面程序运行后,输入331,则输出结 果为(C )。 #include void main() { unsigned a,b,c,d; printf("enter %%o a :"); scanf("%o",&a); b=a>>4; c=~(~0<<4); d=b&c; printf("%o, %d\n", d, d); } A、331,217 B、13,15 C、15,13 D、217,331 4.若int型是2个字节,下面程序段运行后,若输入:a=,n=3,则 输出的值为(A )。 main() { unsigned a,b,c,d; int n; scanf("a=%o,n=%d",&a,&n); b=a<<(16-n); c=a>>n; d=c|b; printf("%o\n",d); } 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 void main() { 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",a,u,c, 【5】); } 选择答案:【1】%d 【2】%d 【3】%d 【4】%d 【5】b,u,d 第四章 2. 下面程序不借助任务中间变量把a,b的值进 行交换。请填空。 #include main() {int a,b; 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 main() {int age,y0,m0,d0,y1,m1,d1; printf("输入生日日期(年、月、日)"); scanf("%d,%d,%d", 【1】 &y0,&m0,&d0 ); printf("输入当前日期(年、月、日)"); scanf("%d,%d,%d", 【2】 &y1,&m1,&d1 ); age=y1-y0; if(m0 【3】 > m1) age--; if ((m0 【4】 = = m1)&&( 【5】 d0 > d1 )) age--; printf("age=%3d\n",age); } 4. 下面程序输出乘法九九表。 #include void main() {int i,j; for(i=1;i<【1】 10 ;i++) printf("%4d",i); printf("\n------------------------------------\n"); for(i=1;i<【2】 10 ;i++) for(j=1;j<10;j++) printf((j= =【3】 9 )?"%4d【4】\n ":"%4d",【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 main() {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]