ページ 11

問題のあるポインタの変換 という警告がでます…。

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

Re:問題のあるポインタの変換 という警告がでます…。

Posted: 2009年8月15日(土) 14:18
by pooka
int sum(int vc[/url][STD_NO],int sub)
{
//省略
}
赤字の所はSUB_NOではないでしょうか?

Re:問題のあるポインタの変換 という警告がでます…。

Posted: 2009年8月15日(土) 14:19
by box
配列の第1次元と第2次元は、それぞれ
学生番号、科目番号のどちらですか?

プログラム全体にわたって今一度整理してみるとよいでしょう。

Re:問題のあるポインタの変換 という警告がでます…。

Posted: 2009年8月15日(土) 14:32
by 初心者
指摘して頂いたところを直した結果、無事コンパイルする事ができました。
今後、自分でプログラムが解り易いように整理するように心がけます。
回答して下さった方々、本当に有難うございました。