1樓:網友
第一步:每行求最大值並對調——這個比較簡單,乙個巢狀迴圈找出每行的最大值後,標記列號,與最後一行交換。
**:for (i = 0; i < m; i++)
max = a[i][0]; flag = 0; /flag 標記最大列號。
for (j = 1; j < n; j++)
if (a[i][j] >max)
t = a[i][n-1]; a[i][n-1] =a[i][flag]; a[i][flag] =t;
第二步:對行排序,可以新建乙個m*n的陣列b, 對原陣列最後一列排序後複製到b中。
**:for (k = 0; k < m; k++)
max = a[0][n-1]; flag = 0;
for (i = 1; i < m; i++)
if (a[i][n-1] >a[0][n-1])
strcpy(b[k], a[i]);a[i][n - 1] =32768 ; 把該行復制到b中,該行最後乙個元素值改為int最小值。
2樓:網友
可以考慮將定義m個一維陣列,將每行的元素複製到相應的以為陣列中,再求最大值並對調,然後比按每個陣列的最後乙個的大小排序陣列,最後把排好序的一維陣列複製到二維陣列中,列印出來。呵呵。
c語言關於陣列的一道題
3樓:網友
**問題是19行:for(i=0;i<3;i++)應該改為for(i=0;i<2;i++)之前的**for迴圈語句陣列範圍已經超過定義的陣列範圍,修改之後執行**是正確的,之所以7被改為1,要從定義陣列分配的記憶體空間解釋,c語言的變數是按照一定順序依次分配記憶體空間,而陣列是按棧來儲存的,是向著記憶體位址減少的方向儲存,定義完陣列v和a,它們的儲存順序大致是。
後面數值轉換到a[2][0]時正好也是v[0][2]的位址,所以就把v[0][2]的數值換掉了也就是7數值換掉了,換成了v[2][0]的值,因為v[2][0]超出了陣列範圍,所以它的值是隨機的,也就是換到a[2][0]的數。
4樓:古既操
或一種你只能針對int型陣列,若是其他資料型別的就不行了,而第一種則沒這個限制。
求助一道c語言題 關於陣列的,求助一道C語言關於陣列的題。
cd不加 是因為他們倆 表示陣列名,就等同於地址了,不需要再加地址符。scanf在用的時候後面 可以直接寫陣列名,也可以寫地址符加陣列名加陣列元素個數。ab明顯不對,他倆越界了。c表示第一次迴圈的時候是 第5個元素的地址,但是隨後m值又自加1,所以第二次迴圈的時候還是5,d表示第m個元素的地址。fo...
關於c語言的一道題,關於C語言的一道題
第一個是把整型資料格式輸出為浮點型資料,這個主要還是看float的小數點有效位數,我也不太記得了,6 7位,是哪一個我也不記得了。第二個是把浮點型資料格式輸出為整形,就會把小數點部分省略,記住這裡不是數學上的四捨五入,不管多大的小數部分都會扔掉。輸出是什麼你應該知道的,執行 就ok 第一句自不必多說...
關於C語言的一道題,請問關於C語言的一道題
include double cube double num int main void double cube double num 輸出結果是 1 3 20 2 3 20 3 20 3 4 3 20因為你用的是值傳遞所以在子函式中是不會改變實參順序的 這個程式的書寫有錯誤,在 void swap...