20094月上机100套题及答案31-40.docVIP

  • 3
  • 0
  • 约26.91万字
  • 约 29页
  • 2017-06-14 发布于河南
  • 举报
20094月上机100套题及答案31-40

2009年4月上机100套题31-40 第三十一套 请补充main函数,该函数的功能是:求n!。 例如,7!=5040。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在main函数的横线上填入所编写的若干表达式或语句。 试题程序: #include stdlib.h #include stdio.h #include conio.h 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 【考点分析】 本题考查:scanf( )函数;for循环语句,循环变量初始值;阶乘算法。 【解题思路】 填空1:本题考查对标准输入函数scanf( )的掌握程度,地址列表中都是地址值,所以在变量名前要加上取址运算符。 填空2:n的阶乘是将1、2、3…n累积相乘,所以for循环中i从1开始取数。因为1乘以任何数都等于这个数本身,所以i也可以从2开始取数。 填空3:掌握了阶乘的算法,这个问题就非常简单。 下列给定程序中,函数fun的功能是:求表达式s=aa…aa-…-aa-aa-a(此处aa…aa表示n个a,a和n的值在1至9之间)的值。例如a=3,n=6,则以上表达式为: s=333333-33333-3333-333-33-3 其值是296298。a和n是函数fun的形参,表达式的值作为函数值传回main函数。 请改正程序中的错误,使它能计算出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include conio.h #include stdio.h long fun(int a,int n) { int j; /*************found**************/ long s=0,t=1; /*************found**************/ for(j=0;j=n;j++) t=t*10+a; s=t; for(j=1;jn;j++) { /*************found**************/ t=t%10; s=s-t; } return(s); } main() { int a,n; printf(\nPlease enter a and n: ); scanf(%d%d,a,n); printf(\nThe value of function is %ld\n, fun(a,n)); } 【参考答案】 (1)错误:long s=0,t=1; 正确:long s=0, t=0; (2)错误:for (j=0;j=n;j++) 正确:for (j=0;jn;j++) (3)错误:t=t%10; 正确:t=t/10; 【考点分析】 本题考查:变量赋初值;for循环语句;区别求余运算和除法运算。 【解题思路】 (1)用代入法就可看出,结果是错误的,它的个位出现了问题。 (2)从题中给出的例题就可以看出,当n=6,a=3时,得到的最大数为33333,这是一个五位数,所以这里只要从0开始循环6次就可以了。 (3)根据题意,这里不需要求余数,而是要去掉个位数,重新组合一个数。 请编写函数fun,其功能是计算并输出如下多项式的值: Sn=l+1/1!+1/2!+1/3!+1/4!+…+1/n! 例如,若主函数从键盘给n输入15,则输出为S=2.718282。 注意:n的值要求大于1但不大于100。部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。 试题程序: #include stdio.h double fun(int n) { } void main() { int n; double s; FILE *out; printf(\nInput n: ); scanf(%d,n); s=fun(n); printf(s=%f\n,s); /******************************/ out=fopen(out.dat,w); fprintf(out,%f\n,fun(n)); fclose(out); /****

文档评论(0)

1亿VIP精品文档

相关文档