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

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

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

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

Q&A

解決済

2回答

1119閲覧

二次元配列のループの部分の誤り

langhtorn

総合スコア105

C

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

0グッド

0クリップ

投稿2020/06/09 15:52

###実現したいこと
合格基準
・すべての試験科目の点数が60点以上
・試験の点数の平均値が70点以上
上の合格基準を満たす合格者の学籍番号と平均点を表示したい。

C

1/*実行結果 2試験の点数を入力してください 31 番: 70 60 80 42 番: 75 58 90 53 番: 75 80 90 64 番: 65 80 60 75 番: 60 100 60 8合格者一覧 91 番: 70.00 103 番: 81.67 115 番: 73.33 12*/

上のような結果になるようにしたい。
###問題点
下記の実行結果のように学籍番号が3までの人しか入力ができない。

C

1/*実行結果 2学籍番号1 370 60 80 4学籍番号2 575 58 90 6学籍番号3 775 80 90 8*/

どこがおかしいのかご指摘お願いいたします。
###コード

C

1/*2次元配列を用いた項目別成績の集計プログラム*/ 2#include<stdio.h> 3#define NUMBER 5 //学籍番号 4#define SUBJECT 3 //教科数 5int main(void) 6{ 7 int i,j; 8 int ssum=0; //合格者の人数 9 int tensu[NUMBER][SUBJECT+1]={0}; //項目別の点数 10 int succs[NUMBER]; //合格者のリスト 11 double avg[5]; //平均点 12   13  //入力&合否判定 14 for(i=0;i<NUMBER;i++){ 15 printf("学籍番号%d\n",i+1); 16 for(j=1;j<=SUBJECT;j++){ 17 scanf("%d",&tensu[i][j]); 18 tensu[i][0]+=tensu[i][j]; //合計 19 } 20 avg[i]=(double)tensu[succs[i]][0]/3; //平均を求める 21 if(tensu[i][0]>=60*SUBJECT && avg[i]>=70){ //すべての試験点数が60点以上かつ平均点70点以上 22 succs[ssum++]=i; 23 } 24 } 25 printf("合格者一覧\n"); 26 27  //表示 28 for(i=0;i<ssum;i++){ 29 printf("%2d番 %3d点 平均%.2f\n",succs[i]+1,tensu[succs[i]][0],avg[i]); 30 } 31 return 0; 32}

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

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

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

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

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

guest

回答2

0

ベストアンサー

「ソースコードが神がかっている」by 俺(ほめてる)

gccでデバッグしたところ、コアダンプを起こしていました。変な領域にアクセスしたためでしょう。平均を求めるところでisuccs[i]になってました。直したら動きました。ちなみに全角スペース入ってました。全角スペースは悩みの種なので気をつけましょう。

投稿2020/06/09 16:48

編集2020/06/09 16:59
anndonut

総合スコア667

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

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

langhtorn

2020/06/10 02:40

変な領域にアクセスしているのは気づきませんでした。ご指摘ありがとうございます!
guest

0

本当に解決していますか?

C

1#include <stdio.h> 2 3#define NUMBER 5 // 学籍番号 4#define SUBJECT 3 // 教科数 5 6int main(void) 7{ 8 int fail[NUMBER] = { 0 }; // 不合格者のリスト 9 double avg[NUMBER]; // 平均点 10 11 puts("試験の点数を入寮してください"); 12 for (int i = 0; i < NUMBER; i++) { 13 printf("%d 番: ", i+1); 14 double sum = 0, score = 0; 15 for (int j = 0; j < SUBJECT; j++) { 16 scanf("%lf", &score); 17 if (score < 60) fail[i] = 1; // 不合格 18 sum += score; 19 } 20 avg[i] = sum / SUBJECT; 21 if (avg[i] < 70) fail[i] = 1; // 不合格 22 } 23 puts("合格者一覧"); 24 for (int i = 0; i < NUMBER; i++) 25 if (!fail[i]) printf("%2d 番: %6.2f\n", i+1, avg[i]); 26}

投稿2020/06/10 03:18

kazuma-s

総合スコア8224

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問