• ベストアンサー

市松模様

2つの正の整数を入力すると、それぞれ縦横の数とする”*”の市松模様を出力するプログラム 縦はなんとなくわかるのですが 横の定義の仕方がよくわからないので 教えてください 縦5横6の例 _*_*_* *_*_*_ _*_*_* *_*_*_ _*_*_* _はスペースの意

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

  • ベストアンサー
  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.4

No.1 No.3のarukamunです。 皆さんが書かれているのは関数です。 main等から正しく呼び出せば良いのです。 sample.cとした場合 #include <stdio.h> #include <stdlib.h> void ichimatsu(int v,int h) {   int i,j ;   for (i=0 ;i<v ;i++){     for (j=0 ;j<h ;j++){       if ( (i+j)%2 ){         printf("*");       } else {         printf(" ");       }     }     printf("\n");   } } main(int argc,char *argv[]) {   if ( argc < 3 ){     printf("usage : sample 縦 横");   } else {     ichimatsu(atoi(argv[1]),atoi(argv[2]));   } }

その他の回答 (4)

  • mrumesuke
  • ベストアンサー率45% (254/557)
回答No.5

>私の使っているのでコンパイルしたら >エラーが出てできませんでした 環境とエラーの内容を提示すれば助言できます。 念のため確認します。arukamunさんのコード(私のコードも)はレイアウトの都合上行頭のスペースが全角になっていますが、それをきちんと半角スペースかTABに直してますか? >#include <stdio.h> >int main() >から始まる形で作りたい #include <stdio.h> int main(int argc, char* argv[]) {   void ichimatsu(int, int);  // プロトタイプ宣言   ichimatsu(10, 20);   return 0; } void ichimatsu(int v,int h) {    ~(略)~ } 厳しいことを言うようですが、市松模様以前の問題かと思います。 C/C++のテキストはお持ちでしょうか。 後々のためにも、応用に入る前にテキスト片手に基礎知識を固めておきましょう。 そうすれば道は必ず開けますよ。

mahiro19
質問者

お礼

私もそう思います(;; わかるようにがんばりたいと思います><b ありがとうございます

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.3

No.1のarukamunです。 解説します。 void ichimatsu(int v,int h) // 市松模様を書き込む関数 // v 縦の個数 // h 横の個数 {   int i,j ;   for (i=0 ;i<v ;i++){ // 縦方向のループ     for (j=0 ;j<h ;j++){ // 横方向のループ // ここがこの問題の鍵になります。市松模様になるためには、       if ( (i+j)%2 ){ // (縦+横)を2で割った余りが         printf("*"); // 1の場合は"*"を表示       } else {         printf(" "); // 0の場合は" "を表示       }     }     printf("\n"); // 一行分表示したので、改行   } } 判らないところがありましたら、補足してください。

mahiro19
質問者

補足

私の使っているのでコンパイルしたら エラーが出てできませんでした #include <stdio.h> int main() 殻始まる形で作りたいのですが どうすればいいでしょうか?

  • mrumesuke
  • ベストアンサー率45% (254/557)
回答No.2

別解。 void ichimatsu(int v,int h) {   const char ptn[2][2] = {{'*', ' '}, {' ', '*'}};   int i, j;   for (i = 0; i < v; i++) {     for (j = 0; j < h; j++) {       putchar(ptn[i % 2][j % 2]);     }     printf("\n");   } } やってることはarukamunさんと同じです。 一つの目的を実現するための手段は一つではないということの参考程度にでもなれば幸いです。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

void ichimatsu(int v,int h) {   int i,j ;   for (i=0 ;i<v ;i++){     for (j=0 ;j<h ;j++){       if ( (i+j)%2 ){         printf("*");       } else {         printf(" ");       }     }     printf("\n");   } } vは縦 hは横 いかがでしょうか。

mahiro19
質問者

補足

式の意味を説明していただけるとうれしいです。

関連するQ&A