* 描述:解決百度知道中壹位網友提出的問題
* 作者:QQwen
*/
#include <stdio.h>
#define M 3 //定義數組的壹維
#define N 5 //定義數組的二維
//定義壹個測試用數組,用來調試程序
int testArray[3][5] =
{
{ 11, 12, 13, 14, 15 },
{ 21, 22, 23, 24, 25 },
{ 31, 32, 33, 34, 35 }, };
/**
* 數組轉換函數
* @param int (*a)[N] 需要轉換的二維數組
* @param int k 從第k列左移
*/
//在這裏第壹個參數是很有說法的,這個直接影響到函數中的寫法,如果函數中出現“a[i][j]”這種操作的時候
//壹定要這樣定義參數,否則編譯器會提示妳對a的下標操作是錯誤的,也就是說只有這樣定義第壹個個參數在函數
//體中才能以下標的形式操作數組中的元素
void fun(int (*a)[N], int k)
{
//int i, j, p, temp; //ij為循環變量,temp用來存儲每行第壹個元素,p這個變量意義不大用來配合k使用
int i, j, temp;
for (; k>0; k--)
//for (p = 1; p <= k; p++) //這裏的p定義的有些多余,改為上面的方式更好
for (i = 0; i < M; i++)
{//行循環
temp = a[i][0]; //將每行的第壹個元素先存儲在臨時的變量中,
//這樣就空出了自己的位置,即使後面的變量覆蓋了數據也不會丟失
//下面的操作是將數組中後壹個元素搬運到前面壹個位置,比如testArray[0][0] = 11,在執行
//完下面操作壹次之後testArray[0][0] = 12。
for (j = 0; j < N - 1; j++)
a[i][j] = a[i][j + 1];
//再壹行的元素都向前移動壹位之後將先前保存的第0個元素賦值給本行最後的
a[i][N - 1] = temp;
}
}
/**
* 打印數組中的元素
*/
void printArray()
{
int i, j;
for (i = 0; i < M; i++)
{
for (j = 0; j < N; j++)
{
printf("%d \t", testArray[i][j]);
}
printf("\n"); //換行
}
}
int main()
{
int column = 0; //從哪列左移
printf("請輸入要從第幾列左移(1--5):\n");
scanf("%d",&column);
printf("二維數組轉換之前為:\n");
printArray();
fun(testArray, column);
printf("二維數組轉換之後為:\n");
printArray();
return 0;
}
程序輸出為:
請輸入要從第幾列左移(1--5):
2
二維數組轉換之前為:
11 12 13 14 15
21 22 23 24 25
31 32 33 34 35
二維數組轉換之後為:
13 14 15 11 12
23 24 25 21 22
33 34 35 31 32