電子書籍の厳選無料作品が豊富!

2つの正の整数を入力すると、それぞれ縦横の数とする”*”の市松模様を出力するプログラム

縦はなんとなくわかるのですが
横の定義の仕方がよくわからないので
教えてください

縦5横6の例
_*_*_*
*_*_*_
_*_*_*
*_*_*_
_*_*_*

_はスペースの意

A 回答 (5件)

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]));
  }
}
    • good
    • 1

>私の使っているのでコンパイルしたら


>エラーが出てできませんでした

環境とエラーの内容を提示すれば助言できます。
念のため確認します。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++のテキストはお持ちでしょうか。
後々のためにも、応用に入る前にテキスト片手に基礎知識を固めておきましょう。
そうすれば道は必ず開けますよ。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/05/07 22:12

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"); // 一行分表示したので、改行
  }
}

判らないところがありましたら、補足してください。

この回答への補足

私の使っているのでコンパイルしたら
エラーが出てできませんでした

#include <stdio.h>
int main()
殻始まる形で作りたいのですが
どうすればいいでしょうか?

補足日時:2003/04/29 16:43
    • good
    • 1

別解。



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さんと同じです。
一つの目的を実現するための手段は一つではないということの参考程度にでもなれば幸いです。
    • good
    • 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は横
いかがでしょうか。

この回答への補足

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

補足日時:2003/04/29 02:19
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このQ&Aを見た人がよく見るQ&A