全国计算机二级C语言 # 程序填空题:实型变量
41)
给定程序中,函数fum的功能是:计算形参x所指数组中N个数的平均值(规定所有数均为正
数) .作为函数值返回;并将大于平均值的数放在形参y所指数组中.在主函数中输出。
例如,有10个正数:46 30 32 40 6 17 45 15 48 26, 平均值为: 30. 500000。主函数中输出: 46 32 40 45 48。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中,并且,要先打开BLANK1. SLN文件再操作。不得增行或删行,也不得更改程序的结构!
#include <stdlib.h>
#include <stdio.h>
#define N 10
double fun(double x[],double *y)
{ int i,j; double av;
/**********found**********/
av=__1__;
/**********found**********/
for(i=0; i<N; i++) av = av + __2__;
for(i=j=0; i<N; i++)
/**********found**********/
if(x[i]>av) y[__3__]= x[i];
y[j]=-1;
return av;
}
main()
{ int i; double x[N] = {46,30,32,40,6,17,45,15,48,26};
double y[N];
for(i=0; i<N; i++) printf(“%4.0f “,x[i]);
printf(“\n”);
printf(“\nThe average is: %f\n”,fun(x,y));
for(i=0; y[i]>=0; i++) printf(“%5.0f “,y[i]);
printf(“\n”);
}
[codesyntax lang=”c”]
[微答案] (1)0.0 (2)x[i]/N (3)j++ [微分析] 填空1:通过读上面的程序可以看出此空考的是给变量赋初值,av代表的是平均值,因此av的初值应该是0.0。 填空2:通过for循环可知,此空代表求平均值,因此应该填写x[i]/N。 填空3:先把大于平均值的数放在形参v所指数组中,然后使下标值加1,因此此空应该填j++o
#include <stdlib.h>
#include <stdio.h>
#define N 10
double fun(double x[],double *y)
{ int i,j; double av;
/**********found**********/
av=0.0;
/**********found**********/
for(i=0; i<N; i++) av = av + x[i]/N;
for(i=j=0; i<N; i++)
/**********found**********/
if(x[i]>av) y[j++]= x[i];
y[j]=-1;
return av;
}
main()
{ int i; double x[N] = {46,30,32,40,6,17,45,15,48,26};
double y[N];
for(i=0; i<N; i++) printf(“%4.0f “,x[i]);
printf(“\n”);
printf(“\nThe average is: %f\n”,fun(x,y));
for(i=0; y[i]>=0; i++) printf(“%5.0f “,y[i]);
printf(“\n”);
}
</n;></n;>
[/codesyntax]
41)
给定程序中,函数fum的功能是用函数指针指向要调用的函数,并进行调用。规定在_ _2_ 处
使f指向函数f1,在_ 3_ 处使f指向函数f2。 当调用正确时,程序输出: x1-=.000000,
x2=3.000000,x1*x1+x1*x2=40.000000。
请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。
注意:源程序存放在考生文件夹下的BLANK1.C中,并且,要先打开BLANK1. SLN文件再操作。不得增行或删行,也不得更改程序的结构!
#include <stdio.h>
double f1(double x)
{ return x*x; }
double f2(double x, double y)
{ return x*y; }
double fun(double a, double b)
{
/**********found**********/
__1__ (*f)();
double r1, r2;
/**********found**********/
f = __2__ ; /* point fountion f1 */
r1 = f(a);
/**********found**********/
f = __3__ ; /* point fountion f2 */
r2 = (*f)(a, b);
return r1 + r2;
}
main()
{ double x1=5, x2=3, r;
r = fun(x1, x2);
printf(“\nx1=%f, x2=%f, x1*x1+x1*x2=%f\n”,x1, x2, r);
}
[codesyntax lang=”c”]
【微答案】 (1)double (2)f1 (3)f2 【微分析】 填空1:(*f)()代表一个指向函数的指针变量,而本题所被调用的f1、f2两函数的返回值均为double型,因而此空应该填写double。 填空2:因为在给函数指针变量赋值时,只需给出函数名而不必给出参数,因而此空应该填写f1。 填空3:同填空2,此空应该填写f2。 #include double f1(double x) { return x*x; } double f2(double x, double y) { return x*y; } double fun(double a, double b) { /**********found**********/ double (*f)(); double r1, r2; /**********found**********/ f = f1 ; /* point fountion f1 */ r1 = f(a); /**********found**********/ f = f2 ; /* point fountion f2 */ r2 = (*f)(a, b); return r1 + r2; } main() { double x1=5, x2=3, r; r = fun(x1, x2); printf("\nx1=%f, x2=%f, x1*x1+x1*x2=%f\n",x1, x2, r); }
[/codesyntax]