質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

3回答

995閲覧

C言語: 文字型ポインタの配列

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2018/06/06 11:52

c

1#include <string.h> 2 3int main(void) 4{ 5 int a=0,b=0,c=0; 6 int max = 100; 7 int min = 0; 8 char *key[3] = {"国語", "数学", "英語"}; 9 char *pass[3] ={"入力エラー","合格","不合格"}; 10 printf("%s:",key[0]); 11 scanf("%d", &a); 12 printf("%s:",key[1]); 13 scanf("%d", &b); 14 printf("%s:",key[2]); 15 scanf("%d", &c); 16 17 int number[3] = {a,b,c}; 18 printf("***判定***\n"); 19 20 for (int i = 0;i< 3;i++){ 21 if(number[i] < min || number[i] > max){ 22 printf("%s: %s\n",key[i],pass[i]); 23 }else if(number[i]>59){ 24 printf( "%s: %s\n",key[i],pass[i]); 25 }else if (number[i] < 60){ 26 printf( "%s: %s\n",key[i],pass[i]); 27 } 28 } 29 return 0; 30}

やりたいこと

点数によって入力エラー、合格、不合格と表示されるプログラムを作りたい。

困っていること

判定自体は現コードで条件分岐によって出来ているが設問の意図通りに繰り返し文を用いたやり方が分かりません。
問題の設問で「・点数と判定の入出力時には繰り返し文を用いること」とあってどうすればいいか分からなくて困っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

<学校の宿題のような感じなので、ヒントを少々>

「・点数と判定の入出力時には繰り返し文を用いること」というのを心の隅に置いてコードを見てみましょう。

まず、点数の入力をしている部分のコード

printf("%s:",key[0]); scanf("%d", &a); printf("%s:",key[1]); scanf("%d", &b); printf("%s:",key[2]); scanf("%d", &c);

key[0],key[1],key[2]と順に出てくるので、ここは繰り返しにできそうです。
でも&a,&b,&cと毎回異なる変数を使っているので繰り返しにするのが難しそうですね。
でも、a,b,cの代わりに整数の配列、"int score[3];"を使うと

printf("%s:",key[i]); scanf("%d", &score[i]);

を繰り返すコードに変えられますよね。

==
次は、判定を出力している部分のコード

for (int i = 0;i< 3;i++){ if(number[i] < min || number[i] > max){ printf("%s: %s\n",key[i],pass[i]); }else if(number[i]>59){ printf( "%s: %s\n",key[i],pass[i]); }else if (number[i] < 60){ printf( "%s: %s\n",key[i],pass[i]); } }

とりあえずfor構文をつかった繰り返し文になっていますね。
でも、よく見ると変なところがあります。
それは繰り返し出てくる、"printf("%s: %s\n",key[i],pass[i]);"
i=0だと、出力は「国語: 入力エラー」
i=1だと、出力は「数学: 合格」
i=2だと、出力は「英語: 不合格」
となって、得点に関係なく各教科の判定が決まってしまっています。

『判定自体は現コードで条件分岐によって出来ている』というのは誤解です。
もう少し考えてみましょう。

投稿2018/06/06 12:31

coco_bauer

総合スコア6915

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/06/06 14:01

試してみたら確かにそうでした。 それなのに誤解答載せてしまいました。。。
guest

0

ベストアンサー

誤回答

c

1#include <stdio.h> 2#include <string.h> 3 4int main(void) 5{ 6 int a=0,b=0,c=0; 7 int max = 100; 8 int min = 0; 9 char *key[3] = {"国語", "数学", "英語"}; 10 char *pass[3] ={"入力エラー","合格","不合格"}; 11 int number[3] = {a,b,c}; 12 13 for (int i = 0;i< 3;i++){ 14 printf("%s:",key[i]); 15 scanf("%d", &number[i]); 16 } 17 18 printf("***判定***\n"); 19 20 for (int i = 0;i< 3;i++){ 21 if(number[i] < min || number[i] > max){ 22 printf("%s: %s\n",key[i],pass[i]); 23 }else if(number[i]>59){ 24 printf( "%s: %s\n",key[i],pass[i]); 25 }else if (number[i] < 60){ 26 printf( "%s: %s\n",key[i],pass[i]); 27 } 28 } 29 return 0; 30} 31

正回答

c

1#include <stdio.h> 2#include <string.h> 3 4int main(void) 5{ 6 int a=0,b=0,c=0; 7 int max = 100; 8 int min = 0; 9 char *key[3] = {"国語", "数学", "英語"}; 10 char *pass[3] ={"入力エラー","合格","不合格"}; 11 int number[3] = {a,b,c}; 12 13 for (int i = 0;i< 3;i++){ 14 printf("%s:",key[i]); 15 scanf("%d", &number[i]); 16 } 17 18 printf("***判定***\n"); 19 20 for (int i = 0;i< 3;i++){ 21 if(number[i] < min || number[i] > max){ 22 printf("%s: %s\n",key[i],pass[0]); 23 }else if(number[i]>59){ 24 printf( "%s: %s\n",key[i],pass[1]); 25 }else if (number[i] < 60){ 26 printf( "%s: %s\n",key[i],pass[2]); 27 } 28 } 29 return 0; 30}

これで合っていると思います。

投稿2018/06/06 13:58

編集2018/06/06 14:10
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「入力し、判定し、表示する」を繰り返す。

投稿2018/06/06 12:07

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問