a++和i++位置不对要放到后头,输出乱码应该是因为i++在前头所以第一行未赋值,至于结论错误,我没看到你全部代码,test你给赋初值为1了吗?
由于我没有你全部代码,我在你发出的代码基础上自行补全和修改了一下,能正确输出结果,你看一下:#include <stdio.h>
int main()
{
int count,a,b,c,d,e,p;
char k;
int i=0,test=1;
int re[100][5];
printf("输入:");
scanf("%d",&count);
a=3;
while(a<=count)
{
b=a*a*a;//立方数
d=1; //首项
p=1; //项数
while(1)
{
p++; //首项为1时,不断增加项数
c=(d+(d+(p-1)*2))*p/2;//利用(首项+末项)*项数/2
if(c==b) //试数正确时,则保存数据
{
e=d+(p-1)*2;//末项
re[i][0]= a;
re[i][1]= b;
re[i][2]= d;
re[i][3]= d+2;
re[i][4]= e;
i++;
c=0;
break;//跳出内循环,换立方根
}
if(c>b) //试数错误,则重置数据,改变首项,继续试数
{
d+=2;
c=0;
p=1;
}
if(d>b/2)//若首项大于立方数的一半,则停止试数,结论错误
{
test=0;
break;
}
}
if(d>b/2)
{
break;
}
a++;
}
if(test==1)
{
printf("结论正确!\n");
}
else
{
printf("结论错误!\n");
}
getchar();
printf("是否打印(y/n):");
scanf("%c",&k);
if(k=='y')
{
for(i=0;i<count-2;i++)
{
printf("%d^3 = %d = %d + %d + ... + %d",re[i][0],re[i][1],re[i][2],re[i][3],re[i][4]);
putchar('\n');
}
putchar('\n');
}
return 0;
}
格式由于直接复制你的代码,没认真调,你将就看一下,输出结果是正确的
|