收集了一些经典C语言计算机二级和C语言期末考试题库
整理不易,大家点赞收藏支持一下
祝大家计算机二级和期末考试都高分过
系列文章:
目录
一、填空 共25题 (共计25分)
第1题 (1.0分)
C语言中的字符变量用保留字【1】来说明.
=======(答案1)=======
char
第2题 (1.0分)
下列程序的输出结果是【1】.
#include<stdio.h>
void main()
{
int i = 560, h, m;
h = i / 60;
m = i - 60 * h;
printf("%d分钟<=>%d小时%d分钟\n", i, h, m);
}
=======(答案1)=======
560分钟<=>9小时20分钟
第3题 (1.0分)
以下程序的输出结果为【1】.
#include "stdio.h"
main()
{
int a = 010, j = 10;
printf("%d,%d\n", ++a, j--);
}
=======(答案1)=======
9,10
第4题 (1.0分)
int a=1,b=2; c语言表达式(a&b)||(a|b) 的值是【1】
=======(答案1)=======
1
第5题 (1.0分)
下列程序的输出结果是【1】.
#include<stdio.h>
void main()
{
int i = -200, j = 25;
printf("%d %d", i, j);
printf("i=%d,j=%d\n", i, j);
}
=======(答案1)=======
-200 25i=-200,j=25
第6题 (1.0分)
以下程序运行结果是【1】.
#include<stdio.h>
void main()
{
int a = 4, b = 3, c = 5, t = 0;
if (a < b)t = a; a = b; b = t;
if (a < c)t = a; a = c; c = t;
printf("%d %d %d\n", a, b, c);
}
=======(答案1)=======
5 0 3
第7题 (1.0分)
C语言的三种基本结构是【1】结构、选择结构、循环结构.
=======(答案1)=======
顺序
第8题 (1.0分)
为了避免嵌套条件语句的二义性,C语言规定else与其前面最近的并没有与其他else配过对的【1】语句配对.
=======(答案1)=======
if
第9题 (1.0分)
下面程序段中循环体的执行次数是【1】 .
a = 10;
b = 0;
do {
b += 2;
a -= 2 + b;
} while (a >= 0);
=======(答案1)=======
3
第10题 (1.0分)
下面程序的运行结果是【1】.
#include<stdio.h>
void main()
{
int a, s, n, count;
a = 2; s = 0; n = 1; count = 1;
while (count <= 7)
{
n = n * a;
s = s + n;
++count;
}
printf("s=%d", s);
}
=======(答案1)=======
s=254
第11题 (1.0分)
下面程序的运行结果是【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);
}
int plus(int x, int y)
{
int z;
z = x + y;
return(z);
}
=======(答案1)=======
A+B=9
第12题 (1.0分)
表达式pow(2.8,sqrt(fabs(x))值的数据类型为【1】.
=======(答案1)=======
double
第13题 (1.0分)
以下程序的输出结果是【1】 .
#include<stdio.h>
int f(int n)
{
if (n == 1)return 1;
else return f(n - 1) + 1;
}
void main()
{
int i, j = 0;
for (i = 1; i < 3; i++)
j += f(i);
printf("%d\n", j);
}
=======(答案1)=======
3
第14题 (1.0分)
预处理命令行都必须以【1】号开始.
=======(答案1)=======
#
第15题 (1.0分)
下面程序的运行结果是【1】 .
#include<stdio.h>
void main()
{
int x = 10;
func(int x);
func(x);
printf("%d\n", x);
}
func(int x)
{
x = 20;
}
=======(答案1)=======
10
第16题 (1.0分)
若有定义:int a[3][4]={{1,2},{0},{4,6,8,10}};,则初始化后,a[1][2]得到的初值是【1】 ,a[2][1]得到的初值是 【2】 .
=======(答案1)=======
0
=======(答案2)=======
6
第17题 (1.0分)
求字符串长度的库函数是【1】,只写函数名即可.
=======(答案1)=======
strlen
第18题 (1.0分)
在C语言中,二维数组元素在内存中的存放顺序是【1】.
=======(答案1)=======
按行优先存储
第19题 (1.0分)
执行语句char str[81]="abcdef";后,字符串str结束标志存储在str[【1】]
(在括号内填写下标值)中.
=======(答案1)=======
6
第20题 (1.0分)
C语言中,数组元素的下标下限为【1】.
=======(答案1)=======
0
第21题 (1.0分)
程序运行时若依次输入25,3,40,则输出结果是【1】.
#include<stdio.h>
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", *p2);
}
=======(答案1)=======
25
第22题 (1.0分)
在C程序中,只能给指针变量赋【1】值和【2】值.
=======(答案1)=======
地址
=========或=========
确定地址
=======(答案2)=======
NULL
第23题 (1.0分)
设char *s="\ta\017bc";则该指针变量s指向的字符串所占的字节数是【1】.
=======(答案1)=======
6
第24题 (1.0分)
设有如下宏定义:
#define SWAP(z, x, y) { z = x, x = y, y = z }
以下程序段通过宏调用实现变量A)b内容的交换.请填空将语句补充完整.
int a=5,b=16,c;
SWAP(【1】 ,a,b);
=======(答案1)=======
c
第25题 (1.0分)
程序运行时若依次输入2,3,40,则输出结果是【1】.
#include<stdio.h>
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
二、单选 共40题 (共计40分)
第1题 (1.0分)
C语言源程序文件经过C编译程序编译连接之后生成一个后缀为()的可执行文件.
A:.c
B:.obj
C:.exe
D:.bas
答案:C
第2题 (1.0分)
在一个C程序中().
A:main函数必须出现在所有函数之前
B:main函数可以在任何地方出现
C:main函数必须出现在所有函数之后
D:main函数必须出现在固定位置
答案:B
第3题 (1.0分)
以下叙述不正确的是().
A:一个C源程序可由一个或多个函数组成
B:一个C源程序必须包含一个main()函数
C:C程序的基本组成单位是函数
D:在C程序中,注释说明只能位于一条语句的后面
答案:D
第4题 (1.0分)
C语言程序中必须有的函数是().
A:#include "stdio.h"
B:main
C:printf
D:scanf
答案:B
第5题 (1.0分)
任何一个C语言的可执行程序都是从()开始执行的.
A:程序中的第一个函数
B:main()函数的入口处
C:程序中的第一条语句
D:编译预处理语句
答案:B
第6题 (1.0分)
下列运算符中是C语言关系运算符的是().
A:~
B:!
C:&
D:!=
答案:D
第7题 (1.0分)
下列语句的结果是().
#include<stdio.h>
main()
{
int j;
j = 3;
printf("%d,", ++j);
printf("%d", j++);
}
A:3,3
B:3,4
C:4,3
D:4,4
答案:D
第8题 (1.0分)
以下程序的输出结果为().
#include<stdio.h>
main()
{
int i = 010, j = 10;
printf("%d,%d\n", ++i, j--);
}
A:11,10
B:9,10
C:010,9
D:10,9
答案:B
第9题 (1.0分)
已知int a;int b;float c;double d;,
则表达式a*b==c-d结果为()型.
A:Double
B:int
C:float
D:char
答案:B
第10题 (1.0分)
设以下变量均为int类型,则值不等于7的表达式是().
A:(x=y=6,x+y,x+1)
B:(x=y=6,x+y,y+1)
C:(x=6,x+1,y=6,x+y)
D:(y=6,y+1,x=y,x+1)
答案:C
第11题 (1.0分)
已知year为整型变量,不能使表达式(year%4==0&&year%100!=0)||year%400==0的值为"真"的数据是().
A:1990
B:1992
C:1996
D:2000
答案:A
第12题 (1.0分)
若以下变量均是整型,且num=sum=7;则计算表达式sum=num++,sum++,++num后sum的值为().
A:7
B:8
C:9
D:10
答案:B
第13题 (1.0分)
对于条件表达式(M)?(a++):(a--),其中表达式M等价于().
A:M==0
B:M==-1
C:M!=0
D:M!=1
答案:C
第14题 (1.0分)
以下程序的输出结果是().
#include<stdio.h>
main()
{
float x = 3.6;
int i;
i = (int)x;
printf("x=%f,i=%d\n", x, i);
}
A:x=3.600000,i=4
B:x=3,i=3
C:x=3.600000,i=3
D:x=3 i=3.600000
答案:C
第15题 (1.0分)
printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列,如果字符串长度大于5,则输出按方式().
A:从左起输出该字符串,右补空格
B:按原字符长从左向右全部输出
C:右对齐输出该字串,左补空格
D:输出错误信息
答案:B
第16题 (1.0分)
下面的程序().
#include <stdio.h>
void main()
{
int x = 3, y = 0, z = 0;
if (x = y + z)
printf(" * * * *");
else
printf("# # # #");
}
A:有语法错误不能通过编译
B:输出 * * * *
C:可以通过编译,但是不能通过连接,因而不能运行
D:输出# # # #
答案:D
第17题 (1.0分)
如下程序段的输出结果是().
#include <stdio.h>
void main()
{
int n = 9;
while (n > 6)
{
n--;
printf("%d", n);
}
}
A:987
B:876
C:8765
D:9876
答案:B
第18题 (1.0分)
语句while(!E);中的表达式!E等价于().
A:E==0
B:E!=1
C:E!=0
D:E==1
答案:A
第19题 (1.0分)
有定义语句:int a =1 ,b =2,c =3,x;,则以下选项中各程序段执行后,x的值不等于3的是().
#include <stdio.h>
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
第20题 (1.0分)
以下程序中,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
第21题 (1.0分)
有以下程序段
int n = 0, p;
do
{
scanf("%d", &p);
n++;
} while (p != 12345 && n < 3);
此处do-while循环的结束条件是().
A:p的值不等于12345并且n的值小于3
B:p的值等于12345并且n的值大于等于3
C:p的值不等于12345或者n的值小于3
D:p的值等于12345或者n的值大于等于3
答案:D
第22题 (1.0分)
结构化程序的三种控制结构分别是().
A:循环、分支、递归
B:顺序、循环、嵌套
C:循环、递归、选择
D:顺序、选择、循环
答案:D
第23题 (1.0分)
为了避免在嵌套的条件语句 if-else 中产生二义性,C语言规定:else子句总是与()配对.
A:缩排位置相同的if
B:其之前最近的if
C:其之后最近的if
D:同一行上的if
答案:B
第24题 (1.0分)
在C语言中,if语句后的一对原括号中,用以决定分支的流程的表达式().
A:只能用逻辑表达式
B:只能用关系表达式
C:只能用逻辑表达式或关系表达式
D:可用任意表达式
答案:D
第25题 (1.0分)
int a = 3, b = 2, c = 1;
if (a > b > c)a = b;
else a = c;
则a的值为().
A:3
B:2
C:1
D:0
答案:C
第26题 (1.0分)
在C语言中,调用函数除函数名外,还必须有().
A:函数预说明
B:实际参数
C:()
D:函数返回值
答案:C
第27题 (1.0分)
以下说法中正确的是().
A:宏替换是在程序编译时进行的
B:函数调用是在程序编译时进行的
C:宏替换时,如果实参是表达式,应先求表达式的值,再替换
D:函数调用时,如果实参是表达式,应将表达式的值传递给形参
答案:D
第28题 (1.0分)
以下正确的函数形式是().
A:
double fun(int x, int y)
{
z = x + y;
return z;
}
B:
fun(int x, y)
{
int z;
return z;
}
C:
fun(x, y)
{
int x, y;
double z;
z = x + y;
return z;
}
D:
double fun(int x, int y)
{
double z;
z = x + y;
return z;
}
答案:D
第29题 (1.0分)
以下叙述中不正确的是().
A:函数中的自动变量可以赋初值,每调用一次,赋一次初值
B:在调用函数时,实参和对应形参的类型要一致
C:全局变量的隐含类别是自动存储类别
D:函数形参可以说明为register变量
答案:C
第30题 (1.0分)
凡是函数中未指定存储类别的局部变量,其隐含的存储类别为().
A:自动(auto)
B:静态(static)
C:外部(extern)
D:寄存器(register)
答案:A
第31题 (1.0分)
以下程序的输出结果是().
#include <stdio.h>
f(int b[], int m, int n)
{
int i, s = 0;
for (i = m; i < n; i = i + 2) s = s + b[i];
return s;
}
void main()
{
int x, a[] = { 1,2,3,4,5,6,7,8,9 };
x = f(a, 3, 7);
printf("%d\n", x);
}
A:10
B:18
C:8
D:15
答案:A
第32题 (1.0分)
如下程序的输出结果是().
#include<stdio.h>
void main()
{
int a[3][3] = { {1,2},{3,4},{5,6} }, i, j, s = 0;
for (i = 1; i < 3; i++)
for (j = 0; j < i; j++)
s += a[i][j];
printf("%d\n", s);
}
A:14
B:19
C:20
D:21
答案:A
第33题 (1.0分)
假定int类型变量占用两个字节,其有定义:int x[10]={0,2,4};,则数组x在内存中所占字节数是().
A:3
B:6
C:10
D:20
答案:D
第34题 (1.0分)
若有以下的定义:int t[3][2];能正确表示t数组元素地址的表达式是().
A:&t[3][2]
B:t[3]
C:&t[1]
D:t[2]
答案:D
第35题 (1.0分)
若二维数组a有m列,则在a[i][j]前的元素个数为().
A:j*m+i
B:i*m+j
C:i*m+j-1
D:i*m+j+1
答案:B
第36题 (1.0分)
以下程序段中,不能正确赋字符串(编译时系统会提示错误)的是().
A:char s[10]="abcdefg";
B:char t[]="abcdefg",*s=t;
C:char s[10];s="abcdefg";
D:char s[10];strcpy(s,"abcdefg");
答案:C
第37题 (1.0分)
经过下列的语句 int j,a[10],*p;定义后,下列语句中合法的是().
A:p=p+2;
B:p=a[5];
C:p=a[2]+2;
D:p=&(j+2);
答案:A
第38题 (1.0分)
char *match(char c)是().
A:函数定义的头部
B:函数预说明
C:函数调用
D:指针变量说明
答案:A
第39题 (1.0分)
若有下列定义和语句,则对a数组元素的非法引用是().
int a[2][3], (*pt)[3]; pt=a;
A:pt[0][0]
B:*(pt+1)[2]
C:*(pt[1]+2)
D:*(a[0]+2)
答案:B
第40题 (1.0分)
若有语句int *point,a=4;和 point=&a;下面均代表地址的一组选项是().
A:a,point,*&a
B:&*a,&a,*point
C:*&point,*point,&a
D:&a,&*point,point
答案:D
三、程序填空 共1题 (共计10分)
第1题 (10.0分)
题目:以下程序的功能是打印以下图形。
#include<stdio.h>
int main()
{
static char a[5][9];
int i, j;
for (i = 0; i < 5; i++)
for (j = i; 【 ? 】; j++)
a[i][j] = '*';
for (i = 0; i < 5; i++)
{
for (j = 0; j < 9; j++)
printf("%c", 【 ? 】);
【 ? 】;
}
}
答案:
=======(答案1)=======
j< i + 5
=========或=========
i + 5 >j
=======(答案2)=======
a[i][j]
=======(答案3)=======
printf("\n")
四、程序改错 共1题 (共计10分)
第1题 (10.0分)
功能:计算并输出k以内最大的10个能被13或17整除的自然数之和。
k的值由主函数传入。
例如:若k的值为500,则函数值为4622。
#include <stdio.h>
int fun(int k)
{
int m = 0, mc = 0;
while ((k >= 2) || (mc < 10))
{
if ((k % 13 = 0) || (k % 17 = 0))
{
m = m + k;
mc++;
}
k++;
}
return ;
}
int main()
{
printf("%d\n", fun(500));
}
答案:
=======(答案1)=======
while ((2<=k)&&(mc<10))
=========或=========
while ((k>=2)&&(mc<10))
=========或=========
while ((2<=k)&&(mc<=9))
=========或=========
while ((k>=2)&&(mc<=9))
=======(答案2)=======
if(!(k%17!=0||k%13!=0 ))
=========或=========
if(k%13==0||k%17==0)
=======(答案3)=======
k--;
=========或=========
k=k-1;
=========或=========
k-=1;
=======(答案4)=======
return m;
=========或=========
return(m);
五、程序设计 共1题 (共计15分)
第1题 (15.0分)
题目:编程从键盘输入一个字符串和一个字符,统计该字符串中指定字符出现的次数。
#include <stdio.h>
#include <string.h>
void main()
{
char str[100], c;
int i = 0, count = 0;
printf("请输入一个字符串:");
gets(str);
printf("请输入指定的查找字符:");
scanf("%c", &c);
/**********Program**********/
/********** End **********/
printf("%d\n", count);
}
答案:
while (str[i])//该循环扫描字符数组
{
if (str[i] == c)
count++;
i++;
}
若有错误或疑问,欢迎评论区留言讨论。