有疑问 为什么我运行的时候 最小的数跟第一个数对换不了
输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。上代码? #include<stdio.h>
int main()
{
void max(int *p, int n);
void min(int *p, int n);
int a;
int i, n = 10, *p;
p = a;
printf("输入10个整数:\n");
for (i = 0;i < 10;i++)
{
scanf("%d", &a);
}
max(a, n);
min(a, n);
for (i = 0;i < n;i++)
{
printf("%d ", a);
}
printf("\n");
}
void max(int *p, int n)
{
int i, j, temp;
temp = *(p + 9);
for (i = 9;i >= 0;i--)
{
if (temp < *(p + i))
{
temp = *(p + i);
j = i;
}
}
*(p + j) = *(p + 9);
*(p + 9) = temp;
}
void min(int *p, int n)
{
int i, j, temp;
temp = *p;
j = 0;
for (i = 1;i < n;i++)
{
if (temp > *(p + i))
{
temp = *(p + i);
j = i;
}
}
*(p + j) = *p;
*p = temp;
} 有不带指针和函数做的代码吗?想看看 宇轩宇轩! 发表于 2020-12-20 18:30
有不带指针和函数做的代码吗?想看看
好,我给你改 宇轩宇轩! 发表于 2020-12-20 18:30
有不带指针和函数做的代码吗?想看看
#include<stdio.h>
int main()
{
int i, j, temp, a;
printf("输入10个整数:\n");
for (i = 0;i < 10;i++)
{
scanf("%d", &a);
}
temp = a; // 假设最大的数在最后一个单元
for (i = 9;i >= 0;i--)
{
if (temp < a) // 数组中每一个元素都与假设的最大数比较
{
temp = a; // 找到大于假设的最大的数
j = i; // 记录该数的位置
}
}
a = a; // 最大的数与最后一个单元交换
a = temp;
temp = a; // 假设最小的数在第一个单元
j = 0;
for (i = 1;i < 10;i++)
{
if (temp > a) // 数组中每一个元素都与假设的最小数比较
{
temp = a; // 找到小于假设的最小的数
j = i; // 记录该数的位置
}
}
a = a; // 最小的数与第一个单元交换
a = temp;
for (i = 0;i < 10;i++) // 输出交换后的数组
{
printf("%d ", a);
}
printf("\n");
}
谢谢,非常感谢,困惑了一晚上了 我想问下 代码中j的作用是啥哦 j=0 是用来干嘛的哦 有点小疑问 宇轩宇轩! 发表于 2020-12-20 20:40
j=0 是用来干嘛的哦 有点小疑问
没有用的,从指针那边改过来,没有删除干净。原来的本意是想记录最大最小值的位置,给它一个初始值 本帖最后由 风过无痕1989 于 2020-12-20 21:58 编辑
宇轩宇轩! 发表于 2020-12-20 20:38
我想问下 代码中j的作用是啥哦
j 记录找到数的位置呀
j = i; // 记录该数的位置
}
}
a[j] = a; // 最大的数与最后一个单元交换
a = temp;
j = i; // 记录该数的位置
}
}
a[j] = a; // 最小的数与第一个单元交换
a = temp;
如果你直接用 i 那是不对的, 因为这个赋值是在遍历数组之后才能最终确定最大值,也只有这个时候才能赋到最后的单元 a[j] = a; a = temp;
宇轩宇轩! 发表于 2020-12-20 20:40
j=0 是用来干嘛的哦 有点小疑问
没有用的,从指针那边改过来,没有删除干净。原来的本意是想记录最大最小值的位置,给它一个初始值
纠正上面的说法,j = 0,是记录最大最小值的位置没有错。但第25行的 j = 0 却不能删除!因为前面 j 的记录是最大值的位置,如果查找最小值时不让它回到初始位置,那么如果最小值原本就在a 处,第28行到第31行就不会有任何动作,所查找的最小值的位置就会出错
页:
[1]