第二次博客園做業

一.運行截圖函數

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.理解:函數是一種能夠簡化主函數的好方法,使主函數思路能夠更好理解。並且函數間互相調用能夠大大簡化代碼。

相關文章
相關標籤/搜索