班级: 学号: 姓名:
C语言 考试题
分数 班号 姓名 题号 一 二 三 四 五 六 七 八 九 十 总分 附加题 说明:考试成绩分为两部分:实验占10%,卷面笔试占90%,满分为100分。本试卷为卷面笔试部分,卷面满分为90分。
一、填空题(10分,第1小题4分,其余每空1分)
1.设有下列登记表,请采用最佳方式定义一种数据类型来表示这些数据的集合。
职业 姓名性别 未婚
name sex profession 年龄 single Age
婚姻状况marital
离婚日期 婚姻状况
已婚married divorcedDay
标记
marry 配偶 子女
日 年 月 Flag 姓名 人数
year month date marital 其中,配偶姓名用spouseName表示,子女人数用children表示。
31 班级: 学号: 姓名:
2
.
C
语
言
中
构
造
数
据
类
型
包
括 、 、 。
3.C语言中用_______表示逻辑值“假”,用________表示逻辑值“真”。
4.char *p[10];这条语句的含义是:__ ___ _ _ 。
二、判断下列问题描述正确与否,正确的打“√”,错误
的打“×”。(4分 ,每题1分)
1.如果在程序中定义静态变量和全局变量时,未明确指明其初始值,那么它们可以在程序编译阶段自动被初始化为0值。( )
2.在C语言中,可以用typedef定义一种新的数据类型。( ) 3.在C语言中,实参与其对应的形参各占独立的存储单元。
( )
4. 在C语言中,函数的定义可以嵌套。( )
三、选择题:(10分,每题2分)
1.若用数组名作为函数调用时的实参,则实际上传递给
形参的是( )。
32 班级: 学号: 姓名: A.数组的首地址 B. 数组的第一个元素值
C.数组中全部元素的值 D. 数组元素的个数 2.判断两个字符串s1和s2相等,应当使用( )。 A. if (s1 == s2) B. if (s1 = s2) C. if (!strcmp(s1,s2)) D. if (strcmp(s1,s2))
3.在while(x)语句中的x与下面条件表达式等价的是: 。
A. x!=0 B. x==1 C. x!=1 D. x==0
4.二维数组a有m行n列,则在a[i][j]之前的元素个数为( )。
A. j*n+i B. i*n+j C. i*n+j-1 D. i*n+j+1 5.设有声明语句:int a=1,b=0;则执行以下语句后输出为: 。
switch (a) {
case 1: switch (b) {
case 0: printf(\
break;
case 1: printf(\
break;
}
case 2: printf(\
break;
}
A)**0** B) **0****2** C)**0****1****2** D) 有语法错误
四、写出下列程序的运行结果。(6分,每题2分)
1.#include
void Fun(int *y) {
printf(\*y = 20;
printf(\
33 班级: 学号: 姓名: }
main() {
int x = 10;
printf(\Fun(&x);
printf(\}
运行结果是:
2.#include
int Fun(int x) {
static int y = 0; y += x; return y; } main() {
int x = 10, y = 0, k;
for(k=0; k<2; k++)
{
y = Fun(x);
printf(\
} }
运行结果是:
3.#include
34 班级: 学号: 姓名: main ( ) {
char a[] = \, b[] = \; char *p1, *p2 ; int i; p1 = a;
p2 = b;
for (i=0; i<7; i++) {
if (*(p1+i) == *(p2+i)) printf(\ }
printf(\
}
运行结果是:
五、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(10分,每空2分)
1. 下面这个程序用于读入5个整数,当程序读入的数据为正整数时,则显示该数,否则,不显示。读入5个数据后,程序结束运行。
#include
int i, n;
for (i=1; i<=5; i++) {
printf(\ scanf(\
if (n <= 0) _____________; printf(\ }
printf(\}
2. 韩信点兵。韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报
35