1或1【解析】填空1:求阶乘时采用递" />
文档库 最新最全的文档下载
当前位置:文档库 › 程序填空题

程序填空题

1、请补充函数fun,函数fun的功能是求n的阶乘。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
long fun(int n)
{
if (【1】)
return(n*fun(【2】));
return 【3】;
}
main( )
{
printf("10 !=%ld\n",fun(10));
}

解:
【1】n>1或1【解析】填空1:求阶乘时采用递归的算法,n>1和n==1这两种情况的处理方法不同,需要分开考虑。填空2:阶乘的算法是,当n>1时,n!=n*(n-1)!,即:fun(n)=n*fun(n-1)。填空3:n==1是递归的终止条件,返回值为1。



2、请补充函数fun,它的功能是:计算并输出n(包括n)以内所有能被3或7整除的自然数的倒数之和。
例如,在主函数中从键盘给n输入30后,输出为:s=1.226323。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
double fun(int n)
{
int i;
double sum=0.0;
for (i=1;_【1】; i++)
if (i%3==0_【2】_i%7==0)
sum+=_【3】_/i;
return sum;
}
main( )
{
int n;
double s;
printf("\nInput n:");
scanf("%d",&n);
s=fun(n);
printf("\n\ns=%f\n",s);
}


【1】i<=n 【2】|| 【3】1.0或(double)1
【解析】填空1:本题要求找出n(包括n)以内满足条件的自然数,所以,i的取值范围是从1到n。填空2:i能被3整除,也就是指,i除以3的余数为0。题中的条件是能被3或7整除,所以使用逻辑或运算符"||"。填空3:需要注意,如果'/'运算符两边都是整型数,则结果也是整型数。因为i为整型数,如果将i的倒数写为1/i,则结果为0,所以在求倒数时,要使用1.0,而不是1,或者将变量i强制类型转化为double型。



3、给定程序的功能是:求二分之一的圆面积,函数通过形参得到圆的半径,函数返回二分之一的圆面积(注:圆面积公式为:S=πr2,在程序中定义的变量名要与公式的变量相同)。
例如,输入圆的半径值:19.527,输出为:s=598.949991。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仪在横线上填入所编写的若干表达式或语句。
试题程序:
#include
double fun(double r)
{
return 3.14159*_【1】_/2.0;
}
main( )
{
double x;
printf("Enter x:");
scanf("%lf",_【2】_);
printf("S=%lf\n",fun(_【3】_));
}

【1】r*r 【2】&x 【3】x
【解析】填空1:计算圆的面积,面积公式:S=∏r*r。填空2:scanf一般形式为scanf(格式控制,地址表列),因此填入&x。填空3:送入函数的参数是圆的半径x。



4、给定程序的功能是:计算并输出下列级数的前N

项之和SN,直到SN大于q为止,q的值通过形参传入。
sn=2/1+3/2+4/3+...+(N+1)/N
例如,若q的值为50.0,则函数值为50.416687。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
double fun(double q)
{
int n;
double s;
n=2;
s=2.0;
while (s【1】q)
{
s = s + (double)(n+1)/n;
【2】;
}
printf("n=%d\n",n);
【3】;
}
main( )
{
printf("%f\n",fun(50));
}

【1】<= 【2】n++或n+=1或n=n+1 【3】return s或return (s)
【解析】填空1:根据题意,相加直到Sn大于q为止,因此为<=。填空2:计算前N项的和,增加n的值。填空3:计算完Sn的和后,返回函数的值,以便于输出。



5、请补充函数fun,该函数的功能求能是:整除x且是偶数的数,把这些数保存在数组bb中,并按从大到小的顺序输出。
例如当x=20时,依次输出:20 10 4 2。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#include
void fun(int k,int bb[])
{
int I;
int j=0;
for(【1】;I<=k;I++)
{
if(【2】)
bb[j++]=I;
}
printf("\n\n");
for(I=【3】;I>=0;I--)
printf("%d ",bb[I]);
}

void main()
{
int k=1;
int bb[100];
system("CLS");
printf("\nPlease input X=");
scanf("%d",&k);
fun(k,bb);
}

【1】I=1 【2】k%I==0&&I%2==0 【3】--j或j--或j=j-1或j-=1
【解析】填空1:为了求出能整除k,且是偶数的数,寻找范围是从1到k。填空2:如果I能整除k,则k对I求余为0,如果I为偶数,则I对2求余为0,由于这两个条件要同时满足,所以要使用"与"运算符"&&"。填空3:由于数组bb[]中的数是按从小到大的顺序排列的,而题目要求按从大到小输出,所以从数组的最后一个元素开始,依次输出。因为在for循环中,变量j多加了一次,所以这里要将j减1,得到数组最后一个元素的下标。



