2017-01-14 32 views
-2

我用Dev C++ 5.5.3来编写一些程序。其中一个程序是关于获取一些数字(整数),直到零,然后打印最大值,最小值,平均值。在我的电脑里,一切都很好。在别人的电脑中,它并没有显示出正确的平均值,它显示了非常奇怪的数字4.612521 e + 8并且像这样。我定义了一个变量avg并计算出这个值然后打印出来。另一个在调用cout时直接计算平均值。有人可以检查此程序: 计划1不显示正确答案:使用cout和平均值的错误或错误

#include <iostream> 
using namespace std; 
int main(int argc, char** argv) { 
int n; 
int max , min , count = 0 , s; 
float avg; 
cout<<"This program gets some numbers until zero and then prints maximum, minimum and average of them"<<endl<<"Please enter a number : "; 
cin>> n; 
max = n; 
min = n; 
while (n!= 0) 
{ 
    count ++; 
    s+=n; 
    if (n>max) 
    { 
     max = n; 
    } 
    if (n<min) 
    { 
     min = n; 
    } 
    cout<< "Please enter a number : "; 
    cin>>n; 
} 
cout<<"ZERO DETECTED!\n\n"<<endl; 
cout<<"Maximum: "<<max<<endl; 
cout<<"Minimum: "<<min<<endl; 
avg = (float) s/count ; 
cout<<"Average: "<<avg<<endl; // NOTE NOTE NOTE NOTE 
return 0; 
} 

方案2中显示了正确的答案:

#include <iostream> 
using namespace std; 
int main(int argc, char** argv) { 
int n; 
int max , min , count = 0 , s; 
float avg; 
cout<<"This program gets some numbers until zero and then prints maximum, minimum and average of them"<<endl<<"Please enter a number : "; 
cin>> n; 
max = n; 
min = n; 
while (n!= 0) 
{ 
    count ++; 
    s+=n; 
    if (n>max) 
    { 
     max = n; 
    } 
    if (n<min) 
    { 
     min = n; 
    } 
    cout<< "Please enter a number : "; 
    cin>>n; 
} 
cout<<"ZERO DETECTED!\n\n"<<endl; 
cout<<"Maximum: "<<max<<endl; 
cout<<"Minimum: "<<min<<endl; 
//avg = (float) s/count ; 
cout<<"Average: "<<(float) s/count<<endl; //NOTE NOTE NOTE NOTE 
return 0; 
} 

回答

2

两个程序都有未定义行为因为s是未初始化,尚未在尝试从第一次读取之前分配一个值:

int max , min , count = 0 , s; 

[...]

s+=n; 

你所看到的所有的行为和事实,这显然是在您的计算机上的“工作”,并在别人的“不行”或多或少随机事件。

这里有一个简单的办法:

int max , min , count = 0 , s = 0; 

注意你的编译器应该有警告您有关未初始化的变量。如果不是,那么也许你应该选择一个更高的警戒级别。

另请注意,程序中还有很多其他缺陷,例如使用using namespace std,您在同一行声明了多个变量,或者某些变量名称不具有很强的描述性。