第57套:
函数fun的功能是:把形参a所指数组中的最小值放在元素a[0]中,接着把 形参a所指数组中的最大值放在a[1]元素中;再把a所指数组元素中的次小值放 在a[2]中,把a所指数组元素中的次大值放在a[3];其余以此类推。例如:若a 所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7;则按规则移动 后,数据排列为:1、9、2、8、3、7、4、6、5。形参n中存放a所指数组中数 据的个数。
注意:规定fun函数中的max存放当前所找的最大值,px存放当前所找最大 值的下标。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中。
不得增行或删行,也不得更改程序的结构!
给定源程序:
include <stdio.h>
#define N 9
void fun(int a[], int n)
{ int i,j, max, min, px, pn, t;
for (i=0; i<n-1; i+=2)
{
max = min = ___1___;
px = pn = i;
for (j=i+1; j<n; j++) {
if (max<___2___)
{ max = a[j]; px = j; }
if (min>___3___)
{ min = a[j]; pn = j; }
}
if (pn != i)
{ t = a[i]; a[i] = min; a[pn] = t;
if (px == i) px =pn;
}
if (px != i+1)
{ t = a[i+1]; a[i+1] = max; a[px] = t; }
}
}
main()
{ int b[N]={9,1,4,2,3,6,5,8,7}, i;
printf("\nThe original data :\n");
for (i=0; i<N; i++) printf("%4d ", b[i]);
printf("\n");
fun(b, N);
printf("\nThe data after moving :\n");
for (i=0; i<N; i++) printf("%4d ", b[i]);
printf("\n");
}
解题思路:
第一处:外循环每循环一次均把数组a当前位置的值,分别赋值给max和min变量,所以应填: a[i]。
第二处:判断max是否小于a[j],若小于,则把a[j]赋值给max,所以应填:a[j]。
第三处:判断min是否大于a[j],若大于,则把a[j]赋值给min,所以应填:a[j]。
给定程序MODI1.C中函数fun的功能是:用递归算法计算斐波拉契数列中第n 项的值。从第1项起,斐波拉契数列为:1、1、2、3、5、8、13、21、……
例如,若给n输入7,该项的斐波拉契数值为:13。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
给定源程序:
#include <stdio.h>
long fun(int g)
{
switch(g);
{ case 0: return 0;
case 1 ;case 2 : return 1 ;
}
return( fun(g-1)+fun(g-2) );
}
main()
{ long fib; int n;
printf("Input n: "); scanf("%d",&n); printf("n = %d\n",n);
fib=fun(n);
printf("fib = %d\n\n",fib);
}
解题思路:
第一处:switch后有多余的分号。
第二处:case 1后没有返回语句,也应该为return 1;。所以应改为:case 1: return 1; case
2:return 1;。
某学生的记录由学号、8门课程成绩和平均分组成,学号和8门课程的成绩已 在主函数中给出。请编写函数fun,它的功能是:求出该学生的平均分放在记录的ave成员中。
例如,学生的成绩是:85.5,76,69.5,85,91,72,64.5,87.5,他的平均分应当
是:78.875。
注意: 部分源程序在文件PROG1.C中。
请勿改动主函数main和其它函数中的任何内容,仅在函数fun部位中填入你编写的若干语句。
给定源程序:
#include <stdio.h>
#define N 8
typedef struct
{ char num[10];
double s[N];
double ave;
} STREC;
void fun(STREC *a)
{
}
main()
{ STREC s={"GA005",85.5,76,69.5,85,91,72,64.5,87.5};
int i;
fun( &s );
printf("The %s's student data:\n", s.num);
for(i=0;i<N; i++)
printf("%4.1f\n",s.s[i]);
printf("\nave=%7.3f\n",s.ave);
NONO();
}
解题思路:
本题是求记录结构中学生课程成绩的平均值,其结果仍放在该记录结构中。
参考答案:
void fun(STREC *a)
{
int i ;
for(i = 0 ; i < N ; i++)
a->ave = a->ave + a->s[i] ;
a->ave /= N ;
}