今天跟以往一样刷水题,因为水题没有刷完。我发现刷水题还是有用的,自己没有理解清楚的c的知识,等你写的代码报错后,你就能都弄懂了。结果今天这题目引发我了我的一个问题,题目如下:
-
描述
-
设计一个从5个整数中取最小数和最大数的程序
-
输入
- 输入只有一组测试数据,为五个不大于1万的正整数 输出
- 输出两个数,第一个为这五个数中的最小值,第二个为这五个数中的最大值,两个数字以空格格开。 样例输入
-
1 2 3 4 5
样例输出
-
1 5
方法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:传递结构体指针
这题觉得没有必要这么写,等下次遇到合适得例子,我就再补上。