本系列资料由"韬略宏智" 授权发布,任何网站不得转载,否则追究法律责任。
第5题:
编写函数jsValue(),它的功能是:求Fibonacci数列中大于t的最小一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:
F(0)=0,F(1)=1
F(n)=F(n-1)+F(n-2)
最后调用函数writeDat()读取50个数据t,分别得出结果且把结果输出到文件out5.dat中。
第6题:
请编写函数countValue(),它的功能是:求n以内(不包括n)同时能被3与7整除的所有自然数之和的平方根s,并作为函数值返回,最后结果s输出到文件out6.dat中。
例如若n为1000时,函数值应为:s=153.909064。
部分程序已经给出。
请勿改动主函数main()和输入输出数据函数progReadWrite()的内容。
#include <conio.h>
#include <math.h>
#include <stdio.h>
double countValue(int n)
{
}
main()
{
clrscr();
printf("the root during the total of the numbers=%f\n",countValue(1000));
progReadWrite();
}
progReadWrite()
{
FILE *fp,*wf;
int i,n;
float s;
fp=fopen("in6.dat","r");
if(fp==NULL)
{
printf("the datafile in6.dat is not exist!");
return;
}
wf=fopen("out6.dat","w");
for(i=0;i<10;i++)
{
fscanf(fp,"%d\n",&n);
s=countValue(n);
fprintf(wf,"%f\n",s);
}
fclose(fp);
fclose(wf);
}
【答案】
double countValue(int n)
{
double xy=0.0;
int i;
for(i=1;i<n;i++)
if(i%3==0&&i%7==0)
xy+=i;
xy=sqrt((double)xy);
return xy;
}
【解析】
考点:(1)按条件查找数字;
(2)对查找结果进行再加工。
本题的解题思路是:先对1到n之间的所有数字进行筛选,若能被3和7整除,则将其累加到一个临时变量中,再通过sqrt()函数求出其平方根。判断是否能整除,可以通过判断该数字模3和模7结果来实现,若为0则能整除。为了保证结果的精确度,在调用sqrt()函数的时候,需要将sqrt()函数的参数强制转换成双精度类型。此部分考生应该仔细分析。
程序的流程是:首先调用countValue()函数,并传递给countValue()函数一个参数,然后由progReadWrite()函数将结果写回文件out6.dat中。
在countValue()函数中,首先要求传递一个整型变量作为参数,其作用是在该参数范围以内进行查找符合条件的整数,然后通过一个for循环,依次取出比n小的各个自然数进行判断,for循环的结束条件是i=n,即所有的数字都查找完成后结束,if语句的功能是判断数字是否能被3和7整除,如果if语句的条件成立,则将该数累加到临时变量xy中,最后通过求平方根函数sqrt()求得xy的平方根,并存入到xy中。在求平方根时,为保证精度,先将xy强制转化成双精度实型数据,注意强制类型转换的括号不可以省略。最后将xy返回,函数结束。
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |