第二次博客作业

£可爱£侵袭症+ 提交于 2019-12-04 04:42:55

一、运行截图





二、函数

int mypow(int x,int n) {//一个简单的幂函数//
    int i, result = 1;
    for (i = 0; i < n; i++) {
        result = result * x;
    }
    return result;
}

功能:一个简单的幂函数,用来计算进制转换。

void turntwo(int n) {//将十进制转换成二进制//
    int i = 0, a[30];
    do {
        a[i] = n % 2;//利用数组将二进制存储//
        n = n / 2;
        i++;
    } while (n != 0);
    while (i > 0) {
        printf("%d", a[--i]);
    }
    printf("\n");
}

功能:将十进制转换成二进制并输出。

void menu() //菜单~//
{
    printf("----------------------------------------------------\n");
    printf("[1] 二进制 -> 八进制      [7] 十进制 -> 二进制\n");
    printf("[2] 二进制 -> 十进制      [8] 十进制 -> 八进制\n");
    printf("[3] 二进制 -> 十六进制    [9] 十进制 -> 十六进制\n");
    printf("[4] 八进制 -> 二进制      [10] 十六进制 -> 二进制\n");
    printf("[5] 八进制 -> 十进制      [11] 十六进制 -> 八进制\n");
    printf("[6] 八进制 -> 十六进制    [12] 十六进制 -> 十进制\n");
    printf("[0] 退出\n");
    printf("----------------------------------------------------\n");
}

菜单。。嫌主函数太长。

void twoturn(int choice)
{
    int n, i = 0, item, x, flag, result = 0;
    do {
        flag = 0;
        printf("输入你要转换的数:\n");
        scanf("%d", &n);
        item = n;
        while (item) {//判断输入的二进制是否正确//
            x = item % 10;
            if (x != 0 && x != 1) {
                printf("输入错误!!!请重新输入。\n");
                flag = 1;
                break;
            }
            item /= 10;
        }
    } while (flag == 1);//若输入的数不符合进制就重新循环//
    while (n != 0) {//将二进制转换成十进制//
        item = n % 10;
        result = result + item * mypow(2, i);
        i++;
        n /= 10;
    }
    printf("转换的数:\n");
    if (choice == 1) printf("%o\n", result);//输出八进制
    else if (choice == 2) printf("%d\n", result);//输出十进制
    else printf("%x\n", result);//输出十六进制

    printf("感谢你的使用!");
}

功能:将二进制转换成十进制在根据所作的选择输出不同进制的数。

void eightturn(int choice)
{
    int n, i = 0, item, x, flag, result = 0;
    do {
        flag = 0;
        printf("输入你要转换的数:\n");
        scanf("%d", &n);
        item = n;
        while (item) {//判断输入进制是否为八进制//
            x = item % 10;
            if (x > 9) {
                printf("输入错误!!!请重新输入。\n");
                flag = 1;
                break;
            }
            item /= 10;
        }
    } while (flag == 1);
    while (n != 0) {//转换成十进制//
        item = n % 10;
        result = result + item * mypow(8, i);
        i++;
        n /= 10;
    }
    printf("转换的数:\n");
    if (choice == 4) turntwo(result);//输出二进制//
    else if (choice == 5) printf("%d\n", result);
    else printf("%x\n", result);

    printf("感谢你的使用!");
}

功能:将八进制转换成十进制在根据所作的选择输出不同进制的数。

void tenturn(int choice) {
    int n;
    printf("输入你要转换的数:\n");
    scanf("%d", &n);
    printf("转换的数:\n");
    if (choice == 7) turntwo(n);
    else if (choice == 8) printf("%o\n", n);
    else printf("%x\n", n);

    printf("感谢你的使用!");
}

功能:将输入的十进制转换成其他进制。

void sixteenturn(int choice) {
    char n[50];
    int i, length, flag, item, result = 0, j = 0;
    do {
        flag = 0;
        printf("输入你要转换的数:(英文要大写)\n");
        scanf("%s", &n);
        length = strlen(n);//获取数组长度//
        for (i = 0; i < length; i++) {//判断输入的十六进制是否正确//
            if (n[i]<'0' || n[i]>'9' && n[i]<'A' || n[i]>'F') {
                printf("输入错误!!!请重新输入。\n");
                flag = 1;
                break;
            }
        }
    } while (flag == 1);
    i = length-1;
    while (i >= 0) {//将十六进制转换成十进制//
        if (n[i] >= 'A' && n[i] <= 'F') {
            item = n[i] - 'A' + 10;
        }
        else {
            item = n[i] - '0';
        }
        result = result + item * mypow(16, j);
        i--;
        j++;
    }
    printf("转换的数:\n");
    if (choice == 10) turntwo(result);
    else if (choice == 11) printf("%o\n", result);
    else printf("%d\n", result);

    printf("感谢你的使用!");
}

功能:将十六进制转换成十进制在根据所作的选择输出不同进制的数。

三、main函数

#include<stdio.h>
#include <string.h>

void menu();
int mypow(int x, int n);
void turntwo(int n);
void twoturn(int choice);
void eightturn(int choice);
void tenturn(int choice);
void sixteenturn(int choice);
int main() 
{
    int n, choice;
    menu();//输出菜单//
    printf("输入你的选择:\n");
    scanf("%d", &choice);
    switch (choice) {//选择进制转换//
    case 0:  break;
    case 1:  twoturn(choice); break;
    case 2:  twoturn(choice); break;
    case 3:  twoturn(choice); break;
    case 4:  eightturn(choice); break;
    case 5:  eightturn(choice); break;
    case 6:  eightturn(choice); break;
    case 7:  tenturn(choice); break;
    case 8:  tenturn(choice); break;
    case 9:  tenturn(choice); break;
    case 10: sixteenturn(choice); break;
    case 11: sixteenturn(choice); break;
    case 12: sixteenturn(choice); break;
    }

    return 0;
}

四、思维导图

五、问题

1.定义函数的类型定义错

解决:多次尝试,了解不同定义之间的差别。

2.二进制不能直接像其他利用 ”%o“ 或 ”%x“ 输出

解决:写一个将十进制转换成二进制的函数。

3.十六进制的转换

解决:查阅资料和请教同学。

六、代码互评

1913 罗吉洋

int tenTotwo(int a)//定义十进制转二进制
{
    int   item, ret;
    int sum, count, result;
    sum = count = result = 0;
    while (a > 0)
    {
        item = a % 2;
        a = a / 2;
        sum = sum * 10 + item;//求二进制
        count++;//计算位数
    }
    do {
        ret = sum % 10;
        result = result * 10 + ret;//逆序输出
        sum = sum / 10;;
        count--;
    } while (count != 0);
    return result;
}

他用逆序输出来将二进制输出是我没有想到的方法,这是一个不错的思路,可以是函数更加简洁易懂。

七、总结

1.更加了解函数类型和更好的使用函数,明白了函数之间的关系, 加强对字符串的利用;

2.提高代码的可读性,在代码巨大的时候也能时使代码更加简洁。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!