题目描述:
首先输入整数n(0<=n<=1000),紧接着在下一行连续输入n个数。
随后输出这一组数的最小值,和最大值。
提示:
输入的这n数,可以有小数也可以有负数。
输出之间用换行隔开。
输入要求
5
1 5 3 54 22
输出要求
1
54
参考程序:
#include<stdio.h>
int main()
{
int n,i;
scanf("%d",&n);
if(n==1)
{
printf("0\n");
}
else if(n>=2)
{
double a[n];//在有序数组中存储n个double型的数据。
for(i=0;i<n;i++)
{
scanf("%lf",&a[i]); //给数组中i位置上的数据取一个地址。
}
double max=a[0];
double min=a[0];//定数组的第一个数据为最大值与最小值,用于后面数据循环输入的比较。
for(i=0;i<n;i++)
{
if(a[i]>=max)
{
max=a[i];
}
if(a[i]<=min)
{
min=a[i];
}
}
printf("%g\n%g",min,max);//%g是C语言表示以%f%e中较短的输出宽度输出单、双精度实数,在指数小于-4或者大于等于精度时使用%e格式。
}
return 0;
}
解题思路:本题通过递归算法计算数组的最大最小元素,及基于a[ ],找出递归关系,定义函数。
首先输入头文件与主函数,再定义变量的类型,根据题目描述所说,要输入一个整数n表示个数,需要运用数组的方法来进行运算,因此定义一个储存了n个double型的数据的数组,且给到其地址,以用于输入。
紧接着输入n个数,从中寻找max与min,因此需要提前定义二者的值,因此将二者的初始值定为数组的i=0位置上的值,以用于和后续输入值作比较。
如果后续输入值大于max,则将该值赋值给max,同理min大于后续输入值,则将该值赋给min。
因为数组中的数据有n个,需要通过循环语句中的if语句反复比较,因此最后通过for循环中的if语句,最终找出数组中的max与min。
最后因为题目答案输入检测中出现的数据不局限于正整数,还有负数,一位小数等,因此用%g这种实数格式最后输出。