收集了一些经典C语言计算机二级和C语言期末考试题库
整理不易,大家点赞收藏支持一下
祝大家计算机二级和期末考试都高分过
系列文章:
目录
一、填空 共25题 (共计25分)
第1题
int x=2;z=x++-1; 则z的值为【1】.
=======(答案1)=======
1
第2题
int x=2,y=3,z=4; 则表达式!x+y>z的值为【1】.
=======(答案1)=======
0
第3题
C语言中的字符变量用保留字【1】来说明.
=======(答案1)=======
char
第4题
设k=(a=2,b=3,a*b),则k 的值为【1】.
=======(答案1)=======
6
第5题
int x=2,y=3,z=4; 则表达式!(x+y)>z的值为【1】.
=======(答案1)=======
0
第6题
输入整型变量a的值
int a;
scanf("%d", 【1】);
=======(答案1)=======
&a
第7题
int x=4,y=z=2;z=x==(y=z); 则z的值为【1】.
=======(答案1)=======
0
第8题
已知a=12,写出表达式 (0<a)&&(a<2) 的值是【1】.
=======(答案1)=======
0
第9题
当a=3,b=2,c=1;时,执行以下程序段后 c=【1】.
if (a > b) a = b;
if (b > c) b = c;
else c = b;
c = a;
=======(答案1)=======
2
第10题
当a=3,b=2,c=1;时,执行以下程序段后 b=【1】.
if (a > b) a = b;
if (b > c) b = c;
else c = b;
c = a;
=======(答案1)=======
1
第11题
下面程序的运行结果是【1】 .
#include<stdio.h>
void main()
{
int y, a;
y = 2; a = 1;
while (y-- != -1)
{
do
{
a *= y; a++;
} while (y--);
}
printf("%d,%d", a, y);
}
=======(答案1)=======
1,-2
第12题
若int i=10;,则执行下列程序后,变量 i 的正确结果是【1】.
switch (i)
{
case 9:i += 1;
case 10:i += 1;
case 11:i += 1;
default:i += 1;
}
=======(答案1)=======
13
第13题
为了避免嵌套条件语句的二义性,C语言规定else与其前面最近的并没有与其他else配过对的【1】语句配对.
=======(答案1)=======
if
第14题
下面程序的运行结果是【1】
#include<stdio.h>
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
第15题
以下程序的输出结果是【1】 .
#include<stdio.h>
int x = 3;
void incre();
void main()
{
int i;
for (i = 1; i < x; i++)
incre();
}
void incre()
{
static int x = 1;
x *= x + 1;
printf("%d", x);
}
=======(答案1)=======
26
第16题
函数调用语句func((e1,e2),(e3,e4,e5))中含有【1】个实参.
=======(答案1)=======
2
第17题
以下程序输出的结果是【1】 .
#include<stdio.h>
int func(int a, int b)
{
return(a + b);
}
void main()
{
int x = 2, y = 5, z = 8, r;
r = func(func(x, y), z);
printf("%d\n", r);
}
=======(答案1)=======
15
第18题
函数的【1】调用是一个函数直接或间接地调用它自身.
=======(答案1)=======
递归
第19题
以下程序可求出所有水仙花数(提示:所谓水仙花数是指一个3位正整数,其各位数字的立方之和等于该正整数.如407=4*4*4+0*0*0+7*7*7,故407是一个水仙花数).请填空.
#include<stdio.h>
void main()
{
int x, y, z, a[8], m, i = 0;
printf("the special number are(in the arrange of 1000):\n");
for (【1】; m++)
{
x = m / 100;
y = 【2】;
z = m % 10;
if (x * 100 + y * 10 + z = = x * x * x + y * y * y + z * z * z)
{
【3】; i++;
}
}
for (x = 0; x < i; x++)
printf("%6d", a[x]);
}
=======(答案1)=======
m=100;m<1000
=======(答案2)=======
m/10%10
=========或=========
m%100/10
=========或=========
(m-m/100*100)/10
=========或=========
m/10-m/100*10
=======(答案3)=======
a[i]=m
第20题
下列程序的输出结果是【1】 .
#define N 20
fun(int a[], int n, int m)
{
int i, j;
for (i = m; i > n; i--)
a[i + 1] = a[i];
}
void main()
{
int i, a[N] = { 1,2,3,4,5,6,7,8,9,10 };
fun(a, 2, 9);
for (i = 0; i < 5; i++)
printf("%d", a[i]);
}
=======(答案1)=======
1 2 3 4 4
第21题
复制字符串的库函数是【1】,只写函数名即可.
=======(答案1)=======
strcpy
第22题
从键盘输入 1 2 3 4 5 6 7 8 9 执行后输出的结果是【1】.
main()
{
int a[3][3], i, sum = 0;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
scanf("%d", &a[i][j]);
printf("\n");
for (i = 0; i < 3; i++)
sum = sum + a[i][i];
printf("%d\n", sum);
}
=======(答案1)=======
15
第23题
C语言中,二维数组在内存中的存放方式为按【1】优先存放
=======(答案1)=======
行
第24题
在c程序中,只能给指针赋NULL值和【1】值.
=======(答案1)=======
地址
第25题
若有以下定义和语句:
int a[4] = { 0,1,2,3 }, * p;
p = &a[2];
则*--p的值是【1】.
=======(答案1)=======
1
二、判断 共10题 (共计10分)
第1题
在C程序中,语句之间必须要用分号";"分隔.
答案:Y
第2题
关系运算符<= 与 == 的优先级相同.
答案:N
第3题
在C语言中,4种基本数据类型的存储空间长度的排列顺序为:char<int<=float<double.
答案:Y
第4题
for(i = 0, k = -1; k = 1; k++, i++)
printf("*\n");
循环体一次也不执行.
答案:N
第5题
while 和for循环都是先判断表达式的值,后执行循环体语句.
答案:Y
第6题
函数的定义和函数的调用均可以嵌套.
答案:N
第7题
若有宏定义:#define S(a,b) t=a;a=b;b=t由于变量t没定义,所以此宏定义是错误的.
答案:N
第8题
当调用函数时,实参是一个数组名,则向函数传送的是数组的首地址.
答案:Y
第9题
int n; scanf("%d",&n); int a[n]; 是不合法的.
答案:Y
第10题
数组说明 int a[3][3]={1,2,3,4,5,6,7} ;是正确的.
答案:Y
三、单选 共35题 (共计35分)
第1题
C语言程序一行写不下时,应该().
A:用回车换行
B:在任意空格处换行
C:用分号换行
D:用逗号换行
答案:B
第2题
以下叙述不正确的是().
A:一个C源程序可由一个或多个函数组成
B:一个C源程序必须包含一个main()函数
C:C程序的基本组成单位是函数
D:在C程序中,注释说明只能位于一条语句的后面
答案:D
第3题
以下叙述中正确的是().
A:构成C程序的基本单位是函数
B:可以在一个函数中定义另一个函数
C:main()函数必须放在其它函数之前
D:所有被调用的函数一定要在调用之前进行定义
答案:A
第4题
C语言中标识符只能由字母、数字和下划线3种字符组成,且第一个字符().
A:必须为字母
B:必须为下划线
C:必须为字母或下划线
D:可以是字母、数字和下划线中任意一种字符
答案:C
第5题
C语言的注释定界符是().
A:{ }
B:[ ]
C:\* *\
D:/* */
答案:D
第6题
若变量x、y、z均为double类型且已经正确赋值,不能正确表示x/(y×z)的C语言表达式是().
A:x/y*z
B:x*(1/(y*z))
C:x/y*1/z
D:x/y/z
答案:A
第7题
以下选项中合法的实型常数是().
A:5E2.0
B:E-3
C:.2E0
D:1.3E
答案:C
第8题
若变量a与i已正确定义,且i已正确赋值,合法的语句是().
A:a==1
B:++i;
C:a=a++=5;
D:a=int(i);
答案:B
第9题
以下程序不用第三个变量,实现将两个数进行对调的操作,请填空().
#include<stdio.h>
main()
{
int a, b;
scanf("%d%d", &a, &b);
printf("a=%d b=%d", a, b);
a = a + b; b = a - b; a = _____;
printf("a=%d b=%d\n", a, b);
}
A:a=b
B:a-b
C:b*a
D:a/b
答案:B
第10题
设x、y、t均为int型变量,则执行语句:x=y=3;t=++x||++y;后,y的值为().
A:不定值
B:4
C:3
D:1
答案:C
第11题
有定义语句:int a =1 ,b =2,c =3,x;,则以下选项中各程序段执行后,x的值不等于3的是().
A:
if (c < a) x = 1;
else if (b < a) x = 2;
else x = 3;
B:
if (a < 3) x = 3;
else if (a < 2) x = 2;
else x = 1;
C:
if (a < 3) x = 3;
if (a < 2) x = 2;
if (a < 1) x = 1;
D:
if (a < b) x = b;
if (b < c) x = c;
if (c < a) x = a;
答案:C
第12题
以下程序的执行结果是().
main()
{
int num = 0;
while (num <= 2)
{
num++;
printf("%d,", num);
}
}
A:0,1,2
B:1,2,
C:1,2,3,
D:1,2,3,4,
答案:C
第13题
执行语句 for(i=1;i++<4;); 后变量 i 的值是().
A:3
B:4
C:5
D:不定
答案:C
第14题
C语言中while和do—while循环的主要区别是().
A:While的循环控制条件比do—while的循环控制条件严格
B:do—while的循环体至少无条件执行一次
C:do—while允许从外部转到循环体内
D:do—while循环体不能是复合语句
答案:B
第15题
以下for循环的执行次数是().
for (x = 0, y = 0; (y = 123) && (x < 4); x++);
A:是无限循环
B:循环次数不定
C:4次
D:3次
答案:C
第16题
以下程序中,while循环的循环次数是().
main()
{
int i = 0;
while (i < 10)
{
if (i < 1)continue;
if (i == 5)break;
i++;
}
}
A:1
B:4
C:6
D:死循环,不能确定次数
答案:D
第17题
判断两个字符串是否相等,正确的表达方式是().
A:while(s1= =s2)
B:while(s1=s2)
C:while(strcmp(s1,s2)= =0)
D:while(strcmp(s1,s2)=0)
答案:C
第18题
int a = 1, b = 2, c = 3;
if (a > c)b = a; a = c; c = b;
则c的值为().
A:1
B:2
C:3
D:不一定
答案:B
第19题
以下程序的运行结果是().
main()
{
int i = 1, sum = 0;
while (i < 10)
sum = sum + 1; i++;
printf("i=%d,sum=%d", i, sum);
}
A:i=10,sum=9
B:i=9,sum=9
C:i=2,sum=1
D:无限循环(死循环)
答案:D
第20题
下面程序段的输出结果是().
a = 1; b = 2; c = 2;
while (a < b < c)
{
t = a;
a = b;
b = t;
c--;
}
printf("%d,%d,%d", a, b, c);
A、1,2,0
B、2,1,0
C、1,2,1
D、2,1,1
答案:A
第21题
表达式18/4*sqrt(4.0)/8值的数据类型为().
A:int
B:float
C:double
D:不确定
答案:C
第22题
为了提高程序的运行速度,在函数中对于整型或指针可以使用()型的变量.
A:auto
B:register
C:static
D:extern
答案:B
第23题
C语言程序中,当调用函数时().
A:实参和虚参各占一个独立的存储单元
B:实参和虚参可以共用存储单元
C:可以由用户指定是否共用存储单元
D:计算机系统自动确定是否共用存储单元
答案:A
第24题
以下程序的输出结果为().
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
第25题
凡是函数中未指定存储类别的局部变量,其隐含的存储类别为().
A:自动(auto)
B:静态(static)
C:外部(extern)
D:寄存器(register)
答案:A
第26题
下列定义数组的语句中不正确的是().
A:static int a[2][3]={1,2,3,4,5,6};
B:static int a[2][3]={{1},{4,5}};
C:static int a[][3]={{1},{4}};
D:static int a[][]={{1,2,3},{4,5,6}};
答案:D
第27题
以下程序中函数sort()的功能是对数组a中的数据进行由大到小的排序.
#include<stdio.h>
void sort(int a[], int n)
{
int i, j, t;
for (i = 0; i < n - 1; i++)
for (j = i + 1; j < n; j++)
if (a[i] < a[j])
{
t = a[i]; a[i] = a[j]; a[j] = t;
}
}
void main()
{
int aa[10] = { 1,2,3,4,5,6,7,8,9,10 }, i;
sort(&aa[3], 5);
for (i = 0; i < 10; i++)
printf("%d,", aa[i]);
printf("\n");
}
程序运行后的输出结果是().
A:1,2,3,4,5,6,7,8,9,10
B:10,9,8,7,6,5,4,3,2,1
C:1,2,3,8,7,6,5,4,9,10,
D:1,2,10,9,8,7,6,5,4,3
答案:C
第28题
若有说明:int a[10];则对a数组元素的正确引用是().
A:a[10]
B:a[3,5]
C:a(5)
D:a[10-10]
答案:D
第29题
有下面的程序段:
char a[3], b[] = "china";
a = b;
printf("%s", a);
则().
A:运行后将输出china
B:运行后将输出ch
C:运行后将输出chi
D:编译出错
答案:D
第30题
以下程序段 char *alp[]={"ABC","DEF","GHI"}; int j; puts(alp[1]);的输出结果是().
A:A
B:B
C:D
D:DEF
答案:D
第31题
若有定义:char *p1,*p2,*p3,*p4,ch;则不能正确赋值的程序语句为().
A:p1=&ch; scanf("%c",p1);
B:p2=(char *)malloc(1);scanf("%c",p2);
C:*p3=getchar();
D:p4=&ch;*p4=getchar();
答案:C
第32题
若有说明:int n=2,*p=&n,*q=p;,则以下非法的赋值语句是().
A:p=q;
B:*p=*q;
C:n=*q;
D:p=n;
答案:D
第33题
下面说明不正确的是().
A:char a[10]="china";
B:char a[10],*p=a;p="china"
C:char *a;a="china";
D:char a[10],*p;p=a="china"
答案:D
第34题
若有int *p,a; p=&a,下列说法不正确的是().
A:&*p==&a
B:*&a==a
C:(*p)++==a++
D:*(p++)==a++
答案:D
第35题
设p1和p2是指向同一个字符串的指针变量,c为字符变量,则以下不能正确执行的赋值语句是().
A:c=*p1+*p2;
B:p2=c;
C:p1=p2;
D:c=*p1*(*p2);
答案:B
四、程序填空 共2题 (共计10分)
第1题
题目:函数fun的功能是:计算如“图片1”直到“图片2” 。
若x=2.5,函数值为1.917915。
#include<stdio.h>
#include<math.h>
double fun(double x)
{
double f, t;
int n;
f = 1.0 + x;
t = 【 ? 】;
n = 1;
do
{
n++;
t *= (-1.0) * x / 【 ? 】;
f += t;
}
/***********SPACE***********/
while (【 ? 】 >= 1e-6);
return f;
}
main()
{
double x, y;
x = 2.5;
y = fun(x);
printf("\nThe result is :\n");
printf("x=%-12.6f y=%-12.6f\n", x, y);
}
答案:
=======(答案1)=======
x
=======(答案2)=======
n
=======(答案3)=======
fabs(t)
第2题
题目:输入一字符串,检查字符串是否满足以下条件:
(1)字符串s中左括号“(”的个数与右括号“)”的个数相同;
(2)从字符串s的首字符起顺序查找右括号“)”的个数在
任何时候均不超过所遇到的左括号“(”的个数。若字
符串同时满足上述两个条件,函数返回1,否则返回0。
#include<stdio.h>
#include<string.h>
void main()
{
int fun(char s[]);
char s[80];
int c;
printf("Please input the string:");
gets(s);
c = fun(s);
printf("c=%d\n", c);
}
int fun(char s[])
{
int c1, c2, i;
i = c1 = c2 = 0;
while (s[i] != '\0')
{
if (s[i] == '(') c1++;
else if (s[i] == ')')
{
c2++;
if (【 ? 】) return(0);
}
i++;
}
return(【 ? 】);
}
答案:
=======(答案1)=======
c2>c1
=========或=========
c1<c2
=======(答案2)=======
c1==c2
=========或=========
c2==c1
五、程序改错 共2题 (共计10分)
第1题
功能:输入两个实数,按代数值由小到大输出它们,并在fun()
函数中输出。(输出的数据都保留2位小数)
#include <stdio.h>
fun()
{
float t;
float a, b;
scanf("%f %f", &a, &b);
if (a < b)
{
t = a;
a = b;
b = t;
}
printf("%5.2f,%5.2f\n", &a, &b);
}
main()
{
fun();
}
答案:
=======(答案1)=======
float t;
=======(答案2)=======
if(a>b)
=========或=========
if(a>=b)
=========或=========
if(b<a)
=========或=========
if(b<=a)
=======(答案3)=======
printf("%5.2f,%5.2f\n",a,b);
第2题
调用优化的sort函数,完成对数组a的冒泡降序排序。
下面给定的程序存在错误,请改正。
#include<stdio.h>
void sort(int[], int);
int main()
{
int i, a[] = { 6,0,-3,9,4,-5,18,20 };
int n = sizeof(a) / sizeof(a[0]);
sort(n, a[n]);
for (i = 0; i < n; i++)
printf("%d\t", a[i]);
printf("\n");
return 0;
}
void sort(int a[], int n)
{
int i, j, k, swap;
for (i = 0; i < n - 1; i++)
{
swap = 0;
for (j = n - 1; j > i; j++)
if (a[j] > a[j - 1])
k = a[j], a[j] = a[j - 1], a[j - 1] = k, swap = 1;
if (swap)break;
}
}
答案:
=======(答案1)=======
sort(a, n);
=========或=========
sort(&a[0], n);
=======(答案2)=======
for(j=n-1;j>i;j--)
=========或=========
for(j=n-1;j>i;--j)
=========或=========
for(j=n-1;j>i;j=j-1)
=======(答案3)=======
if(!swap)break;
=========或=========
if(swap ==0)break;
六、程序设计 共2题 (共计10分)
第1题
题目:输入一个正整数repeat (0<repeat<10),做repeat次下列运算:
输入一个正整数 n,计算1-2/3+3/5-4/7+5/9-6/11+……的前n项之和,
输出时保留3位小数。
输入输出示例:括号内是说明
输入
3 (repeat=3)
1 (n=1)
3 (n=3)
5 (n=5)
输出
sum = 1.000
sum = 0.933
sum = 0.917
#include <stdio.h>
void main()
{
int flag, i, n;
int repeat, ri;
double item, sum;
scanf("%d", &repeat);
for (ri = 1; ri <= repeat; ri++)
{
scanf("%d", &n);
/**********Program**********/
//只能用上述已定义的变量,如循环变量用变量i,正负符号用变量flag,
//求和项用变量item等等
/********** End **********/
printf("sum = %.3f\n", sum);
}
}
答案:
sum = 0;
flag = 1;
for (i = 1; i <= n; i++)
{
item = flag * 1.0 * i / (2 * i - 1);
sum = sum + item;
flag = -flag;
}
第2题
请编写函数sum,其功能是:用for循环语句求1到n之间所有偶数之和(若n为偶数包括n)
并将结果返回给主函数。(n值由主函数传入)
运行程序后若输入:10,则输出为:sum=30。
#include <stdio.h>
int sum(int n)
{
/**********Program**********/
/********** End **********/
}
void main()
{
int n, s;
scanf("%d", &n);
s = sum(n);
printf("sum=%d\n", s);
}
答案:
int i, s = 0;
for (i = 0; i <= n; i = i + 2)
s = s + i;
return s;
若有错误或疑问,欢迎评论区留言讨论。