实验六 函数

实验六 函数

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


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值