文档库 最新最全的文档下载
当前位置:文档库 › 哈工大C语言期末试题2005年C

哈工大C语言期末试题2005年C

哈工大2005年春季学期

C 语言 考试题

满分为100分。本试卷为卷面笔试部分,卷面满分为90分。 一、填空题(10分,第1小题4分,其余每空1分) 1.设有下列登记表,请采用最佳方式定义一种数据类型来表示这些数据的集合。 其中,配偶姓名用spouseName 表示,子女人数用children 表示。

! 姓名name 性别 sex 职业 profession 婚姻状况marital 未婚 年龄 single Age 已婚married 离婚日期 divorcedDay 配偶 姓名 子女 人数 年 year 月 month 日 date 婚姻状况标记 marry Flag marital

2.C语言中构造数据类型包括、、。

3.C语言中用_______表示逻辑值“假”,用________表示逻辑值

“真”。

4.char *p[10];这条语句的含义是:__ ___ _ _ 。

二、判断下列问题描述正确与否,正确的打“√”,错误的打

“×”。(4分,每题1分)

1.如果在程序中定义静态变量和全局变量时,未明确指明其初始值,那么它们可以在程序编译阶段自动被初始化为0值。()

2.在C语言中,可以用typedef定义一种新的数据类型。()

3.在C语言中,实参与其对应的形参各占独立的存储单元。()

4. 在C语言中,函数的定义可以嵌套。()

三、选择题:(10分,每题2分)

1.若用数组名作为函数调用时的实参,则实际上传递给形参

的是()。

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("**0**");

break;

case 1: printf("**1**");

break;

}

case 2: printf("**2**");

break;

}

A)**0** B) **0****2**

C)**0****1****2** D) 有语法错误

四、写出下列程序的运行结果。(6分,每题2分) 1.#include

void Fun(int *y)

{

printf("*y = %d\n", *y);

*y = 20;

printf("*y = %d\n", *y);

}

main()

{

int x = 10;

printf("x = %d\n", x);

Fun(&x);

printf("x = %d\n", x);

}

运行结果是:

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("y = %d\n", y);

}

}

运行结果是:

3.#include

main ( )

{

char a[] = "programming" , b[] = "language" ;

char *p1, *p2 ;

int i;

p1 = a;

p2 = b;

for (i=0; i<7; i++)

{

if (*(p1+i) == *(p2+i))

printf("%c" ,*(p1+i)) ;

}

printf("\n");

}

运行结果是:

五、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(10分,每空2分)

1.下面这个程序用于读入5个整数,当程序读入的数据为正整数时,则显示该数,否则,不显示。读入5个数据后,程序结束运行。

#include

main()

{

int i, n;

for (i=1; i<=5; i++)

{

printf("Please enter n:");

scanf("%d", &n);

if (n <= 0) _____________;

printf("n = %d\n", n);

}

printf("Program is over!\n");

}

2.韩信点兵。韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的数为4;最后再按从1至11报数,最末一个士兵报的数为10。下面程序的主要功能是计算韩信至少有多少兵。

#include

main()

{

int x = 1;

int find = 0;

for (x=1; ________; x++)

{

if (x%5==1 && x%6==5 && x%7==4 && x%11==10)

{

printf(" x = %d\n", x);

____________;

}

}

}

3.下面程序是计算字符串中实际字符的个数,即实现和字符串处理函数strlen相同的功能。

unsigned int MyStrlen(char str[])

{

unsigned int len = 0, i;

for (i=0; str[i]!= ; i++)

{

len ;

}

return len;

}

六、在下面这个程序中,要求其实现的功能是对用户输入的任意整数计算其阶乘,输入小于等于-1的数时退出程序。下面给出的是一个有错误的程序,请找出其中的错误,并改正之。(10分)

#include

#define END -1;

long Factorial(int x);

main()

{

int x;

while (1);

{

printf("input x:);

scanf("%d", x);

if (x <= END)

break

else

printf("%d! = %d\n", x, Factorial(x));

}

}

long Factorial(int x)

{

int i;

int result;

for (i=1, i<=x, i++)

result *= i;

}

七、编程(40分,第1和2小题各10分,第3小题20分) 1.编程计算1!+2!+3!+……+10!的值。 2. 从键盘任意输入10个不相同的整数,然后,输入要查找的数x ,如果在这10个数中找到x ,则打印“Found!”;如果找不到,则打印“Not found!”。 3.从键盘任意输入某班20个学生的成绩,打印最高分,并统计不及格学生的人数。

相关文档
相关文档 最新文档