1. 程式人生 > 其它 >【C語言】用指標的方法處理:輸入十個整數,將其中最小的數與第一個數交換,將最大數和最後一個數交換

【C語言】用指標的方法處理:輸入十個整數,將其中最小的數與第一個數交換,將最大數和最後一個數交換

技術標籤:程式設計菜雞進化之路練習

分析:
1.獲取陣列中最大值和最小值及其下標
2.將其調換到相應位置
注意事項:
1.避免重複交換
2.考慮特殊情況(如首位極值相反或已對應)
水平有限,望各位在評論區共同討論。

#include "stdio.h"
#include "stdlib.h"
void get_ex_val_pos(int *n, int *max, int *min, int *max_p, int *min_p); //宣告
int main(void)
{
    int num[10], i;
    int max, min;
int max_p, min_p; printf("Please enter ten nums:\n");//接收值 for (i = 0; i < 10; i++) { scanf("%d", (num + i)); } get_ex_val_pos(num, &max, &min, &max_p, &min_p);//呼叫函式 if (*num == *(num + max_p) && *(num + 9) == *(num + min_p)
)//首位極值相反的特殊情況單獨判斷 { *(num + min_p) ^= *num ^= *(num + min_p) ^= *num; } if (*num != *(num + min_p) || *(num + 9) != *(num + max_p))//普通判斷 { *(num + min_p) ^= *num ^= *(num + min_p) ^= *num; *(num + max_p) ^= *(num + 9) ^= *(num + max_p) ^= *(num + 9); } for
(i = 0; i < 10; i++) { printf("%d ", *(num + i));//輸出 } system("pause"); } void get_ex_val_pos(int *n, int *max, int *min, int *max_p, int *min_p)//獲取陣列內極值及下標 { int i; *max = *min = *n; //初始化數值 for (i = 1; i < 10; i++) { if (*max < *(n + i)) { *max = *(n + i); *max_p = i; } } for (i = 1; i < 10; i++) { if (*min > *(n + i)) { *min = *(n + i); *min_p = i; } } }