收集了一些经典C语言计算机二级和C语言期末考试题库
整理不易,大家点赞收藏支持一下
祝大家计算机二级和期末考试都高分过
系列文章:
C语言计算机二级/C语言期末考试 刷题(一)
C语言计算机二级/C语言期末考试 刷题(二)
C语言计算机二级/C语言期末考试 刷题(三)
C语言计算机二级/C语言期末考试 刷题(四)
C语言计算机二级/C语言期末考试 刷题(五)
C语言计算机二级/C语言期末考试 刷题(六)
目录
一、填空 共15题 (共计15分)
二、判断 共8题 (共计8分)
三、单选 共20题 (共计20分)
四、程序填空 共2题 (共计20分)
五、程序改错 共2题 (共计20分)
六、程序设计 共2题 (共计17分)
第1题
已知 i=5;写出语句 a=--i; 执行后整型变量 a 的值是【1】.
=======(答案1)=======
4
第2题
C语言中的标识符只能由3种字符组成,它们是【1】、【2】和【3】.
=======(答案1)=======
字母
=========或=========
{{无序}}
=======(答案2)=======
数字
=========或=========
{{无序}}
=======(答案3)=======
下划线
=========或=========
{{无序}}
第3题
设x的值为15,n的值为2,则表达式x%=(n+=3)运算后x的值是【1】.
=======(答案1)=======
0
第4题
表达式 a+=b 相当于表达式【1】.
=======(答案1)=======
a=a+b
=========或=========
a=b+a
第5题
已知 a=10,b=15,c=1,则表达式 a*b&&c 的值为【1】.
=======(答案1)=======
1
第6题
当a=1,b=2,c=3时,执行以下程序段后a=【1】.
if (a > c)
b = a;
a = c;
=======(答案1)=======
3
第7题
若输入字符串:abcde<回车>,则以下while循环体将执行 【1】 次.
while ((ch = getchar()) == 'e')
printf("*");
=======(答案1)=======
0
第8题
下列程序运行结果为【1】.
#define PI 3.14
#define S(r) PI * r * r
main()
{
float a, area;
a = 2;
area = S(a);
printf("%5.2f\n", area);
}
=======(答案1)=======
12.56
第9题
下面程序的运行结果是【1】
#include
int a = 5;
int b = 7;
void main()
{
int a = 4, b = 5, c;
c = plus(a, b);
printf("A+B=%d\n", c);
}
plus(int x, int y)
{
int z;
z = x + y;
return(z);
}
=======(答案1)=======
A+B=9
第10题
下列程序的输出结果是【1】.
max_value(int array[][4])
{
int i, j, max;
max = array[0][0];
for (i = 0; i < 3; i++)
for (j = 0; j < 4; j++)
if (array[i][j] > max)
max = array[i][j];
return(max);
}
main()
{
static int a[3][4] = { {1,3,5,7},{2,4,6,8},{15,17,34,12} };
pritnf("%d\n", max_value(a));
}
=======(答案1)=======
34
第11题
以下程序的输出结果是【1】.
#include
void main()
{
char s[] = "abcdef";
s[3] = '\0';
printf("%s\n", s);
}
=======(答案1)=======
abc
第12题
将函数funl 的入口地址赋给指针变量p的语句是【1】.
=======(答案1)=======
p=funl;
第13题
程序运行时若依次输入2,3,40,则输出结果是【1】.
main()
{
int* p1, * p2, * p3;
int i, j, k, t;
scanf("%d%d%d", &i, &j, &k);
p1 = &i;
p2 = &j;
p3 = &k;
if (*p1 < *p2)
{
t = *p1; *p1 = *p2; *p2 = t;
}
if (*p1 < *p3)
{
t = *p1; *p1 = *p3; *p3 = t;
}
if (*p2 < *p3)
{
t = *p2; *p2 = *p3; *p3 = t;
}
printf("%d\n", *p1);
}
=======(答案1)=======
40
第14题
C语言源程序的基本单位是【1】.
=======(答案1)=======
函数
第15题
C语言中,【1】是程序的基本组成部分.
=======(答案1)=======
函数
第1题
若a是实型变量,C程序中允许以下赋值a=10;因此,实型变量中允许存放整型数据.
答案:N
第2题
语句 printf("%f%%",1.0/3);输出为 0.333333.
答案:N
第3题
for(i=0,k=-1;k=1;k++,i++)printf("*\n");
循环结束的条件不合法.
答案:N
第4题
若i =3,则printf("%d",-i++);输出的值为 -4.
答案:N
第5题
在C语言中,形参的缺省存储类别是auto.
答案:Y
第6题
C语言中函数调用的方式只有函数做表达式一种.
答案:N
第7题
调用scanf()函数进行字符数组输入时,空格和换行符都可以作为字符串的一部分而能读入.
答案:N
第8题
对数组各元素的存取完全可以不用下标变量而用指针来代替.
答案:Y
第1题
任何一个C语言的可执行程序都是从()开始执行的.
A:程序中的第一个函数
B:main( )函数的入口处
C:程序中的第一条语句
D:编译预处理语句
答案:B
第2题
在C语言中,下列合法的字符常量是().
A:'\039'
B:'\x76'
C:'ab'
D:'\o'
答案:B
第3题
下列程序段的输出结果为().
int a = 7, b = 9, t;
t = a *= a > b ? a : b;
printf("%d", t);
A:7
B:9
C:63
D:49
答案:C
第4题
设变量定义为"int a, b;",执行下列语句时,输入(),则a和b的值都是10.
scanf("a=%d, b=%d", &a, &b);
A:10 10
B:10, 10
C:a=10 b=10
D:a=10, b=10
答案:D
第5题
若已定义x和y为double类型,则表达式"x=1,y=x+3/2"的值是().
A:1
B:2
C:2.0
D:2.5
答案:C
第6题
while (fabs(t) < 1e-5)if (!s / 10)break;
循环结束的条件是().
A:t>=1e-5&&t<=-1e-5&&s>-10&&s<10
B:fabs(t)<1e-5&&!s/10
C:fabs(t)<1e-5
D:s/10==0
答案:A
第7题
下列程序的输出结果是().
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++; break;
}
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
答案:B
第8题
若变量已经正确定义,有下列程序段输出结果是().
i = 0;
do printf("%d,", i);
while (i++);
printf("%d\n", i);
A:0,0
B:0,1
C:1,1
D:程序进入无限循环
答案:B
第9题
设j和k都是int类型,则for循环语句().
for (j = 0, k = -1; k = 1; j++, k++) printf("****\n");
A:循环结束的条件不合法
B:是无限循环
C:循环体一次也不执行
D:循环体只执行一次
答案:B
第10题
下列程序执行后的输出结果是().
void main()
{
int k = 5;
while (--k)
printf("%d", k -= 3);
printf("\n");
}
A:1
B:2
C:4
D:死循环
答案:A
第11题
以下程序的输出结果为().
main()
{
int a = 1, b = 2, c = 3, d = 4, e = 5;
printf("%d\n", func((a + b, b + c, c + a), (d + e)));
}
int func(int x, int y)
{
return(x + y);
}
A:15
B:13
C:9
D:函数调用出错
答案:B
第12题
函数的形式参数隐含的存储类型说明是().
A:extern
B:static
C:register
D:auto
答案:D
第13题
为了提高程序的运行速度,在函数中对于整型或指针可以使用()型的变量.
A:auto
B:register
C:static
D:extern
答案:B
第14题
下列说法不正确的是().
A:主函数main中定义的变量在整个文件或程序中有效
B:不同函数中,可以使用相同名字的变量
C:形式参数是局部变量
D:在一个函数内部,可以在复合语句中定义变量,这些变量只在复合语句中有效
答案:A
第15题
已知函数abc的定义为:void abc(){ ……}则函数定义中void的含义是().
A:执行函数abc后,函数没有返回值
B:执行函数abc后,函数不再返回
C:执行函数abc后,可以返回任意类型
D:以上三个答案都是错误的
答案:A
第16题
下列说法中错误的是().
A:一个数组只允许存储同种类型的变量
B:如果在对数组进行初始化时,给定的数据元素个数比数组元素个数少时,
多余的数组元素会被自动初始化为最后一个给定元素的值
C:数组的名称其实是数组在内存中的首地址
D:当数组名作为参数被传递给某个函数时,原数组中的元素的值可能被修改
答案:B
第17题
判断字符串s1是否大于字符串s2,应使用().
A:if(s1>s2)
B:if(strcmp(s1,s2))
C:if(strcmp(s2,s1)>0)
D:if(strcmp(s1,s2)>0)
答案:D
第18题
若有说明:int *p, m=5, n;以下正确的程序段是().
A:
p = &n;
scanf("%d", &p);
B:
p = &n;
scanf("%d,*p);
C:
scanf("%d", &p);
*p = n;
D:
p = &n;
*p = m;
答案:D
第19题
若有下列定义,则对a数组元素地址的正确引用是().
int a[5],*p=a;
A:&a[5]
B:p+2
C:a++
D:&a
答案:B
第20题
以下程序的输出结果是().
main()
{
char s[] = "123", * p;
p = s;
printf("%c%c%c\n", *p++, *p++, *p++);
}
A:123
B:321
C:213
D:312
答案:B
第1题
题目:下列给定程序中,函数fun的功能是:找出100~999之间(含100和999)所有整数中各
位上数字之和为x(x为正整数)的整数,并输出;符合条件的整数个数作为函数值返回。
例如:当x值为5时,100~999之间各位上数字之和为5的整数有:104、113、122、131、
140、203、212、221、230、302、311、320、401、410、500,共有15个。
当x值为27时,各位数字之和为27的整数是:999,只有1个。
#include
int fun(int x)
{
int n, s1, s2, s3, t;
n = 0;
t = 100;
while (t <= 【 ? 】)
{
s1 = t % 10;
s2 = (【 ? 】) % 10;
s3 = t / 100;
if (s1 + s2 + s3 == 【 ? 】)
{
printf("%d ", t);
n++;
}
t++;
}
return n;
}
main()
{
int x = -1;
while (x < 0)
{
printf("Please input(x>0): ");
scanf("%d", &x);
}
printf("\nThe result is: %d\n", fun(x));
}
答案:
=======(答案1)=======
999
=======(答案2)=======
t/10
=======(答案3)=======
x
第2题
功能:统计一个字符串中的字母、数字、空格和其它字符的个数。
#include
void fun(char s[], int b[])
{
int i;
for (i = 0; s[i] != '\0'; i++)
if ('a' <= s[i] && s[i] <= 'z' || 'A' <= s[i] && s[i] <= 'Z')
b[0]++;
else if (【 ? 】)
b[1]++;
else if (【 ? 】)
b[2]++;
else
b[3]++;
}
main()
{
char s1[80];
int a[4] = { 0 };
int k;
【 ? 】;
gets(s1);
【 ? 】;
puts(s1);
for (k = 0; k < 4; k++)
printf("%4d", a[k]);
}
答案:
=======(答案1)=======
'0'<=s[i] && s[i]<='9'
=========或=========
s[i]>='0' && s[i]<='9'
=========或=========
'0'<=s[i] && '9'>=s[i]
=========或=========
s[i]>='0' && '9'>=s[i]
=========或=========
48<=s[i] && s[i]<=57
=========或=========
s[i]>=48 && s[i]<=57
=========或=========
48<=s[i] && 57>=s[i]
=========或=========
s[i]>=48 && 57>=s[i]
=========或=========
!( s[i] < 48 || s[i] > 57 )
=========或=========
!( s[i] < '0' || s[i] > '9' )
=======(答案2)=======
s[i] == ' '
=========或=========
s[i] == 32
=======(答案3)=======
void fun(char s[],int b[])
=======(答案4)=======
fun(s1,a)
第1题
功能:在一个一维整型数组中找出其中最大的数及其下标。
#include
#define N 10
float fun(int* a, int* b, int n)
{
int* c, max = *a;
for (c = a + 1; c < a + n; c++)
if (*c > max)
{
max = *c;
b = c - a;
}
return max;
}
void main()
{
int a[N], i, max, p = 0;
printf("please enter 10 integers:\n");
for (i = 0; i < N; i++)
get("%d", a[i]);
m = fun(a, p, N);
printf("max=%d,position=%d", max, p);
}
答案:
=======(答案1)=======
int fun(int *a,int *b,int n)
=======(答案2)=======
*b=c-a;
=======(答案3)=======
scanf("%d",&a[i]);
=========或=========
scanf("%d", a + i );
=======(答案4)=======
max=fun(a,&p,N);
第2题
题目:fun函数的功能是:在任意给定的N个正整数中,从左到右依次逐个取三个数作
为一组,按值大小找出该组数的中值,用该中值替换与该组数对应的原三个数
中的中间位置的数。处理后原数列中首尾2个数不变。处理后数列在主函数中
输出。
例如:有10个正整数如下:初始数列为:6 5 7 23 18 5 8 21 45 38 第1组数为:6 5 7
中值为:6 替换后的数列为:6 6 7 23 18 5 8 21 45 38 第2组数为:5 7 23
中值为:7 替换后的数列为:6 6 7 23 18 5 8 21 45 38第3组数为:7 23 18
中值为:18 替换后的数列为:6 6 7 18 18 5 8 21 45 38第4组数为:23 18 5
中值为:18 替换后的数列为:6 6 7 18 18 5 8 21 45 38第5组数为:18 5 8
中值为:8 替换后的数列为:6 6 7 18 18 8 8 21 45 38第6组数为:5 8 21
中值为:8 替换后的数列为:6 6 7 18 18 8 8 21 45 38第7组数为:8 21 45
中值为:21 替换后的数列为:6 6 7 18 18 8 8 21 45 38第8组数为:21 45 38
中值为:38 替换后的数列为:6 6 7 18 18 8 8 21 38 38
最终结果为:6 6 7 18 18 8 8 21 38 38
#include
#define N 10
int findmid(int a, int b, int c)
{
int t;
t = (a > b) ? (b > c ? b : (a > c ? c : a)) : ((a > c) ? a : ((b > c) ? c : b));
return b;
}
void fun(int x[])
{
int i, a, b, c, t[N];
for (i = 0; i < N; i++) t[i] = x[i]
for (i = 0; i < N - 2; i++)
{
a = t[i];
b = t[i + 1];
c = t[i + 2];
t[i + 1] = findmid(a, b, c);
}
}
main()
{
int i, x[N] = { 6,5,7,23,18,5,8,21,45,38 };
for (i = 0; i < N; i++)
printf("%d ", x[i]);
printf("\n");
fun(x);
for (i = 0; i < N; i++)
printf("%d ", x[i]);
printf("\n");
}
答案:
=======(答案1)=======
return t;
=======(答案2)=======
for(i=0;i
第1题
功能:编写函数求1~100中奇数的平方和。
结果为166650.000000。
#include
float sum(int n)
{
/**********Program**********/
/********** End **********/
}
main()
{
printf("sum=%f\n", sum(100));
}
答案:
float s = 0;
int i;
for (i = 1; i <= n; i = i + 2)
s = s + i * i;
return(s);
第2题
题目:编程将字符数组s2中的全部字符拷贝到字符数组s1中。
要求:不能调用字符串库函数strcpy()。
#include
#include
#define N 80
void main()
{
int i;
char s1[N];
char s2[N];
scanf("%s", s2);
/**********Program**********/
/********** End **********/
printf("%s", s1);
}
答案:
for (i = 0; i < strlen(s2); i++)
s1[i] = s2[i];
s1[i] = '\0'; //字符串末尾的'\0'
若有错误或疑问,欢迎评论区留言讨论。