6、程序的功能是计算s=西格玛K!(k=0~n)。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在横线上填入所编写的若干表达式或语句。
试题程序:
#include
long fun(int n)
{
int i;
long s;
s = 【1】_;
for(i=1; i<=n; i++)
s = 【2】;
return s;
}
main( )
{
long s;
int k,n;
scanf ("%d",&n);
s = 【3】;
for (k=0; k<=n; k++)
s =【4】;
printf("%id\n",s);
}

【1】1 【2】s*i或i*s 【3】0 【4】s+fun(k)
【解析】函数fun的功能是计算n的阶乘。首先定义一个long型累计变量s,并初始化为1,然后用一个for循环从1循环到n,累乘给s,循环结束时s的值即为n的阶

乘。主函数中也定义了一个累计变量s,通过for循环,累加从0到n的所有数的阶乘。



7、请补充函数fun,该函数的功能是:求不超过给定自然数的所有偶数之和。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
int fun(int x)
{
int i,s;
s=_【1】;
for (i=2;【2】; i+=2)
s+=i;
return s;
}
main( )
{
int n;
do
{
printf("\nPlease enter natural numbers n:");
scanf("%d",&n);
}while (n <= 0);
printf("\n不超过给定自然数%d的各偶数之和为%d\n",n,fun(n));
}

【1】0 【2】i<=x
【解析】填空1:根据题意,偶数当然要从0开始,所以s=0。填空2:不论给定的数是偶数还是奇数,只要小于等于x,便应该计算在内。



8、请补充函数fun,该函数的功能是:求一维数组x[N]的平均值,并对所得结果进行四舍五入(保留两位小数)。
例如:当x[10]={15.6,19.9,16.7,15.2,18.3,12.1,15.5,11.0,10.0,16.0},结果为:avg=15.030000。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#include
double fun(double x[10])
{
int I;
long t;
double avg=0.0;
double sum=0.0;
for(I=0;I<10;I++)
【1】;
avg=sum/10;
avg=【2】;
t=【3】;
avg=(double)t/100;
return avg;
}

void main()
{
double avg,x[10]={15.6,19.9,16.7,15.2,
18.3,12.1,15.5,11.0,10.0,16.0};
int i;
system("CLS");
printf("\nThe original data is :\n");
for(i=0;i<10;i++)
printf("%6.1f",x[i]);
printf("\n\n");
avg=fun(x);
printf("average=%f\n\n",avg);
}

【1】sum+=x[I] 【2】avg*100 【3】avg+0.5
【解析】填空1:通过for循环求出10个数的累加和,存于变量sum中。填空2:为了实现四舍五入保留两位小数的功能,应将平均值先扩大1000倍。填空3:将平均值加上5,再除以10,实现四舍五入的功能。



9、请补允函数fun,该函数的功能是:计算并输出下列多项式的值。
S=1+1/(1+2)+1/(1+2+3)+...+1/(1+2+3+...+n)
例如,若主函数从键盘给n输入50后,则输出为S=1.960784。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在 函数fun的横线上填若干表达式或语句。
试题程序:
#include
【1】fun (int n)
{
int i,j;
double sum=0.0,t;
for (i=1;i<=n;i++)
{
t = 0.0;
for (j=1;j<=i;j++)
t +=【2】;
sum +=【3】;
}
return sum;
}
main ( )
{
int n;
double s;
printf ("\nI

nput n:");
scanf ("%d",&n);
s = fun(n);
printf ("\n\ns=%f\n\n",s);
}

【1】double
【2】j
【3】1.0/t或(double)1/t
【解析】填空1:根据主函数可知,返回值是一个double型的数据,因此填入double。填空2:由题中的公式可知,t表示分数分母的累加,那么应填入j。填空3:计算整个公式的和,就是分母的倒数的和,由于在计算过程中有小数存在,应把分子写为double型的数据,所以填入1.0/t或(double)1/t。



10、请补充main函数,该函数的功能是:求n!。
例如7!=5040。
注意:部分源程序给出如下。
请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。
试题程序:
#include
#include
#include
void main()
{
int I,n;
long f=1;
system("CLS");
printf("Input n: ");
scanf("%d",【1】);
for(【2】;I<=n;I++)
【3】;
printf("%d!=%ld\n",n,f);
}

【1】&n 【2】I=1或I=2 【3】f*=I
【解析】填空1:本题考查对标准输入函数scanf()的掌握,地址列表中都是地址值,所以在变量名前要加上取址运算符&。填空2:n的阶乘是将1、2、3……n累积相乘,所以for循环中I从1开始取数。因为1乘以任何数都等于这个数本身,所以I也可以从2开始取数。填空3:掌握了阶乘的算法,这空就非常简单了。

相关文档