ページ 11

3教科の平均点が最大と最小の学生番号と各平均点が最大と最小の教科を表示するを表示する。

Posted: 2011年6月16日(木) 11:57
by ares

コード:

#include <stdio.h>
#define STD_NO 5
#define SUB_NO 3

int sum_sub(int v[][SUB_NO], int sub)
{
	int i;
	int sum = 0;
	for(i = 0;i < STD_NO;i++)
		sum += v[i][sub];
	return(sum);
}

double ave_sub(int v[][SUB_NO], int sub)
{
	return((double)sum_sub(v, sub) / STD_NO);
}

int top_sub(int v[][SUB_NO], int sw)
{
	int i;
	int tmp = ave_sub(v, 0);
	for(i =1;i < STD_NO;i++){
		if(sw){
			if(ave_sub(v, i) > tmp)
				tmp = ave_sub(v, i);
		}
		else {
			if(ave_sub(v, i) < tmp)
				tmp = ave_sub(v, i);
		}
	}
	return(tmp);
}

int sum_std(int v[][SUB_NO], int no)
{
	int i;
	int sum = 0;
	for(i = 0;i < SUB_NO;i++)
		sum += v[no][i];
	return(sum);
}

int top_std(int v[][SUB_NO], int sw)
{
	int i;
	int tmp = sum_std(v, 0);
	int bangou = 1;
	for(i = 1;i < SUB_NO;i++){
		if(sw){
			if(sum_std(v, i) > tmp){
				tmp = sum_std(v, i);
				bangou = i;
			}
		}
		else {
			if(sum_std(v, i) < tmp){
				tmp = sum_std(v, i);
				bangou = i;
			}
		}
	}
	return(bangou);
}

int main (void)
{
	int	i;
	int	tensu[STD_NO][SUB_NO];
	
	for(i = 0;i < STD_NO;i++){
		printf("[%2d番]", i+1);
		printf("国語:");	scanf("%d", &tensu[i][0]);
		printf("      数学:");	scanf("%d", &tensu[i][1]);
		printf("      英語:");	scanf("%d", &tensu[i][2]);
	}
	putchar('\n');
	
	printf("3教科の平均点が最大の学生番号は%d番です。\n", top_std(tensu,1));
	printf("3教科の平均点が最小の学生番号は%d番です。\n", top_std(tensu,0));
	printf("の平均点は%.fで最高点です。\n", top_sub(tensu,1));
	printf("の平均点は%.fで最低点です。", top_sub(tensu,0));
	
	return(0);
}
コンパイルはできるのですが常に論理エラーが起こってしまいます。どこがおかしいのかわからないのでアドバイスください。

Re: 3教科の平均点が最大と最小の学生番号と各平均点が最大と最小の教科を表示するを表示する。

Posted: 2011年6月16日(木) 12:25
by h2so5
「どううまくいかないのか」を教えてください。

Re: 3教科の平均点が最大と最小の学生番号と各平均点が最大と最小の教科を表示するを表示する。

Posted: 2011年6月16日(木) 12:25
by bitter_fox
ares さんが書きました:

コード:


double ave_sub(int v[][SUB_NO], int sub)
{
	return((double)sum_sub(v, sub) / STD_NO);
}

int top_sub(int v[][SUB_NO], int sw)
{
	int i;
	int tmp = ave_sub(v, 0);
	for(i =1;i < STD_NO;i++){
		if(sw){
			if(ave_sub(v, i) > tmp)
				tmp = ave_sub(v, i);
		}
		else {
			if(ave_sub(v, i) < tmp)
				tmp = ave_sub(v, i);
		}
	}
	return(tmp);
}
int tmpにave_subの戻り値を代入してますが、ave_subの戻り値の型は何でしょうか?
ares さんが書きました:

コード:

	printf("の平均点は%.fで最高点です。\n", top_sub(tensu,1));
	printf("の平均点は%.fで最低点です。", top_sub(tensu,0));
これは何を出力したいのでしょうか?

Re: 3教科の平均点が最大と最小の学生番号と各平均点が最大と最小の教科を表示するを表示する。

Posted: 2011年6月16日(木) 19:12
by naohiro19
正常に動作します。