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

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

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

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

Q&A

2回答

742閲覧

間違いを教えてください。

退会済みユーザー

退会済みユーザー

総合スコア0

C

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

0グッド

0クリップ

投稿2020/10/23 12:22

C言語初めて1週間です。

IF文のコードがない場合の結果はあっているので
IF文内がおかしいところがわかりません。
このコードのどこを直せばよいか教えて下さい。

問題文と入力値は後ろに記載しております。

C言語

1#include <stdio.h> 2#include <string.h> 3int main(void){ 4 5 char buf[1000]; 6 int n; 7 int pass = 0; 8 fgets(buf, sizeof(buf), stdin); 9 sscanf(buf, "%d", &n); 10 11 for(int i = 0; i < n; i++){ 12 char bunri[100]; 13 int d1, d2, d3, d4, d5; 14 fgets(buf, sizeof(buf), stdin); 15 sscanf(buf, "%s %d %d %d %d %d", bunri, &d1, &d2, &d3, &d4, &d5); 16 17 int sum1 = d1 + d2 + d3 + d4 + d5; //総得点 18 int sum2 = d2 + d3; //理系得点 19 int sum3 = d4 + d5; //文系得点 20 if(sum1 >= 350 && sum2 >= 160){ //理系条件 21 if(strcmp(bunri,"s") == 0){ 22 pass++; 23 } 24 } else if(sum1 >= 350 && sum3 >= 160){ //文系条件 25 if(strcmp(bunri,"l") == 0){ 26 pass++; 27 } 28 } 29 } 30 printf("%d", pass); 31}

問題文
総合力を重視する大学の入試では 1 次試験 (英語、数学、理科、国語、地理歴史の 5 科目で各 100 点満点) の成績で2段階選抜を行います。2段階選抜を通過する条件は以下のようになっています。

全科目の合計得点が 350 点以上
理系の受験者の場合は理系 2 科目 (数学、理科) の合計得点が 160 点以上
文系の受験者の場合は文系 2 科目 (国語、地理歴史) の合計得点が 160 点以上
受験者それぞれの各科目の点数が入力されるので、何人2段階選抜を通過できるかを求めてください。

2段階選抜を何人通過できるかを整数で 1 行に出力してください。

入力値
20
l 100 67 39 85 87
s 38 75 75 45 90
l 43 95 7 35 49
l 82 77 74 35 44
s 96 80 92 58 84
l 23 60 44 27 3
l 42 24 52 23 63
s 44 78 98 51 10
l 93 38 73 88 12
l 34 29 43 48 61
l 83 33 97 3 59
l 24 84 22 35 33
s 81 42 80 34 87
l 8 87 82 80 100
l 48 75 75 3 50
l 93 76 25 71 31
s 60 92 64 66 11
l 61 47 6 21 83
l 68 1 47 81 78
l 8 72 54 20 25

・1 行目には受験者の人数を表す整数 N が与えられます。
・続く N 行のうち i 行目 (1 ≦ i ≦ N) には受験者の文理の区分を表す文字 t_i と、英語、数学、理科、国語、地理歴史の点数を表す整数 e_i, m_i, s_i, j_i, g_i がこの順に半角スペース区切りで与えられます。
・t_i について文系は "l" ("L" の小文字)、理系は "s" で表されます。
・入力は合計で N + 1 行となり、入力値最終行の末尾に改行が1つ入ります。

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

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

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

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

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

gentaro

2020/10/23 12:29

ただの丸投げというか、作業依頼にしか見えません。 https://teratail.com/help/avoid-asking 「何かを作りたいのでコードを書いてほしい、学校の課題を解いてほしい等の質問は、具体的にプログラミングで困っている質問ではないと考え、推奨していません。」 そういう質問がしたいなら有償で相談に乗ってくれる先生を雇いましょう。 https://menta.work/
guest

回答2

0

文系なのに理系条件を満たした人は、最初のifが真になるので、elseの文系条件のifが実行されません。

案1:外側のifで文理のチェックをして、内側のifで点数を見る。
案2:点数と文理のチェックを1つのifで行う。

投稿2020/10/23 12:50

編集2020/10/23 12:52
otn

総合スコア84713

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

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

0

外側のif文のelseを消して、独立したif文2つにするか、strcmpも含めた条件式にする。

C

1if (sum1 >= 350 && sum2 >= 160 && strcmp(bunri,"s") == 0){ 2 pass++; 3} else if(sum1 >= 350 && sum3 >= 160 && strcmp(bunri,"l") == 0) { 4 pass++; 5}

投稿2020/10/23 12:36

Daregada

総合スコア11990

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問