1. C语言的主要特点有哪些?(多选)
A.简洁、紧凑,使用方便、灵活,易于学习和应用。
B.C语言是面向结构化程序设计的语言。
C.C语言允许直接对位、字节和地址进行操作。
D.数据类型丰富。
E.C语言生成的目标代码质量高。
答案: ABCDE
2. C语言程序由什么组成?(单选)
A. 子程序 B. 主程序和子程序 C. 函数 D. 过程
答案: C
3. 源程序要正确地运行,必须要有什么函数?(单选)
A. printf函数 B. 自定义的函数
C. main函数 D. 不需要函数
答案: C
4. 指出下面合法的标识符:(多选)
A. 3ab B. int C. ABC D. a_3
E. sum.a F. #abc G. _stu2 H. abc f
答案:CDG
5. 指出下面哪些是保留字:(多选)
A. char B. abc C. printf D. Int
E. float F. define G. include H. PI
答案:AEFG
6. 指出下面哪些是合法的用户定义的标识符?(多选)
A. P-S B. putchar C. double D. _908
E. *par F. sheep! G. wind H. x y
答案:BDG
7. C语言的基本类型哪些:(多选)
A. 整型 B. 枚举型 C. 数组型 D. 指针型
E. 字符型 F. 构造型 G. 实形 H. 空类型
答案: ABEG
8. 这段程序中的常量有:(多选)
#define PI 3.14
void main()
{
int sum;
sum = 10 + 15;
printf("sum=%d\n",sum);
printf("result is 25\n");
}
这段程序中常量有:
A. 10 B. sum C. 15
D. 25 E. main F. PI
答案:ACF
9. C语言中整形常量按进制划分,有以下几种:(多选)
A. 十六进制常量 B. 十进制常量
C. 八进制常量 D. 二进制常量
答案:ABC
10. 75的十六进制写法为___,八进制写法为___。
0x75的八进制写法为___,十进制写法为___。
075的十进制写法为___,十六进制写法为___。
答案: 0x4b 0113
0165 117
61 0x3d
11. 如果要把常量327存入变量a中,a可以定义成哪些类型?(多选)
A. int B. char
C. long D. float
答案: ACD
12. 下面哪些写法是对的,而且是常量?(多选)
A. 125 B. -.456 C. 1.25e20 D. 'AB'
E. E6 F. 0238 G. 0xabcdef H. "\n\\\'\123"
答案: ABCGH
13. 下面哪个表达式的值为4.(单选)
A. 11/3 B. 11.0/3
C. (float)11/3 D. (int)(11.0/3+0.5)
答案: D
14. 已知整型变量a=6,b=7,c=1,则下面表达式的值为多少?
a+3 ___
(b-a*3)/5 ___
c*(a+b)+b*(c+a) ___
3.2*(a+b+c) ___
答案: 9
-2
62
44.8
15. 已知整型变量a=6,字符型变量ch='A',浮点数变量f=2.1,则下面表达式的值为多少?
(提示:'A'的ASCII码为65)
a+4.5 ___
ch+a+f ___
(a+30)/5 ___
(a+30)/5.0 ___
答案: 10.5
73.1
7
7.2
16. 指出下面错误的表达式:(多选)
A. a+b=5 B. 56=a11 C. i=i++
D. 5.6+6.2%3.1 E. 12 F. a=5,b=6,c=7
答案: BD
17. 若变量f已说明为float类型,i为int类型,则下面哪些表达式(或语句)能够实现将f中的数值保留小数点后两位,第三位进行四舍五入的运算?(多选)
A. f=(f*100+0.5)/100.0 B. i=f*100+0.5,f=i/100.0;
C. f=(int)(f*100+0.5)/100.0; D. f=(f/100+0.5)*100.0;
答案: BC
18. 写出下面这个程序的结果。
void main()
{
int count,i;
int x,y,z;
x=y=z=0;
scanf("%d",&count);
for(i=0;i<count;i++)
{
x=(x+1)%2;
y=(y+1)%3;
z=(z+1)%5;
}
printf("x=%d,y=%d,z=%d\n",x,y,z);
}
如果运行时输入10, 结果是 x=___,y=___,z=___。
如果运行时输入17, 结果是 x=___,y=___,z=___。
答案:0 1 0
1 2 2
19. 已知a为整型变量,那么与表达式 a!=0 真假值情况相同的表达式有哪些?(多选)
A. a>0||a<0 B. a
C. !a==0 D. !a
答案: ABC
20.若要输出下列各种类型的数据,应使用什么转换说明符。(答题请打上双引号)
字段宽度为4的十进制数应使用"%4d",字段宽度为6的十六进制数应使用___,八进制整数应使用___,字段宽度为3的字符应使用___,字段宽度为10,保留3位小数的实数应使用___,字段宽度为8的字符串应使用___。
答案:"%6x" "%o" "%3c" "%10.3f" "%8s"
21. 该源程序执行后,屏幕上显示什么?(单选)
void main()
{
int a;
float b;
a=4;
b=9.5;
printf("a=%d,b=%4.2f\n",a,b);
}
A. a=%d,b=%f\n B. a=%d,b=%f
C. a=4,b=9.50 D. a=4,b=9.5
答案: C
22. 下面哪些是非法的C语言转义字符?(多选)
A. '\t' B. '\08' C. '\0xaf' D. '\\'
答案: BC
23. 以下程序输入三个整数值给a,b,c,程序把b中的值给a,把c中的值给b,把a中的值给c,然后输出a,b,c的值。请填空。
#include <stdio.h>
main()
{
___
int temp;
printf("Enter a,b,c:");
scanf("%d%d%d",___);
___
a=b;
b=c;
___
printf("a=%d b=%d c=%d\n",a,b,c);
}
答案: int a,b,c;
&a,&b,&c
temp=a;
c=temp;
24. 若a为整型变量,且有以下语句___。(单选)
a=-017L;
printf("%d\n",a);
则下面哪个说法是正确的?
A. 赋值不合法 B. 输出值为-17
C. 输出为不确定值 D. 输出值为-15
答案: B
25. 若ch为char型变量,a为int型变量,(已知字符a的ASCII十进制代码为97)则执行以下语句后的输出为哪一个?(单选)
char ch;
int a;
ch='a';
a=12;
printf("%x,%o,",ch,ch,a);
printf("k=%%d\n",k);
A. 61,141,12,k=%d
B. 输出项与格式描述符个数不符,输出为零值或不定值
C. 61,141,k=%d
D. 61,141,k=%12
答案: C
26. 若有以下说明语句:(单选)
char s='\\\092';
则下面哪一项是正确的.
A. 使s的值包含2个字符 B. 说明语句不合法
C. 使s的值包含6个字符 D. 使s的值包含4个字符
答案: B
27.若k,g均为int型变量,则以下语句的输出为哪一项?(单选)
int k,g;
k=017;
g=111;
printf("%d,",k);
printf("%x\n",g);
A. 15,6f B. f,6f C. f,111 D. 15,111
答案: A
28. 请从下面的选项中选出正确的C语言的转义字符。(多选)
A. '//' B. '\'' C. '\t' D. '\n'
E. '\1011' F. '/018' G. '/123' H. '\xaa'
答案: BCDH
29. 如这程序所示,如果运行时,输入 18,18 ,那么 b的值为多少?(单选)
void main()
{
int a,b;
scanf("%d,%o",&a,&b);
b+=a;
printf("%d",b);
}
A. 36 B. 34 C. 输入错误,b的值不确定 D. 18
答案: C
30. 读懂程序并填空。
#include <stdio.h>
void main()
{
char ch=0x31;
printf("%d\n",ch);//屏幕显示___
printf("%o\n",ch);//屏幕显示___
printf("%x\n",ch);//屏幕显示___
printf("%c\n",ch);//屏幕显示___
}
答案: 49
61
31
1
1. C程序的结构可分为哪几类?(多选)
A.顺序结构
B.循环结构
C.程序结构
D.选择结构
答案: ABD
2. 输入两个实数a,b,然后交换它们的值,最后输出(提示:要交换两个数得借助一个中间变量temp。首先让temp存放a的值,然后把b存入a,再把temp存入b就完成了)。
void main()
{
float a,b,temp;
printf("请输入a和b的值:");
scanf("%d,%d",___);
temp = a;
___
___
printf("交换后, a=%d , b=%d\n",___);
}
答案: &a ,&b
a = b;
b = temp;
a , b
3. 当a,b,c的值分别为3,4,5时,以下各语句执行后a,b,c的值为多少?
(1)if(a>c)
{a=b;b=c;c=a;}
else
{a=c;c=b;b=a;}
执行后a,b,c的值为___,___,___
(2)if(a<c)
a=c;
else
a=b;c=b;b=a;
执行后a,b,c的值为___,___,___
(3)if(a!=c)
;
else
a=c;c=b;b=a;
执行后a,b,c的值为___,___,___
答案: 5 5 4
5 5 4
3 3 4
4. 当a=3,b=4,c=5时,写出下列各式的值。
a<b的值为___, a<=b的值为___,
a==c的值为___, a!=c的值为___,
a&&b的值为___, !a&&b的值为___,
a||c的值为___, !a||c的值为___,
a+b>c&&b==c的值为___。
答案: 1 1
0 1
1 0
1 1
0
5. 假设所有变量均已说明,写出下列各程序段运行后x的值。(多选)
ok1=1; ok2=2; ok3=0; x=15; a=3; b=4;
(1)if(!ok1)
x++;
else if(ok2)
{
if(ok3)
x=3;
else
x=4;
}
运行后x的值为下面哪一个?
A. 15 B. 3 C. 16 D. 4
(2)if(ok1)
{
if(a<b)
{
if(!ok3)
x=0;
else
x=1;
}
else
x=2;
}
else
x=3;
运行后x的值为下面哪一个?
A. 0 B. 1 C. 2 D. 3
答案: D A
6. 若整数x分别等于95、87、100、43、66、79,则以下程序段运行后屏幕显示是什么?
switch(x/10)
{
case 6:
case 7:
printf("Pass\n");
break;
case 8:
printf("Good\n");
break;
case 9:
case 10:
printf("VeryGood\n");
break;
default:
printf("Fail\n");
}
x等于 95时,程序段运行后屏幕上显示___
x等于 87时,程序段运行后屏幕上显示___
x等于100时,程序段运行后屏幕上显示___
x等于 43时,程序段运行后屏幕上显示___
x等于 66时,程序段运行后屏幕上显示___
x等于 79时,程序段运行后屏幕上显示___
答案: VeryGood
Good
VeryGood
Fail
Pass
Pass
7. 在C语言的if语句中,用作判断的表达式为___。(单选)
A. 关系表达式 B. 逻辑表达式
C. 算术表达式 D. 任意表达式
答案: D
8. 请问:下面这个程序段的输出是什么?(单选)
int a,b,c;
a=7;b=8;c=9;
if(a>b)
a=b,b=c;c=a;
printf("a=%d b=%d c=%d\n",a,b,c);
A. a=7 b=8 c=7 B. a=7 b=9 c=7
C. a=8 b=9 c=7 D. a=8 b=9 c=8
答案: A
9. 该程序的运行结果是:(单选)
void main()
{
int a,b,c;
a=2;b=7;c=5;
switch(a>0)
{
case 1:
switch(b<10)
{
case 1:printf("^");break;
case 0:printf("!");break;
}
case 0:
switch(c==5)
{
case 0: printf("*");break;
case 1: printf("#");break;
default:printf("%%");break;
}
default:
printf("&");
}
printf("\n");
}
A. ^#& B. ^ C. & D. ^!*#%&
答案: A
10. 该程序的输出结果是多少?(单选)
m=37;n=13;
while(m!=n)
{
while(m>n)
m=m-n;
while(n>m)
n-=m;
}
printf("m=%d\n",m);
输出结果为:
A. m=13 B. m=11
C. m=1 D. m=2
答案:C
11. 该程序的输出结果是多少?(单选)
for(i=0;i<5;i++)
{
for(j=1;j<10;j++)
if(j==5)
break;
if(i<2)
continue;
if(i>2)
break;
printf("%d,",j);
}
printf("%d\n",i);
输出结果为:
A. 10,3 B. 5,2
C. 5,3 D. 10,2
答案:C
12. 该程序的输出结果是什么?(单选)
#include <stdio.h>
void main()
{
int n;
n=0;
while(n<8)
{
switch(n%3)
{
case 2:
putchar('2');
case 1:
putchar('i');
break;
case 0:
putchar('H');
}
n++;
}
}
A. Hi2Hi2Hi B. Hi2
C. Hi2iHi2i D. Hi2iHi2iHi
答案: D
13. 该程序的输出结果是多少?(单选)
#include <stdio.h>
main()
{
int i,j,x=0;
for(i=0;i<2;i++)
{
x++;
for(j=0;j<=3;j++)
{
if(j%2)
continue;
x++;
}
}
printf("x=%d\n",x);
}
A. x=4 B. x=8 C. x=6 D. x=12
答案: B
14. 若k为整型,以下while循环执行___次.(单选)
k=2;
while(k=0)
printf("%d",k),k--;
printf("\n");
A. 无限次 B. 0次 C. 1次 D. 2次
答案: D
15. 下面这个程序的输出是什么?(单选)
#include <stdio.h>
main()
{
int y=10;
while(y--);
printf("y=%d\n",y);
}
A. y=0 B. while构成死循环 C. y=1 D. y=-1
答案: D
16. 以下程序从读入的整数数据中,统计大于零的整数个数和小于零的整数个数.用输入零来结束输入,程序中用变量i统计大于零的整数个数,用变量j统计小于零的整数个数.请填空.
#include <stdio.h>
main()
{
___ n,i,j;
printf("输入非零的整数(输入零结束程序)");
i=j=0;
scanf("%d",&n);
while___
{
if(n>0)
i=___;
if(n<0)
j=___;
___;
}
printf("i=%4d j=%4d\n",i,j);
}
答案: int
(n!=0)
i+1
j+1
scanf("%d",&n)
17. 圆周率pi的近似率可用下面的公式求得:
pi*pi/6 约等于 1/(1*1) +1/(2*2) +...+1/(n*n)
由以上公式可知,若n取值10000,则最后一项的值为1E-4,认为可达到精度要求。 以下程序用来求pi的近似值。请填空。(其中函数sqrt(a)用于求a的平方根)(单选)
#include <stdio.h>
#include <math.h>
main()
{
long i;
float pi;
pi=0.0;
for(i=1;i<=10000;i++)
pi+=___;
pi=sqrt(6.0*pi);
printf("pi=%10.6lf\n",pi);
}
A. 1/i*i B. 1/(i*i) C. 1.0/i*i D. 1.0/(i*i)
答案: D
18. 斐波哪契数列中的头两个数是0和1,从第三个数开始,每个数等于前两个数的和,即:0,1,1,2,3,5,8,13,21,...等。下面这个程序就是求斐波哪契数列的前20个数。请填空。
#include <stdio.h>
void main()
{
int f,f1,f2,i;
f1=0;f2=___;
printf("%d\n%d\n",f1,f2);
for(i=3;i<=30;___)
{
f=___;
printf("%d\n",f);
f1=f2;
f2=___;
}
}
答案: 1
i++
f1+f2
f
19. 下面这个程序执行后i和s的值为多少?(单选)
#include <stdio.h>
void main()
{
int i,s;
i=0;s=0;
while(i<10);
{
s+=(i++);
printf("%d\n",s);
}
printf("i=%d\n",i);
}
A. i值为9,s值为45 B. i值为10,s值为45
C. i值为10,s值为36 D. 程序陷入了死循环
答案: D
20. 下面这个程序打印出以下这个三角形.请填空。
0
11
222
3333
44444
555555
6666666
77777777
888888888
9999999999
void main()
{
int i,j;
for(i=0;i<=___;i++)
{
for(j=0;j<___;j++)
printf(___);
___
}
}
答案: 9
i
"%d",i
printf("\n");
21. 读懂下面的程序并填空。
#include <stdio.h>
void main()
{
long a,b,r;
scanf("%ld",&a);
b=0;
do{
r=a%10;
a=a/10;
b=b*10+r;
}while(a);
printf("%ld",b);
}
程序运行时如果输入 37 , 输出为___。
程序运行时如果输入 -345 , 输出为___。
程序运行时如果输入 10239, 输出为___。
答案: 73
-543
93201
22. 如图所示,该算式在四个字母所在处欠缺四个数位,下面这个程序用穷举法搜寻解法。请填空。
1A8
* 3B
_________
C73D
#include <stdio.h>
void main()
{
int A,B,C,D;
int x,y,z;
for(A=1;A<=9;A++)
for(B=1;B<=9;B++)
for(C=1;C<=9;C++)
for(D=1;D<=9;D++)
{
x=100 + ___ + 8;
y=___;
z=___+700 +30 +___;
if(___)
printf("A=%d,B=%d,C=%d,D=%d\n",
A,B,C,D);
}
}
答案:A*10
30+B
C*1000
D
x*y==z
1. 请改正下面这个远程序的错误:
#include <stdio.h>
main()
{
int i,j,list(10);
for(i=0,i<10,i++)
{
list[i] = 2*i+3;
for(j=9,j>=0,j--)
printf("%d\n",list[j]);
}
}
答案: int i,j,list(10); 改为 int i,j,list[10];
for(i=0,i<10,i++) 改为 for(i=0;i<10;i++)
for(j=9,j>=0,j--) 改为 for(j=9;j>=0;j--)
2. 指出下面各说明语句中哪些是合法的:(多选)
A. int abcd[0x80]; B. char 9ab[10];
C. char chi[-200]; D. int aaa[5]={3,4,5};
E. float key[]={3.0,4.0,1,0}; F. char disk[];
G. int n,floppy[n]; H. int cash[4]={1,2,3,4,5,6};
答案: ADE
3.根据以下说明,写出正确的说明语句。
(1)men是一个有10个整型元素的数组。
___
(2)step是一个有4个实型元素的数组,元素值分别为1.9, -2.33, 0, 20.6。
___
(3)grid是一个二维数组,共有4行,10列整型元素。
___
答案: int mesh[10];
float step[4] = {1.9, -2.33, 0, 20.6};
int grid[4][10];
4. 请回答下列问题。
(1)array是一个一维整形数组,有10个元素,前6个元素的初值是9,4,7,49,32,-5,请写出正确的说明语句。
___
(2)该数组下标的取值范围是从___到___(从小到大)。
(3)如何用scanf函数输入数组的第二个元素。
___
(4)如何用赋值语句把39存入第一个元素。
___
(5)如何表示把第六个和第四个元素之和存入第一个元素。
___
答案: int array[10] = {9,4,7,49,32,-5};
0 9
scanf("%d",&array[1]);
array[0] = 39;
array[0] = array[5] + array[3];
5. 写出以下初始化数组的长度。
(1)int chn[3];
数组chn的长度为___。
(2)float isa[]={1.0,2.0,3.0,4.0,5.0};
数组isa的长度为___。
(3)int doom[8];
数组doom的长度为___。
(4)float pci[4][2];
数组pci的长度为___。
(5)int ast[3][3];
数组ast的长度为___。
(6)int att[3][4];
数组att的长度为___。
(7)float dell[][3]={{1,4,7},{2,5},{3,6,9}};
数组dell的长度为___。
答案: 6
20
16
32
18
24
36
6. 这个程序输入了20个数存放在一个数组中,并且输出其中最大者与最小者、,20个数的和及它们的平均值。请填空。
void main()
{
char array___;
int max,min,average,sum;
int i;
for(i=0;i<___;i++)
{
printf("请输入第%d个数:",i+1);
scanf("%d",___);
}
max=array[0];
min=array[0];
for(i=0;i<=___;i++)
{
if(max<array[i])
___
if(min>array[i])
___
sum=___;
}
average = ___;
printf("20个数中最大值是%d,",max);
printf("最小值是%d,",min);
printf("和是%d,",sum);
printf("平均值是%d.\n",average);
}
答案: [20]
20
&array[i]
19
max=array[i];
min=array[i];
sum+array[i]
sum/20
7. 该程序的运行结果是: min=___,m=___,n=___。
void main()
{
float array[3][4]={
{3.4,-5.6,56.7},
{56.8,999.,-.0123},
{0.45,-5.77,123.5},
{43.4,0,111.2}
};
int i,j;
int min;
int m,n;
min = array[0][0];
m=0;n=0;
for(i=0;i<3;i++)
for(j=0;j<4;j++)
if(min > array[i][j])
{
min = array[i][j];
m=i;n=j;
}
printf("min=%d,m=%d,n=%d\n",min,m,n);
}
答案: -5.77 1 2
8. 下面的程序中哪一行有错误?(单选)
#include <stdio.h>
main()
{
float array[5]={0.0}; //第A行
int i;
for(i=0;i<5;i++)
scanf("%f",&array[i]);
for(i=1;i<5;i++)
array[0]=array[0]+array[i];//第B行
printf("%f\n",array[0]); //第C行
}
A. 第A行 B. 第B行
B. 第C行 D. 没有
答案: D
9. 若有以下整型的a数组,数组元素和它们得值如下所示:
数组元素: a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9]
元素的值: 9 4 12 8 2 10 7 5 1 3
(1)请写出对该数组的说明,并赋以上初值。
___
(2)该数组的最小下标值为___,最大下标值为___。
(3)写出下面各式的值:
a[a[9]]的值为___
a[a[4]+a[8]]的值为___
答案: int a[10]={9,4,12,8,2,10,7,5,1,3};
0 9
8
8
10. 写出下面这个程序的输出结果:
void main()
{
char str[]="ABCDEFGHIJKL";
printf("%s\n",str); 屏幕上显示___
printf("%s\n",&str[4]); 屏幕上显示___
str[2]=str[5];
printf("%s\n",str); 屏幕上显示___
str[9]='\0';
printf("%s\n",str); 屏幕上显示___
}
答案: ABCDEFGHIJKL
EFGHIJKL
AFCDEFGHIJKL
AFCDEFGHI
11. 字符串"ab\n\\012/\\\""的长度为___。
答案: 10
12. 下面哪一项是不正确的字符串赋值或赋初值的方式。(单选)
A. char *str; str="string";
B. char str[7]={'s','t','r','i','n','g'};
C. char str1[10];str1="string";
D. char str1[]="string",str2[]="12345678";
答案: C
13. 若有以下说明和语句,则输出结果是哪一项?(单选)
(strlen(s)为求字符串s的长度的函数)
char s[12]="a book!";
printf("%d",strlen(s));
A. 12 B. 8 C. 7 D. 11
答案: C
14. 若有以下说明和语句,则输出结果是___。(单选)
(strlen(s)为求字符串s的长度的函数)
char sp[]="\t\v\\\0will\n";
printf("%d",strlen(sp));
A. 14 B. 3 C. 9 D. 字符串中有非法字符
答案: B
15. 若有以下说明和语句,则输出结果是___。(单选)
char str[]="\"c:\\abc.dat\"";
printf("%s",str);
A. 字符串中有非法字符 B. \"c:\\abc.dat\"
C. "c:\abc.dat" D. "c:\\abc.dat"
答案: C
16. 读懂下面的程序并填空。
void main()
{
char str[80];
int i=0;
gets(str);
while(str[i]!=0)
{
if(str[i]>='a'&&str<='z')
str[i]-=32;
i++;
}
puts(str);
}
程序运行时如果输入 upcase, 屏幕显示___
程序运行时如果输入 Aa1Bb2Cc3, 屏幕显示___
答案: UPCASE
AA1BB2CC3
1. 分析下面的程序,并写出运行结果。
#include <stdio.h>
int max(int a,int b);
main()
{
int x,y,z,t,m;
scanf("%d,%d,%d",&x,&y,&z);
t=max(x,y);
m=max(t,z);
printf("%d",m);
}
int max(int a,int b)
{
if(a>b)
return(a);
else
return(b);
}
运行时若输入:10,15,9 则输出:___
运行时若输入:300,129,300 则输出:___
答案:15
300
2. 分析下面的程序,并写出运行结果。
#include <stdio.h>
long sum(int a,int b);
long factorial(int n);
main()
{
int n1,n2;
long a;
scanf("%d,%d",&n1,&n2);
a=sum(n1,n2);
printf("a=%1d",a);
}
long sum(int a,int b)
{
long c1,c2;
c1=factorial(a);
c2=factorial(b);
return(c1+c2);
}
long factorial(int n)
{
long rtn=1;
int i;
for(i=1;i<=n;i++)
rtn*=i;
return(rtn);
}
运行时若输入:2,3 则输出:___
运行时若输入:0, 5 则输出:___
答案:8
121
3. 分析下面的程序,并写出运行结果。
#include <stdio.h>
int s();
int x,y;
main()
{
int n;
x=1;y=2;
n=s();
printf("x=%d,y=%d,n=%d",x,y,n);
}
int s()
{
int z;
x=3;y=4;
z=x+y;
return(z);
}
程序运行后输出:___
答案: 3,4,7
4. C语言可执行程序从什么地方开始执行?(单选)
A. 程序中第一条可执行语句 B. 程序中第一个函数
C. 程序中的main函数 D. 包含文件中的第一个函数
答案: C
5. 有一个函数原型如下所示:(单选)
abc(float x,float y);
则该函数的返回类型为___。
A. void B. double C. int D. float
答案: C
6. 以下程序的输出结果是___。(单选)
#include <stdio.h>
int func(int a,int b);
void main()
{
int k=4,m=1,p;
p=func(k,m);
printf("%d,",p);
p=func("%d\n",p);
}
int func(int a,int b)
{
static int m=0,i=2;
i+=m+1;
m=i+a+b;
return(m);
}
A. 8,17 B. 8,16 C. 8,20 D. 8,8
答案: A
7. 以下程序的输出结果是a=___,b=___,c=___。
#include <stdio.h>
int func(int a,int *p);
void main()
{
int a=1,b=2,c;
c=func(a,&b);
b=func(c,&a);
a=func(b,&c);
printf("a=%d,b=%d,c=%d",a,b,c);
}
int func(int a,int *p)
{
a++;
*p=a+2;
return(*p+a);
}
答案: 36 16 19
8. 在C语言程序中,下面哪一个是正确的?(单选)
A. 函数的定义可以嵌套,但函数的调用不可以嵌套
B. 函数的定义不可以嵌套,但函数的调用可以嵌套
C. 函数的定义可以嵌套,函数的调用也可以嵌套
D. 函数的定义和函数的调用都不可以嵌套
答案: B
9. 下面哪些是定义局部变量储存类别的保留字?(多选)
A. int B. auto C.static D.float
E. register F.extern G. unsigned H.signed
答案: BCE
10. 下面这个函数的功能是求两个整数的积,并通过形参传回结果。请填空。
void mul(___x,___y,___result)
{
___=x*y;
}
答案:int int int*
*result
1.对于类型相同的指针变量,不能进行哪种运算?(单选)
A. + B. - C. = D. ==
答案: A
2. 若有以下说明和语句,且0<=i<10, 则下面哪个是对数组元素的错误引用?(单选)
int a[]={1,2,3,4,5,6,7,8,9,0}, *p, i;
p=a;
A. *(a+i) B. a[p-a] C. p+i D. *(&a[i])
答案: C
3. 若有以下说明和语句,且0<=i<10,则下面哪个是对数组元素地址的正确表示?(单选)
int a[]={1,2,3,4,5,6,7,8,9,0}, *p,i;
p=a;
A. &(a+1) B. a++ C. &p D. &p[i]
答案: D
4. 以下程序的输出结果是___。
#include <stdio.h>
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. 以下程序的输出结果是哪一项?(单选)
#include <stdio.h>
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",p[3][2]);
}
A. 输出项不合法 B. 6
C. 8 D. 12
答案: D
6. 如果有以下的定义:(多选)
struct person
{
char name[20];
int age;
char sex;
};
struct person a={"xiao min",20,'m'},*p=&a;
则对字符串"li ning"的引用方式可以是下面哪些?
A. (*p).name B. p.name C. a.name D. p->name
答案: ACD
7. 下面哪些定义的结构在内存分配是等价的。(单选)
(1)struct abc{
char x;
char y;
int data;
};
(2)struct abc{
char x,y;
int data;
};
(3)struct abc{
int data;
char x;
char y;
};
A. (1)和(2) B. (2)和(3)
C. (1)和(3) D. (1)(2)和(3)
答案: A
8. 若有以下说明和语句,, 则p1-p2的值为多少?(单选)
int a[10], *p1, *p2;
p1=a;
p2=&a[5];
A. 5 B. 6 C. 10 D. 没有指针与指针的减法
答案: A
9. 读懂源程序,并写出正确结果。
#include <stdio.h>
struct stustruct{
char name[10];
int score[3];
};
void main()
{
struct stu student={
"xiaowang",
{99,87,90}
};
struct stu *p1=&student;
int *p2=student.score;
printf("%d\n",student.score[0]);//屏幕显示___
printf("%s\n",p1->name); //屏幕显示___
printf("%d\n",p2[2]); //屏幕显示___
printf("%d\n",*(p2+1)); //屏幕显示___
}
答案:99
xiaoming
90
87
10. 已知有以下的说明,
int a[]={8,1,2,5,0,4,7,6,3,9};
那么a[*(a+a[3])]的值为___.
答案: 0
11. 已知有以下的说明,那么执行语句a=p+2;后, a[0]的值等于多少?(单选)
float a[3]={1.2,45.6,-23.0};
float *p=a;
A. 1.2 B. 45.6
C. -23.0 D. 语句有错
答案: D
1. 如果想把一些新的数据添加到文件xh.txt中,则应该以下面哪一种方式打开文件?(单选)
A. fp=fopen(xh.txt,"a"); B. fp=fopen("xh.txt",a);
C. fp=fopen("xh.txt","a"); D. fp=fopen("xh.txt",'a');
答案:C
2. 如果要把一个字符'A'写入文件指针fp所指定的文件里,应该如何写?
___
如果要把一个字符串"Hello!"写入文件指针fp所指定的文件里,应该如何写?
___
如果要把两个整数23和567以ASCII码方式写入文件指针fp所指定的文件里,且整数之间以一个空格相隔,应该如何写?
___
答案: fputc('A',fp);
fputs("Hello!",fp);
fprintf(fp,"%d %d",23,567);
3. 如果有三个整数以ASCII码方式写入了文件指针fp所指定的文件里,且整数之间以逗号相隔。
问:用a,b,c三个整形变量来获取这三个整数,该如何写?
___
答案: fscanf(fp,"%d,%d,%d",&a,&b,&c);
4. 一个abc.dat文件内容如下:
0123456789abcdefABCDEF
一个对abc.dat文件进行操作的程序如下:
#include <stdio.h>
void main()
{
FILE *fp;
char ch;
char str[15];
fp=fopen("abc.dat","rb");
if(fp!=NULL)
{
fseek(fp,2,SEEK_SET);
fgetc(fp);
fgetc(fp);
fgets(str,15,fp);
fseek(fp,-4,SEEK_CUR);
fgetc(fp);
fseek(fp,4,SEEK_CUR);
ch=fgetc(fp);
printf("ch=%c",ch);
fclose(fp);
}
}
程序运行的结果是ch为字符___。
答案: D
5. 调用fopen函数以文本方式打开文本文件aaa.txt如下
FILE *fp=fopen("aaa.txt",___);
如果为了输出而打开应在空白处填入___,
如果为了输入而打开应在空白处填入___,
如果为了追加而打开应在空白处填入___。
答案: "r"
"w"
"a"
6. 下面哪条语句是从文件中读取一个字符?(单选)
A. ch=getc(); B. fputc(ch,fp);
C. fscanf("%c",&ch); D. scanf("%c",&ch);
答案: C
7. 有5个学生的成绩需要保存在文件score.dat文件中。保存格式如下:
学生姓名,年龄,成绩<CR>
学生姓名,年龄,成绩<CR>
...
...
请完成下面这段源程序。
void main()
{
FILE *fp;
int i;
char name[80];
int age;
float score;
fp=fopen(___,"w");
for(i=0;i<5;i++)
{
printf("请输入第%d个学生的信息\n",___);
printf("姓名:");
scanf(___);
printf("年龄:");
___
printf("成绩:");
___
fprintf(fp,___,name,age,score);
}
___
}
答案: "score.dat"
i
"%s",name
scanf("%d",&age);
scanf("%f",&score);
"%d,%d,%f\n"
fclose(fp);
8. C语言中的文件类型如何划分?(单选)
A. 索引文件和文本文件两种
B. ASCII文件和二进制文件两种
C. 只有文本文件一种
D. 只有二进制文件一种
答案: B
9. 下面这个程序将用户从键盘输入的字符写入keyb.dat文件中,当键入字符'!'时,结束输入,把'!'写入文件后关闭文件,程序结束。
请找出错误。
#include <stdio.h>
void main()
{
char ch;
FILE *fp;
fp=fopen("keyb.dat","wb");
do
{
ch=getchar();
fprintf(fp,"%c",ch);
}while(ch!='!')
close(fp);
}
答案: }while(ch!='!') 改为 while(ch!='!');
close(fp); 改为 fclose(fp);
1.下面这个程序的作用是统计公元1年到公元2000年的闰年个数。判断闰年的方法是:能被400整除的年是闰年;除能被400整除的年以外,凡是能被4整除,但不能被100整除的年是闰年。其余年份是平年。请填空。
#include <stdio.h>
void main()
{
int year;
int count=0;
for(year=0;year<=2000;year++)
if( (_____)
||( year%4==0 && ____) )
____;
printf("%d",count);
}
答案:year%400==0
year%100!=0
count++
2. 读懂程序并填空。
#include <stdio.h>
void main()
{
int digit_num=0;
int letter_num=0;
int other_num=0;
char ch;
while(1)
{
ch=getchar();
if(ch=='!')
break;
if(ch>='0'&&ch<='9')
digit_num++;
else if( (ch>='A'&&ch<='Z')
||(ch>='a'&&ch<='z') )
letter_num++;
else
other_num++;
}
printf("The number of digit is %d\n",digit_num);
printf("The number of letter is %d\n",letter_num);
printf("The number of other is %d\n",other_num);
}
程序运行时如果输入:
123adfhd^%234FDG%34%hJK+!_AAAD!<回车>
最后,变量 digit_num的值为___,
变量letter_num的值为___,
变量 other_num的值为___。
答案: 8
11
5
3. 下面这个程序要求用户输入两个整数和一个字符。字符必须是'+'、'-'、'*'、'/'其中的一个。然后程序输出两数作相应运算的结果。
例如:输入 123,34,+ 程序输出 123+34=157。请填空。
#include <stdio.h>
void main()
{
float d1,d2,result;
char op;
int error=0;
scanf("%f,%f,%c",&d1,&d2,&op);
switch(op)
{
case '+':result=___;break;
case '-':result=___;break;
case '*':result=___;break;
case '/':result=___;break;
default :error=1;
}
if(error)
printf("运算操作符输入有错!");
else
printf("%.2f%c%.2f=%.2f\n",___);
}
答案: d1+d2
d1-d2
d1*d2
d1/d2
d1,op,d2,result
4. 除1外,只能被1和自己本身整除的自然数叫素数。下面这个程序就是求2到100之间的素数。其中判断某数为素数的方法为用2到该数平方根之间的自然数去试整除该数。如果没有哪个数能够整除该数,那么该数为素数;如果有,那么时合数。请填空。
(函数sqrt(a)求a的平方根)
#include<math.h>
#include <stdio.h>
void main()
{
int i,j,k;
int flag;
for(i=2;i<=___;i++)
{
flag=1;
k=(int)sqrt(i);
for(j=2;j<___;j++)
if(___==0)
{
flag=0;
break;
}
if(flag)
printf("%d\n",i);
}
}
答案:100
k
i%j
5.如图所示为数学上的杨晖三角形,它的规律是:
1.每一行的首尾列都是1。
2.每一行的第i列(除首尾列外)是上一行的第i-1列与上一行的第i列的和。
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
下面这个程序打印了10层杨晖三角形,请填空。
#include <stdio.h>
#define LAYER 10
#define LAYER_1 (LAYER+1)
#define NUM ( LAYER_1 * (LAYER_1 /2) )
void main()
{
int array[NUM],*p[LAYER],i,j,pos;
for(i=0;i<LAYER;i++)
{
pos= i*(i+1)/2;
p[i]=&array[pos];
}
for(i=0;i<LAYER;i++)
p[i][0]=p[i][i]=___;
for(i=2;i<LAYER;i++)
for(j=1;j<i;j++)
p[i][j]=___;
for(i=0;i<LAYER;i++)
{
for(j=0;j<=i;j++)
printf("%5d",___);
printf("\n");
}
}
答案: 1
p[i-1][j-1]+p[i-1][j]
p[i][j]
6. 当程序输入0 -5 3时,程序依次输出哪三个数? ___、___、___
如果把SIZE改成5,输入89,34,25,-1,22,程序依次输出哪五个数? ___、___、___、___、___
#include <stdio.h>
#define SIZE 3
void swap(int *a,int *b);
void main()
{
int data[SIZE];
int i,j;
for(i=0;i<SIZE;i++)
scanf("%d",&data[i]);
for(i=0;i<SIZE-1;i++)
for(j=i+1;j<SIZE;j++)
if(data[i]>data[j])
swap(&data[i],&data[j]);
for(i=0;i<SIZE;i++)
printf("%d ",data[i]);
}
void swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
答案: -5 0 3
-1 22 25 34 89
7. 请选择您认为正确的说法。
A.在C语言中,函数可以嵌套定义。
B.程序中的注释部分可有可无,通常可以省略。
C.在函数中,只能有一条return语句。
D.C程序中,会检查数组下标是否越界。
E.在C程序中,ABC和abc是两个不同的变量。
F.在C语言中,函数中的变量可以赋初值,每调用一次该函数,就赋一次初值。
G.C语言中不能对数组名进行加减和赋值运算。
答案: BEG
虽然这已经是很古老的东西了,但是还是留起来,做个纪念。。。