【问题标题】:Find Sum and Average function not returning actual value of Average查找 Sum 和 Average 函数不返回 Average 的实际值
【发布时间】:2022-12-03 12:13:56
【问题描述】:

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

 #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);
 }

【问题讨论】:

  • 不能保证参数将按特定顺序进行评估。 Parameter evaluation order before a function calling in C
  • 除非你在 windows 上,否则 main 返回一个 int。您如何看待int Length, Tab[Length] 可能的工作?
  • Tab 中有多少个元素?它是在设置长度之前定义的。
  • 编辑错误已修复。
  • 该功能应该做什么?如果Tab 中没有奇数,则C 为 0,您除以零。如果长度为负或零,则 Tab 未定义。

标签: c sum average


【解决方案1】:

至少这些问题:

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
Moyenne est: %.2f",
//     MoySom(Tab,&Moyenne,Length), Moyenne);

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

【讨论】:

  • 您可以通过始终为每个声明使用一行代码来避免此类问题。
  • 并进一步检查scanf的返回值。
  • @克里斯好吧……
  • ...和长度 > 0
猜你喜欢
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 2017-11-30
  • 2021-04-19
  • 1970-01-01
相关资源
最近更新 更多