全国计算机二级C语言 # (16)程序填空题:实型变量(1-2)

全国计算机二级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]
 


 

49 Views
分享你的喜爱
默认图片
linwute

我要像梦一样自由,像大地一样宽容;
在艰辛放逐的路上,点亮生命的光芒;
我要像梦一样自由,像天空一样坚强;
在曲折蜿蜒的路上,体验生命的意义;

留下评论