[英]How do solve this problem about sequence in C?
我正在尝试解决以下问题:
这是我尝试过的代码:
#include <stdio.h>
int main()
{
float i, j=0;
for(i=0; i<=2.2; i=i+0.2)
{
for (j = 1; j == 1; j=j+0.2)
{
if (i == 0 || i == 1 || i >= 2) {
printf("I=%.0f J=%.0f\n", i, j);
printf("I=%.0f J=%.0f\n", i, j+1);
printf("I=%.0f J=%.0f\n", i, j+2);
}
else {
printf("I=%.1f J=%.1f\n", i, j);
printf("I=%.1f J=%.1f\n", i, j+1);
printf("I=%.1f J=%.1f\n", i, j+2);
}
j=j+0.2;
}
}
return 0;
}
此代码是给我正确的输出, i
却j
不工作。 我如何正确解决这个问题,为什么j
不返回正确的输出?
在for (j = 1; j == 1; j=j+0.2)
, j == 1
条件将确保您的内部循环最多只运行 1 次。 在第一次迭代后增加j
后, j
将不再是 1 并且循环将中断。
即使它没有中断,每次循环迭代您都会将j
增加0.2
两次,因此您将跳过输出预期包含的值。
我会将内部循环更改为for(int j = 1; j <= 3; ++j)
然后让主体在每次迭代中简单地输出j+i
1 次。
此外, %f
根本不支持您正在寻找的输出格式。 %.0f
根本不会输出任何小数,而%.1f
即使对于#.0
也会强制使用小数。 改用%g
,它不会输出.0
小数。 此外, printf()
无论如何都不支持float
,它需要double
。
尝试这个:
#include <stdio.h>
int main()
{
for(double i = 0.0; i <= 2.0; i += 0.2)
{
for (int j = 1; j <= 3; ++j)
printf("I=%g J=%g\n", i, j + i);
}
return 0;
}
输出:
I=0 J=1
I=0 J=2
I=0 J=3
I=0.2 J=1.2
I=0.2 J=2.2
I=0.2 J=3.2
I=0.4 J=1.4
I=0.4 J=2.4
I=0.4 J=3.4
I=0.6 J=1.6
I=0.6 J=2.6
I=0.6 J=3.6
I=0.8 J=1.8
I=0.8 J=2.8
I=0.8 J=3.8
I=1 J=2
I=1 J=3
I=1 J=4
I=1.2 J=2.2
I=1.2 J=3.2
I=1.2 J=4.2
I=1.4 J=2.4
I=1.4 J=3.4
I=1.4 J=4.4
I=1.6 J=2.6
I=1.6 J=3.6
I=1.6 J=4.6
I=1.8 J=2.8
I=1.8 J=3.8
I=1.8 J=4.8
I=2 J=3
I=2 J=4
I=2 J=5
您实际上并不需要双循环,一个就足够了:
int main()
{
for(float i=0; i<=2; i += 0.2)
{
if(i == 0 || i == 1 || i == 2){
printf("I=%d J=%d\n", (int)i, (int)i + 1);
printf("I=%d J=%d\n", (int)i, (int)i + 2);
printf("I=%d J=%d\n", (int)i, (int)i + 3);
}
else{
printf("I=%.1f J=%.1f\n", i, i + 1);
printf("I=%.1f J=%.1f\n", i, i + 2);
printf("I=%.1f J=%.1f\n", i, i + 3);
}
}
return 0;
}
实际情况是我只有一个循环,因为我扩大了打印数量。
借用 Remy Lebeau 的%g
思想,代码可以简化为:
int main(){
for(double i=0; i<=2; i += 0.2){
printf("I=%g J=%g\n", i, i + 1);
printf("I=%g J=%g\n", i, i + 2);
printf("I=%g J=%g\n", i, i + 3);
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.