將一個從鍵盤輸入的整數存放到一個陣列中,通過程式的執行按照陣列中的逆序輸出該整數,利用遞迴的方法解決問題。
演算法思想
設計函數實現資料的逆序存放,設定形引數組接收實引數組的地址,來儲存資料的每一位。函數體採用遞迴的方式解決問題,因此考慮遞回進行的條件。例如,把資料 n 存放到陣列 s 中,若 n 是一位數,則存放 n 到陣列中;若 n 不是一位數,則存放 n/10 到陣列中。
問題解決的難點在於找到資料的存放地址,通過不斷地取餘和整除 10 來得到資料的每一位。為了實現資料的逆序存放,每一次整除 10 的時候,同時把存放資料的陣列地址後移,這樣得到的第一位數存放在陣列的最後一位……通過依次前移,即遞回的回歸,實現整個資料的存放。通過函數 convert() 實現字串中的數位的逆序轉換。
程式程式碼
#include <stdio.h>
int convert(char s[],int n)
{
int i;
if((i=n/10)!=0)
convert(s+1,i);
*s=n%10+'0';
return 0;
}
int main()
{
int num;
char str[10]=" ";
printf("input integer data:");
scanf("%d",&num);
convert(str,num);
printf("output string:n");
puts(str);
return 0;
}
偵錯執行結果
當輸入整數為 123456789 時,其程式執行結果如下所示:
input integer data:123456789
output string:
987654321
當輸入整數為 654321789 時,逆序轉換輸出結果如下所示:
input integer data:654321789
output string:
987123456
總結
陣列名代表陣列中第一個元素的地址,陣列的地址就是陣列的指標,每個元素的地址就是每個元素的指標。陣列元素在記憶體中是連續存放的,相對於普通變數,用指標指向資料元素操作更簡便。
一維陣列的陣列名代表了陣列的首地址,即陣列的指標,但陣列名是常數指標,其值是不可改變的,可以定義一個指標變數指向陣列名。當定義了指標後,對於陣列元素的參照既可以使用下標,又可以使用指標。