C言語について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
sasaki

C言語について

#1

投稿記事 by sasaki » 14年前

うまく実行されなくて困っています。
誰か教えてください。

1から10のかかれたtxtファイルをfscanfを用い,1から10までの
 平均値を求めるプログラムを作成せよ.ただし,ファイルから読み込ん
 だ値はmain関数の配列に収め,関数内では計算のみを行うこと.

code

#include <stdio.h>
#define n 10

int main (void)
{
FILE *fp;
int i;
int b;
int a[n];
double c;

if((fp = fopen("test.txt","r"))==NULL)
printf("\a ファイルをオープンできません。\n");

else{
for(i=0; i<n; i++)
fscanf(fp,"%d",a[n]) = EOF{
fclose(fp);

}
}
for(i=0; i<n; i++){
b+= a[n];
c =((double)b/(double)n);
printf("%.2f",c);

}
return(0);
}

/code

よろしくお願いします。

sasaki

Re: C言語について

#2

投稿記事 by sasaki » 14年前

うまく実行されなくて困っています。
誰か教えてください。

1から10のかかれたtxtファイルをfscanfを用い,1から10までの
 平均値を求めるプログラムを作成せよ.ただし,ファイルから読み込ん
 だ値はmain関数の配列に収め,関数内では計算のみを行うこと.

コード:


#include <stdio.h>
#define n 10

int main (void)
{
FILE *fp;
int i;
int b;
int a[n];
double c;

if((fp = fopen("test.txt","r"))==NULL)
printf("\a ファイルをオープンできません。\n");

else{
for(i=0; i<n; i++)
fscanf(fp,"%d",a[n]) = EOF{
fclose(fp);

}
}
for(i=0; i<n; i++){
b+= a[n];
c =((double)b/(double)n);
printf("%.2f",c);

}
return(0);
}

よろしくお願いします。

アバター
h2so5
副管理人
記事: 2212
登録日時: 14年前
住所: 東京
連絡を取る:

Re: C言語について

#3

投稿記事 by h2so5 » 14年前

Cの文法があまりにも滅茶苦茶です。
もう一度、if文やfor文の書き方を確認することをお勧めします。

コード:

#include <stdio.h>
#define n 10
 
int main (void)
{
	FILE *fp;
	int i;
	int b;
	int a[n];
	double c;
	 
	if((fp = fopen("test.txt","r"))==NULL)
	printf("\a ファイルをオープンできません。\n");
	 
	else{											//elseに対応するif文のブロック{ }がない
		for(i=0; i<n; i++)							//for(i=0; i<n; i++) と { の間に式は入れられない, しかも==の間違いでは?
		fscanf(fp,"%d",a[n]) = EOF{					//EOFを検出するなら forループ ではくて while
		fclose(fp);
		 
		}
	}
	for(i=0; i<n; i++){
		b+= a[n];								//bの初期化をしていない
		c =((double)b/(double)n);
		printf("%.2f",c);							//平均値の計算と表示は1回のはずなのにforループ内にある
	}
	return(0);
}
あと、このプログラムは何の意味があるのでしょうか。
出力は 5.5 で固定なのでファイルの入力をする必要も、計算する必要も全く無いですし...

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: C言語について

#4

投稿記事 by みけCAT » 14年前

苦Cなどで勉強してみてはいかがですか?
あと、エラーメッセージを書いてくださいというのは無視ですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

non
記事: 1097
登録日時: 14年前

Re: C言語について

#5

投稿記事 by non » 14年前

>関数内では計算のみを行うこと.

この課題の「関数」とはなんでしょうか。main関数だとすると、入出力ができないという
ことになりますので、恐らく、平均を求める関数を作成せよという問題なのではないでしょうか?

例えばプロトタイプ
double average(int data[],int n);
を作成せよ。って課題か。
non

TT414

Re: C言語について

#6

投稿記事 by TT414 » 14年前

>平均値を求めるプログラムを作成せよ.ただし,ファイルから読み込ん
>だ値はmain関数の配列に収め,関数内では計算のみを行うこと.

C89以前またはC99以降限定ですが

double main ( void ) {
}

とすれば、「関数内では計算のみ」「平均値を求める」を満足したプログラムを作れます。

課題の解答として合格点に達するかどうかは知りませんが、
>平均値を求めるプログラムを作成せよ.ただし,ファイルから読み込ん
>だ値はmain関数の配列に収め,関数内では計算のみを行うこと.
は満足しています。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: C言語について

#7

投稿記事 by ISLe » 14年前

求めた平均値を戻り値とせよ、と書かれてないので特にトリッキーなことしなくて良いと思いますけど。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: C言語について

#8

投稿記事 by みけCAT » 14年前

sasaki さんが書きました:1から10のかかれたtxtファイルをfscanfを用い,1から10までの
 平均値を求めるプログラムを作成せよ.ただし,ファイルから読み込ん
 だ値はmain関数の配列に収め,関数内では計算のみを行うこと.
どこにも求めた平均値を表示しろとは書いていないので、表示はしなくていいのではないですか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

GaZAsA

Re: C言語について

#9

投稿記事 by GaZAsA » 14年前

修正しなければいけない所がありましたので修正しました。

コード:

#include <stdio.h>
#define n 10

int main (void)
{
	FILE *fp;
	int i;
	int b=0;
	int a[n];
	double c;
	for(i=0;i<n;i++)
		a[i]=0;
	fp = fopen("test.txt","r");
	if(fp == NULL) {
		printf("ファイルをオープンできません。\n");
	}
	else {
		i=0;
		while(i<n && fscanf(fp,"%d",&a[i]) != EOF)
			i++;
	}
	for(i=0; i<n; i++)
		b+=a[i];
	c=(double)b/(double)n;
	printf("%0.2f",c);
	fclose(fp);
	return(0);
}
もっとも重症だったのはfscanfの&aです。見つけるのに苦労しました。

non
記事: 1097
登録日時: 14年前

Re: C言語について

#10

投稿記事 by non » 14年前

私の趣味からすれば、
#define n 10
の n は N のように大文字にして欲しい。

printf("%0.2f",c);
これは、なぜ、0.2ですか?

ところで GaZAsA さんは、スレ主(sasaki)さん?
non

GaZAsA

違います

#11

投稿記事 by GaZAsA » 14年前

nonさん、違います。
修正するところを最小にしたかったので、結果、かなり似てしまいました。

閉鎖

“C言語何でも質問掲示板” へ戻る