实验六 函数
#include <iostream>
using namespace std;
int main()
{
int n1,n2,n3;
while(cin>>n1>>n2>>n3)
{
if(n1==0&&n2==0&&n3==0)
break;
else
{
int aliquot(int,int,int);
cout<<aliquot(n1,n2,n3)<<endl;
}
}
return 0;
}
int aliquot(int n1,int n2,int n3)
{
int i,s=0;
if(n1>n2)
{
int t;
t=n1;n1=n2;n2=t;
}
else
{
for(i=n1;i<=n2;i++)
{
if(i%n3==0) s=s+1;
}
}
return s;
}
这道题折磨了我半天。
第一次(没加循环):
#include <iostream>
using namespace std;
int main()
{
int input(int s[20]);
int Average(int number,int s[20]);
int Count(float avg,int number,int s[20]);
int n,number,s[20];
float avg;
number=input(s);
avg=Average(number,s);
cout<<number<<" "<<avg<<" "<<Count(avg,number,s)<<endl;
return 0;
}
int input(int s[20])
{
int n,i=0,number=0;
while(cin>>n)
{
if(n!=0)
{
s[i]=n;
number++;
}
else
break;
}
return number;
}
int Average(int number,int s[20])
{
int i,sum=0;
float avg;
for(i=0;i<=number-1;i++)
{
sum=sum+s[i];
}
avg=sum/number;
return avg;
}
int Count(float avg,int number,int s[20])
{
int i,m=0;
for(i=0;i<=number-1;i++)
{
if (s[i]>avg)
m=m+1;
}
return m;
}
把能改的bug都改了,老师也觉得没错了,结果average溢出。
一脸懵逼。
后来想着是不是s[i]在后面两个函数中未定义?就参考了同学的答案,把输出换到main里面去。
第二次(没加循环):
#include <iostream>
using namespace std;
int main()
{
int input(int s[]);
int Average(int number,int s[]);
int Count(float avg,int number,int s[]);
int i=0,number,s[20];
float avg;
for(i=0;i<20;i++)
{
cin>>s[i];
if(s[i]==0) break;
}
number=input(s);
avg=Average(number,s);
cout<<number<<" "<<avg<<" "<<Count(avg,number,s)<<endl;
return 0;
}
int input(int s[])
{
int i,number=0;
for(i=0;i<20;i++)
{
if(s[i]==0) break;
number++;
}
return number;
}
int Average(int number,int s[])
{
int i,sum=0;
float avg;
for(i=0;i<=number-1;i++)
{
sum=sum+s[i];
}
avg=sum/number;
return avg;
}
int Count(float avg,int number,int s[])
{
int i,m=0;
for(i=0;i<=number-1;i++)
{
if (s[i]>avg)
m=m+1;
}
return m;
}
结果:
感觉对了。
第二次(加了个while循环):
#include <iostream>
using namespace std;
int main()
{
int input(int s[]);
int Average(int number,int s[]);
int Count(float avg,int number,int s[]);
int i=0,number,s[20];
float avg;
while(cin>>s[i])
{
if (s[i]==0) break;
for(i=0;i<20;i++)
{
cin>>s[i];
if(s[i]==0) break;
}
number=input(s);
avg=Average(number,s);
cout<<number<<" "<<avg<<" "<<Count(avg,number,s)<<endl;
}
return 0;
}
int input(int s[])
{
int i,number=1;
for(i=0;i<20;i++)
{
if(s[i]==0) break;
number++;
}
return number;
}
int Average(int number,int s[])
{
int i,sum=0;
float avg;
for(i=0;i<=number-1;i++)
{
sum=sum+s[i];
}
avg=sum/number;
return avg;
}
int Count(float avg,int number,int s[])
{
int i,m=0;
for(i=0;i<=number-1;i++)
{
if (s[i]>avg)
m=m+1;
}
return m;
}
结果是这样的:
数字怎么肥四。
又想了想可能是while里输入的占了个位置,所以我把number+1,就全都乱了。
然后换了for循环。
最终答案:
#include <iostream>
using namespace std;
int main()
{
int input(int s[]);
int Average(int number,int s[]);
int Count(float avg,int number,int s[]);
int j,i=0,number,s[20];
float avg;
for(j=0;;j++)
{
for(i=0;i<20;i++)
{
cin>>s[i];
if(s[i]==0) break;
}
number=input(s);
if (number==0) break;
avg=Average(number,s);
cout<<number<<" "<<avg<<" "<<Count(avg,number,s)<<endl;
}
return 0;
}
int input(int s[])
{
int i,number=0;
for(i=0;i<20;i++)
{
if(s[i]==0) break;
number++;
}
return number;
}
int Average(int number,int s[])
{
int i,sum=0;
float avg;
for(i=0;i<=number-1;i++)
{
sum=sum+s[i];
}
avg=sum/number;
return avg;
}
int Count(float avg,int number,int s[])
{
int i,m=0;
for(i=0;i<=number-1;i++)
{
if (s[i]>avg)
m=m+1;
}
return m;
}