|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
int main (void)
{
int a[100],max,min,n,i,temp1,temp2,x,y;
printf("请输入数据的个数\n");
scanf("%d",&n);
printf("请输入数据\n");
for (i=0;i<n;i++)
scanf ("%d",&a[i]);
max=a[0];
min=a[0];
for (i=0;i<n;i++)
{
if (a[i]>max)
{
temp1=i;
max=a[i];
}
else if (a[i]<min)
{
temp2=i;
min=a[i];
}
else
continue;
}
x=a[0];
y=a[i];
a[0]=a[temp2];
a[i]=a[temp1];
a[temp1]=y;
a[temp2]=x;
for (i=0;i<n;i++)
printf("%3d",a[i]);
}
功能是:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
但是为啥运行的结果和预想的不一样,求大佬解答
你的程序只用一只循环,而且是最大值与最小值同时进行遍历数组,所以不能将所有元素都互相比较。举个例子:当 a[ i ] < a[1] 时, 将 a[1] 作为新的最大值这没有问题,但却跳过了 a[ i ] > a[1] 对最小值的比较,故而,为了做到每一个元素都能与最大值和最小值互相比较,需要用双重循环。你的程序不是用指针,也没有用函数,我就给你一个既不用指针,也不用函数的程序。如下:
- #include<stdio.h>
- int main()
- {
- int i, j, temp, a[10];
- printf("输入10个整数:\n");
- for (i = 0;i < 10;i++)
- {
- scanf("%d", &a[i]);
- }
- temp = a[9]; // 假设最大的数在最后一个单元
- for (i = 9;i >= 0;i--)
- {
- if (temp < a[i]) // 数组中每一个元素都与假设的最大数比较
- {
- temp = a[i]; // 找到大于假设的最大的数
- j = i; // 记录该数的位置
- }
- }
- a[j] = a[9]; // 最大的数与最后一个单元交换
- a[9] = temp;
- temp = a[0]; // 假设最小的数在第一个单元
- j = 0; //
- for (i = 1;i < 10;i++)
- {
- if (temp > a[i]) // 数组中每一个元素都与假设的最小数比较
- {
- temp = a[i]; // 找到小于假设的最小的数
- j = i; // 记录该数的位置
- }
- }
- a[j] = a[0]; // 最小的数与第一个单元交换
- a[0] = temp;
- for (i = 0;i < 10;i++) // 输出交换后的数组
- {
- printf("%d ", a[i]);
- }
- printf("\n");
- }
复制代码
对第25行的说明:前面 j 的记录是最大值的位置,如果查找最小值时不让它回到初始位置,那么如果最小值原本就在a[0] 处,第28行到第31行就不会有任何动作,所查找的最小值的位置就会出错
|
|