C言語でアスタリスクで正方形を作るプログラム

このQ&Aのポイント
  • C言語でアスタリスク(*)で正方形を描画するプログラムについての質問です。
  • 関数で描画部分を作ることができず、正しい方法を知りたいです。
  • 数字を入力して正方形のサイズを指定し、アスタリスクで正方形を描画します。
回答を見る
  • ベストアンサー

アスタリスクで正方形

アスタリスク(*)で正方形を作るプログラムをC言語で書いているのですが関数で描画部分を作ることが出来ません。動かす方法を教えて頂けないでしょうか #include <stdio.h> void seihoukei(void); int no,i,j,cnt; int main(void) { int cnt,i,j; do{ printf("数字(2-9)を入力して下さい:"); scanf("%d",&cnt); if(cnt<2||cnt>9){ printf("入力エラーです。もう一度入力して下さい"); } }while(cnt<2||cnt>9); for(i=1;i<cnt;i++){ for(j=1;j<=cnt;j++){ seihoukei(); } } return 0; } void seihoukei(void) { j = 1; while(j <= j){ putchar('*'); j=j+1; } putchar('\n'); }

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

  • ベストアンサー
回答No.3

とりあえずwhile(j <= j)は無限ループになります。 for(i=1;i<cnt;i++){ for(j=1;j<=cnt;j++){ でcnt*cntの'*'を書けばいいという意図は見えるのですが void seihoukei(void)でまたループしてるので何がしたいのかよく分かりません。 またここがなぜwhileなのかも不明 ついでにforの条件式がおかしいです。 とりあえず正方形を書きたいだけであれば。 for(i=1;i<cnt;i++){ for(j=1;j<=cnt;j++){ putchar('*'); } putchar('\n'); } でいけると思います。 もし関数にしたいなら for(i=1;i<cnt;i++){ for(j=1;j<=cnt;j++){ seihoukei(); } } をseihoukei(cnt);にして void seihoukei(int size) { int i,j; for(i=0;i<size;i++){ for(j=0;j<size;j++){ putchar('*'); } putchar('\n'); } } を呼び出す形にすればいいと思いますがとりあえず文法が怪しいのでその辺を注意しながらやるといいです。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

変数の有効範囲(スコープ)、グローバル変数、ローカル変数、といったものを勉強しましょう。 また、関数への値の渡し方(引数の使い方)も勉強しましょう。 main関数中の > for(i=1;i<cnt;i++){ > for(j=1;j<=cnt;j++) にある i, j と seihoukei関数中の > j = 1; > while(j <= j){ のi,j とは名前は同じですが、まったく関係のない別の変数です。

  • kb-nike
  • ベストアンサー率36% (72/200)
回答No.1

変更箇所ができるだけ少なくなるようにコーディングしてみました。 //-------------------------------------------------------------------- #include <stdio.h> void seihoukei(int cnt); int main(void) { int cnt, i, j; do{ printf("数字(2-9)を入力して下さい:"); scanf("%d", &cnt); if(cnt < 2 || cnt > 9){ printf("入力エラーです。もう一度入力して下さい"); } } while(cnt<2 || cnt>9); seihoukei(cnt); return 0; } void seihoukei(int cnt) { int i, j; for(i=0; i<cnt; i++){ for(j=0; j<cnt; j++){ putchar('*'); } putchar('\n'); } putchar('\n'); }

関連するQ&A

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

    アスタリスクでダイヤ型の形を出力するプログラムを作ったのですが 実行例と比較して形が変になってしまいます。また、関数を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; }

  • C言語について。

    今、C言語に関する問題をやっているんですが、いまいちわかりません。 その問題というのは↓ ≪問題5 (繰り返し) 例題をもとに、次のような九九の表を出力するプログラムを作成しなさい。  1 2 3 4  5  6  7  8  9  2 4 6 8 10 12 14 16 18  ~(略)                                               ≫ という問題です。それで、その例題というのは↓ ≪例題4 (for文、do while文)  次のプログラムは、入力された整数を一辺とする正方形を出力するプログラムである。動作確認をしなさい。  4       (←入力)  ****  (←出力)  ****  ****  **** /* 正方形 */ #include <stdio.h> void main() {     int hen, i, j;     do{        printf("数字(2~9)を入力してください : ");        scanf("%d", &hen);        if( hen < 2 || hen > 9 )           printf("入力エラーです!\n");     }while( hen < 2 || hen > 9);     for( i = 1 ; i <= hen ; i++)     {         for( j = 1 ; j <= hen ; j++)           printf("*");         putchar('\n');    } }  ≫ ≪例題5 (for文、do while文) 次のプログラムは、入力された整数を一辺とする二等辺三角形を出力するプログラムである。動作確認しなさい。  4      (←入力)  *     (←出力)  **  ***  **** /* 二等辺三角形 */ #include <stdio.h> void main() {     int hen, i, j;     do{        printf("数字(2~9)を入力してください : ");        scanf("%d", &hen);        if( hen < 2 || hen > 9 )           printf("入力エラーです!\n");     }while( hen < 2 || hen > 9 );     for( i = 1 ; i <= hen ; i++ )     {            for( j = 1 ; j <= i ; j++ )              printf("*");          putchar('\n');     } }  ≫ 以上の二つが例題です。 わかりづらかったらすみませんm(_ _)m わかる方(問題5を)教えてくださるとありがたいです。

  • 教えてください

    このソースのbunpu[tensu[i] / 10]++;がよく分からないので詳しく教えてください。 あと、 printf(" 100:"); for(j=0; j < bunpu[10]; j++) putchar('*'); putchar('\n');についても何を示しているのかわかりません。そこも詳しく教えてください。宜しくお願いします。 #include <stdio.h> #define NUMBER 80 int main(void) { int i, j; int num; int tensu[NUMBER]; int bunpu[11] = {0}; printf("人数を入力してください:"); do{ scanf("%d", &num); if(num < 1 || num > NUMBER) printf("\a要 [1以上%d以下] :", NUMBER); }while (num < 1 || num > NUMBER); puts("点数を入力してください。"); for(i=0; i < num; i++) { printf("%2d番:", i+1); do{ scanf("%d", &tensu[i]); if (tensu[i] < 0 || tensu[i] > 100) printf("\a要 [0以上100以下] :"); }while (tensu[i] < 0 || tensu[i] > 100); bunpu[tensu[i] / 10]++; } puts("\n 分布グラフ "); printf(" 100:"); for(j=0; j < bunpu[10]; j++) putchar('*'); putchar('\n'); for (i=9; i >=0; i--) { printf("%3d-%3d:", i*10, i*10+9); for (j =0; j < bunpu[i]; j++) putchar('*'); putchar('\n'); } return(0); }

  • C言語プログラムが理解できなくて…

    C言語で中抜きの正方形を作れという問題だったのですが 解答を見ても解説は無く ちんぷんかんぷんで どこでどういう処理をして、こういった解答になるのかが分からないのです 特に教えていただきたいのが何故この文で白抜きの部分ができるのかという事です 初歩的な所だと思うのですがお恥ずかしながら質問させていただきます ちなみに解答はこうありました #include<stdio.h> void main() { int hen,i,j; do { printf("2~9の数字を入力"); scanf("%d",&hen); if(hen<2||hen>9) printf("エラー\n"); } while(hen<2||hen>9); for(i=1;i<=hen;i++) { for(j=1;j<=hen;j++) { if(i==1||i==hen) putchar('*'); else { if(j==1||j==hen) putchar('*'); else putchar(' '); } } putchar('\n'); } }

  • 困っています

    このプログラムを以下に示す所を関数化し、該当する部分を関数呼び出すようにします。  1 非負の整数が入力されたかチェックする関数(非負は0、負は1を返す) 2非負の整数を読み込む関数 3渡された整数の1の位を返す関数 4アスタリスクを表示する関数 です。 全然分からないので詳しく教えてください。 お願いします。 int main(void) { int i; int num,kansu[10]; printf("整数を入力してください。"); scanf("%d", &num); for(i=0; i<10; i++) kansu[i]=0; do{ kansu[num % 10]++; num /= 10; }while(num>0); for (i=0; i <10; i++) { printf("%d",i); for (j =0; j < kazu[i]; j++) putchar('*'); putchar('\n'); } return(0); }

  • 困っています

    これを三段で実行してみたのですが、うまく表示できません。下のようになります。どこが間違っているか教えてください。お願いします。          *         *        * #include <stdio.h> int main(void) { int i, j, ln; printf("何段を表示しますか?"); scanf("%d", &ln); for(i=1; i<=ln; i++){ for(j=1; j<=ln-i; j++) putchar(' '); for(j=1; j<=i * 2 - 1; j++); putchar('*'); putchar('\n'); } return(0); }

  • パスカルのピラミッドを作りたいのですが...

    */ 入力した段数のパスカルの三角形をつくる */ #include <stdio.h> /*---nCr値を返す---*/ int comb(int n,int r) { if (r == 0 || r == n) return (1); else if (r == 1) return (n); else return (comb(n - 1,r-1) + comb(n - 1,r)); } int main(void) { int ln; int i,j; do{ printf(" 段数を入力して下さい:"); scanf("%d",&ln); }while (ln < 1); if (r == 0 || r == n) return (1); else if (r == 1) return (n); else return (comb(n - 1,r-1) + comb(n - 1,r)); } int main(void) { int ln; int i,j; do{ printf(" 段数を入力して下さい:"); scanf("%d",&ln); }while (ln < 1); for (i = 0; i < ln; i++){ for(j = 0;j < ln - i;j++) putchar(' '); for(j = 0; j < i; j++){ printf("%d",comb(i,j)); printf(" "); } putchar('\n'); } return (0); } と作ったら、うまく 1 1 1 1 2 1 1 3 3 1 とは表示されず、 1 1 2 1 3 3 1 4 6 4 となってしまいます。 どこを直せばよいのでしょうか。教えて下さるとうれしいです。 よろしくお願い致します。

  • 困っています

    このプログラムを以下に示す所を関数化し、該当する部分を関数呼び出すようにします。  1 非負の整数が入力されたかチェックする関数(非負は0、負は1を返す) 2非負の整数を読み込む関数 3渡された整数の1の位を返す関数 4アスタリスクを表示する関数 です。 自分では、1は、 int isNotMinus(int n){ return (n < 0) ? 1 : 0 ; } だと思うのですが、2,3,4が分かりません。この 作った関数をmain関数で呼ぶときどうやるかも教えてください。宜しくお願いします。 int main(void) { int i; int num,kansu[10]; printf("整数を入力してください。"); scanf("%d", &num); for(i=0; i<10; i++) kansu[i]=0; do{ kansu[num % 10]++; num /= 10; }while(num>0); for (i=0; i <10; i++) { printf("%d",i); for (j =0; j < kazu[i]; j++) putchar('*'); putchar('\n'); } return(0); }

  • 直角三角形を表示するプログラム

    下記のプログラムを実行するとコマンドプロントになにも表示されず、強制終了しなければならなくなってしまいます。 whileのところがおかしいのはわかったのですが、この書き方の何がいけないのかが分かりません。 初歩的な質問で申し訳ありませんが、回答していただけると有難いです。 #include <stdio.h> int main(void){ int count, i; printf("何段ですか?"); scanf("%d", &count); for(i = 1; i <= count; i++){ while(i-- > 0){ putchar('*'); } putchar('\n'); } return 0; }

  • C言語の問題-配列について

    今、独学でC言語をやっているんですが本にのっている問題に解答がなくわかりません。 問題はbunpu[tensu[i] / 10]++;はどういう意味を表すかです。 do-while分の繰り返しがおわった後にbumpuに++があるので+1をすればいいのでしょうか?よくわかりません・・・ 学生10人の点数の分布を10点ごとに分布グラフとして表示します。 #include <stdio.h> #define NUMBER 80 int main (void) { int i,j,num; int tensu[NUMBER]; int bunpu[11] = {0}; puts("点数を入力してください"); for("i =0; i < num; i++"){ printf("%2d番",i + 1); do{ scanf("%d",&tensu[i]); if(tensu[i] < 0 || tensu[i] > 100) printf("0以上100以下"); }while (tensu[i] < 0 || tensu[i] > 100); bunpu[tensu[i] / 10]++; } puts("\n 分布ぐらふ "); printf(" 100:"); for (j = 0;j < bumpu[10];j++) putchar('*') putchar('\n') for(i = 9; i>=0; i--) { printf("%3d - %3d:",i*10,i*10+9); for (j=0; j< bunpu[i];j++) putchar('*'); putchar('\n'); } return(o); }

専門家に質問してみよう