计算机二级

下列给定程序中,函数fun()的功能是::求k!(k<13),所有阶乘的值作为函数值返回。例如:若k=10,则应输出3628800。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。试题程序:include <conio.h>include <stdio.h>long fun(int k){/*************found**************/if k>0return (k* fun (k-l));/*************foun

题目

下列给定程序中,函数fun()的功能是::求k!(k<13),所有阶乘的值作为函数值返回。例如:若k=10,则应输出3628800。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更

改程序的结构。

试题程序:

include <conio.h>

include <stdio.h>

long fun(int k)

{

/*************found**************/

if k>0

return (k* fun (k-l));

/*************found**************/

else if (k=0)

return 1;

}

main ( )

{int k=10;

clrscr ();

print, ("%d!=%1d\n ", k, fun (k));

}

参考答案和解析
正确答案:(1)错误:if k>0 正确:if(k>0) (2)错误:else if(k=O) 正确:else if(k==O)
(1)错误:if k>0 正确:if(k>0) (2)错误:else if(k=O) 正确:else if(k==O) 解析:由数学知识我们可以知道,0和1的阶乘都等于1,if k>O中是一个简单的语法错误,if后面没有“()”说明,在 else if(k=0)中,程序想说明的是“如果k值为0,则函数返回1”,转换成c语言语句就是“else if(k==0)return 1”。
如果没有搜索结果,请直接 联系老师 获取答案。
相似问题和答案

第1题:

2、求组合数。 马上要举办新生程序设计竞赛了,与以往不同的是,本次比赛以班为单位,为了全面衡量一个班级的整体水平,要求从一个班的m位同学中任选k位同学代表本班参加比赛,问有多少种组合方案。显然,这个组合数是m!/(k!(m-k)!)。要求先编写求阶乘的子程序fact,实现求一个数的阶乘功能,在主函数中调用此函数。 Start(in n, out f) { //函数返回值为n的阶乘。 } 输入两个正整数m,k,k<=m<=12。输出一个整数,即组合方案数。 例如:输入 5 3 输出结果为:10


正确

第2题:

给定程序MODll.C中函数fun的功能是:计算小于形参k的最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。

请改正程序中的错误,使程序能输出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!


正确答案:(1)if((k%13==0)I I(k%17==0)) (2) }
(1)if((k%13==0)I I(k%17==0)) (2) } 解析:该题中函数功能是求能被13或17整除的自然数之和。从已给定源程序的main主函数开始入手,“printf("%d\n",fun(500));”语句中的fun函数将500传给n,计算小于500的能被13或17整除的自然数之和。

第3题:

下列给定程序中,函数fun()的功能是:判断一个整数m是否是素数,若是返回l,否则返回0。在main()函数中,若fun()返回1则输出YES,若fun()返回0则输出NO!

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.

试题程序:

include <conio.h>

include <stdio.h>

int fun(int m)

{ int k=2;

while (k<=m&&(m%k))

/*************found*********************/

k++

/*************found*********************/

if(m=k)

return 1;

else return O;

}

main ( )

{ iht n;

clrscr ();

printf("\nPlease enter n: ");

scanf ("%d", &n);

if (fun (n)) printf ("YES\n");

else printf ("NO! \n");

}


正确答案:(1)错误:k++ 正确:k++ (2)错误:if(m=k) 正确:if(m==k)
(1)错误:k++ 正确:k++ (2)错误:if(m=k) 正确:if(m==k) 解析:函数fun()的功能是判断m是否为素数:m从2开始作为除数,并对m取余,若不存在一个数使得余数为0,则m为素数,程序的错误在于if(m=k)语句中的逻辑表达式写成了赋值表达式。

第4题:

以下fun函数的功能是:找出具有N个元素的一维数组中的最小值,并作为函数值返回,请填空。(设N己定义)

int fun(int x[N])

{int i,k=0

for(i=0;i<N;i++)

if(x[i]<x[k])k=_____;

return x[k];

}


正确答案:i
i 解析:循环语句依次查找数组的元素,下标从0到N-1,当x[i]的值小于k时,记录i值即此元素的下标,然后再将其余元素与新的k元素比较,最终求得最小值。所以填i。

第5题:

请补充函数fun(),函数fun()的功能是求7的阶乘。

注意:部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

试题程序:

include<stdio.h>

long fun(int n)

