當前位置:首頁 » 編程語言 » 交換最小值的c語言
擴展閱讀
新硬碟3t 2023-02-09 01:56:34
相機中存儲卡 2023-02-09 01:50:45
蘋果6如何刪除微信 2023-02-09 01:45:33

交換最小值的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;
交換之前,數組的值已經發生了變化