【问题标题】:Triangle number program in C language?C语言的三角数程序?
【发布时间】:2020-07-15 06:14:16
【问题描述】:

我想做一个简单的三角数程序1, 3, 6, 10,...,不超过100,我已经做到了。但是问题不大

让我们看看我的代码:

#include <stdio.h>

int main (void){
    int j=1 , k=1 , i=100 , status;

    while (k <= i){
        j = j + 1;
        k = k + j;
        while ( k < 100){

        printf (" %d\n",k);
        status = 1;
        break;
    }
    }
    if (status == 1){
    printf ("DONE!");
    }
}

输出:

3
6
10
15
21
28
36
45
55
66
78
91
DONE !

从这里,我有一些问题:

  1. 我使用两个While 命令,因为当我只使用一个While 时,输出将大于100,它将是105。那么有没有一种方法可以通过使用一个while 命令来简化这一点?
  2. 输出不以数字1开头,我想让程序输出如下:
1
3
6
10
15
21
28
36
45
55
66
78
91
DONE !

但最后,输出总是以数字3

【问题讨论】:

  • 请在您显示的代码上做一些rubber duck debugging。您何时打印与您对k 的修改相关的k 的值?内循环的目的是什么,它的真正作用是什么?
  • 向后工作,您可以看到kj + 1j21 + 1 + 1 是...?
  • 当我只使用k &lt;= i并打印k值时,输出值将是105,这比我想要的值“低于100”要多,所以我制作第二个循环k&lt;100 并在第二个循环中打印k 值并得到我想要的结果并将变量status 更改为1if 函数将检查 status 变量,如果 status1 打印 DONE!

标签: c loops while-loop conditional-statements


【解决方案1】:

你的方法太复杂了。您只需要一个循环、一个运行总和和一个变量来保存要添加到总和的下一个值。

从零开始运行总和,然后加 1 并打印总和,然后加 2 并打印总和,然后加 3 并打印总和...继续这样做,直到总和超过 100。

喜欢:

#include <stdio.h>

int main(void) {
    int sum = 0;
    int nextToAdd= 1;
    while(1)
    {
        sum += nextToAdd;
        ++nextToAdd;
        if (sum > 100) break;
        printf("%d\n", sum);
    }
    return 0;
}

或者如果你更喜欢do-while

#include <stdio.h>

int main(void) {
    int sum = 1;
    int nextToAdd = 1;
    do
    {
        printf("%d\n", sum);
        ++nextToAdd;
        sum += nextToAdd;
    } while(sum <= 100);
    return 0;
}

或者如果你更喜欢 for 循环

#include <stdio.h>

int main(void) {
    int sum = 1;
    for (int nextToAdd = 2; sum <= 100; ++nextToAdd)
    {
        printf("%d\n", sum);
        sum += nextToAdd;
    }
    return 0;
}

【讨论】:

    【解决方案2】:

    当你只使用一个while时,当k=91所以k&lt;=100while的条件为真,所以你会输入while,k会变成105,你会打印出来。所以你需要一个ifprintf 之前检查if(k&lt;100)

    如果您初始化 k=0 并替换 k+=j 并替换为 j++,您也将打印 1

    看:

    int main()
    {
        int k = 1, j = 2, i = 100;
        while (k <= i) {
            printf("%d\n", k);
            k += j;
            j++;
        }
        printf("DONE!");
    }
    

    【讨论】:

    • 为什么k变量从0开始?
    • @Proust 这是你选择解决这个问题的物质算法。在这个算法中你应该使用k=0,否则你会在这个灵魂中得到错误的答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2022-01-06
    相关资源
    最近更新 更多