1、春季答案哈工大2005年春季学期C语言 考试题题号一二三四五六七八九十总分附加题分数说明:考试成绩分为两部分:实验占10%,卷面笔试占90%,满分为100分。本试卷为卷面笔试部分,卷面满分为90分。注意行为规范,遵守考试纪律!参考答案一、填空题(10分,第1小题4分,其余每空1分)1设有下列登记表,请采用最佳方式定义一种数据类型来表示这些数据的集合。其中,配偶姓名用spouseName表示,子女人数用children表示。参考答案:struct person char name20; char sex; char profession20; union int singleAge; struc
2、t char spouseName20; int children; married; struct int year; int month; int date;divorcedDay; marital; int marryFlag; 2C语言中构造数据类型包括 数组 、 结构体、 共用体 。3C语言中用_0_表示逻辑值“假”,用_非0_表示逻辑值“真”。4char *p10;这条语句的含义是 含有10个元素的指针数组p,它的每一个元素都是一个字符指针,可以指向一个字符串 。二、判断下列问题描述正确与否,正确的打“”,错误的打“”。(4分 ,每题1分)1如果在程序中定义静态变量和全局变量时,未
3、明确指明其初始值,那么它们可以在程序编译阶段自动被初始化为0值。( ) 2在C语言中,可以用typedef定义一种新的数据类型。( ) 3在C语言中,实参与其对应的形参各占独立的存储单元。( )4. 在C语言中,函数的定义可以嵌套。( )三、选择题:(10分,每题2分)1若用数组名作为函数调用时的实参,则实际上传递给形参的是( A )。 A数组的首地址 B. 数组的第一个元素值C数组中全部元素的值 D. 数组元素的个数2判断两个字符串s1和s2相等,应当使用( C )。A. if (s1 = s2) B. if (s1 = s2) C. if (!strcmp(s1,s2) D. if (st
4、rcmp(s1,s2)3在while(x)语句中的x与下面条件表达式等价的是: A 。A. x!=0 B. x=1 C. x!=1 D. x=04二维数组a有m行n列,则在aij之前的元素个数为( B )。A. j*n+i B. i*n+j C. i*n+j-1 D. i*n+j+15设有声明语句:int a=1,b=0;则执行以下语句后输出为: B 。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*
5、2* C)*0*1*2* D) 有语法错误四、写出下列程序的运行结果。(6分,每题3分)1#includevoid Fun(int *y) printf(*y = %dn, *y);*y = 20; printf(*y = %dn, *y);main()int x = 10;printf(x = %dn, x);Fun(&x);printf(x = %dn, x);运行结果是:x = 10*y = 10*y = 20x = 202#include int Fun(int x) static int y = 0;y += x;return y; main() int x = 10, y = 0,
6、 k;for(k=0; k2; k+) y = Fun(x);printf(y = %dn, y); 运行结果是: y = 10 y = 203#includemain ( ) char a = programming , b = language ; char *p1, *p2 ; int i; p1 = a; p2 = b; for (i=0; i7; i+) if (*(p1+i) = *(p2+i) printf(%c ,*(p1+i) ; printf(n);运行结果是:ga五、阅读程序,在标有下划线的空白处填入适当的表达式或语句,使程序完整并符合题目要求。(10分,每空2分)1.
7、下面这个程序用于读入5个整数,当程序读入的数据为正整数时,则显示该数,否则,不显示。读入5个数据后,程序结束运行。#include main() int i, n; for (i=1; i=5; i+) printf(Please enter n:); scanf(%d, &n); if (n = 0) _continue_; printf(n = %dn, n); printf(Program is over!n);2. 韩信点兵。韩信有一队兵,他想知道有多少人,便让士兵排队报数:按从1至5报数,最末一个士兵报的数为1;按从1至6报数,最末一个士兵报的数为5;按从1至7报数,最末一个士兵报的
8、数为4;最后再按从1至11报数,最末一个士兵报的数为10。下面程序的主要功能是计算韩信至少有多少兵。#include main() int x = 1; int find = 0; for (x=1; _!flag_; x+) if (x%5=1 & x%6=5 & x%7=4 & x%11=10) printf( x = %dn, x); _flag = 1_; 3. 下面程序是计算字符串中实际字符的个数,即实现和字符串处理函数strlen相同的功能。unsigned int MyStrlen(char str) unsigned int len = 0, i; for (i=0; stri
9、!= 0 ; i+) len + ; return len;注意行为规范,遵守考试纪律!六、在下面这个程序中,要求其实现的功能是对用户输入的任意整数计算其阶乘,输入小于等于-1的数时退出程序。下面给出的是一个有错误的程序,请找出其中的错误,并改正之。(10分)#include #define END -1; /错误,改成:#define END -1 /(1分)long Factorial(int x);main() int x; while (1); /错误,改成:while (1) /(1分) printf(input x:); /错误,改成:printf(input x:); /(1分)
10、 scanf(%d, x); /错误,改成:scanf(%d, &x); /(1分) if (x = END) break /错误,改成:break; /(1分) else printf(%d! = %dn, x, Factorial(x); /错误,改成:printf(%d! = %ldn, x, Factorial(x); /(1分) long Factorial(int x) int i;int result; /错误,改成:long result = 1; /(2分) for (i=1, i=x, i+)/错误,改成:for (i=1; i=x; i+) /(1分) result *=
11、 i; /错误,改成:return result; /(1分)七、编程(40分,第1和2小题各10分,第3小题20分)1.编程计算1!+2!+3!+10!的值。参考答案1:#include main() long term = 1,sum = 0; int i; for (i = 1; i = 10; i+) term = term * i; sum = sum + term; printf(1!+2!+.+10! = %ld n, sum);参考答案2:#include main() long term ,sum = 0; int i, j; for (i = 1; i = 10; i+)
12、term = 1; for (j = 1; j = i; j+) term = term * j; sum = sum + term; printf(1!+2!+10! = %ld n, sum);2. 从键盘任意输入10个不相同的整数,然后,输入要查找的数x,如果在这10个数中找到x,则打印“Found!”;如果找不到,则打印“Not found!”。参考答案:#include main() int i, a10,flag = 0; for (i=0; i10; i+) scanf(%d,&ai); printf(input x:);scanf(%d, &x);for (i=0; i10;
13、i+) if (ai = x) flag = 1; if (flag)printf(Found!); elseprintf(Not found!);3.从键盘任意输入某班20个学生的成绩,打印最高分,并统计不及格学生的人数。参考答案1:#include main() int i, score20,max,count; for (i=0; i20; i+) scanf(%d,&scorei); max = score0; for (i=0; i max)max = scorei; printf(max = %dn,max); count = 0; for (i=0; i20; i+) if (scorei 60)count +; printf(count = %dn,count);参考答案2:#include main() int i, score20,max,count; for (i=0; i20; i+) scanf(%d,&scorei); max = score0;count = 0; for (i=0; i max)max = scorei; if (scorei 60)count +; printf(max = %dn,max); printf(count = %dn,count);
copyright@ 2008-2023 冰点文库 网站版权所有
经营许可证编号:鄂ICP备19020893号-2