c言語でアスタリスクを使って三角形を表示させたいけどやり方がわからない。。。
一つずつ手順を見ていき、一緒にプログラムを完成させましょう!
ここでは、c言語で任意の大きさの三角形を表示させるプログラムを一緒に見ていきます。
ここでは繰り返し文を使いますので、繰り返し文についてまだよくわかっていない人は、以下を参考にしてください♪
ステップ1:プログラムの全体像を捉える
いきなり「書くぞ!」と思って書いていってもエラーが起こりやすく、うまくいきません!
まずは、「何を入力することで」「何が出力されるのか」を考えていきます。
今回は任意の大きさの三角形を表示させたいので、「三角形の大きさ(厳密に言うと高さ)」を入力して「アスタリスク(✳︎)で作られた三角形」を出力(画面に表示)させると考えられます!
これでプログラムの全体像がわかりました!
ステップ2:書いていきながら修正する
細かい内容まで考えてから書くのも良いですが、今回の内容はそこまで長いコードを書くものではなさそうなので早速書いていきましょう♪
/*入力した整数の高さだけ*の三角形を印字するプログラム*/
#include <stdio.h>
int main(void) {
return 0;
}
この部分は簡単なプログラムだと変わらない部分なのでパパッと書きましょう!
まず入力部分を考えます。
先ほど考えた「三角形の高さ」を入力してもらうための案内を表示させます。
printf("正の整数を入力:");
続いて、入力してもらった数字を変数に格納させます。
scanf("%d",&n);
ここでは変数「n」に整数を入れましょう。
今度は出力部分を書いていきます。
このようなものを表示させたいので、空白、✳︎、空白を入れていく必要があります。
ここで便利な繰り返し文の「for」を使っていきます。
✳︎を入れる数は「1,3,5,7…」と奇数の数で増えていきます。
これを数式で表すと「2line-1」となりますね。(※lineは何行目かを入れる変数)
空白の数は三角形の高さが5だとすると「5,4,3,2,1」となっていますね。(※最後の行の横にも空白を入れます。)
これから、「高さ+1-line」が空白の数だとわかりました。
よってコードは以下のように書けます。
for(line=1;line<=n;line++) { /* 各行の出力 */
for(mark=1;mark<=n+1-line;mark++)
printf(" "); /* 空白を出力 */
for(mark=1;mark<=2*line-1;mark++)
printf("*"); /* *を出力 */
for(mark=1;mark<=n+1-line;mark++)
printf(" "); /* 空白を出力 */
printf("\n"); /* 各行の最後で改行 */
}
これで、入力と出力の両方を記載できたのでまとめてみます。
変数の宣言も付け足して実行できる形にします。
/*入力した整数の高さだけ*の三角形を印字するプログラム*/
#include <stdio.h>
int main(void) {
int n;
int line; /* 行番号 */
int mark; /* マークのループ用変数 */
printf("正の整数:"); scanf("%d",&n);
for(line=1;line<=n;line++) { /* 各行の出力 */
for(mark=1;mark<=n+1-line;mark++)
printf(" "); /* 空白を出力 */
for(mark=1;mark<=2*line-1;mark++)
printf("*"); /* *を出力 */
for(mark=1;mark<=n+1-line;mark++)
printf(" "); /* 空白を出力 */
printf("\n"); /* 各行の最後で改行 */
}
return 0;
}
ステップ3:細かな部分を修正
先ほどまとめたもので実行できますが想定外の入力にも対応できるようにします。
もし正の整数でないものが入力された時に案内を出してプログラムを終了させるようにします。
この時に条件式の「if文」を使います。
完成!
細かい部分の修正をしたものがこちらになります!
/*入力した整数の高さだけ*の三角形を印字するプログラム*/
#include <stdio.h>
int main(void) {
int n;
int line; /* 行番号 */
int mark; /* マークのループ用変数 */
printf("正の整数:"); scanf("%d",&n);
if (n<=0) {
printf("正の整数ではありません\n");
} else {
for(line=1;line<=n;line++) { /* 各行の出力 */
for(mark=1;mark<=n+1-line;mark++)
printf(" "); /* 空白を出力 */
for(mark=1;mark<=2*line-1;mark++)
printf("*"); /* *を出力 */
for(mark=1;mark<=n+1-line;mark++)
printf(" "); /* 空白を出力 */
printf("\n"); /* 各行の最後で改行 */
}
}
return 0;
}
実行して綺麗な三角形が表示されるか確認しましょう。
まとめ
今回は✳︎で三角形を表示させるプログラムを一緒にみていきました!
皆さんの助けになっていれば幸いです。