1、国家二级 C语言机试(操作题)模拟试卷 470及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和 3门课的成绩。函数 fun的功能是将该学生的各科成绩都乘以一个系数 a。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdioh typedef struct int num; char name9; float score3; STU; void s
2、how(STU tt) inti; printf(“ds:“,ttnum, ttname); for(i=0;i 3;i+) print:f(“51f“ ,ttscorei); print:f(“/n“); /*found*/ void modify( 【1】 *ss,float a) int i; for(i=0;i 3;i+) /*found*/ ss一 【2】 *=a; main() STU std=1,“Zhanghua“,76 5,780,820; float:a; print:f(“/nThe original num bet and name and scores:/n“); s
3、how(std); print:f(“knlnput a number:“); scanf(“f“,&a); /*found*/ modify( 【3】 ,a); printf (“/nA result of modif ying:/n“); show(std); (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:求 k!(k 13),所求阶乘的值作为函数值返回。例如,若k=10,则应输出 3628800。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! 试题程序:#inc
4、lude eonioh #include stdioh long fun(int k)/*found*/ if k 1 return(k* fun(k 一 1); return 1;main() int k=10; printf(“d!=ld/n“,k,fun(k);(分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.程序定义了 NN的二维数组,并在主函数中自动赋值。请编写函数 fun(int aN,int n),该函数的功能是:使数组左下半三角元素中的值乘以 n。例如,若 n的值为 3,a 数组中的值为: 则返回主程序后 a数组中的值应为: (分数:2.00)_国家二级 C语
5、言机试(操作题)模拟试卷 470答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和 3门课的成绩。函数 fun的功能是将该学生的各科成绩都乘以一个系数 a。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdioh typedef struct int num; char name9; float score3; STU; void show(STU
6、tt) inti; printf(“ds:“,ttnum, ttname); for(i=0;i 3;i+) print:f(“51f“ ,ttscorei); print:f(“/n“); /*found*/ void modify( 【1】 *ss,float a) int i; for(i=0;i 3;i+) /*found*/ ss一 【2】 *=a; main() STU std=1,“Zhanghua“,76 5,780,820; float:a; print:f(“/nThe original num bet and name and scores:/n“); show(std)
7、; print:f(“knlnput a number:“); scanf(“f“,&a); /*found*/ modify( 【3】 ,a); printf (“/nA result of modif ying:/n“); show(std); (分数:2.00)_正确答案:(正确答案:(1)STU (2)scorei (3)&std)解析:解析:本题考查:数组变量赋值;函数实参定义。 本题是利用结构体存储学生记录,对记录进行修改并由实参 ss返回。 填空 1:实参 ss是一个结构型指针变量,所以应填 STU。 填空 2:该学生的各科成绩都乘以一个系数 a,所以应填 scorei。 填空
8、3:函数的调用,由于函数定义时使用的指针结构型变量,所以应填&std。二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:求 k!(k 13),所求阶乘的值作为函数值返回。例如,若k=10,则应输出 3628800。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构! 试题程序:#include eonioh #include stdioh long fun(int k)/*found*/ if k 1 return(k* fun(k 一 1); return 1;main() int k=10;
9、printf(“d!=ld/n“,k,fun(k);(分数:2.00)_正确答案:(正确答案:if(k 1)解析:解析:本题考查:if 语句,考生需要根据题意来确定 if语句是否是正确的,if 条件语句经常考,考生需掌握。 语法错误,if 条件表达式应写在小括号内。三、程序设计题(总题数:1,分数:2.00)3.程序定义了 NN的二维数组,并在主函数中自动赋值。请编写函数 fun(int aN,int n),该函数的功能是:使数组左下半三角元素中的值乘以 n。例如,若 n的值为 3,a 数组中的值为: 则返回主程序后 a数组中的值应为: (分数:2.00)_正确答案:(正确答案:void fu
10、n (int aN,int n) int i,j; for(i=0;i N;i+) for(j=0;j =i; j+) /*矩形的下三角时,积相乘*/ aij=aij*n; )解析:解析:本题的 fun的功能是使数组的左下半三角元素中的值乘以 n,因此本题需要使用双重 for循环,for 循环需要注意的是: (1)循环初值,根据题意要求控制循环变量的取值范围; (2)循环条件,确定循环结束的条件,即当不满足条件时,结束循环。 首先从数组中找出要被乘以 n的那部分元素,这一过程其实就是找出将被挑出的元素在原数组中的分布规律的过程。通过观察得出,要被处理的元素下标值的范围是每行中从第一个元素开始,直到列数等于该行行数时为止。找到这个规律后,依次从数组中取得符合要求的元素,然后乘以 n。