本系列资料由"韬略宏智" 授权发布,任何网站不得转载,否则追究法律责任。
第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
第12题:
下列程序的功能是:计算出自然数SIX和NINE,它们满足的条件是SIX+SIX+SIX=NINE+NINE的个数cnt以及满足此条件所有的SIX与NINE的和SUM。请编写函数countValue()实现程序的要求,最后调用函数writeDat()把结果cnt和sum,输出到文件out12.dat中。
其中的S,I,X,N,E各代表一个十进制数字。
部分源程序已经给出。
请勿改动主函数main()和输出数据函数writeDat()的内容。
#include<stdio.h>
int cnt,sum;
void countValue()
{
}
void main()
{
cnt=sum=0;
countValue();
printf("the total numbers Conforms to the condition=%d\n",cnt);
printf("the total between SIX and NINE Conforms to the condition=%d\n",sum);
writeDat();
}
writeDat()
{
FILE *fp;
fp=fopen("out12.dat","w");
fprintf(fp,"%d\n%d\n",cnt,sum);
fclose(fp);
}
【答案】
void countValue()
{
int i=100;
while(1)
{
if(3*i%2==0&&3*i/2>=1000&&3*i/2<=9999&&i/10%10==(3*i/2)/100%10&&(3*i/2)/1000==(3*i/2)%100/10)
{cnt++;sum+=i+3*i/2;i++;}
else i++;
if(i>999||3*i/2>9999)break;
}
}
【解析】
考点:条件查找指定数字。
本题的解题思路是:存在一个三位数它的三倍值等于一个四位数的二倍值,通过分析知道三位数的三倍值的一半肯定是一个四位数字,还可以知道三位数的三倍值肯定是一个偶数,并且该三位数的十位数字等于四位数的百位数字,在四位数字中其千位数字等于其十位数字,然后在所有的三位数中进行查找,若满足上述条件的即为我们要查找的数字,然后统计出个数并且累加求和。读者可以仔细思考本题的算法,如果要从各个位上的数字去分析的话,程序将十分繁琐。具体做法是:从第一个三位数字100开始逐个进行判断,若满足上述条件,则将累加到一个临时变量中并统计出其个数。
该程序的流程:程序首先调用countValue()函数对数据进行处理后由writeDat()函数写回文件OUT12.DAT中。
在countValue()函数中,因为while循环的条件为真(条件非0即为真),程序首先执行while循环,其功能是通过if语句进行判断,当条件成立时即存在一个三位数i使得3*i为偶数且3*i/2是一个四位数字,并且该三位数的十位数字等于四位数的百位数字,在四位数字中其千位数字等于其十位数字,则将总个数cnt加1,把i和3*i/2累加到sum中(3*i/2即为题目中的NINE,i即为题目中的SIX),否则i加1。while循环执行到i不为三位数或3*i/2不为四位数时结束,函数也结束。
北京 | 天津 | 上海 | 江苏 | 山东 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
广东 | 河北 | 湖南 | 广西 | 河南 |
海南 | 湖北 | 四川 | 重庆 | 云南 |
贵州 | 西藏 | 新疆 | 陕西 | 山西 |
宁夏 | 甘肃 | 青海 | 辽宁 | 吉林 |
黑龙江 | 内蒙古 |