簡體   English   中英

C程序打印直角三角形

[英]C program to print right angle triangle

我正在嘗試使用 for 循環在 C 中編寫一個程序,該循環將 output 類似於此的模式:

 1
 2 3
 4 5 6
 7 8 9 10

如您所見,該模式是一個直角三角形,每一行的數字數量與每行中的第一個數字相同。 我是 C 的初學者,並選擇 go 關於解決問題以練習我對 for 循環的使用並逐步完成此操作,因此我選擇首先了解如何打印第一列。 到目前為止,這是我的代碼:

#include <stdio.h>

int main()
{
   int n;
   int p = 1;

   printf("enter number of rows: ");
   scanf("%d", &n);

   for (int i= 1; i <= n; i += p++){
      printf("%d\n", i);
   }

   return 0;
}

我發現每列的第一個數字在分解時增加了 1 例如( 1 + 1 = 2 、 2 + 2 = 4 、 4 + 3 = 7 )正如你所看到的每個數字我都加粗了構成第一列。 我的問題是,當我要求用戶輸入一個值來組成特定數量的行時,例如 5,for 語句只打印出 4 行,如下所示:

enter number of rows: 5                                      
1                                                            
2                                                            
4

我猜這是由於語句 i <= n 但我如何指定行數而不中斷第一列的計算?

這里有一個三角形打印程序。

int ndigits(unsigned long long x)
{
    int ndg = 0;
    while(x)
    {
        ndg++;
        x /= 10;
    }
    return ndg;
}

void triangle(int rows)
{
    int count = 1;
    int ndg = ndigits(rows * (rows + 1) /2);

    for(int row = 1; row <= rows; row++)
    {
        for(int column = 1; column <= row; column++)
        {
            printf("%0*d ", ndg, count++);
        }
        printf("\n");
    }
}

int main(void)
{
    triangle(30);
}

function ndigits計算數字的小數位數。 需要打印實三角形,因為所有數字必須具有相同的大小(有些將用零填充)。 否則三角形看起來不會像三角形。

rows * (rows + 1) /2公式計算 1+2+3+4+5... 的結果...顯示三角形中的最大數字

三排三角形將看起來:

1 
2 3 
4 5 6 

十行三角形:

01 
02 03 
04 05 06 
07 08 09 10 
11 12 13 14 15 
16 17 18 19 20 21 
22 23 24 25 26 27 28 
29 30 31 32 33 34 35 36 
37 38 39 40 41 42 43 44 45 
46 47 48 49 50 51 52 53 54 55 

和 20 行:

001 
002 003 
004 005 006 
007 008 009 010 
011 012 013 014 015 
016 017 018 019 020 021 
022 023 024 025 026 027 028 
029 030 031 032 033 034 035 036 
037 038 039 040 041 042 043 044 045 
046 047 048 049 050 051 052 053 054 055 
056 057 058 059 060 061 062 063 064 065 066 
067 068 069 070 071 072 073 074 075 076 077 078 
079 080 081 082 083 084 085 086 087 088 089 090 091 
092 093 094 095 096 097 098 099 100 101 102 103 104 105 
106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 
172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 
191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 

您可以在這里自己嘗試: https://godbolt.org/z/7EWWso

您可以使用這個簡單的代碼:

#include <stdio.h>

int main(){
    int count=0;
    for (int i = 01; i < 11; ++i) {

        for (int j = 01; j <=i; ++j) {
            count+=01;
            printf("%d ",count);
        }
        printf("\n");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM