ページ 11

学校の課題ができません><

Posted: 2010年12月10日(金) 15:56
by リセ
今プログラミングの課題で
ターミナルから5名分の学籍番号、英語の得点、数学の得点を読み込み、各自の合計得点を出力するプログラムを作成しなさい
というのを作成しました(下のプログラム)

これに各科目の平均点と合計得点の平均点を出力する処理を追加したプログラムを作成せよ. というのができません
# 平均点は少数第1桁まで表示すること.
# 平均点の計算および出力はvoid calc_average(void)を定義して行うこと。
というのが条件です

よろしくお願いします><

typedef struct student {
int id;
int english;
int math;
int total;
} STUDENT;

int main(void){
STUDENT a[5];


int i,k; //変数の指定


for(i = 0; i<5; i++)
{

scanf("%i %i %i", &a.id, &a.english, &a.math); //id english mathの読み込み
a.total=a.english + a.math; //totalの指定

}
k=i;
for(k = 0; k<5; k++)
{

printf("%i's total: %i\n", a[k].id, a[k].total); //それぞれtotalの表示
}


return 0;
}

Re: 学校の課題ができません><

Posted: 2010年12月10日(金) 16:11
by non
ターミナルってなんですかね。何かのエミュレータですか?
環境などを、しっかり書いてください。%iって初めて見ましたし。

Re: 学校の課題ができません><

Posted: 2010年12月10日(金) 16:20
by 沖 滉均
ターミナルって何でしょう?
とりあえず、nonさんも言っていますが開発環境、コンパイラなどを書いてください。
#include <stdio.h>
くらいは書きましょう。警告が出ませんでしたか?

あと、もう1点
# 平均点の計算および出力はvoid calc_average(void)を定義して行うこと。
これ間違いないです?
引数も何も受け取らずに計算はできないと思うんですが
[hr]
>>nonさん
%iを使う状況はあまりないとは思いますが…一応書いときます。
%dが10進数のみの書式指定子に対して、%iは8進数・10進数・16進数での入力が可能なだけです。
わざわざ今回%iにする必要性はなさそうですが…

Re: 学校の課題ができません><

Posted: 2010年12月10日(金) 16:28
by リセ
いろいろすいません・・・

開発環境はmacOSで、

ターミナルはコマンドライン?のことです

5人分の成績を打ち込んで、それの合計・平均を表示する
ってプログラムなので・・・

># 平均点の計算および出力はvoid calc_average(void)を定義して行うこと。については
間違いないです
課題をコピペしたものなので・・・

Re: 学校の課題ができません><

Posted: 2010年12月10日(金) 16:42
by non
>>nonさん
%iを使う状況はあまりないとは思いますが…一応書いときます。
%dが10進数のみの書式指定子に対して、%iは8進数・10進数・16進数での入力が可能なだけです。
わざわざ今回%iにする必要性はなさそうですが…[/quote]

そうなんですか。初めて知りました。

さてと、リセさんの方ですが、
Macでしたか。
それで、 aの配列はローカルで、しかも関数には引数を渡さないで解けということでしょうか?

Re: 学校の課題ができません><

Posted: 2010年12月10日(金) 16:47
by リセ
>>aの配列はローカルで、しかも関数には引数を渡さないで解けということでしょうか?

おそらくそうゆうことではないかと思います・・・

Re: 学校の課題ができません><

Posted: 2010年12月10日(金) 16:57
by non
残念ながら思いつきませんね。

方法1
 グローバル変数を別に作り、その変数で値を渡す。
方法2
 ファイルに保存して、それを利用する。

で、たぶん問題の勘違いだってのが一番まともなんですが。
つまり、
STUDENT a[5];はグローバルで定義して良い。
また、人数は絶対5人で変わらない。

これで、手を打ちませんか?

Re: 学校の課題ができません><

Posted: 2010年12月10日(金) 17:00
by 沖 滉均
aの配列をglobalに出すか、関数で引数をとらないと課題で指定されていることはできないと思いますよ。
課題を出した先生(?)に確認してみてください。

Re: 学校の課題ができません><

Posted: 2010年12月10日(金) 17:09
by リセ
STUDENT a[5];はグローバルで定義して良い。
また、人数は絶対5人で変わらない。

でいいとおもいます



働いたプログラムの例があったので乗せておきます

1010001 90 80        ↑
1010002 30 100         
1010003 10 5        ここまで入力
1010004 100 10
1010005 65 70        ↓
1010001's total: 170        ↓ここから出力
1010002's total: 130
1010003's total: 15
1010004's total: 110
1010005's total: 135
Average of english: 59.0
Average of math: 53.0
Average of total: 112.0

Re: 学校の課題ができません><

Posted: 2010年12月10日(金) 17:15
by non
じゃ、こんなんで。

コード:

void calc_average(void)
{
	int i,sum_english=0,sum_math=0,sum_total=0;
	for(i=0;i<5;i++){
		sum_english+=a[i].english;
		sum_math+=a[i].math;
		sum_total+=a[i].total;
	}
	printf("english Ave.=%.1f\n",sum_english/5.);
	printf("math Ave.=%.1f\n",sum_math/5.);
	printf("total Ave.=%.1f\n",sum_total/5.);

}

Re: 学校の課題ができません><

Posted: 2010年12月10日(金) 17:28
by リセ
初心者過ぎて申し訳ないのですが

void calc_average(void)
{
int i,sum_english=0,sum_math=0,sum_total=0;
for(i=0;i<5;i++){
sum_english+=a.english;
sum_math+=a.math;
sum_total+=a.total;
}
printf("english Ave.=%.1f\n",sum_english/5.);
printf("math Ave.=%.1f\n",sum_math/5.);
printf("total Ave.=%.1f\n",sum_total/5.);

}

をどの部分に入れたらよいのでしょうか?

Re: 学校の課題ができません><

Posted: 2010年12月10日(金) 17:54
by リセ
なんとかやってみたのですが
コンパイルすると
error: nested functions are disabled, use -fnested-functions to re-enable

というのが出てしまいました
でている場所は

  void calc_average(void)
→この行  {
  int i,sum_english=0,sum_math=0,sum_total=0;
  for(i=0;i<5;i++){
  sum_english+=a.english;
  sum_math+=a.math;
  sum_total+=a.total;

です
どうしたらよいですか?><

Re: 学校の課題ができません><

Posted: 2010年12月10日(金) 17:57
by non
プログラムの全部をタグを使って載せてください。
恐らく、関数をmain関数の中に書いたのでは?
もう構造体のところまで習っているのだから、少しはテキストとか調べたらどうですか?

Re: 学校の課題ができません><

Posted: 2010年12月10日(金) 18:18
by リセ
なんとかできました~><

長々とありがとうございました><