キーボードから正の整数(n<=26)を入力すると下記のように一辺に文字がn個並んだ直角三角形が表示されるプログラムを作る問題で(例:n=5のとき)
abcde abcd abc ab a
と表示。この時どのようにプログラムを作成すればよろしいのでしょうか?
別の問題ですが同文字の角=90度が左下にあるときの直角三角形を作る問題は解けました。
#include<stdio.h> int main(void) { char a; int n,i,j; scanf("%c",&a); scanf("%d",&n); for(i=1;i<=n;i++){ for(j=1;j<=i;j++){ printf("%c",a); } printf("\n"); } return 0; }
これを前提に考えると思うのですがわからなくてつまっています。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
![guest](/img/icon/icnUserSample.jpg)
回答4件
0
ベストアンサー
まず,問題をこのように捉えてはどうか.
C
1// 2//nが入力されるところは省略 3// 4n = ...; 5 6// 7//「n * n マスの四角い範囲の各場所に何らかの文字を(条件に合わせて)表示する」 8//という問題である 9/ 10for( y=0; y<n; ++y ) 11{ 12 for( x=0; x<n; ++x ) 13 { 14 //位置(x,y)に表示すべき文字を決める. 15 char char_at_xy = ' '; //このままだとスペースなので... 16 //※ 17 //ここで,座標値(x,y)を用いた何らかの処理により, 18 //必要ならばchar_at_xyを何らかのアルファベットに変更する 19 // 20 21 //位置(x,y)に表示すべき文字を表示 22 printf( "%c", char_at_xy ); 23 } 24 //改行 25 printf( "\n" ); 26}
「三角形の角がどっちにある」とか,
「三角形箇所への表示内容が全て'a'なのか,abcd... と表示するのか」
等に関わらず,とりあえず一般化すれば上記のようになる.
違うのは 「※」のところの処理だけであろう.
この形で実現できたら,
「もっと{マシな,簡潔な,効率のよい,etc...}書き方に変形できないか?」
として変形させていけばよいであろう.
投稿2020/06/06 01:54
総合スコア12053
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
![guest](/img/icon/icnUserSample.jpg)
0
printf で "%s" を使うとき幅と精度を指定すると、左にスペースを出して
右詰めて表示できます。
C
1 printf("%5.4s\n", "abcde"); // " abcd" と表示 2 printf("%5.3s\n", "abcde"); // " abc" と表示
printf の幅と精度は、"*" を使うと、実行時に可変にできます。
C
1 printf("%*.*s\n", 5, 4, "abcde"); // " abcd" と表示 2 printf("%*.*s\n", 5, 3, "abcde"); // " abc" と表示
入力値 n を使うと、
C
1 for (int n, i = (scanf("%d", &n), n); i > 0; i--) 2 printf("%*.*s\n", n, i, "abcdeghijklmnopqrstuvwxyz");
投稿2020/06/06 01:05
総合スコア8224
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。