ここから本文です

C言語に関しての質問です。

アバター

ID非公開さん

2018/11/1112:48:12

C言語に関しての質問です。

「最大100個のデータを入力できるように配列を宣言し、負の整数が入力されたときにデータ入力を終了し1.全ての入力データの表示、2.データ数、3.合計値、4.平均値 も計算して表示するプログラムの作成」という問題で、データの表示まではできたのですが、その後がわかりません…
間違っているところと、合計値平均値のだし方を教えていただきたいです!

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

int main() {

int i = 0, k = 0; //do while文,while文のためのループカウンター
int buffer, data[100];

printf("データを入力してください。\n");
printf("データ入力を終了する際には,負の整数を入力してください。\n\n");

//データ入力

do {
printf("%d番目のデータ : ", i + 1);
scanf("%d", &data[i]);
buffer = data[i];
i++;
} while (0 <= buffer);
printf("\n");

//データ表示
printf("入力されたデータを表示します。\n");
while (k < i - 1) {
printf("%4d", data[k]);
if ((k + 1) % 6 == 0) {
printf("\n");
}
k++;
}
//データ数を表示
printf("データ数:%d", i - 1);
printf("\n");

閲覧数:
62
回答数:
5
お礼:
50枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

n2q********さん

2018/11/1114:05:57

修正例です。



(1)7行目

【変更前】int buffer, data[100];
【変更後】int sum = 0, data[100];

buffer を廃止して、代わりに合計値を求めるための sum を用意してみました。


(2)16行目

【変更前】scanf("%d", &data[i]);
【変更後】if (scanf("%d", &data[i]) != 1 || data[i] < 0) break;

scanf が失敗した時と負の値が入力されたときは do...while から抜けるようにしました。


(3)17行目

【変更前】buffer = data[i];
【変更後】sum += data[i];

sum にどんどん足し込んでいきます。


(4)19行目

【変更前】} while (0 <= buffer);
【変更後】} while (i < 100);

100個分以上入れるとまずいので条件を設けました。


(5)24行目

【変更前】while (k < i - 1) {
【変更後】while (k < i) {

仕組みを変えましたので i は、そのままでデータの個数を表す形になっています。


(6)25行目

【変更前】printf("%4d", data[k]);
【変更後】printf("%4d\n", data[k]);/*

改行が入ってなかったので追加しました。あと、要件外の動作が実装されているようで、それもコメント化。


(7)28行目

【変更前】}
【変更後】}*/

コメント化終了。

(8)32行目

【変更前】printf("データ数:%d", i - 1);
【変更後】printf("データ数:%d\n合計値:%d\n", i, sum);

改行が入ってなかったので追加しました。あt、合計値の出力もです。


(9)33行目

【変更前】printf("\n");
【変更後】if (i) printf("平均値:%f\n", sum / (double)i);

平均値を出力するようにしました。

アバター

質問した人からのコメント

2018/11/13 12:33:29

できました!ありがとうございます!
一番参考にした回答をベストアンサーに選ばせていただきました!

みなさんありがとうございました('∀'*)

ベストアンサー以外の回答

1〜4件/4件中

並び替え:回答日時の
新しい順
|古い順

ikt********さん

2018/11/1115:16:13

適切かつ丁寧な添削は、n2q********さん ご回答のとおりかと。
以下は、ご参考までの書き換え例:


#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
    printf("データを入力してください。\n");
    printf("データ入力を終了する際には,負の整数を入力してください。\n\n");

//データ入力
    int n, sum, data[100];
    for (n = sum = 0; n < 100; ++n) {
        printf("%d番目のデータ: ", n + 1);
        scanf("%d", &data[n]);
        if (data[n] < 0)
            break;
        sum += data[n];
    }

//データ表示
    printf("入力されたデータを表示します。\n");
    for (int i = 1; i <= n; ++i) {
        printf("%4d", data[i - 1]);
        if (i == n || i%6 == 0)
            putchar('\n');
    }

//データ数・合計・平均
    printf("データ数: %d\n", n);
    printf("    合計: %d\n", sum);
    printf("    平均: %g\n", (double)sum / n);

    return 0;
}

prw********さん

2018/11/1114:43:41

>間違っているところと、合計値平均値のだし方

こうします

***

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

#define MAX 100

int input(int data[], const int size){
int i;

printf("input data\n");
printf("input negative number to quit the input\n");

for(i=0; i<size; i++){
int buffer;
printf("%03d th data:", i + 1);
scanf("%d", &buffer);

if(buffer < 0){
break;
}

data[i] = buffer;
}
printf("\n");

return i;
}

int show(int data[], const int size){
int i;

printf("show the data that inputed\n");

for(i=0; i<size; i++){
printf("%4d", data[i]);
if( (i + 1) % 6 == 0 ){
printf("\n");
}
}
if( i % 6 != 0 ){
printf("\n");
}

return 0;
}

int getTotal(int data[], const int size){
int i;
int total = 0;

for(i=0; i<size; i++){
total += data[i];
}

return total;
}

int main(void){
int data[MAX];

const int size = input(data, MAX);
const int total = getTotal(data, size);
const double average = (double)total / size;

show(data, size);
printf("number of data:%d\n", size);
printf("total=%d\n", total);
printf("average=%f\n", average);

return 0;
}

プロフィール画像

カテゴリマスター

tre********さん

2018/11/1113:48:28

>間違っているところ

最大個数の有効データ100個と入力終了の-1を入力すると、
配列の有効範囲を超えたdata[100]に-1が書き込まれます。

プロフィール画像

カテゴリマスター

edo********さん

2018/11/1113:17:55

合計用の変数を用意して0で初期化。
正の数が入力されるたびに合計用変数に足していく。
ループから抜けたら、合計用変数を入力した個数で割れば平均が出る。

あわせて知りたい

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる