繁体   English   中英

如何解决这个关于 C 中序列的问题?

[英]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;
}

此代码是给我正确的输出, ij不工作。 我如何正确解决这个问题,为什么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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM