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

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

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

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

Q&A

解決済

2回答

3673閲覧

C言語 平均の出し方。

tattakahiiii

総合スコア27

C

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

0グッド

0クリップ

投稿2018/07/27 19:54

編集2018/07/28 05:09

C<コード>

1#include <stdio.h> 2#include <stdlib.h> 3#define NUM 100 4 5/*** 構造体定義の宣言 ***/ 6 typedef struct Body{ 7 char name[32]; 8 int age; 9 double height; 10 double weight; 11 }Body; 12 13 14 15/*** 関数のプロトタイプ宣言 ***/ 16 FILE* check_fopen(char filename[],char mode[]); 17 int print_bodydata(const Body* pData); 18 int input_bodydata(Body *pData); 19 20int main(void) 21{ 22 /*** 変数の宣言 ***/ 23 int i,menu,rc=0,cnt=0; 24 Body Data[100]; 25 FILE* fp; 26 const char* ave_agee = "年齢"; 27 const char* ave_heightt = "身長"; 28 const char* ave_weightt = "体重"; 29 const char* moji = ""; 30 int ave_age = 0; //平均を入れる変数 31 double average = 0; 32 double ave_height = 0,ave_weight = 0;//平均を入れる変数 33 34 while(1){ 35 36 printf("\n==== 操作メニュー ====\n"); 37 printf("1:ファイル読み込み\n"); 38 printf("2:全データ表示\n"); 39 printf("3:新データ入力\n"); 40 printf("4:ファイル書き出し\n"); 41 printf("1~4以外:終 了\n\n"); 42 43 printf("操作No の入力:"); 44 scanf("%d",&menu); 45 printf("\n"); 46 47 switch(menu) 48 { 49 case 1: 50 printf("===ファイル読み込み===\n"); 51 52 /*** 処 理 内 容 ***/ 53 fp=check_fopen("sample.txt","r"); 54 55 for(i=0;i<NUM;i++){ 56 rc=fscanf(fp,"%s\t%d\t%lf\t%lf\r\n", 57 Data[i].name,&Data[i].age, 58 &Data[i].height,&Data[i].weight); 59 if(rc==EOF)break; 60 } 61 cnt=i; 62 printf("%d件のデータを読み込みました。\n",cnt); 63 fclose(fp); printf("ファイルを閉じました。\n"); 64 65 break; 66 67 case 2: 68 printf("\n===全データ表示===\n"); 69 70 /*** 処 理 内 容 ***/ 71 printf("\n名前\t年齢\t身長\t 体重\n"); 72 for(i=0;i<cnt;i++) print_bodydata(&Data[i]); 73 printf("出力したい平均を入力\t年齢・身長・体重\n"); 74 // while(1){ 75 // scanf("%s",&moji); 76 // if(moji==ave_agee){ 77 for(i=0;i<cnt;i++)ave_age = ave_agee_sum(&Data[i]); 78 average = ave_age/cnt; 79 printf("%d",average); 80 81 82 break; 83 84 case 3: 85 printf("\n===新データ入力===\n"); 86 87 /*** 処 理 内 容 ***/ 88 89 break; 90 91 case 4: 92 printf("\n===ファイル書き出し===\n"); 93 94 /*** 処 理 内 容 ***/ 95 96 break; 97 98 default: 99 printf("\n===プログラム終了===\n"); 100 return 0; 101 } 102 } 103 return 0; 104} 105/*** 関 数(自作の関数も作れれば作る)***/ 106 107FILE* check_fopen(char filename[],char mode[]) 108{ 109 FILE* fp; 110 fp = fopen(filename,mode); 111 112 if(fp==NULL){ 113 printf("\nファイルを開けませんでした。\n"); 114 exit(-1); 115 } 116 printf("\nファイルを開きました。\n"); 117 return fp; 118} 119 120int print_bodydata(const Body* pData) 121{ 122 printf("%s\t", pData->name); 123 printf("%d歳\t", pData->age); 124 printf("%.1fcm\t", pData->height); 125 printf("%7.1fkg\n", pData->weight); 126 return 0; 127} 128int input_bodydata(Body *pData) 129{ 130 printf("名前:"); scanf("%s", pData->name); 131 printf("年齢:"); scanf("%d", &pData->age); 132 printf("身長:"); scanf("%lf", &pData->height); 133 printf("体重:"); scanf("%lf", &pData->weight); 134 printf("\n"); 135 return 0; 136} 137int ave_agee_sum(Body *pData) 138{ 139 int aa = 0 ; 140 aa += pData->name; 141 142 return aa; 143}

<出力内容>
1〜4の数字を入力して、別のファイルのデータを読み込み、読み込んだ内容を表示するプログラムです。
別のフォルダに下記のようなデータが入っており、計55件入っております。
”名前       年齢   身長   体重 
米山 裕太     32   185   85  ”

<質問内容>

case2で全データの表示、年齢、身長、体重の各平均を出力したいと考えております。
表示はできたのですが、平均が出力できません。
平均年齢だけのプログラムを書いたのですが、-1972264960と出力され、うまくいきません。

どなたか原因のわかる方はいらっしゃいますでしょうか。

以上、よろしくお願いいたします。

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

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

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

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

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

otn

2018/07/27 21:02

プログラム部分の前に、```C という行を入れ、後に ``` という行を入れてください。
cateye

2018/07/31 21:01

解決したならば、ベストアンサーを選択して下さい。
guest

回答2

0

ベストアンサー

平均の出し方についてはotnさんの仰る通り。

平均年齢の算出がおかしいのは、ave_agee_sumの中で年齢(age)を足さずに**名前(name)**を足しているから。
ついでに、今のままではどっちにしても結果は正しくならない。
(ってか、ave_agee_sumという名前なのに加算しかしてないのも…)

投稿2018/07/27 22:45

archiver

総合スコア1557

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

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

tattakahiiii

2018/07/28 05:09

お恥ずかしい限りです。。 解決いたしました。ご回答ありがとうございました。
guest

0

体重の平均は、Data[i].weightを人数分だけ足して、人数で割ります。
他も同様。

投稿2018/07/27 21:10

otn

総合スコア84380

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

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

tattakahiiii

2018/07/28 05:10

解決いたしました。ご回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問