C语言 “查找求和和平均值”函数未返回平均值的实际值

dffbzjpn  于 2022-12-11  发布在  其他
关注(0)|答案(1)|浏览(189)

这是我的函数,它返回数组中所有数字对的和,以及奇数的平均值。尽管由于某种原因,它输出的平均值为零。

#include <stdio.h>
 
 int MoySom(int Tab[],float* Moyenne,int Length)
 {
     int S=0,C=0;
     *Moyenne=0;
     for(int i=0;i<Length;++i)
     {
         if(Tab[i] % 2 == 0)
         {
             S=S+Tab[i];
         }
         else if(Tab[i] % 2 != 0)
         {
             *Moyenne+=Tab[i];
             ++C;
         }
     }
     *Moyenne=*Moyenne/C;
     return S;
     
 }
 
 void main()
 {
     int Length,Tab[Length];
     float Moyenne;
     printf("Entrer la longeur de tableau: ");
     scanf("%d",&Length);
     for(int i=0;i<Length;++i)
     {
         printf("Entrer l'element %d: ",i);
         scanf("%d",&Tab[i]);
     }
     printf("Somme est:%d\nMoyenne est: %.2f",
         MoySom(Tab,&Moyenne,Length), Moyenne);
 }
agxfikkp

agxfikkp1#

至少这些问题:

申报顺序错误

int Length,Tab[Length];是垃圾。Tab[Length]的声明正在发生,但Length的值是不确定的。
类似于下面的。在赋值Length后声明Tab[]

int Length;
 float Moyenne;
 printf("Entrer la longeur de tableau: ");
 scanf("%d",&Length);
 int Tab[Length];

更好的代码检查scanf()的返回值

int cnt = scanf("%d",&Length);
 if (cnt != 1 || Length <= 0) {
   Report_Error_and_exit();
 } 
 int Tab[Length];

假定参数求值顺序

计算Moyenne,然后使用它。

//printf("Somme est:%d\nMoyenne est: %.2f",
//     MoySom(Tab,&Moyenne,Length), Moyenne);

printf("Somme est:%d\n", MoySom(Tab,&Moyenne,Length));
printf("Moyenne est: %.2f", Moyenne);

潜力/0

*Moyenne=*Moyenne/C;可能试图除以零。更好的代码可以防止这种情况。

不需要的测试

if(Tab[i] % 2 == 0) {
       S=S+Tab[i];
     } else if(Tab[i] % 2 != 0) {
       *Moyenne+=Tab[i];

简化为

if(Tab[i] % 2 == 0) {
       S=S+Tab[i];
     } else {
       *Moyenne+=Tab[i];

相关问题