• ベストアンサー

間違いを指摘して頂けませんか?(切実)

私は大学で春からプログラミングの基礎を学び始めたプログラミング初心者です。 今、if関数のネストについて習っていて、if関数のネストを利用したプログラム作成の課題が出て、一応書いてはみたのですがどうしても上手くいきません。下に課題の内容と私の書いたプログラムを書いておきますので、間違っている箇所を指摘、修正して貰えませんか?宜しくお願い致します。 【課題】 次の項目に従ってプログラムを作成せよ。 (1)整数型の変数noを宣言 (2)「整数を入力してください。」と表示して改行 (3)キーボードから入力された値を変数noに代入 (4)入力された値が ・偶数で4で割り切れる数なら「整数○は偶数で4で割り切れます。」 ・偶数で4で割り切れない数なら「整数○は偶数だけど4で割り切れません。」 ・奇数で3で割り切れる数なら「整数○は奇数で3で割り切れます。」 ・奇数で3で割り切れない数なら「整数○は奇数だけど3で割り切れません。」 の○の位置にnoの値を当てはめて表示した後、改行 #include <stdio.h> main(void) { int no; printf("整数を入力してください。\n"); scanf("%d",&no); if(no/2==0,no%4==0){ printf("整数%dは偶数で4で割り切れます。\n",no); }else{ if(no/2==0,no%4!==0){ printf("整数%dは偶数だけど4で割り切れません。\n",no); }else{ if(no/2!=0,no%3==0){ printf("整数%dは奇数で3で割り切れます。\n",no); }else{ printf("整数%dは奇数だけど3で割り切れません。\n",no); } } } } ※なお、上のプログラムは全て左詰めになってしまっていますが、質問する上で表示出来なかっただけですので…実際にはちゃんと然るべき箇所にTabキーによる余白は入れてあります。

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

  • ベストアンサー
  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.5

