国家二级(C语言)机试模拟试卷1021
程序填空题
1.使用VC++2010打开考生文件夹下blankl中的解决方案。此解决方案的项目中包含一个源程序文件blankl.c。在此程序中,通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名及3门课的成绩。函数fun()的功能是将该学生的各科成绩都乘以一个系数a。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:部分源程序给出如下。
不得增行或删行,也不得更改程序的结构!
试题程序:
#include <stdio.h>
typedef struct
{ int num;
char name[9];
float score[3];
}STU;
void show(STU tt)
{ int i;
printf(\\
(1)STU (2)score[i] (3)&std
解析:本题利用结构体存储学生记录,对记录进行修改并由实参ss返回。
填空1:实参ss是一个结构体指针变量,故空1处应该填STU。
填空2:该学生的各科成绩都乘以一个系数a,成员score为数组,故空2处应该填score[i]。
填空3:函数的调用,由于函数定义时使用的是结构体指针变量,将结构变量std作为实参传入函数,故空3处应该填&std。
程序修改题
2.使用VC++2010打开考生文件夹下modil中的解决方案。此解决方案的项目中包含一个源程序文件modil.c。在此程序中,函数fun()的功能是求k!(k<13),所求阶乘的值作为函数值返回。例如,若k=10,则应输出3628800。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main()函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include <conio.h>
#include <stdio.h>
long fun(int k)
{
/*********found*********/
if k>1
return(k*fun(k-1));
return 1;
}
main()
{
int k=10:
printf(\\
if(k>1)
解析:本题考查:if语句,考生需要根据题意来判断if语句是否正确。if条件语句经常考,考生需掌握。
这里为语法错误,if条件表达式应写在圆括号内。
程序设计题
3.使用VC++2010打开考生文件夹下progl中的解决方案。此解决方案的项目中包含一个源程序文件progl.c。此程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(),该函数的功能是使数组下三角元素中的值乘以n。
例如,若n的值为3,a数组中的值为
1 9 7
2 3 8
4 5 6
则返回主程序后,a数组中的值应为
3 9 7
6 9 8
12 15 18
注意:部分源程序给出如下。
请勿改动函数main()和其他函数中的任何内容,仅在函数fun()的花括号中填入你编写的若干语句。
试题程序:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define N 5
void fun(int a[][N],int n)
{
}
main()
{
int a[N][N],n,i,j;
printf(\\
void fun(int a[][N],int n)
{
int i,j;
for(i=0;i<N;i++)
for(j=0;j<=i;j++)
/*矩形的下三角时,积相乘*/
a[i][j]=a[i][j]*n;
}
解析:本题fun()函数的功能是使数组的下三角元素中的值乘以n,因此本题需要使用双重for循环,for循环需要注意以下两点。
(1)循环初值,根据题意要求控制循环变量的取值范围。
(2)循环条件,确定循环结束的条件,即当不满足条件时,结束循环。
首先从数组中找出要乘以n的元素。这其实就是找出将被挑出的元素在原数组中的分布规律的过程。通过观察得出,要被处理的元素下标的范围是从每行中第1个元素开始,直到列数等于该行行数为止。即数组下三角元素的列下标(j)小于等于(<=)行下标(j)。找到这个规律后,依次从数组中取得符合要求的元素,然后乘以n。
本文档预览:3600字符,共2510字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载