国家二级C语言机试(操作题)模拟试卷647
程序填空题
1.使用VC++2010打开考生文件夹下blank1中的解决方案。此解决方案的项目中包含一个源程序文件blank1.c。在此程序中,函数fun的功能是:在3×4的矩阵中找出在行上最大、在列上最小的那个元素,若没有符合条件的元素则输出相应信息。
例如,有下列矩阵:
1 2 13 4
7 8 10 6
3 5 9 7
程序执行结果为:find:a[2][2]=9
请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。
注意:部分源程序在文件BLANK1.C中。不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#define M3
#define N4
void fun(int(*a)[N])
{inti=0,j,find=0,rmax,c,k;
while((i<M)&&(!find))
{rmax=a[i][0];c=0;
for(j=1;j<N;j++)
if(17max<a[i][j]){
/*********found*********/
rmax=a[i][j];c=【1】;)
find=1;k=0;
while(k<M&&find){
/*********found*********/
if(k!=i&&a[k][c]<=rmax)
find=【2】;
k++;
}
if(find)
printf(\\
(1)j
(2)0
(3)i++
解析:本题是在矩阵中找出在行上最大、在列上最小的那个元素。
填空1:找出行上最大的数,并将该数的列数j保存在c中,所以应填j。
填空2:使用while循环语句和控制变量find,如果该数不是列中的最小数,那么把find置0,所以应填0。
填空3:i是while的控制变量,所以每做一次循环,该数值要加1,所以应填i++。
程序修改题
2.使用VC++2010打开考生文件夹下modi1中的解决方案。此解决方案的项目中包含一个源程序文件modi1.c。在此程序中,函数fun的功能是:计算正整数num各位上的数字之积。
例如,若输入252,则输出应该是20。若输入202,则输出应该是0。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
#include<conio.h>
long fun(long num)
{
/*********found*********/
long k;
do
{
k*=num%10;
/*********found*********/
num\=10;
}while(num);
return(k);
}
main()
{
long n;
printf(\\
(1)long k=1;
(2)num/=10;
解析:(1)k用来存放各位数字的积,初始值应为1。
(2)此处是一个符号错误,除号用“/”来表示。
程序设计题
3.使用VC++2010打开考生文件夹下prog1中的解决方案。此解决方案的项目中包含一个源程序文件prog1.c。在此程序中,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun,该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。已给出函数的首部,请完成该函数。
注意:部分源程序给出如下。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
试题程序:
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<conio.h>
#define N10
typectef struct ss/*定义结构体*/
{char num[10];
int s;
}STU;
fun(STU a[],STU*s)
{
}
void main()
{
STU a[N]={{\\
fun(STU a[],STU*s)
{
int i;
*s=a[0];
for(i=0;i<N;i++)/*找出成绩最高的学生记录*/
if(s->s<a[i].s)
*s=a[i];
}
解析:本题的流程是先使s指向第1名学生,利用循环语句遍历所有学生的成绩,利用条件语句判断当前学生成绩是否最高,所以if语句的条件是s->s<a[i].s。此外,做题时应该熟练掌握“指向运算符”和“成员运算符”的相关知识,题中“s->s”等价于“(*s).s”。
本文档预览:3600字符,共2723字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载