如何写出一个返回多个值的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:传递结构体指针
这题觉得没有必要这么写,等下次遇到合适得例子,我就再补上。
相关文章推荐
- 八大排序算法
- C语言pause()函数:让进程暂停直到信号出现
- Matrix67的情书 题解 恺撒移位密码
- 【开发日志】C#/C++传参:注意字符串终止符
- Opencv+C++之身份证识别(一)
- UVA 101 The Blocks Problem
- Opencv+C++之人脸识别二
- Opencv+C++之人脸识别
- C++ 字符串,字符数组,数字之间转换
- POJ 2506 - Tiling
- 无符号整数
- Detected memory leaks!内存泄漏,溢出,内存越界问题分析
- c++ 的输出格式控制
- Leetcode 371. Sum of Two Integers (Easy) (cpp)
- C++中多态的实现原理
- <<More Effective C++>>读书笔记2: 运算符
- POJ 2109 - Power of Cryptography
- C++学习之路(1) 类和对象,命名空间,标准库和std命名空间
- 汉诺塔,递归初步算法。
- C语言变长数组data[0]【总结】