{

if(【 】)

return(n*fun(【 】);

else if(【 】)

return 1;

}

main()

{

int k=7;

printf("%d!=%ld\n", k, fun(k));

}


正确答案:n>1 n-1 n==1
n>1 n-1 n==1 解析:第一空:求阶乘时采用递归的算法,n>1和n==1这两种情况的处理方法不同,需要分开考虑。第二空:阶乘的算法是,当n>1时,n!=n*(n-1)!,即fun(n)=n*fun(n-1)。第三空:n==1是递归的终止条件,因为1!=1,所以当n=1时,返回1。

第6题:

下列给定程序中,函数fun()的功能是:找出一个大于给定整数m且紧随m的素数,并作为函数值返回。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构.

试题程序:

include <conio.h>

include <stdio.h>

int fun( int m)

{ int i,k;

for (i=m+1; ;i++)

{ for (k=2;k<i;k++)

/*************found**************/

if (i%k!=0)

break;

/*************found**************/

if (k<i)

return(i);

}

}

main()

{ int n;

clrscr ();

printf("\nPlease enter n: ");

scanf ("%d", &n);

printf ("%d\n",fun(n));

}


正确答案:(1)错误: if(i%k!=0) 正确: if(i%k=0) (2)错误: if(ki) 正确: if(k>=i)
(1)错误: if(i%k!=0) 正确: if(i%k=0) (2)错误: if(ki) 正确: if(k>=i) 解析:也许刚接触C语言的学习者对素数的概念不清楚,在这里说明一下,素数就是质数,本题的任务是随便输入一个整数m,然后在m的后面寻找紧跟m的一个质数,作为函数值返回。
for (i=m+1; ;i++){
是从m后面的一位开始循环,将m后面一位的值赋予i。然后;我们依次判断m后面的一位是否为素数。
for (k=2;ki;k++)
if (i%k==0)
是一个简单的数学判断问题,判断i被赋予的值与k的余数是否为零。

第7题:

下列给定的程序中,函数fun()的功能是:求出以下分数序列的前n项和。

2/1,3/2,5/3,8/5,13/8,21/13,…

其值通过函数值返回main()函数。例如,若输入n=5,则应输出8.391667。

[注意] 部分源程序给出如下。

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

[试题源程序]

include<stdio.h>

include<conio.h>

double fun(int n)

{

int a=2, b=1, c, k;

double (1) ;

for(k=1; k<=n; k++)

{

s=s+1.0 *a/b;

c=a; a+= (2) ; b=c;

}

return(d);

}

main()

{

int n=5;

printf("\nThe value of function is: %1f\n", (3) );

}


正确答案:[1] s=0.0 [2] b [3] fun(n)
[1] s=0.0 [2] b [3] fun(n) 解析:填空1:根据题目的意思,这里应该是对变量s的声明,注意到后面有对s的累加操作,所以声明之后一定要进行初始化,把s赋值为0。
填空2:根据题目的意思,此处是循环求和,由数列很容易看出后一项的分子是前一项分母与分子之和,即a=a+b或者a+=b。
填空3:由算法可以看出,此处是进行子函数调用。

第8题:

下列给定程序中,函数fun()的功能是:求出以下分数序列的前n项之和。

2/1,3/2,5/3,8/5,13/8,21/13,……

和值通过函数值返回main()函数。例如,若输入n=5,则应输出8.391667。

请改正程序中的错误,使它能得出正确的结果。

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。

试题程序:

include <conio.h>

include <stdio.h>

/*************found**************/

fun (int n)

{ int a=2,b=l,c, k;

double s=0.0;

for(k=l;k<=n;k++)

{s=s+l.0*a/b;

/*************found**************/

c=a; a+=b; b+=c;

}

return (s);

}

main ()

{ int n=5;

clrscr ();

printf("\nThe value of function is:

%1f\n", fun (n));

}


正确答案:(1)错误:fun(int n) 正确:double fun(int n) (2)错误:c=a;a+=b;;b+=c; 正确:c=a;a+=b;b=c;
(1)错误:fun(int n) 正确:double fun(int n) (2)错误:c=a;a+=b;;b+=c; 正确:c=a;a+=b;b=c; 解析:该题题干是著名的斐波拉契分数序列,所以循环条件应该是c=a;a+=b;b=c。

第9题:

下列给定程序中,函数fun()的功能是;求S的值。设 S=(22/1*30))*(42/(3*5))*(62/(5*7))*…*(2k)2/((2k-1)*(2k+1))

例如,当k为10时,函数的值应为1.533852。

请改正程序中的错误,使它能得出正确的结果。

注童;不要改动main 函数,不得增行或删行,也不得更改程序的结构。

试题程序:

include <conio. h>

include <stdio. h>

include <math.h >

/**************found***************/

fun (int k)

{ iht n; float s, w, p, q;

n=1;

s=1.0;

while (n<=k)

{ w=2. 0*n;

p=w-1.0;

q=w+1.0;

s=s*w*w/p/q;

n++;

}

/***************found**************/

return s

}

main()

{ clrscr ();

printf ("%f\n ", fun (10));

}


正确答案:(1)错误:fun(int k) 正确:double fun(int k) (2)错误:return s 正确:returns;
(1)错误:fun(int k) 正确:double fun(int k) (2)错误:return s 正确:returns; 解析:这样一道数学题要是用C程序来实现,真的挺简单,但我们还是需要注意细节问题上出的错误,该题便是如此。一个是简单的函数调用的定义,另一个是语法错误。