九九を表示するプログラム

このQ&Aのポイント
  • 掛け算の九九、和の九九、差の九九を表示するプログラムを組む
  • 変数opの値に応じて、九九の計算と表示を行う
  • プログラムの実行を繰り返すかどうかをユーザーに尋ねる
回答を見る
  • ベストアンサー

九九を表示させるプログラム

掛け算の九九、和の九九、差の九九を表示するプログラムを組むという問題ですが、コメント文の所のプログラムが分からないので教えてください。プログラムは以下の通りに与えられています。 #include<stdio.h> main(){ int x,y,z; int yn,op; do{ do{ printf("[*(1),+(2),-(3)]"); scanf("%d",&op); }while( 1 > op || op > 3 ); //ここに、九九を計算し表示するプログラムを入れる //変数opの値が1なら、掛け算の九九 //変数opの値が2なら、和の九九 //変数opの値が3なら、差の九九 を計算し表示 do{ printf("Continue[1/0]?"); scanf("%d",&yn); }while( 0 > yn || 1 < yn ); }while( yn == 1 ); }

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

  • ベストアンサー
  • yone_sk
  • ベストアンサー率34% (58/167)
回答No.2

チョー汚い書き方ですがこういうことかな?? ---------------------------------- #include<stdio.h> void main(){  int x,y,z;  int yn,op;  int i,j;  do{   do{    printf("[*(1),+(2),-(3)]");    scanf("%d",&op);   }while( 1 > op || op > 3 );   for (i=-1; i<10; i++) {    if (i==-1) {     printf("%2s|", "");    } else if (i==0) {     printf("%3s", "--");    } else {     printf("%2d|", i);    }    for (j=1; j<10; j++) {     if (i==-1) {      printf("%3d", j);     } else if (i==0) {      printf("%3s", "---");     } else {      if (op==1) printf("%3d", i*j);      if (op==2) printf("%3d", i+j);      if (op==3) printf("%3d", i-j);     }    }    printf("\n");   }   do{    printf("Continue[1/0]?");    scanf("%d",&yn);   }while( 0 > yn || 1 < yn );  }while( yn == 1 ); } ----------------------------------

myteens
質問者

お礼

参考になりました。ありがとうございました。

その他の回答 (1)

回答No.1

