• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アスタリスクでダイヤ型を作る)

アスタリスクでダイヤ型を作る

このQ&Aのポイント
  • アスタリスクを使用してダイヤ型の形を出力するプログラムを作成したが、実行例と比較して形が異なる。
  • 関数をif文で作成したが、for文やwhile文で実行するためにはどのように修正すれば良いか。
  • プログラムの実行データの画像を添付しました。

質問者が選んだベストアンサー

  • ベストアンサー
  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.3

#include <stdio.h> int daiya(int x, int y, int n) { return y <= x + n - 1 && y <= -x + n - 1 && y >= x - n + 1 && y >= -x - n + 1; } int main(void) { int n, x, y; printf("段数:"); scanf("%d", &n); for (x = -n + 1; x <= n - 1; x++) { for (y = -n + 1; y <= n - 1; y++) { putchar(daiya(x, y, n) ? '*' : ' '); } putchar('\n'); } return 0; }

その他の回答 (2)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

実行例を見た感じだと、こんなのとか: #include <stdio.h> #include <string.h> #define NMAX 9 #define BUFMAX (NMAX*2) #define SPC ' ' #define STAR '*' char Buf[ BUFMAX + 1 ]; void dia( int n ){ int i, k, l; for ( i = -n + 1; i < n; i++ ){ k = n + (i > 0 ? - i : i ); l = k * 2 - 1; memset( Buf + NMAX - k, STAR, l ); puts( Buf ); memset( Buf + NMAX - k, SPC, l ); } } int main( int argc, char *argv[] ){ int n; memset( Buf, SPC, BUFMAX ); Buf[ BUFMAX ] = '\0'; for ( n = 1; n <= NMAX; n++ ){ printf( "N=%d\n", n ); dia( n ); } }

参考URL:
http://www.ideone.com/l2asA
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

・n/2にしたのはなぜ? ・int daiya~ でifが不成立の時には、そのまま関数の終りになってしまっています。 ちゃんとreturn 0等と明示的に値を返すようにしましょう。 今はたまたま1以外が返っていて正常に動いているように見えますが、思わぬ不具合の元です。 ・>関数をif文で作ったのですがそれをfor文while文で実行できる形にする の意味がわかりません。 まずは、daiya関数の仕様を決めることです。 「大きさNumのダイヤ型を書く際に、i列j行に*を描画するなら1を返す」という仕様なら、今のままです。(returnが足りない点を除いて) そうでないなら、daiya関数が具体的に「何を受けとって」「何をするのか」「何を返すのか」を決めてください 実際にどうするか考えるのはその後です。

関連するQ&A

専門家に質問してみよう