[問題] 關於函數、陣列 互換問題
各位好,我是目前還在學習C語言的新手
最近我碰到了一個問題
題目是:讀入一維整數陣列元素(元素個數<=5,陣列中至少各有一個奇數和偶數)
再自行定義一個函數void MyOddEven(int *arr)
以求出一維陣列arr中最大偶數與最小奇數並將位置調換
請在主程式中呼叫MyOddEven ( )函數並輸出最後的結果
範例:
輸入:12 90 81 17
輸出:12 17 81 90
void MyOddEven(int *arr)
{
int min_odd=0, min_even=0, i;
for(i=0;i<count;i++)
{
if( *(arr+i) %2 != 0)
{
if(*(arr+i) < *(arr+min_odd) )
{
min_odd = *(arr+i);
}
}
if( *(arr+i) %2 == 0)
{
if(*(arr+i) > *(arr+min_even) )
{
min_even = *(arr+i);
}
}
}
for(i=0;i<count;i++)
{
if( *(arr+i)==min_odd )
*(arr+i)=min_even;
if( *(arr+i)==min_even )
*(arr+i)=min_odd;
}
}
main裡面的東西 如果有需要我在附上
上面的是只有另外的函數的程式碼
我自己打出來的是這樣
偵錯的時候是沒問題
但是實際執行的時候
輸出卻是:12 0 81 17
題目是限定要用函數的
有點不知道該怎麼改
想請教板上的大大幫忙
有想過另外多宣告一個TEMP之類的
然後用互換的方式下去改
但是不知道要怎麼下手
感謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.230.77.156
→
05/02 02:03, , 1F
05/02 02:03, 1F
→
05/02 02:04, , 2F
05/02 02:04, 2F
→
05/02 02:04, , 3F
05/02 02:04, 3F
交換的話
int temp;
temp=arr[0];
arr[0]=arr[1];
arr[1]=temp;
推
05/02 02:05, , 4F
05/02 02:05, 4F
→
05/02 02:06, , 5F
05/02 02:06, 5F
→
05/02 02:07, , 6F
05/02 02:07, 6F
→
05/02 02:07, , 7F
05/02 02:07, 7F
→
05/02 02:07, , 8F
05/02 02:07, 8F
→
05/02 02:08, , 9F
05/02 02:08, 9F
→
05/02 02:09, , 10F
05/02 02:09, 10F
→
05/02 02:09, , 11F
05/02 02:09, 11F
→
05/02 02:10, , 12F
05/02 02:10, 12F
我一開始是將min_odd & min_even都=0
然後再用for判斷奇數&偶數
接著是讓他們來讓 arr[i]和min_odd & min_even 比大小
如果條件符合 那 min_odd & min_even 就會 =arr[i]
另外想請問一下
第二個for 少了else 會出問題嘛
因為我之前寫程式的時候 都沒有用else
然後關於arr的數,是用讀檔+fscanf出來的
輸出則是用 for+printf 出來的
→
05/02 02:22, , 13F
05/02 02:22, 13F
我是想說
一開始將那兩個先設為0
如果比他大(小) 就會替換掉
因為有for,所以arr[i]的值應該是一直會往下輪吧@@
(EX:arr[0] arr[1] arr[2].....這樣下去 直到迴圈結束這樣)
→
05/02 02:26, , 14F
05/02 02:26, 14F
→
05/02 02:26, , 15F
05/02 02:26, 15F
→
05/02 02:28, , 16F
05/02 02:28, 16F
→
05/02 02:28, , 17F
05/02 02:28, 17F
→
05/02 02:28, , 18F
05/02 02:28, 18F
→
05/02 02:28, , 19F
05/02 02:28, 19F
→
05/02 02:29, , 20F
05/02 02:29, 20F
我的想法是
應該要先判斷出陣列中的 奇數&偶數 → 然後找出最大偶數&最小奇數
→最後將兩者的位置互換 →回傳後得到答案
不知道這樣有沒有錯
推
05/02 02:30, , 21F
05/02 02:30, 21F
→
05/02 02:33, , 22F
05/02 02:33, 22F
→
05/02 02:37, , 23F
05/02 02:37, 23F
→
05/02 02:42, , 24F
05/02 02:42, 24F
先在外圍用一個迴圈(for)→然後用一個if來判斷奇數、一個if判斷偶數→接著在判斷
奇數的if裡面再多一個if用來判斷最小的奇數、
偶數的if裡面也多用一個if來判斷最大的偶數
然後…如果要互換位置的話
就要用類似上面的一開始打出來的那種互換方法
但是到這裡好像就卡住了~"~
※ 編輯: koei6200 來自: 125.230.77.156 (05/02 02:52)
推
05/02 03:44, , 25F
05/02 03:44, 25F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章