和の九九や差の九九がいまいち把握できませんでしたので 処理を分ける方法のみ提案させていただこうと思います。 とりあえず、Switch文を使えば良いかと思います。 かなり大雑把な説明ですが、Switch文とはifを少し便利にしたようなものとお考えください。状況により処理を分岐させることができます。 switch (op){//変数opを判断する case 1;//変数opが1なら //掛け算の九九の処理 break; case 2; //和の九九 break; case 3; //差の九九 break; } また、掛け算を1x1から9x9までを全て羅列するというのなら for文を持ちいれば作成できるかと思います。デバッグしてないので怪しいですが下記のようなものでも動くかなと思います。もっと綺麗にできるとは思いますが。 int a,b; for(a=1;a<10;++a){ for(b=1;b<10;++b){ printf ("%d * %d = %d\n",a,b,a*b); } }

myteens
質問者

お礼

ありがとうございます。参考にプログラムを考えてみます。

関連するQ&A

  • 九九の表示について

    九九の結果を表示したくてプログラムを組んでみたんですけど #include <stdio.h> int main(void) { int a,b; for (a=1;a<=9;a++ ) { for (b=1;b<=9;b++ ) { printf("%d ",a*b); } printf("\n");   } } これで・・・ 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 . . . . 9 18 27 36 45 54 63 72 81 と表示されます。 この結果の各行の先頭にそれぞれ 1の段、2の段という言葉を入れたいんですが、 どこにどのような文を加えたらいいんでしょうか?? 教えてください!!

  • C言語初心者です。次のプログラムを簡潔にしたいです

    二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成せよ。 自分のプログラムは以下の通りです。 #include <stdio.h> int main(void) { int num1,num2,small,big,sum=0; printf("二つの整数を入力してください。\n"); printf("整数A:"); scanf("%d",&num1); printf("整数B:"); scanf("%d",&num2); small=(num1 > num2) ? num2 : num1; big=(num1 > num2) ? num1 : num2; printf("%d以上%d以下の全整数の和は",small,big); if (num1 < num2) { do { sum+=num1; num1++; }while (num1 <= num2); } else { do { sum+=num2; num2++; }while (num2 <= num1); } printf("%dです。",sum); return 0; } 結果は正しく表示されるはずです。 しかし多変数かつループ文を組み合わせているため、長ったらしくなっています。 どのようなプログラミングならば、簡潔にかけますか? 解答がないので困っています。

  • Cの九九を表示するプログラムについて

    九九の表示を変えたいんですけど #include <stdio.h> int main(void) { int x,y; for (x = 1;x <= 9;x++) { for (y = 1;y <= 9;y++) { printf(" %2d ", x * y); } printf("\n"); } return 0; } これを実行すると 1 2 3 4 5 6 7 8 9 2 4 6 8 10 12 14 16 18 . . 9 . . . . . . . 81 となるのですが、これを 1 * 1 1 * 2 1 * 3 . . . 1 * 9 1 * 2 . . 1 * 9 . . . . . 9 * 9 と表示させたいのですがどなたか知恵を貸していただきませんでしょうか?

  • c言語のプログラムで

    c言語で 2つの整数を読み込んで小さいほうの数以上で大きいほうの数以下の整数をすべて加えた値を表示するプログラム で最後の表示の仕方がわかりません。 実行結果は 整数1:37 整数2:28 28以上37以下の全整数は325です。と表示されるはずです。 この表示の3行目の28と37の表示がどうやればよいのかわかりません。 #include <stdio.h> int main(void) { int a, b; int sum=0; printf("整数1:"); scanf("%d",&a); printf("整数2:"); scanf("%d",&b); if(a>b) do{ sum=sum+b; b=b+1; }while(b<=a); else do{ sum=sum+a; a=a+1; }while(a<=b); printf("%d以上%d以下の全整数の和は%dです。",a,b,sum); return(0); } 全整数の表示はできます。 do文の中でa=cとかにしてやってみましたが、うまくいきませんでした。 お願いします。

  • プログラムについて教えて下さい。

    ある値を入力し、0以上100以下のときだけ平方根を計算するプログラムで、負の値や100よりも大きな値を入力したときは何も表示せず、 再度入力するようなプログラムを教えて下さい。 #include <stdio.h> #include <math.h> main() { int n,i; printf("0から100までの値を入力してください。"); scanf("%d",&n); i=0; do{ i++;} while(i<=100); if(100>=0) printf("%dの平方根は%dです。\n",n,sqrt(i)); return(0); } どうか、お願いします。

  • プログラムがうまく動作しない

    int型変数aとbにそれぞれ値を入力し、それらをかけた結果を出力するプログラムをつくりました。もし文字が入力されたら yarinaoshi と表示し再びaに値を入力するように指示します。しかしこのプログラムはデバグしても何のエラーもないのですが、実際に実行し文字を入力すると Microsoft C++ Debug Library というダイアログボックスが出てきて Abort, Retry, Ignore の三つのボタンがでてきます。どれを選んでも作業は止まってしまい、思ったような結果が得られません。一体どうすればいいのでしょうか?  以下がそのプログラムのソースコードです。 #include <stdio.h> #include <ctype.h> #include <stdlib.h> int kakezan(int a, int b); int main(void) { int dt= 1; int a, b; while(dt !=0){ printf("Int1:"); scanf("%d", &a); if(isalpha(a) != 0) { printf("yarinaoshi"); scanf("%d", &a); } printf("Int2:"); scanf("%d", &b); dt = kakezan(a, b); printf("Result:%d\n", dt); } return 0; } int kakezan(int a, int b) { int dt; return dt = a*b; }

  • 関数の値(scanf)

    初心者なもので、言葉の使い方を間違っていたら申し訳ありません。いいたいことが伝わればよいのですが…。 scanfに関して疑問に思ったことがあります。経験的なことなので、正しいかわからないです。次の(1)と(2)から(3)のことが正しいか教えてください。 (1) int a; do{ printf("整数を入力してください\n"); }while(scanf("%d",&a) ==0); printf("入力した数は、%dです",a) このとき、「(いかなる整数)+(ENTER)」を入力しても、do~whileのループを抜け出す。 (2)また、上のプログラムで、継続条件式の中身を  … }while(scanf("%d",&a)!=0);  … とすると、「(いかなる整数)+(ENTER)」を入力してもループが抜け出せない。 (3)したがって(1)と(2)から、scanf()は入力するだけで、値を真(1)を返す。

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

    下記のプログラムを実行するとコマンドプロントになにも表示されず、強制終了しなければならなくなってしまいます。 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言語のプログラムみてください(isdigit)

    質問は2つあります。 (1) scanf関数を使って、 時給: と表示されたところに一文字打ち込み、数字以外ならばもう一度 時給: と表示されるプログラムを作りたいです。 以下のプログラムなら、 isdigit関数は数字を渡せば0以外の数を返す(真)から、 while文の条件式(偽)のようにすれば、 ・数字を一文字うちこめばwhile文の条件式にあてはまらない、すなわち下のプログラムではisdigit(payment) != 0 となり、return 0; が実行され、プログラムが終わる ・数字以外を一文字打ち込めばwhile文の条件式が真となり、printf関数とscanf関数が実行されて入力待ち状態になる と思ったのですが、どうやら違うようです。実際には ・数字一文字打てばまた入力待ちになる ・数字以外を一文字打てば永遠にprintf関数とscanf関数が実行される のはなぜでしょうか。 #include <stdio.h> #include <ctype.h> int main(void){ int payment; do{ printf("時給[円]:"); scanf("%d",&payment); } while (isdigit(payment) ==0) ; return 0; } (2) 実際には、一文字の制限なく、数字以外の何かを入力したら、再び入力待ちになるプログラムを作りたいのですが、これはどうしたらいいのでしょうか。 つまり 時給: のところに数字以外ならまた 時給: となるようにしたいのです。お願いします。

  • プログラムの勉強でわからないところがあります

    明解C言語の入門編、演習4-3 二つの整数値を読み込んで、小さい方の数以上で大きい方の数以下の整数を全て加えた値を表示するプログラムを作成するものなのですが、うまくいかなく困っています。 他の書き方でやれば普通にいけると思うのですが、どうしてこれだとできないのかがわからないとすっきりしなくって・・・ 以下のようなプログラムで試しています。 #include <stdio.h> int main(void) { int n1,n2,n3,n4; puts("二つの整数を入力してください"); printf("整数1:"); scanf("%d",&n1); printf("整数2:"); scanf("%d",&n2); n3=(n1>n2) ? n2 : n1; n4=(n1>n2) ? n1 : n2; printf("%d以上%d以下の全整数の和は", n3,n4); int num=n1; int sub=n2; int wa; printf("num=%d sub=%dで",num,sub); do{ if (n1>n2) { wa=num+sub; /* 大きいほうの数(num)にsub(小さい方の数+0,2,3,4・・・)を足していく */ sub=sub+1;/* ここを通るたびにsubに+1 */ printf("%d",wa);} else { wa=sub+num; num=num+1; printf("%d",wa);} }while(sub!=n1 || num !=n2); /* 小さい方の数に1足していったものが大きい方の数と等しくなったら0を生成し終了 */ printf ("です\n"); return 0; } このプログラムで試すと、延々と計算をし続けていってしまうのです。 whileあたりがおかしいのかと思ったのですが、どこがおかしいのかわからなくって・・ whileは、中の数字が0を生成する場合止まる、というものだったと思うので、小さい方の数字に1ずつ足していって、大きい方の数字と等しくならない限り続けるように作ったつもりなのですが・・・ どこがおかしいのか教えて頂けると嬉しいです。 それとワガママなお願いなのですが、できれば、正答のようなものは書かないでもらえると助かります、どこが間違いなのかだけ教えて頂いて、後はなんとか自分の力でこなしてみたいので・・・ 自分勝手なお願いですが、よろしくお願いします。

専門家に質問してみよう