No4です。 >「かつ」の演算子についてはまだ習っていないのですが、>&&を使わない場合は回答者No.3の方が書いているように >if(no%2==0){ >if(no%4==0){ >とすれば良いのでしょうか? その通りです。&& を使わないのであればNo3の方のようにしてください。 if (偶数か){  if (4で割り切れるか){   4で割り切れる場合のケース  }else{   4で割り切れない場合のケース  } }else{  if (3で割り切れるか){   3で割り切れる場合のケース  }else{   3で割り切れない場合のケース  } }

fuyutuki
質問者

お礼

色々と詳しく教えて頂き有難う御座いました。 tatsu99さんの回答を参考にしながらプログラムを修正して課題を進めたいと思います。お世話になりました。

その他の回答 (5)

  • khurata
  • ベストアンサー率40% (54/134)
回答No.6

 C言語の記述自体の回答はすでに出ていますので、別の誤りを指摘致します。  if は C の「文」であって、「関数」ではありません。仮に if という関数を作成したとしても、if という綴りは C において予約語ですので、関数として無効になります。  C は関数型言語と呼ばれますが、文と関数は明確に区別して学ぶ方が良いと思います。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

例えば if(no/2==0,no%4==0){ ですが、no/2==0 かつ no%4==0 のつもりで使用されていると思われますが、そのようには動作しません。 if(no/2==0 && no%4==0){ としてください。 && が 「かつ」の演算子です。 他の場所も同様です。

fuyutuki
質問者

補足

「かつ」の演算子についてはまだ習っていないのですが、&&を使わない場合は回答者No.3の方が書いているように if(no%2==0){ if(no%4==0){ とすれば良いのでしょうか?

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.3

#1です。 if関数のネストが問題でしたね。 if(no%2==0){  if(no%4==0){   printf("整数%dは偶数で4で割り切れます。\n",no);  }else{   printf("整数%dは偶数だけど4で割り切れません。\n",no); }else{  if(no%3==0){   printf("整数%dは奇数で3で割り切れます。\n",no);  }else{   printf("整数%dは奇数だけど3で割り切れません。\n",no);  } }

  • utf7
  • ベストアンサー率29% (11/37)
回答No.2

#include <stdio.h> main(void) { int no; printf("整数を入力してください。\n"); scanf("%d", &no); if((no%2 == 0) && (no%4 == 0)){ printf("整数%dは偶数で、4で割り切れます。\n", no); } else{ if((no%2 == 0) && (no%4 != 0)){ printf("整数%dは偶数だけど4で割り切れません。\n", no); } } if((no%2 == 1) && (no%3 == 0)){ printf("整数%dは奇数で、3で割り切れます。\n", no); } else{ if((no%2 == 1) && (no%3 != 0)){ printf("整数%dは奇数だけど3で割り切れません。\n", no); } } } 動作確認はしていませんが、上記が正しい記述です。 #1さんの指摘内容もそうですが、条件で「かつ」というのも"&&"になっていないところも問題です。 なお上記のプログラムは、見やすいように3と4で割るif文を分けています。

  • edomin
  • ベストアンサー率32% (327/1003)
回答No.1

割り切れるかどうかが 「no/2==0」 で比較されている所が辺です。 例えば、no=4ならno/2は2になるはずです。 余りを求めるのと商を求めるのを混同しているようです。

関連するQ&A

  • ヒントを教えて欲しいです

    2と1が同時に表示されてしまうのです。 キーボードから2個の整数を読み込み、それらの和と差がともに偶数であれば整数の2を表示し、いずれか一方のみが偶数の場合は1を表示し、それ以外の場合は整数の0を表示するプログラムを作れ #include<stdio.h> main() { int A,B; printf("Enter an integer:"); scanf("%d",&A); printf("Enter an integer:"); scanf("%d",&B); if((A+B)%2==0,(A-B)%2==0){ /* 偶数ならば */ printf("2\n"); } if((A+B)%2==0){ /* 偶数ならば */ if((A-B)%2==0) /* 偶数ならば */ printf("1\n"); } else{ /* 奇数ならば */ printf("0\n"); } }

  • C++のプログラム

    C言語の問題を授業で出されたのですがさっぱり分かりません。教えて下さい。 1.キーボードから整数nを入力して、1+2+…+nを求めるプログラムを作れ。 2.キーボードから整数nを入力して、1*2*…*nを求めるプログラムを作れ。 3.キーボードから10個の実数を入力し、それらの平均を求めるプログラムを作   れ。 4.円錐の体積を求めるプログラムを作れ。 注:円錐体積V=π*r*r*h/3 5.キーボードから文字列を入力し、それを逆さまにするプログラムを作れ。例えば、”dog”を逆さまにすると”god”になる。 6.キーボードから一つの整数を入力し、それは奇数か偶数かを判断するプログラムを作れ。 ちなみに6番は /* iftst.c */ #include <stdio.h> void main(void) { int n; printf("n="); scanf("%d",&n); if(n%2 == 0){ printf("偶数です\n"); } else{ printf("奇数です\n"); } } で合っているのでしょうか?

  • srand(time(NULL))の使い方

    C言語の勉強中で「ランダムな整数値を作成し、その数値が偶数か奇数かを判定するプログラムをif~else 構文を使って作成」したいのですが下記のプログラムでやってみたのですがまだまだ知識不足で完成しません。知識をお借りできればと思っていますのでどなたか教えてください。 #include<stdio.h> #include<stdlib.h> #include<time.h> int main(void) { { int = i; i = rand(); srand((unsigned)time(NULL)); printf("%d\n",rand()); } if(i % 2 == 0) { printf("偶数である:\n",i); } else { printf("奇数である:\n",i); } return 0; }

  • 間違いが理解できない!!

    下に投稿を行ったばかりですが 質問させてください。 #include<stdio.h> int main(void) { int a; a=3 if(a==a/2*2){ printf("%d is EVEN \n",a); }else{ printf("%d is ODD \n",a); }return(0);} 課題文 「上記のプログラムを改造して、 aが正の場合はPLUSを、 aが負の場合はMINUSを、 aがゼロの場合はZEROを 表示するプログラムを作成し、 実行しよう。」 とあったので、私は #include<stdio.h> int main(void){ int a; printf("変数aに数字を入力してください\n"); printf("a="); scanf("%d",&a); if(a>0){ printf("%d is plus\n",a); }else if(a==0){ printf("%d is zero\n",a); }else{ printf("%d is minus\n",a); } return(0); } と作成しました。 しかし、評価はFAIRでした。(PASS,FAIR,RETRYがあり、 FAIRは「課題を取り違えているがOK.ただし満点じゃない」です) なぜかと言うと、習っていないscanfを使ったかららしく、 課題と違うからだそうです。 習っていないものを使ってはいけないなど聞いてもいませんし、 (私はC言語の知識がある程度あったのでscanfを使いました) 納得いきません。 もし、課題文が、 「上記のプログラムの if文以下を改造して・・・」 となっていたら、私のプログラムは間違いです。 しかし、改造してとしか書いてなかったので、 間違いではないと思います。 皆さんはどうおもいますか?

  • C言語!プログラム書いたのですがエラーです!

    課題内容 キーボードから数字を入力してその値までの合計を表示する。 さらに入力した値が偶数なら0から入力した値までのすべての偶数の和を 入力した値が奇数なら1から入力した値までのすべての奇数の和を表示するプログラム。 #include<stdio.h> int main(void) { int i, n, sum; sum=0; scanf("%d",&n); printf("入力値:%d\n", n); if(n%2 = 0) { for(i=0;i<=n;i+=2) { sum=sum+i; } printf("合計値:%d\n",sum); } else { for(i=1;i<=n;i+=2) { sum=sum+i; } printf("合計値:%d\n",sum); } return(0); } これでコンパイルすると10行目に左辺値が必要とでます。 どうすればよいでしょうか? 教えてください。よろしくお願いします。

  • C言語でのプログラミングの問題が分かりません。

    C言語でのプログラミングの問題が分かりません。 課題で出た問題なのですがわからないのでおしえてください。 問題は 値を入力します(nとします) nが1でない間、以下の処理を繰り返します。  (1)nが偶数のとき、nを2で割り、その答えを新しいnとします。  (2)nが奇数のとき、nを3倍してから1を加え、その答えを新しいnとします。 というものです。 if文を使い計算はできたのですが、「繰り返し」と「新しいnとする」部分が分かりませんでした。作成したプログラムを載せるので手直しお願いいたします。 int n,x,y; printf("整数を入力"); scanf("%d",&n); while (n>1) if (n%2) printf("%d",x=n*3+1); else printf("%d",y=n/2); putchar('\n'); return(0); です。このままだと無限ループしてしまうので繰り返しの条件が悪いみたいです。 それと、答えをnに入れたいのにx、yを使ってしまっています。 回答お願いします。

  • に対応する関数ヘッダがありませんと言って動きません

    に対応する関数ヘッダがありませんと言って動きません それと使っているコンパイラは visual C++ express editionです これが問題のプログラムです まだデバッグなどは終わってないのでその関数ヘッダに関することに重点を置いた 回答を期待しております #include <stdio.h> /*数当てゲーム*/ int main(void); { do{ int no,sum; printf("任意の数字を1から31から選んでください"); printf("その数は奇数ですか?-Yes...9/No...0\n"); scanf("%d",&no); sum=0; /*ある法則にしたがっての数当て*/ if(no==9) sum=sum++; printf("その数は2,3,6,7,10,11,14,15,18,19\n22,23,26,27,30,31の中に含まれていますか?\nYes...9/No...0\n"); scanf("%d",&no); if(no==9) sum=sum+2; printf("その数は4,5,6,7,12,13,14,15,20\n21,22,23,28,29,30,31の中に含まれていますか?\nYes...9/No...0\n"); scanf("%d",&no); if(no==9) sum=sum+4; printf("その数は8,9,10,11,12,13,14,15,24\n25,26,27,28,29,30,31の中に含まれていますか?\nYes...9/No...0\n"); scanf("%d,&no"); if(no==9) sum=sum+8; printf("その数は16,17,18,19,20,21,22,23\n24,25,26,27,28,29,30,31の中に含まれていますか?\nYes...9/No...0\n"); scanf("%d,&no"); if(no==9) sum=sum+16; printf("あなたの入力した数字は%dであっていますか?\nYes...9.No...0\n,sum"); scanf("%d,&no"); if(no==9) printf("あなたは正直者です"); else printf("あなたはひねくれ者かうそつきです"); printf("もう一度?Yes...9.No...0"); scanf("%d,&no"); }while(no==9); return(0); } どうぞよろしくお願いします

  • Cプログラムの条件文  if,else if ,elseについて教えてください。

     こんにちは。課題でどうしても解らないところがあるので教えてください。  次のプログラムは一桁の数(0~9)が偶数(EVEN)か奇数(ODD)かを表示するものです。  #include <stdio.h> main() { int num; printf("please enter a number[0~9]:"); scanf("%d",&num); if (num % 2 ==0) printf("%d is an EVEN. \n", num); else printf("%d is an ODD. \n", num); } というプログラムをコンパイルして実行すると、ちゃんと実行されるのですが、10以上の数や負数を入力しても動作してしまうんです。  そこで0~9の範囲以外の数が入力されていないかを確認して、その場合を偶数、奇数の判断や表示をせず、エラーメッセージだけを表示して終了するプログラムに書き換えなくてはならないのですが、まず  (1)判断する条件式(変数numの内容が0~9の範囲にあるか)で、num >= 0 && num <= 9 をどこに入れればいいか。  (2)please enter a number[0~9]: 8 8 is an EVEN.  (←例えば8を入れると普通こうなるのですが)   please enter a number[0~9]:12   ERROR:12 is in out of range!!  (←0~9以外ののものだったら、この様にエラー表示にしたいのです。  私が考えたプログラムは  #include <stdio.h> main() { int num; printf("please enter a number[0~9]:"); scanf("%d",&num); if (num % 2 ==0) printf("%d is an EVEN. \n", num); if else printf("%d is an ODD. \n", num); else(num >= 0 && num <= 9) printf("ERROR:%d is in out of range!! \n",num); } という風に考えたのですがコンパイルできません。プログラミング初心者なので、書いている内容も解りにくいんですが、どうかよろしくお願いします。

  • C言語で困っています...

    入力した数値の列だけ○と×を縦に、段々になるように表示する (最後の行は×にならなければいけない)プログラムを作成しています。 (実行例) ○と×を表示します。何列?:10            ×           ○×          ×○×         ○×○×         ×○×○×       ○×○×○×      ×○×○×○×    ○×○×○×○× ×○×○×○×○× ○×○×○×○×○× 途中までプログラミングできたのですが、 偶数の数値を入れたときはきちんと最後の行は×になっても 奇数の数値を入力すると○が最後の行になってしまい、うまくいきません。 どこがだめなのでしょうか? どなたか教えてください。 /* 入力した数値の列だけ、○と×を縦に、   段々になるように表示する(最後の行は×になる) */ #include <stdio.h> int main(void) { int i, j, n; printf("○と×を表示します。何列?:"); scanf("%d", &n); for (i=0; i<n; i++){ for (j=0; j<n; j++){ if (j >= (n - 1) - i){ if (j % 2 == 0) printf("○"); else printf("×"); } else printf(" ");//全角スペース } printf("\n"); } return 0; }

  • 素数判定の繰返し

    繰返し素数判定を行ない、CtrlーDで終了するプログラムをつくっています。 まず繰返しなしの素数判定プログラムを作り #include<stdio.h> int main(void) { int a,i; printf("自然数を入力:"); scanf("%d",&a); if(a<=0) printf("入力エラーです。\n"); else if(a==1) printf("1は素数ではない。\n"); else{ for(i=2; i*i<=a; i++){ if(a%i==0) break; } if(i*i>a) printf("%dは素数です。\n",a); else printf("%dは素数ではない。\n",a); } return(0); } これはちゃんとできたのですがそれを繰り返すことができません。 #include<stdio.h> int main(void) { int a,i; printf("自然数を入力:"); scanf("%d",&a); while((a=getchar())!=EOF){ if(a<=0) printf("入力エラーです。\n"); else if(a==1) printf("1は素数ではない。\n"); else{ for(i=2; i*i<=a; i++){ if(a%i==0) break; } if(i*i>a) printf("%dは素数です。\n",a); else printf("%dは素数ではない。\n",a); } printf("自然数を入力:"); scanf("%d",&a); } printf("プログラムを終了します。\n"); return(0); } これは訳わからないことになっちゃいます。。。 どうしたらいいんでしょうか??

専門家に質問してみよう