1、運行截圖。數組
1.函數
2.spa
3.3d
4.調試
5.code
6.blog
7.字符串
2、函數功能介紹。get
/*將輸入的全部進制數都轉換成十進制數*/ int ten(char a[],int b) { int len=strlen(a); int i,num,t=1,number=0; int sum=0; if(b!=16){ for(i=len-1;i>=number;i--){ sum=sum*b+a[i]-'0'; } } else if(b==16){ for(i=number;i<len;i++){ if (a[i] >= '0' && a[i] <= '9') { num = a[i] - '0'; } else if (a[i] >= 'A' && a[i] <= 'F') { num = a[i] - 'A' + 10; } sum = sum * b + num; } } return sum; }
/*將轉換的十進制數轉換爲所需進制數並輸出*/ void shuchu(int n,int c) { if(c!=16){ if(n>c-1){ shuchu(n/c,c); } printf("%d",n%c); } else if(c==16){ int a[100]; int i=0; int yushu; char hex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; while(n>0) { yushu=n%16; a[i++]=yushu; n=n/16; } printf("轉化爲十六進制的數爲:0x"); for(i=i-1;i>=0;i--) { n=a[i]; printf("%c",hex[n]); } printf("\n"); } }
/*判斷輸入進制數是否正確*/ int panduan(char a[],int d) { int flag1; int i,len,number=0; len=strlen(a); int x=d-1+48; if(d!=16){ for(i=number;i<len;i++){ if(a[i]<48||a[i]>x){ flag1=0;break; } else{ flag1=1; } } } else if(d==16){ for(i=number;i<len;i++) { if(a[i]<'0'||a[i]>'9'&&a[i]<'A'||a[i]>'F'){ flag1=0; break; } else { flag1=1; } } } return flag1; }
代碼功能在代碼上方以給出,十六進制與其餘進制轉換都不相同,故用if-else if來分別編寫。將全部數轉換爲十進制是一箇中介。思維導圖
3、main函數
int main(){ int xing,a=0,chu; int flag=1; char ru[100]; printf("輸入數的進制類型:\n"); scanf("%d",&xing); printf("輸入的數:\n"); getchar(); scanf("%s",&ru); printf("轉換進制類型:"); scanf("%d",&chu); printf("Anser:"); int m,n; flag=panduan(ru,xing); if(flag==1){ m=ten(ru,xing); shuchu(m,chu); } else{ printf("輸入的數錯誤"); } }
用字符來表達數,其中用getchar的形式來輸入。用flag來判斷輸入數的正誤。
4、思惟導圖。
5、問題分析。
1.判斷函數,剛開時調試時,例如輸入一個二進制數,若輸入221,則答案輸出:輸入錯誤。但輸入121的時候,並無顯示輸入錯誤,後來檢查發現判斷的循環語句中沒有break,因此前面的數錯誤時flag1=0,但最後的數是正確的則flag1=0。才致使例子中的問題。
2.用十六進制數輸出時,由於沒有定義大於9以後的數用字母表示,則輸出數不存在1FA類型的數,後來詢問同窗和百度搜索。得出,要定義函數,而後將數用數組定義來輸出,簡潔又明瞭。
6、代碼互評。
void Numchange(int m, int b)//將10進制數轉化爲任意進制數 { int n = m; int count = 0; if (m == 0) printf("0"); while (n != 0) { n = n / b; count++; } int number; for (int i = count; i >= 1; i--) { number = m / (int)pow(b, i - 1); if (number < 10) { printf("%d", number); } else { printf("%c", number + 55); } m = m % (int)pow(b, i - 1); } }
以上是楊濤同窗的函數代碼。其中該功能的代碼要比個人簡潔的多。個人代碼輸出十六進制數時,又要從新定義和編寫,而後用if-else if放入函數中。他的代碼只需說明當number大於10時用字母的形式輸出,其中代碼量簡潔,也減小了運行時間。
7、總結。
1.加強了自身對函數的理解,函數裏能夠套用函數,省去編寫不少重複代碼。
2.加強了對字符和字符串的運用。
3.調試時要實行多樣化,輸入多種不一樣的數據進行調試,才能發現隱藏的問題。
4.面對問題時,要勤於動腦,代碼每一個人有每一個人的特色,每一個人的想法都略有不一樣。咱們在編寫代碼時,要以簡潔和運行時間最短爲目標。