本系列资料由"韬略宏智" 授权发布,任何网站不得转载,否则追究法律责任。
第11题:
某级数的前两项A1=1,A2=1,以后各项具有如下关系:
An=An-2+2An-1
下列程序的功能是:要求依次对于整数M=100、1000和10000求出对应的n值,使其满足:Sn
请勿改动主函数main()和写函数writeDat()的内容。
#include
int b[3];
void jsValue()
{
}
main()
{
jsValue();
printf("M=100,n=%d\nM=1000,n=%d\nM=10000,n=%d\n",b[0],b[1],b[2]);
writeDat();
}
writeDat()
{
FILE *fp;
fp=fopen("out11.dat","w");
printf("%d\n%d\n%d\n",b[0],b[1],b[2]);
fprintf(fp,"%d\n%d\n%d\n",b[0],b[1],b[2]);
fclose(fp);
}
【答案】
void jsVal
本系列资料由"韬略宏智" 授权发布,任何网站不得转载,否则追究法律责任。
第11题:
某级数的前两项A1=1,A2=1,以后各项具有如下关系:
An=An-2+2An-1
下列程序的功能是:要求依次对于整数M=100、1000和10000求出对应的n值,使其满足:Sn<M且Sn+1>=M,这里Sn=A1+A2+…+An,并依次把n值存入数组单元b[0],b[1]和b[2]中,请编制jsValue()函数来实现此功能,最后调用函数writeDat()把数组b[]中的值输出到out11.dat文件中。
}
main()
{
jsValue();
printf("M=100,n=%d\nM=1000,n=%d\nM=10000,n=%d\n",b[0],b[1],b[2]);
writeDat();
}
writeDat()
{
FILE *fp;
fp=fopen("out11.dat","w");
printf("%d\n%d\n%d\n",b[0],b[1],b[2]);
fprintf(fp,"%d\n%d\n%d\n",b[0],b[1],b[2]);
fclose(fp);
}
【答案】
void jsValue()
{
int A1=1,A2=1,n=1,An;
int sum0,sum;
sum0=A1+A2;
while(1)
{
An=A1+A2*2;
sum=sum0+An;
A1= A2; A2= An;n++;
if(sum0<100&&sum>100)b[0]=n;
if(sum0<1000&&sum>1000)b[1]=n;
if(sum0<10000&&sum>10000){b[2]=n;break;}
sum0=sum;
}
}
【解析】
考点:(1)计算数列的前n项和Sn;
(2)找到着满足条件的Sn。
本题的解题思路是:依次计算出数列第n项和Sn并与M比较,如果满足Sn<M且Sn+1>=M时则将n存入数组b[]中。计算前n项和,可以先计算出前n项,每一项的值(计算公式已经在题目中给出),然后再累加到一个变量中。判断是否满足条件,可以通过if语句来实现。考生应仔细阅读题目中的条件,不应急于开始编程。
程序的流程是:首先调用jsValue()函数,对数据进行处理后由writeDat()函数写回文件out11.dat中。
在jsValue()函数中,因为不确定while循环的次数,故判断条件为恒真(非0即为真),直接进入while循环体中,计算出An的值(An表达式在题目中已经给出),并累加到sum中(sum为前n+1项和,sum0为前n项的和),并把A1和A2的值都更新一次,为下一次求和作准备,之后,n加1。以下三组if语句的功能是:判断现在的sum和sum0满足哪一种情况,如果,sum0<100并且sum>100,即前n项和小于100,前n+1项和大于100时则将n存入数组元素b[0]中;若前n项和小于1000,前n+1项和大于1000时,则将n存入数组元素b[1]中;若满足第三个if语句的条件,即前n项和小于1000,前n+1项和大于1000时,则将n存入数组元素b[2]中,并且跳出while循环;若三个条件都不满足,将前n+1项和赋给前n项和,重新进入while循环,while循环一直进行到第三个if语句满足为止,函数结束。
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |