1、国家二级 C语言机试(操作题)模拟试卷 469及答案与解析 一、程序填空题 1 人员的记录由编号和出生年、月、日组成, N名人员的数据已在主函数中存入结构体数组 std中。函数 fun的功能是:找出指定出生年份的人员,将其数据放在形参 k所指的数组中,由主函数输出,同时由函数值返回满足指定条件的人数。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #define N 8 typedef struct int num; int year, month, d
2、ay; STU; int fun(STU* std, STU*k, int year) int i, n=0; for(i=0; i N; i+) /*found*/ if(【 1】 =: year) /*found*/ kn+=【 2】 ; /*found*/ return(【 3】 ); main() STU stdN=1, 198 4, 2, 15, 2, 1983, 9, 21, 3, 198 4, 9, 1, 4,1983, 7, 15, 5, 1985, 9, 28, 6, 1982, 11, 15, 7, 1982, 6, 22,8, 1984, 8, 19; STU kN; 2
3、nt i, n, year; printf(“Enter a year: “), scanf(“ d“, &year); n=fun(std, k, year); if(n=0) printf(“nNo person was born in dn“, year); else printf(“nThese persons were born in dn“, year); for(i=0; i n; i+) printi(“ d d一 d一 dn“, ki nLlm, ki year, ki month, ki day); 二、程序修改题 2 下列给定程序的功能是:读入一个整数 k(2k10000
4、),输出它的所有质因子 (即所有为素数的因子 )。例如,若输入整数 2310,则应输出: 2, 3, 5, 7, 11。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include conio h #include stdio h /*found*/ IS Prime(int n); int i, m; m=1; for(i=2; i n; i+) /*found*/ if! (n i) m=0; break; return(m); main() int j, k; printf (“nPlease ente
5、r an integer number between 2 and 1 0000: “); scanf(“ d“, &k); printf f“n、 nThe prime factot(s)of d is(are): “, k); for(j=2; j k; j+) if(!(k j)&(IsPrirae(j) printf(“ 4d, “, j); printf(“n“); 三、程序设计题 3 已知学生的记录由学号和学习成绩构成, N名学生的数据已存入 a结构体数组中。 请编写函数 fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数 (规定只有一个最高分 )。已给出函数的首部
6、,请完成该函数。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdlib h #include stdio h #include string h #include conio h #define N 10 typedeistruct ss/*定义结构体 */ char hum10; int s; STU; fun(STU a, STU*s) void main() STU aN=“A01“, 81, “A02“, 89, “A03“, 66, “A04“, 87, “A05“,
7、77, “A06“, 90, “A0 7“, 79, “A08“, 61, “A0 9“, 80, “A10“, 71), m; int i; system(“CLS“); print(“*The originaldata*“); for(i=0; i N; i+) printf (“No= s Hark= dn“, ai num, ai s); fun(a, &m); printf, “*THE RESULT*n“); printf(“The top: s, dn“, m num, m s); 国家二级 C语言机试(操作题)模拟试卷 469答案与解析 一、程序填空题 1 【正确答案】 (1)
8、stdi year (2)stdi (3)n 【试题解析】 本题考查:数组变量判断; for循环语句;函数返回值。 本题要求从给定的人员数据中找出与指定出生年份相同的记录存入 k中,并返回符合条件的人数。 填空 1:此空判断结构体变量中的年份与 year是否相等,所以应填 stdi year。 填空 2:把符合条件的记录依次存入实参 k中,所以应填 stdi。 填空 3:函数返回符合满足条件的人数,所以应填 n。 二、程序修改题 2 【正确答案】 (1)IsPrime(int n) (2)if(!(n i) 【试题解析】 本题考查:函数定义的格式; if条件的判断语句,这些知识点必须掌握,因为
9、经常考到。 (1)函数定义格式错误,函数定义时后面不能加 “; ”,所以应该去掉分号。 (2)根据题意可知, if条件语句判断 n是否可以整除 i,如果不能整除则为质因子,所以 iff (n i)应改为 if(!(n i)。 三、程序设计题 3 【正确答案】 fun (STU a, STU *s) int i; * s=a0; for(i=0; i N; i+)/* 找出成绩最高的学生记录 */ if( s一 s ai s) *s=ai; 【试题解析】 本题考查:成绩最高的学生记录查找; for循环语句; if条件语句。 本题的流程是先使 s指向第 1名学生,利用循环语 句遍历所有学生的成绩,利用条件语句判断当前学生成绩是否最高,所以 if语句的条件是 s 一 s ai s。此外,做题时应该熟练掌握 “指向运算符 ”和 “成员运算符 ”的相关知识,题中 “s 一 s”等价于 “( *s) s”。