您的位置:首页 > 编程语言 > C语言/C++

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

2016-07-22 10:23 274 查看

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

描述设计一个从5个整数中取最小数和最大数的程序

输入输入只有一组测试数据,为五个不大于1万的正整数
输出输出两个数,第一个为这五个数中的最小值,第二个为这五个数中的最大值,两个数字以空格格开。
样例输入
1 2 3 4 5


样例输出
1 5


我的思路是利用三个数比大小的子函数,然后返回min,max,然后接着调用子函数,这次包含了min和max,然后再调用一次,真正的min和max 不就有了,当我写代码时候,发现我的子函数要返回两个值,我就发现这个地方可以好好想一想。

方法1:全局变量

实例如下:

#include <stdio.h>
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 <stdio.h>

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:传递结构体指针

这题觉得没有必要这么写,等下次遇到合适得例子,我就再补上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: