大家好,我有一个问题,我想实现最大值与数组中第一个元素交换位置,最小值和最后一个值交换位置,这是我的代码,但是却运行不出来结果,请问这个代码错在哪里了呢?谢谢大家
#include <stdio.h>
int main() {
int a[5];
int i, t, max, min;
for (i = 0; i < 5; i++) {
scanf("%d", &a[i]);
}
max = a[0];
min = a[4];
for (i = 0; i < 5; i++) {
if (a[i] > max)
t = i;
}
if (t != 0) {
a[0] = a[t];
a[t] = max;//最大值未改变直接赋值
}
t = 0;
for (i = 0; i < 5; i++) {
if (a[i] < min)
t = i;
}
if (t != 4) {
a[4] = a[t];
a[t] = min;//同最大值的操作
}
return 0;
}
你只顾着输入,却疏忽了输出
printf("%d %d %d %d %d",a[0],a[1],a[2],a[3],a[4]);
加入后就可以输出了。其实有更好的方法输出:
①下标法
#include<stdio.h>
void main()
{
int a[10];
int i;
for (i = 0; i<10; i++)
scanf("%d", &a[i]);
for (i = 0; i<10; i++)
printf("%d\n", a[i]);
printf("\n");
}
②由数组名计算地址
#include<stdio.h>
void main()
{
int a[10];
int i;
for (i = 0; i<10; i++)
scanf("%d", &a[i]);
printf("\n");
for (i = 0; i<10; i++)
printf("%d\n", *(a + i));
printf("\n");
}
③用指针变量指向数组元素
#include<stdio.h>
void main()
{
int a[10];
int i, *p;
for (i = 0; i<10; i++)
scanf("%d", &a[i]);
printf("\n");
for (p = a; p<(a + 10); p++)
printf("%d", *p);
printf("\n");
}
没有输出啊
有些地方,思路错了,比如那俩if语句的判断,可以看一下下面的代码实现思路:
#include<stdio.h>
int main()
{
int arry[5],i,j=0,k=0,t;
int max,min;
printf("请输入五个数:\n");
for(i=0;i<5;i++)
{
scanf("%d",&arry[i]);
}
max=arry[j];
min=arry[k];
for(i=0;i<5;i++)
{
if(arry[j]<arry[i])
{
j=i;
max=arry[i];
}
if(arry[k]>arry[i])
{
k=i;
min=arry[i];
}
}
arry[j]=arry[0];
arry[0]=max;
arry[k]=arry[4];
arry[4]=min;
for(i=0;i<5;i++)
{
printf("%d ",arry[i]);
}
return 0;
}
希望对题主有所帮助!可以的话,帮忙点个采纳!