一.運行截圖函數
1.啓動界面
2.輸入運行
3.輸入無效
4.退出
3d
二.code
三.函數介紹blog
int translate(int number, int system);//在2轉8進制或8轉2進制時先轉爲十進制數 int _2to8(int number, int system);//將二進制轉爲八進制 int _2to10(int number, int system);//將二進制轉爲八進制 int _8to2(int number, int system);//將八進制轉爲二進制 int _8to10(int number, int system);//將八進制轉爲十進制 int _10to2(int number, int system);//將十進制轉爲二進制 int _10to8(int number, int system);//將十進制轉爲八進制 int pow(int num, int n);//調用指數函數 int judge(int number, int system);//判斷輸入數字與進制是否對應
函數translate字符串
int translate(int number, int system) { if (system == 2) { return _2to10( number, system);//將二進制數轉爲十進制 } if (system == 8) { return _8to10(number,system);//將八進制數轉爲十進制 } }
函數 _2to8(int number, int system)變量
int _2to8(int number, int system) { number = translate(number, system);//先轉爲十進制數 return _10to8(number, system);//將轉換後的數轉爲八進制 }
函數 _2to10(int number, int system)循環
int _2to10(int number, int system) { int num[20] = {}; int sum = 0; int i = 0, count = 0; do { //將每一位數儲存 num[i] = number % 10; number = number / 10; i++; count++; } while (number != 0); for (i = 0; i < count; i++) { sum = sum + num[i] * pow(2, i);//調用pow函數計算 } return sum; }
函數 _8to2(int number, int system)二進制
int _8to2(int number, int system) { number = translate(number, system);//先轉爲十進制數 return _10to2(number, system);將轉換後的數轉爲二進制 }
函數 _8to10(int number, int system)方法
int _8to10(int number, int system) { int num[20] = {}; int sum = 0; int i = 0, count = 0; do { num[i] = number % 10; number = number / 10; i++; count++; } while (number != 0); for (i = 0; i < count; i++) { sum = sum + num[i] * pow(8, i); } return sum; }
函數 _10to2(int number, int system)im
int _10to2(int number, int system) { int a = 1, b = 0, r; while (1) { r = number % 2; number = number/2; b += r * a; a = a * 10; if (number < 2) { b = b+number * a; break; } } return b; }
函數_10to8(int number, int system)
int _10to8(int number, int system) { int a = 1, b = 0, r; while (1) { r = number % 2; number = number/2; b =b + r * a; a = a * 10; if (number < 2) { b = b+number * a; break; } } return b; }
四.main函數
int main() { int number, system; int i = 1;//記錄輸入次數 printf(" 進制轉換器\n歡迎您的使用\n"); while (1) {//死循環進行連續輸入 printf("%d.請輸入數字及其對應進制(中間以空格間隔,輸入進製爲0時退出):", i); scanf("%d %d", &number, &system); if (system == 0) break;//輸入0時退出 if (judge(number, system) == 0) {//判斷是否輸入數字與進制匹配 if (system == 2) { printf("八進制:%d\n", _2to8(number, system)); printf("十進制:%d\n", _2to10(number, system)); } else if (system == 8) { printf("二進制:%d\n", _8to2(number, system)); printf("十進制:%d\n", _8to10(number, system)); } else if (system == 10) { printf("二進制:%d\n", _10to2(number, system)); printf("八進制:%d\n", _10to8(number, system)); } else printf("輸入進制錯誤,請從新輸入!\n");//輸入2,8,10,0之外的進制 } else printf("您的數字與進制不匹配,請從新輸入!\n"); i++; printf("\n\n"); } printf("謝謝使用!\n"); }
五.
六.遇到的問題
1.在調用函數時將主函數變量名用於函數裏
解決:經過翻看vs錯誤列表找到緣由
2.在八進制轉二進制和二進制轉八進制時想着八進制1位對二進制三位的規則,但發現有些繁瑣
解決:在紙上舉例計算,想起通常先轉爲十進制後再轉換位目標進制
3.在二進制轉十進制函數中將用於記錄二進制數位數的count變量在循環中賦值
解決:在函數中用printf逐個變量逐個位置進行輸出來尋找問題
七.代碼互評
李永福
void sixteen(int n)//輸入十六進制數 { char str[1000]; printf("請輸入您的數字:"); scanf("%s", str); for (int i = 0; i < strlen(str); i++) if (islower(str[i]))str[i] = toupper(str[i]); if (!judge(n, str))printf("ERROR\n"); else { sixteen_to_two(str); sixteen_to_eight(str); sixteen_to_ten(str); } }
我以前字符串不熟想不出如何輸入十六進制數,而永福用字符串輸入十六進制讓我對字符串有了更好理解。他還使用<ctype.h> 頭文件,將小寫改成大寫是對不久前課上內容學以至用。
八.總結
1.收穫:對函數裏再調用函數有了更深體會;體會到函數的便捷性;鍛鍊了對函數的總體思考,函數間的關聯。
2.理解:函數是一種能夠簡化主函數的好方法,使主函數思路能夠更好理解。並且函數間互相調用能夠大大簡化代碼。