
C言語の問題です。
file.txtを読み込む。
データの値を奇数と偶数に分け、それぞれ合計値・個数・平均値を出力せよ。
奇数データの数・偶数データの数がゼロの場合は、平均値を求めないようにしなさい。
file.txtの中身は「10 11 8 21 6 8 13 26 9 3」です。
#include <stdio.h>
#define SIZE 10
int main(void)
{
FILE *infile;
int i, data[SIZE];
int ksum, knum, gsum, gnum;
ksum = 0;
gsum = 0;
infile = fopen("file.txt", "r");
if(infile == NULL) {
printf("入力ファイルを開くことができません\n");
else{
fscanf(infile, "%d");
if(data[i]%2){
ksum += data[i];
knum += 1;
}
else if(data[i]/2==0){
gsum += data[i];
gnum += 1;
}
}
return 0;
}
for(i = 0; i < SIZE; i ++ ) {
fscanf(infile, "%d", &data[i]);
}
for(i = 0; i < SIZE; i ++ ) {
printf(" %3d", data[i]);
}
printf("%d %d %f", ksum, knum, (double)ksum/knum);
printf("%d %d %f", gsum, gnum, (double)gsum/gnum);
return 0;
}
このように考えたのですが、うまく実行できません。
間違っている箇所やその修正方法などを教えていただけたら嬉しいです。
ちなみに16行目で「else 文が if と一致しません。」というエラーが出てしまいます。
もうひとつ「奇数データの数・偶数データの数がゼロの場合は、平均値を求めない」というのはどのように表せば良いのでしょうか?
ご指導よろしくお願いします。
No.1ベストアンサー
- 回答日時:
解説は下の方です。
----------------------------------------------------------------------
1:#include <stdio.h>
2:
3:#define SIZE 10
4:
5:int main(void)
6:{
7: FILE *infile;
8: int i, data[SIZE];
9: int ksum, knum, gsum, gnum;
10: ksum = 0;
11: gsum = 0;
12: infile = fopen("file.txt", "r");/* ここでファイルをオープンしているが、クローズする処理がない。 */
13:
14: if(infile == NULL) {
15: printf("入力ファイルを開くことができません\n");
16: else{
17: fscanf(infile, "%d");
18:
19: if(data[i]%2){/* 変数iをここで参照しているが、初期化されていないのは良くない× */
20: ksum += data[i];
21: knum += 1;/* 初期化されてない変数knumに加算している。のは良くない× */
22: }
23: else if(data[i]/2==0){/* 偶数であるか調べる判定はこれではない、× */
24: gsum += data[i];
25: gnum += 1;/* 初期化されてない変数gnumに加算している。のは良くない× */
26: }
27: }
28:
29: return 0;
30:}
31:
32:/* ↓ここから下がmain()関数の外になっている。のは良くない× */
33:for(i = 0; i < SIZE; i ++ ) {
34: fscanf(infile, "%d", &data[i]);
35:}
36:
37:for(i = 0; i < SIZE; i ++ ) {
38: printf(" %3d", data[i]);
39:}
40:
41:printf("%d %d %f", ksum, knum, (double)ksum/knum);
42:printf("%d %d %f", gsum, gnum, (double)gsum/gnum);
43:
44:return 0;
45:}/* 対応する括弧が存在しません。× */
46:
----------------------------------------------------------------------
●初期化せずに使用している変数があります。変数は使用前に初期化しましょう。
i, knum, gnum
●ファイルをオープンしている処理はあるが、クローズしていない。
ファイルはオープンしたら、クローズしましょう。
●
>17: fscanf(infile, "%d");
この処理を、ループの外に書いちゃうのは、アルゴリズムを理解していないのではないですか?
これでは、10件のデータは読み込めません。
●main()関数が途中で、終わっている。
途中から、ソースコードが関数の外に書いてある。
●
>45:}/* 対応する括弧が存在しません。× */
閉じ括弧がありますが、対応する開く括弧がありません。
どこが間違っているのか、よく確認しましょう。
●「奇数データの数・偶数データの数がゼロの場合は、平均値を求めない」
>もうひとつ「奇数データの数・偶数データの数がゼロの場合は、平均値を求めない」というのはどのように表せば良いのでしょうか?
カウントを利用してあげると良いと思います。
丁寧な解説をありがとうございます。
いただいた解説を元に修正していったところ、うまく実行することができました。
とてもわかりやすく、本当に助かりました。
もう一度、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# C言語 プログラミング 4 2022/05/22 11:53
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sort関数でひらがなとカタカナ...
-
int型(2バイト)データの分割
-
Perlでのテキスト変換方法に関して
-
C言語でPBYTE型からDOUBLE型へ変換
-
RegQueryValueExでの2バイト文字
-
構造体のソートの方法について...
-
マクロ登録したピボットが重い...
-
fgets, sscanf, バッファ、スト...
-
aliasesファイルを検索したいの...
-
値によって組み分けを作成する...
-
xcopyを用いて、別ドライブにコ...
-
HKEY_CLASSES_ROOT\\.avi
-
画像処理のチェーンコード
-
Excel VBA グラフ作成のとき...
-
CSVファイルの行と列のセルって...
-
perlでくじ引きプログラムを作...
-
System.Collections.ArrayList ...
-
C++ multipart/form-data f
-
C言語の勉強しています。すみま...
-
C言語 平均を求めるプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
stable diffusionのエラー
-
エクセルVBA:日付データの変換...
-
【Excel VBA】10進数を2進数に...
-
int型(2バイト)データの分割
-
Excel VBA グラフ作成のとき...
-
C#でのswitch文
-
'dataType' 引数を Null にする...
-
linuxのシェルでファイル名に先...
-
printfの%eで指数部分の桁数を...
-
ポインター引数の関数でコンパ...
-
CreateProcessでの環境変数の設...
-
C言語でのLinuxとwindows共通の...
-
C言語でPBYTE型からDOUBLE型へ変換
-
pythonでDBのカラム名で取得し...
-
エクセルVBAで16の16乗を正確に...
-
FFTがうまくできない
-
ビットデータのチェック方法
-
参照渡しの速度について
-
POSTで配列のデータを渡す方法は?
-
PINVOKEで構造体配列をマーシャ...
おすすめ情報