コンパイラ:Borland C++ Compiler 5.5
5人の生徒の三教科の点数の最高点と最低点、
科目ごとの平均点、生徒の平均点を求めるプログラムなのですが、
#include <stdio.h>/*C:\Users\ryo\desktop\C\Source*/
#define STD_NO 5
#define SUB_NO 3
int top_sub(int vc[/url][SUB_NO],int sub,int sw)
{
int i;
int tmp=vc[0];
for(i=1;i<STD_NO;i++){
if(sw)
tmp=(vc>tmp)?vc:tmp;
else
tmp=(vc<tmp)?vc:tmp;
}
return(tmp);
}
int sum(int vc[/url][STD_NO],int sub)
{
int i;
int sum=0;
for(i=0;i<STD_NO;i++)
sum+=vc;
return(sum);
}
double ave(int vc[/url][SUB_NO],int sub) /*←この関数で警告がでます。*/
{
return((double)sum(vc,sub)/STD_NO);
}
int sum_st(int vc[/url][SUB_NO],int no)
{
int i;
int sum=0;
for(i=0;i<SUB_NO;i++)
sum+=vc[no];
return(sum);
}
double ave_st(int vc[/url][SUB_NO],int no)
{
return((double)sum_st(vc,no)/SUB_NO);
}
void print_list(int vc[/url][SUB_NO])
{
int i,j;
puts("No 国語 数学 英語");
puts("-------------------");
for(i=0;i<STD_NO;i++){
printf("%2d ",i+1);
for(j=0;j<SUB_NO;j++)
printf("%4d",vc[j]);
putchar('\n');
}
puts("-------------------");
}
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[0]);
printf(" 数学:"); scanf("%d",&tensu[1]);
printf(" 英語:"); scanf("%d",&tensu[2]);
}
putchar('\n');
print_list(tensu);
printf("【国語】最高点:%d\n",top_sub(tensu,0,1));
printf(" 最低点:%d\n",top_sub(tensu,0,0));
printf(" 平均点:%.1f\n",ave(tensu,0));
printf("【数学】最高点:%d\n",top_sub(tensu,1,1));
printf(" 最低点:%d\n",top_sub(tensu,1,0));
printf(" 平均点:%.1f\n",ave(tensu,1));
printf("【英語】最高点:%d\n",top_sub(tensu,2,1));
printf(" 最低点:%d\n",top_sub(tensu,2,0));
printf(" 平均点:%.1f\n",ave(tensu,2));
puts("各学生の3教科の平均点");
for(i=0;i<STD_NO;i++)
printf("%2d:%.1f\n",i+1,ave_st(tensu,i));
return(0);
}コンパイルしようとすると、
「警告 W8075 sample.c 32:問題のあるポインタの変換(関数 ave)」
という警告がでます。
警告を無視して実行すると、やはり平均点だけおかしな値になります…。
どうしたらいいのでしょうか…。
長文で見づらくて大変申し訳ないですが、時間がありましたらどうかご教授下さい。