ページ 1 / 1
アセロラ
Posted: 2015年10月29日(木) 21:42
by 最小値が出てこない
5人の点数を入力して合計と平均、最大値、最小値を出力したいのですが、最小値だけ出てきません。
何が問題なのでしょうか?
恐らく初歩的なミスかもしれませんが、よろしくお願いします。
コード:
#include<stdio.h>
#define num 5
int main(void)
{
int a[num];
int i, j, k;
int sum, max, min, ave;
sum = 0;
max = 0;
min = 0;
printf("テストの点数を入力\n");
for (i = 0; i < num; i++){
scanf("%d", &a[i]);
sum += a[i];
ave = sum / 5;
if (max < a[i]){
max = a[i];
if (min > a[i]){
min = a[i];
}
}
}
printf("合計:%d,平均:%d,最大値:%d,最小値:%d\n", sum,ave,max,min);
return 0;
}
Re: アセロラ
Posted: 2015年10月29日(木) 21:49
by みけCAT
最小値が出てこない さんが書きました:何が問題なのでしょうか?
- maxおよびminの初期値を0に決め打ちしてしまうのはよくありません。
- minを更新する処理を含むif文の位置がおかしいです。
Re: アセロラ
Posted: 2015年10月29日(木) 21:59
by アセロラ
何処の部分のif文を入れれば出力されるでしょうか?
いろいろ試しましたが、どうしても出てくれません。
Re: アセロラ
Posted: 2015年10月29日(木) 23:02
by みけCAT
アセロラ さんが書きました:何処の部分のif文を入れれば出力されるでしょうか?
if文を入れる…???
むしろminを更新する部分のif文をmaxを扱うif文から
出すべきです。
また、今のコードから全く変えずに
適当にテストしたところ、きちんと出力されました。
ところで、せっかくnumを定義しているのにaveの計算で5というマジックナンバーを用いているのもよくないですね。
最小値が出てこない
Posted: 2015年10月29日(木) 23:13
by アセロラ
コード:
#include<stdio.h>
#define num 5
int main(void)
{
int a[num];
int i, j, k;
int sum, max, min, ave;
sum = 0;
max = 0;
min = 0;
printf("テストの点数を入力\n");
for (i = 0; i < num; i++){
scanf("%d", &a[i]);
sum += a[i];
ave = sum / num;
if (max < a[i]){
max = a[i];
}
else if (min > a[i]){
min = a[i];
}
}
printf("合計:%d,平均:%d,最大値:%d,最小値:%d\n", sum,ave,max,min);
return 0;
}
出力自体はできるのですが、数字を入力した後に最小値だけどんな数字を入れても0になってしまいます。
Re: 最小値が出てこない
Posted: 2015年10月29日(木) 23:18
by みけCAT
アセロラ さんが書きました:出力自体はできるのですが、数字を入力した後に最小値だけどんな数字を入れても0になってしまいます。
本当ですか?
最小値が0にならない入力が存在すると思うのですが…処理系の不都合でしょうか?
最小値が出てこない
Posted: 2015年10月29日(木) 23:27
by アセロラ
入力しても、
テストの点数を入力
37
45
83
68
45
合計:278,平均:55,最大値:83,最小値:0
続行するには何かキーを押してください...
とでできます。
Re: アセロラ
Posted: 2015年10月29日(木) 23:28
by box
機能別に関数を分ける方が、結果として見通しがよくなると思います。
入力は入力に徹する。
最大値を求めるのはそれに徹する。
最小値を求めるのはそれに徹する。
コード:
#include <stdio.h>
#define N (5)
int getTensuu(int *tensuu)
{
int goukei, ten, i;
printf("テストの点数を入力してください\n");
for (goukei = i = 0; i < N; i++) {
printf("%d人目:", i + 1), scanf("%d", &ten);
tensuu[i] = ten, goukei += ten;
}
return goukei;
}
int getSaidai(int *tensuu)
{
int saidai = tensuu[0], i;
for (i = 1; i < N; i++) {
if (tensuu[i] > saidai) {
saidai = tensuu[i];
}
}
return saidai;
}
int getSaishou(int *tensuu)
{
int saishou = tensuu[0], i;
for (i = 1; i < N; i++) {
if (tensuu[i] < saishou) {
saishou = tensuu[i];
}
}
return saishou;
}
int main(void)
{
int tensuu[N], goukei;
goukei = getTensuu(tensuu);
printf("合計は%d点\n", goukei);
printf("平均は%f点\n", (double) goukei / N);
printf("最大は%d点\n", getSaidai(tensuu));
printf("最小は%d点\n", getSaishou(tensuu));
return 0;
}
Re: アセロラ
Posted: 2015年10月30日(金) 00:19
by box
最大値と最小値を求める関数を一緒くたにするなら
コード:
#include <stdio.h>
#define N (5)
int getTensuu(int *tensuu)
{
int goukei, ten, i;
printf("テストの点数を入力してください\n");
for (goukei = i = 0; i < N; i++) {
printf("%d人目:", i + 1), scanf("%d", &ten);
tensuu[i] = ten, goukei += ten;
}
return goukei;
}
void getSaidaiSaishou(int *tensuu, int *saidai, int *saishou)
{
int i;
for (*saidai = *saishou = tensuu[0], i = 1; i < N; i++) {
if (tensuu[i] > *saidai) {
*saidai = tensuu[i];
}
if (tensuu[i] < *saishou) {
*saishou = tensuu[i];
}
}
}
int main(void)
{
int tensuu[N], goukei, saidai, saishou;
goukei = getTensuu(tensuu);
printf("合計は%d点\n", goukei);
printf("平均は%f点\n", (double) goukei / N);
getSaidaiSaishou(tensuu, &saidai, &saishou);
printf("最大は%d点\n", saidai);
printf("最小は%d点\n", saishou);
return 0;
}
Re: 最小値が出てこない
Posted: 2015年10月30日(金) 09:41
by かずま
アセロラ さんが書きました:入力しても、
テストの点数を入力
37
45
83
68
45
合計:278,平均:55,最大値:83,最小値:0
続行するには何かキーを押してください...
とでできます。
[ 0 37 45 83 68 45 ] の最大値は 83、
[ 0 37 45 83 68 45 ] の最小値は 0
であっています。
入力は 37 からでも、プログラムが 0 からになっていますよ。