S1E21第二题,为什么count=7之后,检验出来结论失败,而且数组后面打印出来也是乱的
a=3;while(a<=count)
{
a++;
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;//末项
i++;
re= a;
re= b;
re= d;
re= d+2;
re= e;
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++和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;
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= a;
re= b;
re= d;
re= d+2;
re= 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,re,re,re,re);
putchar('\n');
}
putchar('\n');
}
return 0;
}
格式由于直接复制你的代码,没认真调,你将就看一下,输出结果是正确的
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,re,re,re,re);
putchar('\n');
}
putchar('\n');
}
return 0;
67L1 发表于 2022-8-21 16:10
这是后面的代码,后面的数组打印出来全是乱码
你可不可以发完整的代码?谢谢 你这代码还是不全啊,能不能从头到尾一次发出来?要不不好判断。谢谢。而且这么多行问题不是能一眼看出来的,要调试的,没有全部代码,也没法调试啊。 sj185123 发表于 2022-8-21 16:09
a++和i++位置不对要放到后头,输出乱码应该是因为i++在前头所以第一行未赋值,至于结论错误,我没看到你全 ...
谢了我的哥,不过为啥i++在前面第一行赋不了值呀?我给i的初始值就是0呀 sj185123 发表于 2022-8-21 16:09
a++和i++位置不对要放到后头,输出乱码应该是因为i++在前头所以第一行未赋值,至于结论错误,我没看到你全 ...
为什么a++的位置也会有影响呢?在前在后的区别在哪里 67L1 发表于 2022-8-23 19:07
为什么a++的位置也会有影响呢?在前在后的区别在哪里
a++的return值不应该是++之前的值吗——就是a=3,a++后,第一次循环时,a不是以3的身份进行循环吗 67L1 发表于 2022-8-23 18:38
谢了我的哥,不过为啥i++在前面第一行赋不了值呀?我给i的初始值就是0呀
数组是从0开始算的,假如你定义i,那么4个变量就是i,i,i,i,定义i,就是从0~8,开头就是i++,那么i=1了,所以你把i[]的几个元素跳过去了,同理a你给3,在进行运算之前就a++,那么你就直接判断了4,那么你给count值的时候,你判断的就是4~count+1,与题意不符。一般i++这种都是放在后面的。其实你也可以用for循环,就不用了纠结放在哪里,直接把
while(a<=count)
改成
for(a;a<=count;a++)
就好了。这种情况正常用for循环是很合适的。 sj185123 发表于 2022-8-24 08:12
数组是从0开始算的,假如你定义i,那么4个变量就是i,i,i,i,定义i,就是从0~8,开头就是 ...
注意,这里改成for循环后,循环体中的a++要删掉 sj185123 发表于 2022-8-24 08:14
注意,这里改成for循环后,循环体中的a++要删掉
谢谢哥
页:
[1]