
アスタリスクでダイヤ型の形を出力するプログラムを作ったのですが
実行例と比較して形が変になってしまいます。また、関数をif文で作ったのですがそれをfor文while文で実行できる形にするにはどのようにしたらいいのでしょうか?
実行例と私が作ったプログラムの実行データを画像に添付しました。
#include <stdio.h>
int daiya( int i, int j, int Num ){
if( j<= i+Num && j<=-i+Num &&
j>= i-Num && j>=-i-Num ){
return 1;
}
}
int main(){
int i, j, n;
do{
puts("数字を入力:");
scanf( "%d", &n );
if(n<2||n>9){
printf("入力エラーです。もう一度入力して下さい\n");
}
}while(n<2||n>9);
for( j=-n/2; j<=n/2; j++ ){
for( i=-n/2; i<=n/2; i++ ){
if( daiya( i, j, n/2 ) == 1 ){
putchar('*');
}
else {
putchar(' ');
}
}
putchar('\n');
}
return 0;
}

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;
}
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
No.1
- 回答日時:
・n/2にしたのはなぜ?
・int daiya~ でifが不成立の時には、そのまま関数の終りになってしまっています。
ちゃんとreturn 0等と明示的に値を返すようにしましょう。
今はたまたま1以外が返っていて正常に動いているように見えますが、思わぬ不具合の元です。
・>関数をif文で作ったのですがそれをfor文while文で実行できる形にする
の意味がわかりません。
まずは、daiya関数の仕様を決めることです。
「大きさNumのダイヤ型を書く際に、i列j行に*を描画するなら1を返す」という仕様なら、今のままです。(returnが足りない点を除いて)
そうでないなら、daiya関数が具体的に「何を受けとって」「何をするのか」「何を返すのか」を決めてください
実際にどうするか考えるのはその後です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語 3 2022/10/04 15:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
int16_t の _t は何?
-
read関数をノンブロッキングで...
-
アスタリスクで正方形
-
【C++】関数ポインタの使い方
-
(int *)の意味
-
未解決の外部シンボル _printf...
-
C++でRPGを作成する際のステー...
-
acceptをalarmでタイムアウトさ...
-
C言語でDxlibを使って3x3の奇数...
-
C言語初心者です、、、お助けく...
-
c言語の問題です
-
C言語で秒単位の数値をコンソー...
-
VBからのDLL呼び出しでエラー発生
-
エラー 添字が付けられた値が、...
-
式は定数値が必要です」という...
-
C言語 エラーの原因がわからな...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
#define _CRT_SECURE_NO_WARNIN...
-
複数桁10進数の*桁目だけを抽出...
-
ラップ関数とはどんなものですか?
-
C言語 エラーの原因がわからな...
-
(int *)の意味
-
【C++】関数ポインタの使い方
-
if と配列の組み合わせ
-
構造体の勉強中です 合計点の高...
-
windows-findstrの正規表現を使...
-
C言語で分からないところがあり...
-
int型の変数値をバイト列として...
-
PowerShellがうまくいかない
-
C言語での奇数の和
-
「{ } で囲むだけ」は正しい?
-
std::set<int> で、ある値が何...
-
実数の整数部,小数部の取得
-
エラー 添字が付けられた値が、...
-
int16_t の _t は何?
おすすめ情報