问答题
【程序功能】
在给定范围内查找k使得用公式k^2+k+17生成的整数满足以下条件:该数的十进制表示中低3位数字相同,去掉低3位后的整数是回文数。例如,当k=461时用公式生成的整数
是212999,该数满足所给条件。
【编程要求】
1.编写函数int findnum(int n1,int n2,long a[][2])实现以下功能:k依次取n1~n2范围
内的每个整数,分别用每个k及公式k2+k+17生成整数y,若y满足给定条件,则将k值及y
值保存到a指向的数组中,函数返回a数组中k的个数。
2.编写函数main实现以下功能:声明二维数组a和变量n1、n2,输入两个整数并保存到
n1、n2中,用n1、n2及a数组作实参调用findnum函数,按所给格式输出a数组中的数据到屏
幕及文件myf2.out中。最后将考生本人的准考证号输出到文件myf2.out中。
【测试数据与运行结果】
输入:n1=1,n2=10000
输出:k number
461 212999
586 343999
3839 14741777
【要求】
1.源程序文件名为myf2.c,输出结果文件名为myf2.out。
2.数据文件的打开、使用、关闭均用c语言标准库中缓冲文件系统的文件操作函数实现。
3.源程序文件和运行结果文件均需保存在T:盘根目录中供阅卷使用。
4.不要复制扩展名为obj和exe的文件到T:盘中。
【正确答案】 #include
int findnum(int n1,int n2,long a[][2])
{ int i=0,j;
long x1,x2,x3,y,k;
for(k=n1;k<=n2;k++)
{y=k*k+k+17;
x1=x2=y/1000;x3=0;
while(x1>0)
{x3=x3*10+x1%10;x1=x1/10;}
if(x2==x3&&y%10==y/10%10&&y%10==y/100%10)
{ a[i][0]=k;a[i++][1]=y;
}
}
return i;
}
main()
{int i,j;long a[10][2],n1,n2; FILE *fp;
fp=fopen("Myf2.out","w");
scanf("%d%d",&n1,&n2);
j=findnum(n1,n2,a);
printf("/n k/t number");
for(i=0;i
【答案解析】