上机100套题及答案3140.docx

上传人:b****5 文档编号:8641376 上传时间:2023-02-01 格式:DOCX 页数:43 大小:49.30KB
下载 相关 举报
上机100套题及答案3140.docx_第1页
第1页 / 共43页
上机100套题及答案3140.docx_第2页
第2页 / 共43页
上机100套题及答案3140.docx_第3页
第3页 / 共43页
上机100套题及答案3140.docx_第4页
第4页 / 共43页
上机100套题及答案3140.docx_第5页
第5页 / 共43页
点击查看更多>>
下载资源
资源描述

上机100套题及答案3140.docx

《上机100套题及答案3140.docx》由会员分享,可在线阅读,更多相关《上机100套题及答案3140.docx(43页珍藏版)》请在冰豆网上搜索。

上机100套题及答案3140.docx

上机100套题及答案3140

2009年4月上机100套题31-40

第三十一套

请补充main函数,该函数的功能是:

求n!

例如,7!

=5040。

注意:

部分源程序给出如下。

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

试题程序:

#include

#include

#include

voidmain()

{

intI,n;

longf=1;

system("CLS");

printf("Inputn:

");

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

#include

longfun(inta,intn)

{

intj;

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

longs=0,t=1;

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

for(j=0;j<=n;j++)

t=t*10+a;

s=t;

for(j=1;j

{

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

t=t%10;

s=s-t;

}

return(s);

}

main()

{

inta,n;

printf("\nPleaseenteraandn:

");

scanf("%d%d",&a,&n);

printf("\nThevalueoffunctionis%ld\n",fun(a,n));

}

【参考答案】

(1)错误:

longs=0,t=1;正确:

longs=0,t=0;

(2)错误:

for(j=0;j<=n;j++)

正确:

for(j=0;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

doublefun(intn)

{

}

voidmain()

{

intn;

doubles;

FILE*out;

printf("\nInputn:

");

scanf("%d",&n);

s=fun(n);

printf("s=%f\n",s);

/******************************/

out=fopen("out.dat","w");

fprintf(out,"%f\n",fun(n));

fclose(out);

/******************************/

}

【参考答案】

doublefun(intn)

{

doublet,sn=1.0;

inti,j;

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

{

t=1.0;

for(j=1;j<=i;j++)

t*=j;

sn+=1.0/t;

}

returnsn;

}

【考点分析】

本题考查:

变量数据类型,数据类型强制转换;和、积变量如何初始化;for循环语句;通过return语句返回值。

【解题思路】

该程序的数学思路是:

在程序中输入n后,以前n项的阶乘作为分母递加,由于t是浮点类数据,所以s+=1.0/t,for循环的作用是每一次循环,将1.0/t与sn相加,并将值存入sn中。

第三十二套

请补允函数fun,该函数的功能是:

计算并输出下列多项式的值。

例如,若主函数从键盘给n输入50后,则输出为S=1.960784。

注意:

部分源程序给出如下。

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

试题程序:

#include

【1】fun(intn)

{

inti,j;

doublesum=0.0,t;

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

{

t=0.0;

for(j=1;j<=i;j++)

t+=【2】;

sum+=【3】;

}

returnsum;

}

voidmain()

{

intn;

doubles;

printf("\nInputn:

");

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。

下列给定程序中,函数fun的功能是:

根据整型形参m,计算如下公式的值。

例如,若m的值为5,则应输出:

1.463611。

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

注意:

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

试题程序:

#include

#include

doublefun(intm)

{doubley=1.0;

inti;

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

for(i=2;i

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

y+=1/(i*i);

return(y);

}

voidmain()

{intn=5;

system("CLS");

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

}

【参考答案】

(1)错误:

for(i=2;i

正确:

for(i=2;i<=m;i++)

(2)错误:

y+=1/(i*i);

正确:

y+=1.0/(i*i);

【考点分析】

本题考查:

for循环语句的循环条件;数据类型的强制转换,由强制转换运算符完成转换。

【解题思路】

(1)for(i=2;i

(2)y是一个double型变量,题中得出的结果是一个整数,所以改为y+=1.0/(i*i)。

请编写函数fun,该函数的功能是:

计算并输出

S=1+(1+20.5)+(1+20.5+30.5)+…+(1+20.5+30.5+…+n0.5)

例如,若主函数从键盘给n输入20后,则输出为S=534.188884。

注意:

部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include

#include

doublefun(intn)

{

}

voidmain()

{

FILE*wf;

intn;

doubles;

printf("\n\nInputn:

");

scanf("%d",&n);

s=fun(n);

printf("\n\ns=%f\n\n",s);

/******************************/

wf=fopen("out.dat","w");

fprintf(wf,"%f",fun(20));

fclose(wf);

/*****************************/

}

【参考答案】

doublefun(intn)

{

inti;

doubles=0.0,s1=0.0;

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

{

s1=s1+pow(i,0.5);

/*求每一项*/

s=s+s1;

/*按公式求出s*/

}

returns;

}

【考点分析】

本题考查:

变量数据类型及初始化;pow()函数的使用,其功能是计算x的y次方;for循环语句完成每一项的值以及累加计算。

【解题思路】

我们先用数学的思路读懂该程序,并用1个字符表示"()"内的值。

在本程序中用s1来表示题中每个小括号内的值,第1项相当于有1个10.5(它还是1),第2项相当于第1项的值加上20.5,第3项相当于第2项的值加上30.5,…,依此类推。

函数pow(x,y)的功能是求出x的y次方,该函数已在库函数中定义(即可直接使用)。

程序中用s来表示总的结果,每1次循环加1次s1,即加1项。

第三十三套

程序的功能是计算

注意:

部分源程序给出如下。

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

试题程序:

#include

longfun(intn)

{

intI;

longs;

s=【1】;

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

s=【2】;

returns;

}

voidmain()

{

longs;

intk,n;

scanf("%d",&n);

s=【3】;

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

s=【4】;

printf("%ld\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的所有数的阶乘。

数列中,第一项为3,后一项都比前一项的值增5。

下列给定程序中,函数fun的功能是:

计算前

项的累计和。

在累加过程中把那些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数里。

如当n的值为20时,该数列为3,8,13,18,23,28,…,93,98。

符合此条件的累加值应为42,126,366,570,1010。

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

注意:

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

试题程序:

#include

#defineN20

intfun(intn,int*a)

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

{intI,j,k,sum;

sum=0;

for(k=3,I=0;I

{sum=sum+k;

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

if(sum%4=2)

a[j++]=sum;

}

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

returnj;

}

voidmain()

{inta[N],d,n,i;

printf("\nEntern(4<=n<=50):

");

scanf("%d",&n);

d=fun(n,a);

printf("\n\nTheresult:

\n");

for(i=0;i

printf("\n\n");

}

【参考答案】

(1)错误:

inti,j,k,sum;正确:

inti,j=0,k,sum;

(2)错误:

if(sum%4=2)正确:

if(sum%4==2)

(3)错误:

returnj;正确:

returnj++;

【考点分析】

本题考查:

变量初始化;if语句条件表达式,区别"="和"==";return语句完成函数值的返回。

【解题思路】

该题是一个公差为5的等差数列,要是用数学的办法解决也就是一个公式两个符号,问题迎刃而解,要是用C语言来求这样很有规律的等差数列前n项和,也相当简单,关键看细节。

i,k,sum都分别定义了,那么j呢?

所以,正确的应该是inti,j=0,k,sum;,再往下看,if(sum%4=2)是在说明题干中"在累加过程中把那些被4除后余2的当前累加值放入数组中,符合此条件的累加值的个数作为函数值返回主函数",那么"余2"的表示方法呢?

应该是if(sum%4==2),后面的返回错误就不提了,看看a[j++]=sum;语句,难道还能返回给j吗?

请编写一个函数fun,它的功能是:

计算并输出给定整数n的所有因子(不包括1与自身)之和。

规定n的值不大于1000。

例如,若主函数从键盘给n输入的值为856,则输出m为sum=763。

注意:

部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include

intfun(intn)

{

}

voidmain()

{

intn,sum;

FILE*out;

printf("Inputn:

");

scanf("%d",&n);

sum=fun(n);

printf("sum=%d\n",sum);

/******************************/

out=fopen("out.dat","w");

fprintf(out,"%d\n",fun(123));

fprintf(out,"%d\n",fun(456));

fprintf(out,"%d\n",fun(789));

fprintf(out,"%d\n",fun(147));

fprintf(out,"%d",fun(258));

fclose(out);

/******************************/

}

【参考答案】

intfun(intn)

{

ints=0,i;

for(i=2;i<=n-1;i++)

/*将n减1累加*/

if(n%i==0)

s+=i;

returns;

}

【考点分析】

本题考查:

变量数据类型,求和时变量如何初始化;所有因子的判定方法,if语句结合求余运算;return返回语句。

【解题思路】

函数fun的功能是计算输出给定整数n的所有因子之和。

本题比较简单,

(1)遍历从2到n-1的所有整数;

(2)用条件语句找出能被n整除的所有整数,并累加求和;(3)返回值。

第三十四套

请补充main函数,该函数的功能是:

求1+2!

+3!

+…+N!

的和。

例如,1+2!

+3!

+…+5!

+6!

的和为873。

注意:

部分源程序给出如下。

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

试题程序:

#include

#include

voidmain()

{

intI,n;

longs=0,t=1;

system("CLS");

printf("\nInputn:

\n");

scanf("%d",【1】);

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

{

t=【2】;

s=【3】;

}

printf("1!

+2!

+3!

...+%d!

=%ld\n",n,s);

}

【参考答案】

(1)&n

(2)t*i(3)s+t

【考点分析】本题考查:

scanf()函数,其一般形式为"scanf("格式控制字符串",地址表列);",其中,需要注意地址是由地址运算符"&"后跟变量名组成的;累加以及累乘的实现方法。

【解题思路】填空1:

标准输入函数scanf()的地址表列中,变量n前要加上取址运算符"&"。

填空2:

变量t用来保存每个数的阶乘,因为i!

=(i-1)!

*i,所以此空应为t*i。

填空3:

变量s用来保存从1到n的阶乘的总和。

下列给定程序中,函数fun的功能是:

求S的值。

S=(22/(1*3))*(42/(3*5))*(62/(5*7))*…*(2k)2/((2k-1)*(2k+1))

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

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

注意:

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

试题程序:

#include

#include

#include

#include

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

fun(intk)

{intn;floats,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**************/

returns

}

voidmain()

{system("CLS");

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

}

【参考答案】

(1)错误:

fun(intk)正确:

doublefun(intk)

(2)错误:

returns正确:

returns;

【考点分析】

本题考查:

函数定义,其形式为"类型标识符函数名(形式参数表列)";return语句;C语言的书写规范。

【解题思路】

这是一道用C程序来实现的数学题,实现起来比较简单,但是就注意细节上的错误。

该题有两处错误,一个是简单的函数调用的定义错误;另一个是语法错误。

请编写函数fun,它的功能是:

计算并输出n(包括n)以内所有能被5或9整除的自然数的倒数之和。

例如,若主函数从键盘给n输入20后,则输出为s=0.583333。

注意:

n的值要求不大于100。

部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include

doublefun(intn)

{

}

main()

{

intn;

doubles;

FILE*out;

printf("\nInputn:

");

scanf("%d",&n);

s=fun(n);

printf("\n\ns=%f\n",s);

/******************************/

out=fopen("out.dat","w");

fprintf(out,"%f\n",fun(30));

fclose(out);

/******************************/

}

【参考答案】

doublefun(intn)

{

inti;

doublesum=0.0;

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

if(i%5==0||i%9==0)

sum+=1.0/i;

returnsum;

}

【考点分析】本题考查:

变量数据类型及初始化;if语句,for循环语句。

【解题思路】本题是一道简单的计算题,首先确定了n的范围,然后确定判断条件。

只要判断条件正确,这道题就可以轻松解决。

第三十五套

给定程序的功能是:

计算并输出下列级数的前N项之和SN,直到SN大于q为止,q的值通过形参传入。

例如,若q的值为50.0,则函数值为50.416687。

注意:

部分源程序给出如下。

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

试题程序:

#include

doublefun(doubleq)

{

intn;

doubles,t;

n=2;

s=2.0;

while(s【1】q)

{

s=s+(double)(n+1)/n;

【2】;

}

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

【3】;

}

voidmain()

{

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

}

【参考答案】

(1)<=

(2)n++或n+=1或n=n+1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 日语学习

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1