国家二级C语言机试(操作题)模拟试卷824
程序填空题
1.函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中;再把a所指数组元素中的次大值放在a[2]中,把a数组元素中的次小值放在a[3]中:其余以此类推。例如:若a所指数组中的数据最初排列为:1、4、2、3、9、6、5、8、7,则按规则移动后,数据排列为:9、1、8、2、7、3、6、4、5。形参n中存放a所指数组中数据的个数。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
#include<stdio.h>
#define N 9
/**********found**********/
void fun(int___1___,int n)
{ int i,j,max,min,px,pn,t;
/**********found**********/
for(i=0;i<n-1;i+=___2___)
{ max=min=a[i];
px=pn=i;
/**********found**********/
for(j=___3___;j<n;j++)
{ if (max<a[j])
{ max=a[j];px=j;)
if(min>a[j])
{ min=a[j];pn=j;}
}
if(px!=i)
{t=a[i]; a[i]=max;a[px]=t;
if(pn==i)pn=px;
}
if(pn!=i+1)
{t=a[i+1];a[i+1]=min;a[pn]=t;}
}
}
main()
{int b[N]={1,4,2,3,9,6,5,8,7},i,
printf(\\
(1)*a
(2)2
(3)i+1
解析:本题中函数的功能是将数组中的元素下标为偶数的元素按照从大到小排序,下标为奇数的元素按照从小到大排序,相当于2个排序过程。在fun函数中,采用选择排序法进行排序,分别用max和min存储每次寻找的最大值和最小值,px和pn记录每次查找到的最大值和最小值的下标位置。
第一空:主函数内fun函数的调用“fun(b,N);”,其中,b为整型数组名,故fun函数的第一参数为整型指针,又根据“max=a[i]”可知第一个参数名为a,故第一空处为“幸a”。
第二空:根据题意a所指数组中的最大值放在a[0]中,接着求出a所指数组中的最小值放在a[1]中;再把a所指数组元素中的次大值放在a[2]中,把a数组元素中的次小值放在a[3]中,升序排序和降序排序的下标变化是每次在前一次的基础上+2,即a[0]、a[2]、a[4]…降序排序,a[1]、a[3]、a[5]…升序排序,故第二空应为“2”。
第三空:选择排序法中的升序排序,首先从数组中挑选一个最小的元素,把它和第一元素交换,接着从剩下的n-1个元素中再挑出一个最小的元素,把它和第二个元素交换,不断重复以上过程,直到比较完最后两个元素。故内层循环变量i应该从i+1开始,因此,第三空处应为“i+1”。
程序修改题
2.给定程序MODI1.C中函数fun的功能是:按顺序给s所指数组中的元素赋予从2开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。
例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4个元素求平均值。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include<stdio.h>
#define SIZE 20
fun(double*s,double*w)
{ int k,i;double sum;
for(k=2,2=0;i<SIZE;i++)
{ s[i]=k;k+=2;}
/**********found**********/
sun=0.0;
for(k=0,i=0;i<SIZE; i++)
{ sum+=s[i];
/**********found**********/
if(i+1%5==0)
{ w[k]=sum/5;sum=0;k++;}
}
return k;
}
main()
(double a[SIZE],b[SIZE/5];
int i,k;
k=fun(a,b);
printf(\\
(1)sum=0.0;
(2)if((i+1)%5==0)
解析:本题函数的功能是对每5个元素求一个平均值。首先要依顺序读取每5个元素,并对这5个元素取平均值。
(1)在第一标识下“sun=0.0;”,根据题意,这是给sum赋值,而sun没有定义编译时会提示错误,应改为“sum=0.0;”。
(2)错误标识下的if判断语句是依顺序取5个字符,if中的逻辑表达式语法有误,由于1%5恒等于1,所以i+1%5也就等价于i+1了,所以将“if(i+1%5==0)”改为“if((i+1)%5==0)”,此处主要注意的是运算符的优先级。
程序设计题
3.学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组S中,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。
注意:部分源程序在文件PROGl.C中。
请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include<stdio.h>
#define N 8
typedef struct
{ char num[10];
double s;
}STREC;
double fun(STREC*a,STREC*b,int*n)
{
}
main()
{STREC s[N]={{\\
int i;
double ave=0.0;
*n=0;
for(i=0;i<N;i++)ave=ave+a[i].s;
ave/=N;/*计算平均值*/
for(i=0;i<N;i++)
if(a[i].s<ave){ /*把低于平均值的记录存放到b所指的数组中*/
b[n]=a[i];
(*n)++; /*人数加1*/)
return ave; /*返回平均值*/
解析:该程序功能是把低于平均分的学生数据放在b所指的数组中,低于平均分的学生人数通过形参n传回,平均分通过函数值返回。
(1)首先,通过循环求总分,然后求得平均分。
(
本文档预览:3600字符,共3656字符,源文件无水印,下载后包含无答案版和有答案版,查看完整word版点下载