当前位置:首页 » 编程语言 » 交换最小值的c语言
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

交换最小值的c语言

发布时间: 2022-11-30 13:05:33

c语言交换最大最小值,希望帮忙看看我的代码

题目只要求 把最小值交换到最前面,把最大值交换到最后面。而不是按大小对所有的数排队。
所以,你可以先找出最小值的数值和位子,交换最小值到a[0],把a[0]换到那个位子上。
然后,找出最大值的数值和位子,交换最大值到a[n-1],把a[n-1]换到那个位子上。
程序如下:
#include <stdio.h>
void myswap(int a[],int n);
int main()
{
int i,N;
int a[10],t,k;
printf("input: 5\n8 2 5 1 4\n");
scanf("%d",&N);
for (i=0;i<N;i++)scanf("%d",&a[i]);
myswap(a,N);
for (i=0;i<N;i++)printf("%d ",a[i]);
return 0;
}

void myswap(int a[],int n)
{
int min,max,i,j,k;
min=a[0];j=0;
for (i=0;i<n;i++) if (a[i]<min){min=a[i];j=i;}
min=a[0]; a[0]=a[j]; a[j]=min;
max=a[n-1]; k=n-1;
for (i=1;i<n-1;i++) if(a[i]>max){max=a[i];k=i;};
a[k]=a[n-1];a[n-1]=max;
}

Ⅱ C语言最大值最小值交换

#include<stdio.h>

intmain(void){
intarr[3][4];
intmax,min;/*记录最大值与最小值*/
intmini=0,minj=0,maxi=0,maxj=0;/*记录最大值与最小值的坐标*/
inti,j,temp;

printf("请输入矩阵内容(3行4列): ");
for(i=0;i<3;i++)
for(j=0;j<4;j++)
scanf("%d",&arr[i][j]);

max=arr[0][0];
min=arr[0][0];
for(i=0;i<3;i++){
for(j=0;j<4;j++)
if(arr[i][j]>max){
maxi=i;
maxj=j;
}
if(arr[i][j]<min){
mini=i;
minj=j;
}
}

printf("原矩阵最小值为arr[%d][%d]=%d;最大值为arr[%d][%d]=%d。 ",mini,minj,arr[mini][minj],maxi,maxj,arr[maxi][maxj]);
temp=arr[mini][minj];/*交换最小值与最大值*/
arr[mini][minj]=arr[maxi][maxj];
arr[maxi][maxj]=temp;
printf("最小值与最大值交换后矩阵: ");
for(i=0;i<3;i++){
for(j=0;j<4;j++)
printf("%d ",arr[i][j]);
printf(" ");
}

return0;
}

运行结果

Ⅲ c语言数组最大值与最小值交换

两个for循环里面的数组赋值把数组的数据搞得乱起八糟的,for里面为啥要赋值?第二,max和min最后永远等于n-1,if不用大括号根本作用不到max=i、min=i。如果只是简单的最大和最小值交互,非常的简单,循环一遍,直接记住最大和最小值所在下标,最后再做交换。两遍循环浪费时间。

Ⅳ 在c语言中如何将数组的最大值与最小值互换位置,求大神解答!!!

找到最大和最小值的下标,然后交换,例如:
#include <stdio.h>
main()
{
int a[10]={10,2,3,4,5,6,7,8,9,10},n=10;
int i1,i2,i;
i1=0;
for (i=0;i<n;i++)if (a[i]<a[i1]) i1=i;
i2=0;
for (i=0;i<n;i++)if (a[i]>a[i2]) i2=i;
i=a[i1]; a[i1]=a[i2];a[i2]=i;
for (i=0;i<n;i++) printf("%d ",a[i]);
return 0;
}

Ⅳ C语言数组将最小值与第一个数交换,最大值与最后一个数交换

不对,思路似乎有些乱。
第一个for循环,写出的功能是:只要遇到比a[0]小的值例如a[i],a[0]就会被替换,而a[i]则会被a[0]覆盖。那么试问,如果数组有多个数值比a[0]小,那么那些值统统都会被赋值为a[0]的值么?
例如: 5 4 3 2 1
你的代码在最小值替换那里已经变成了: 1 5 5 5 5

在最大值与最后一个数交换那里,用变量j记录最大值的位置,这个想法就蛮好的。
不过,第二for循环那里问题是,找到一个为什么就要把值换掉呢?
不是应该是查询完整个数组后,找到最大的是哪一个值,最后再进行替换。不是应该这样么?

主要问题是:不要一找到就进行替换。先找,整个数组找完后,既for循环结束后,再进行替换。

Ⅵ C 语言 交换最小值

int min,j=0;
printf("please input n:\n"); 这里就不行了?

为什么不行,你输入一个数回车就行了啊

运行效果:(你把//printf("please input %d th number:\n",i+1); 这句去掉吧)
please input n:
6
5 8 0 2 45 5
0 8 5 2 45 5

void main()
{
int n,i,a[10];
int min,j=0;
printf("please input n:\n");
scanf("%d",&n);
if((n<=0)&&(n>10))
return;
for(i=0;i<n;i++)
{
//printf("please input %d th number:\n",i+1);
scanf("%d",&a[i]);
if(i==0)
{
min =a[0];
j = 0;
}
if(a[i]<min)
{
min = a[i];
j = i;
}
}
a[j]=a[0];
a[0]=min;
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
getche();
}

Ⅶ C语言最大值最小值交换

记录一下位置,之后交换就可以了,修改后如下代码:#includeint main(){int n, a, i, j, m, max, min, t, maxp, minp;int ch[40] = { 0 };printf("input n:");scanf("%d", &n);for (i = 0; i40)//break;//elsech[i] = m;}min = ch[0], minp = 0;for (a = 0; a max){max = ch[j];maxp = j;}}t = ch[maxp];ch[maxp] = ch[minp];ch[minp] = t;//ch[a] = ch[j];//ch[j] = ch[a];for (i = 0; i < n;++i)printf("%d ", ch[i]);printf("
");return 0;}

Ⅷ 关于C语言用指针来交换一个数组中最大值与最小值的问题。

max=&a[i];是把指针max指向数组最大值,没有改变数组

而*max=a[i];改变了数组,把max指针指向的值变为a[i]

在进行
t=*max;
*max=*min;
*min=t;
交换之前,数组的值已经发生了变化