関数で算出した値を他の関数で使いたい。
こんにちは。「平均点を出す関数」と「数学の点数のベスト3を出す関数」を使って、「1.平均点」と「2.数学の点数のベスト3の名前とその点数と、各々の点数と平均点との差」を求めるプログラムを作っています。平均点とベスト3の名前とその点数は出せるのですが、「平均点を出す関数」で求めた値をもって来れず、「平均点との差」がうまく表示できません。ソースは下記のようになっております。簡単な修正で直せる方法を教えていただきたいのですが。宜しくお願い致します。
#define STUDENT 4
#include <stdio.h>
struct SEISEKI_T
{ char name[20]; /* 生徒名を格納する配列。40バイト格納化。 */
int math; /* 数学の点数 */};
typedef struct SEISEKI_T SEISEKI;
int average(SEISEKI *sp, int num, int *p);
int rank_math(SEISEKI *sp, int num, int *p);
int main( )
{ SEISEKI seito[STUDENT] =
{ /* 生徒名と数学の点数のデータ */
{ "佐藤", 63},{ "鈴木", 68},{ "高橋", 61},{ "田中", 40}, };
SEISEKI *sp;
sp = seito;
static int avg[0] = {0};
average(seito, SUBJECT, avg);
rank_math(seito, SUBJECT, avg);
printf("\n");
return 0;
}
int average(SEISEKI *sp, int num, int *p)
{ int i; /* ループ変数 */
static int avg[0] ={0};
for (i = 0; i < 4 ; i++)
{ avg[0] += (sp + i)->math;
}
avg[0] = avg[0] / 4 ;
printf( "数学 = %3d \n", avg[0]);
printf("\n\n");
}
int rank_math(SEISEKI *sp, int num, int *p)
{
int i; /* ループ変数1 */
int j; /* ループ変数2 */
int sa_m = 0; /* 数学の上位成績者の点数と平均点との差。*/
SEISEKI dumy; /* struct SEISEKI_T 型の構造体 dumy */
for ( i = 0 ; i < STUDENT - 1 ; i++ )
{ for ( j = 0 ; j < STUDENT - i - 1 ; j++ )
{ if( ((sp + j)->math) < ((sp + j + 1)->math) )
{ dumy = *(sp + j);
*(sp + j) = *(sp + j + 1);
*(sp + j + 1) = dumy;
}
}
}
printf( "■数学上位成績者\n" );
printf( "----------------------------------\n" );
printf( "順位 名前 点数 平均+\n" );
printf( "----------------------------------\n" );
for ( j = 0 ; j < 3 ; j++ ) {
sa_m = (sp + j)->math - *p;
printf( " %d %6s %3d %2d\n" ,
j + 1 , (sp + j)->name , (sp + j)->math , sa_m);
}
return 0;
}
お礼
やはりBigDecimalクラスですか! この質問を書き込む前にJava関連のHPを探したところ、そのクラスのことが少しだけ書いてあったのですが、今まで使ったことがないもので利用方法が分からず断念してしまいました。 今回は整数部分をlong、小数部分をdoubleに別々に格納することによって何とか対処することができました。 今後のためにも、これからBigDecimalクラスの利用法の学習をしたいと思います。 ありがとうございました! あと余談なんですが、一番目の方がおっしゃってたのはもしかしてC言語だったのでしょうか?(笑)