「キーボードから0または負の数値を入力するまでに読み込んだ正の整数のうちの最大値、最小値、合計値、平均値を表示するプログラム」をwhile文でつくる、という課題なのですが、全然わからなくて困ってます...。
一応自分でプログラムを作ってみたのですが、きちんと動きません。
下に書いとくんで誰かアドバイス下さい!お願いします!!
{
int n,max,sum,s,min;
float ave;
n=max=sum=s=0; {
printf("data=");
scanf("%d",&n);
sum+=n;
s++;
if(n>max)
max=n;
if(n!=0)
if(n<min)
min=n
}
s--;
ave=sum/s;
printf("最大値は%dで合計は%dで平均は%fで最小値は%dです¥n",max,sum,ave,min);
return0;
}
(ゲーム機から書いてるので改行とかおかしいです)
学校の課題なんですが、どうしてもわからないんです。誰か教えてください!
Re: 学校の課題なんですが、どうしてもわからないんです。誰か教えてください!
ちょっとしたサンプルです。
#include <stdio.h>
void read_data(int *max, int *min, int *sum, int *count)
{
int data;
while (printf("input data:"), scanf("%d", &data) == 1 && data > 0) {
if (*count == 0) {
*max = *min = data;
}
else {
if (data > *max) {
*max = data;
}
if (data < *min) {
*min = data;
}
}
*sum += data, (*count)++;
}
}
void print_data(int max, int min, int sum, int count)
{
printf("maximum data = %d\n", max);
printf("minimun data = %d\n", min);
printf("total = %d\n", sum);
printf("average = %f\n", (double) sum / count);
}
int main(void)
{
int maximum, minimum, total = 0, n = 0;
read_data(&maximum, &minimum, &total, &n);
print_data(maximum, minimum, total, n);
return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 学校の課題なんですが、どうしてもわからないんです。誰か教えてください!
とりあえずコンパイルが通るように整形しておきました。御魁 さんが書きました:{
int n,max,sum,s,min;
float ave;
n=max=sum=s=0; {
printf("data=");
scanf("%d",&n);
sum+=n;
s++;
if(n>max)
max=n;
if(n!=0)
if(n<min)
min=n
}
s--;
ave=sum/s;
printf("最大値は%dで合計は%dで平均は%fで最小値は%dです¥n",max,sum,ave,min);
return0;
}
(ゲーム機から書いてるので改行とかおかしいです)
#include <stdio.h>
int main(void) {
int n,max,sum,s,min;
float ave;
n=max=sum=s=0;
{
printf("data=");
scanf("%d",&n);
sum+=n;
s++;
if(n>max)
max=n;
if(n!=0)
if(n<min)
min=n;
}
s--;
ave=sum/s;
printf("最大値は%dで合計は%dで平均は%fで最小値は%dです¥n",max,sum,ave,min);
return 0;
}
オフトピック
さすがにおかしすぎないか…?なぜわざわざこんな大量のスペース(引用で元のテキストを表示すると見える)を入れた…?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
Re: 学校の課題なんですが、どうしてもわからないんです。誰か教えてください!
とりあえず、タイピングミスじゃなさそうな部分で問題になりそうな点を上げてみます。
以下、修正したコードです。
できるだけ、元ソースを意識して簡単にしてあります。
(開発環境が明記されていないので、環境によっては動かないかもしれないです。)
- 変数 min が比較に使用しているのに初期化されていない
- sum / s の部分は、整数で計算されてしまう
- 0除算が発生する(変数 s を平均計算前にデクリメントしている為)
以下、修正したコードです。
できるだけ、元ソースを意識して簡単にしてあります。
(開発環境が明記されていないので、環境によっては動かないかもしれないです。)
#if _MSC_VER
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <climits>
#else
#include <stdio.h>
#include <limits.h>
#endif
int main(void)
{
// 変数宣言
int n, max, sum, s, min;
float ave;
// 初期化
n = max = sum = s = 0;
min = INT_MAX; // 最小値は、int型の最大値で初期化する
// 無限ループ
// (trueでエラーするようなら1とかに変えてください)
while (true)
{
// 入力をとる
printf("data =");
scanf("%d", &n);
// 入力されたデータが「0」または「負の数」だったらループを抜ける
// つまり「0」以下なら終了
if (n <= 0){
break;
}
// 最大値の確認
if (max < n)
{
max = n;
}
// 合計
sum += n;
// 平均
++s;
ave = (float)sum / s;
// 最小値の確認
if (min > n)
{
min = n;
}
}
// 結果の表示
printf("最大値は%dで合計は%dで平均は%fで最小値は%dです\n", max, sum, ave, min);
return 0;
}
Re: 学校の課題なんですが、どうしてもわからないんです。誰か教えてください!
いきなり0以下の値を入れたら平均値は計算できない。
そのコードを追加。
そのコードを追加。
#include <stdio.h>
void read_data(int *max, int *min, int *sum, int *count)
{
int data;
while (printf("input data:"), scanf("%d", &data) == 1 && data > 0) {
if (*count == 0) {
*max = *min = data;
}
else {
if (data > *max) {
*max = data;
}
if (data < *min) {
*min = data;
}
}
*sum += data, (*count)++;
}
}
void print_data(int max, int min, int sum, int count)
{
printf("maximum = %d\n", max);
printf("minimun = %d\n", min);
printf("total = %d\n", sum);
if (count != 0) {
printf("average = %f\n", (double) sum / count);
}
else {
printf("average can't be solved.\n");
}
}
int main(void)
{
int maximum, minimum, total = 0, n = 0;
read_data(&maximum, &minimum, &total, &n);
print_data(maximum, minimum, total, n);
return 0;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 学校の課題なんですが、どうしてもわからないんです。誰か教えてください!
皆さん有り難う御座いました!
皆さんのプログラムやアドバイスを見ながら試行錯誤したら無事完成しました。
本当にありがとうございました!!!
皆さんのプログラムやアドバイスを見ながら試行錯誤したら無事完成しました。
本当にありがとうございました!!!