コンパイラ: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)」
という警告がでます。
警告を無視して実行すると、やはり平均点だけおかしな値になります…。
どうしたらいいのでしょうか…。
長文で見づらくて大変申し訳ないですが、時間がありましたらどうかご教授下さい。