如何写出一个返回多个值的c语言子函数

今天跟以往一样刷水题,因为水题没有刷完。我发现刷水题还是有用的,自己没有理解清楚的c的知识,等你写的代码报错后,你就能都弄懂了。结果今天这题目引发我了我的一个问题,题目如下:

描述
设计一个从5个整数中取最小数和最大数的程序
输入
输入只有一组测试数据,为五个不大于1万的正整数
输出
输出两个数,第一个为这五个数中的最小值,第二个为这五个数中的最大值,两个数字以空格格开。
样例输入
1 2 3 4 5
样例输出
1 5
我的思路是利用三个数比大小的子函数,然后返回min,max,然后接着调用子函数,这次包含了min和max,然后再调用一次,真正的min和max 不就有了,当我写代码时候,发现我的子函数要返回两个值,我就发现这个地方可以好好想一想。

方法1:全局变量

实例如下:

#include 
int min, max;
int min_max(int a, int b, int c)
{
	int t;
	if(a > b)
	{
		t = a;
		a = b;
		b = t;
	}
	if(a > c)
	{
		t = a;
		a = c;
		c = t;
	}
	if(b > c)
	{
		t = b;
		b = c;
		c = t;
	}
	min = a;
	max = c;
}
int main()
{
	int a, b, c, d, e;
	scanf("%d%d%d%d%d",&a, &b, &c, &d, &e);
	min_max(a,b,c);
	min_max(min,max,d);
	min_max(min,max,e);
	printf("%d %d",min, max);
	return 0;
}

方法2:传递数组指针

#include 
 
void min_max(int *ptr,int n)
{
	int *temp;
	for(int i = 0; i < 5; i++)
	{
		if(*(ptr) > *(ptr+i))
		{
			*temp = *(ptr);
			*(ptr) = *(ptr+i);
			*(ptr+i) = *temp;
		}
		if(*(ptr + n-1) < *(ptr + i) )
		{
			*temp = *(ptr+n-1);
			*(ptr+n-1) = *(ptr+i);
			*(ptr+i) = *temp;
		}
	}
 } 
int main()
{
	int a[5];
	for(int i = 0; i < 5 ; i++)
	scanf("%d",&a[i]);
	min_max(a,5);
	printf("%d %d",a[0], a[4]);
	return 0;
 } 

方法3:传递结构体指针

这题觉得没有必要这么写,等下次遇到合适得例子,我就再补上。

你可能感兴趣的:(AMC&&算法)