收集了一些经典C语言计算机二级和C语言期末考试题库
整理不易,大家点赞收藏支持一下
祝大家计算机二级和期末考试都高分过
系列文章:
目录
一、填空 共15题 (共计15分)
第1题
运行如下程序:
#include <stdio.h>
void main()
{
int a, b, c;
scanf("%d,%d,%d", &a, &b, &c);
printf("%d,%d,%d", a, b, c);
}
运行时,输入3,4,5,输出的值为【1】.
=======(答案1)=======
3,4,5
第2题
若有定义int m=5,y=2;则执行表达式y+=y-=m*=y后y的值为【1】.
=======(答案1)=======
-16
第3题
已知a=13,b=6,则表达式a/b的十进制数值为【1】.
=======(答案1)=======
2
第4题
设x、y、z均为int型变量,请写出描述"x或y中至少有一个小于z"的表达式【1】.
=======(答案1)=======
x<z||y<z
第5题
若a是int型变量,则执行表达式a=25/3%3后a的值是【1】.
=======(答案1)=======
2
第6题
结构化程序所规定的3种基本控制结构是【1】结构、【2】结构和【3】结构.
=======(答案1)=======
顺序
=========或=========
{{无序}}
=======(答案2)=======
循环
=======(答案3)=======
选择
第7题
下面程序段中循环体的执行次数是【1】 .
a = 10;
b = 0;
do
{
b += 2;
a -= 2 + b;
} while (a >= 0);
=======(答案1)=======
3
第8题
从函数的形式上看,函数分为无参函数和【1】两种类型.
=======(答案1)=======
有参函数
第9题
下面程序的输出是【1】 .
#include<stdio.h>
fun(int x)
{
static int a = 3;
a += x;
return(a);
}
void main()
{
int k = 2, m = 1, n;
n = fun(k);
n = fun(m);
printf("%d", n);
}
=======(答案1)=======
6
第10题
以下程序的输出结果是【1】.
#include<stdio.h>
void main()
{
char s[] = "abcdef";
s[3] = '\0';
printf("%s\n", s);
}
=======(答案1)=======
abc
第11题
若有定义:char s[ ]="china";
则VC++系统为数组s开辟【1】个字节的内存单元.
=======(答案1)=======
6
第12题
下列程序的运行结果为【1】.
main()
{
int x, * p, ** q;
x = 10;
p = &x;
q = &p;
printf("%d\n", **q);
}
=======(答案1)=======
10
第13题
在C程序中,指针变量的值增1,表示指针变量指向下一个存储单元,指针变量中具体增加的字节数由系统自动根据指针变量的【1】决定.
=======(答案1)=======
所指对象数据类型
第14题
C语言中,【1】是程序的基本组成部分.
=======(答案1)=======
函数
第15题
C语言中一个函数由函数首部和【1】两部分组成.
=======(答案1)=======
函数体
二、判断 共8题 (共计8分)
第1题
int a = 7, b = 9, t; t = (a > b) ? a : b;
t 的值为7.
答案:N
第2题
在C语言中,变量必需先定义后使用.
答案:Y
第3题
for (i = 4; i > 1; i--)for (j = 1; j < i; j++)putchar('#');
输出为######.
答案:Y
第4题
s = 6; do s -= 2; while (!s);
能循环三次.
答案:N
第5题
实参和形参之间,数据的传递采用值传送的方法.
答案:Y
第6题
在一个C程序中,main函数必须出现在所有函数之前.
答案:N
第7题
char a1[] = "LiMing", a2[10]; strcpy(a2, a1); puts(a2);
能将a1串赋给a2并输出.
答案:Y
第8题
若有int a[10],*p;p=&a[5];则p[-1]是不合法的.
答案:N
三、单选 共20题 (共计20分)
第1题
C语言程序的基本单位是().
A:函数
B:过程
C:子程序
D:子例程
答案:A
第2题
C语言中标识符只能由字母、数字和下划线3种字符组成,且第一个字符().
A:必须为字母
B:必须为下划线
C:必须为字母或下划线
D:可以是字母、数字和下划线中任意一种字符
答案:C
第3题
以下程序其输出结果是().
#include <stdio.h>
void main()
{
int a = 2, b = 5;
printf("a=%%d,b=%%d\n", a, b);
}
A:a=%2,d=%5
B:a=2,b=5
C:a=%%d,b=%%5
D:a=%d,b=%d
答案:D
第4题
判断char型变量cl是否为小写字母的正确表达式是().
A:'a'<=cl<='z'
B:(cl>=a)&&(cl<=z)
C:('a'>=cl)||('z'<=cl)
D:(cl>='a')&&(cl<='z')
答案:D
第5题
以下选项中不正确的实型常量是().
A:123
B:1e4
C:3.640E-1
D:0.35
答案:A
第6题
判断两个字符串是否相等,正确的表达方式是().
A:while(s1= =s2)
B:while(s1=s2)
C:while(strcmp(s1,s2)= =0)
D:while(strcmp(s1,s2)=0)
答案:C
第7题
在以下给出的表达式中,与 do--while(E)语句中的(E)不等价的表达式是().
A:(!E==0)
B:(E>0||E<0)
C:(E==0)
D:(E!=0)
答案:C
第8题
以下程序的执行结果是().
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
第9题
以下语句中,循环次数不为10次的语句是().
A: for (i = 1; i < 10; i++);
B: i = 1; do { i++; } while (i <= 10);
C: i = 10; while (i > 0) { --i; }
D: i = 1; m:if (i <= 10) { i++; goto m; }
答案:A
第10题
以下程序的输出结果是().
#include <stdio.h>
void main()
{
int a = -1, b = 4, k;
k = (++a < 0) && !(b-- <= 0);
printf(" %d%d%d \n", k, a, b);
}
A:104
B:103
C:003
D:004
答案:D
第11题
关于return语句,下列正确的说法是().
A:可以在同一函数中出现多次
B:在主函数中不能出现
C:必须在每个函数中出现
D:只能在除主函数之外的函数中出现一次
答案:A
第12题
若使用一维数组名作函数实参,则以下正确的说法是().
A:必须在主调函数中说明此数组的大小
B:实参数组类型与形参数组类型可以不匹配
C:在被调用函数中,不需要考虑形参数组的大小
D:实参数组名与形参数组名必须一致
答案:A
第13题
以下不正确的说法是:C语言规定().
A:实参可以是常量,变量或表达式
B:形参可以是常量,变量或表达式
C:实参可以为任何类型
D:形参应与其对应的实参类型一致
答案:B
第14题
执行下面程序后,输出结果是().
#include<stdio.h>
int max(int x, int y)
{
int z;
if (x > y) z = x;
else z = y;
return(z);
}
int main()
{
int a = 45, b = 27, c = 0;
c = max(a, b);
printf("%d\n", c);
return 0;
}
A:45
B:27
C:18
D:72
答案:A
第15题
下列定义不正确的是().
A:#define PI 3.141592
B:#define S 345
C:int max(x,y); int x,y; { }
D:static char c;
答案:C
第16题
若输入ab,程序运行结果为().
main()
{
static char a[3];
scanf("%s", a);
printf("%c,%c", a[1], a[2]);
}
A:a,b
B:a,
C:b,
D:程序出错
答案:C
第17题
若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是().
A:&t[3][2]
B:t[3]
C:&t[1]
D:t[2]
答案:D
第18题
有定义:char*p1,*p2;则下列表达式中正确合理的是().
A:p1/=5
B:p1*=p2
C:p1=&p2
D:p1+=5
答案:C
第19题
字符串指针变量中存入的是().
A:字符串
B:字符串的首地址
C:第一个字符
D:字符串变量
答案:B
第20题
具有相同类型的指针变量p与数组a,不能进行的操作是().
A:p=a;
B:*p=a[0];
C:p=&a[0];
D:p=&a;
答案:D
四、程序填空 共2题 (共计20分)
第1题
题目:函数fun的功能是:统计长整数n的各位上出现数字1、2、3的次数,并用
外部(全局)变量c1、c2、c3返回主函数。
例如:当n=123114350时,结果应该为:c1=3 c2=1 c3=2。
#include <stdio.h>
int c1, c2, c3;
void fun(long n)
{
c1 = c2 = c3 = 0;
while (n)
{
switch (【 ? 】)
{
case 1:
c1++; 【 ? 】;
case 2:
c2++; 【 ? 】;
case 3:
c3++;
}
n /= 10;
}
}
main()
{
long n = 123114350L;
fun(n);
printf("\nThe result: \n");
printf("n=%ld c1=%d c2=%d c3=%d\n", n, c1, c2, c3);
}
答案:
=======(答案1)=======
n % 10
=======(答案2)=======
break
=======(答案3)=======
break
第2题
功能:输入一个整数,计算它可能是哪两个整数的平方和,并打印
结果数据。
如:34是5和3或3和5的平方和。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
void main(void)
{
int given;
int row, column;
int count;
char line[100];
printf("\nRepresenting a Given Number as the Sum of Two Squares");
printf("\n=====================================================\n");
printf("\nAn integer Please ---> ");
gets(line);
given = atoi(line);
printf("\nCount X Y");
printf("\n----- ----- -----");
row = 1;
column = (int)(sqrt((double)given) + 0.5);
count = 0;
while (row <= given && column > 0)
if (row * row + column * column == given)
{
【 ? 】;
printf("\n%5d%7d%7d", count, row, column);
row++;
column--;
}
else if (row * row + column * column > given)
【 ? 】;
else
【 ? 】;
if (count == 0)
printf("\n\nSorry, NO ANSWER found.");
else
printf("\n\nThere are %d possible answers.", count);
}
答案:
=======(答案1)=======
count++
=========或=========
++count
=========或=========
count=count+1
=======(答案2)=======
column--
=========或=========
--column
=========或=========
column=column-1
=======(答案3)=======
row++
=========或=========
++row
=========或=========
row= row + 1
五、程序改错 共2题 (共计20分)
第1题
题目:下列给定程序中函数fun的功能是:
计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。
其中x和y的值不相等,z和y的值不相等。
例如:当x的值为9,y的值为11,z的值为15时,函数值为-3.50。
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define FU(m,n) ((m/n))
float fun(float a, float b, float c)
{
float value;
value = FU(a + b, a - b) + FU(c + b, c - b);
Rteurn(Value);
}
main()
{
float x, y, z, sum;
printf("Input x y z: ");
scanf("%f%f%f", &x, &y, &z);
printf("x=%f,y=%f,z=%f\n", x, y, z);
if (x == y || y == z)
{
printf("Data error!\n");
exit(0);
}
sum = fun(x, y, z);
printf("The result is : %5.2f\n", sum);
}
答案:
=======(答案1)=======
#define FU(m,n) (m)/(n)
=======(答案2)=======
return (value);
第2题
题目:fun函数的功能是:先从键盘上输入一个3行3列矩阵的各
个元素的值,然后输出主对角线上的元素之和sum。
请改正程序中的错误,使它能得出正确的结果。
#include "stdio.h"
int fun()
{
int a[3][3], sum;
int i, j;
sum = 0;
for (i = 0; i < 3; i++)
for (j = 0; j < 3; j++)
scanf("%d", &a[i][j]);
for (i = 0; i < 3; i++)
sum = sum + a[i][j];
printf("sum=%f\n", sum);
}
main()
{
fun();
}
答案:
=======(答案1)=======
sum=sum+a[i][i];
=========或=========
sum+=a[i][i];
=======(答案2)=======
printf("sum=%d\n",sum);
六、程序设计 共2题 (共计17分)
第1题
题目:公式e=1+1/1!+1/2!+1/3!+......,求 e 的近似值,精度为10的-6次方。
#include <stdio.h>
//函数功能:计算e,精度为f;
double fun(double f)
{
double e = 1;
double jc = 1;//求阶乘,并存入jc中
/**********Program**********/
/********** End **********/
return e;
}
void main()
{
printf("e=%f\n", fun(10e-6));
}
答案:
int i = 1;
while (1 / jc >= f)
{
e = e + 1 / jc;
i++;
jc = jc * i;
}
第2题
题目:主函数main()中字符串a,b为测试数据,字符串a中字符已
按ASCII码值降序排列,将字符串b中ASCII码为偶数的字符
依次插入到字符串a中,使字符串a中字符仍按ASCII码值降
序排列。再删除字符串a中的重复字符,使相同字符只出现
一次。
编写程序:
1、编写void insert(char a[],char b[])函数,按上述规
则将字符串b中字符插入到字符串a中。
2、编写 void del(char a[])函数,删除字符串a中的重复
字符,使相同字符只出现一次。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<ctype.h>
#include<math.h>
void insert(char a[], char b[])
{
/**********Program**********/
/********** End **********/
}
void del(char a[])
{
/**********Program**********/
/********** End **********/
}
void main() {
char a[30] = "9777532";
char b[10] = "987645231";
FILE* fp;
if ((fp = fopen("data.txt", "w")) == NULL)
{
printf("File open error\n");
exit(0);
}
insert(a, b);
fprintf(fp, "After insterting:");
printf("After insterting:");
fprintf(fp, "%s\n", a);
printf("%s\n", a);
del(a);
fprintf(fp, "After deleting:");
printf("After deleting:");
fprintf(fp, "%s\n", a);
printf("%s\n", a);
fclose(fp);
}
答案:
void insert(char a[], char b[])
{
int i, j;
int n = 0;
while (a[n]) n++;
for (i = 0; b[i] != '\0'; i++)
{
if (b[i] % 2) continue;
j = n;
while (a[j - 1] < b[i] && j>0)
{
a[j] = a[j - 1];
j--;
}
a[j] = b[i];
n++;
a[n] = '\0';
}
}
void del(char a[])
{
int i = 0, j, k;
for (j = 1; a[j] != '\0'; j++)
if (a[j] != a[i])
{
i++;
a[i] = a[j];
}
a[++i] = '\0';
}
若有错误或疑问,欢迎评论区留言讨论。