!博客作业(2)函数+进制转换器v1.0beta

① 运行截图

一.主菜单

二.无效命令

三.运行成功程序 以此类推

(1).十进制转十六进制

(2).二进制转八进制

② 函数功能介绍

(1).十进制转二进制

void turn1()
{
    int a,b[30],c,i=0,d;
    printf("请输入十进制数:");
    scanf("%d",&a);
    while(a!=0)
    {
        b[i]=a%2;
        c=a/2;
        a=c;
        i++;
    }
    printf("转化为二进制为:");
    while(i>0)
    printf("%d",b[--i]);
    printf("感谢使用\n");
}

(2).二进制转八进制

void turn2()
{
    int a,b[30],c,i=0,d;
    printf("请输入十进制数:");
    scanf("%d",&a);
    while(a!=0)
    {
        b[i]=a%8;
        c=a/8;
        a=c;
        i++;
    }
    printf("转化为八进制为:");
    while(i>0)
    printf("%d",b[--i]);
    printf("感谢使用\n");
}

(3).十进制转十六进制

void turn3()
{
    int a,b[30],c,i=0,d;
    printf("请输入十进制数:");
    scanf("%d",&a);
    while(a!=0)
    {
        b[i]=a%16;
        c=a/16;
        a=c;
        i++;
    }
    printf("转化为十六进制为:");
    while(i>0)
    { 
        d=b[--i];
        if(d==10)
        printf("A");
        else
        if(d==11)
        printf("B");
        else
        if(d==12)
        printf("C");
        else
        if(d==13)
        printf("D");
        else
        if(d==14)
        printf("E");
        else
        if(d==15)
        printf("F");
        else
        printf("%d",d);
    } 
    printf("感谢使用\n");
}

(4).二进制转八进制

void turn4(){
    char a[30]={0};
    int n ,j,i,sum=0,t=0,p=1;
    int c,d;
    printf("请输入一个二进制数:");
    scanf("%s",a);
    n=strlen(a);
    for(i=n-1;i>=0;i--)
     {
        p=1;
        t=(a[i]-48);
        if(i==n-1)
        p=1;
        else
        for(j=0;j<n-i-1;j++) 
        p=p*2;
        sum+=t*p;
     }
    int x=0;
    while(sum!=0)
    {
    
        a[x]=sum%8;
        c=sum/8;
        sum=c;
        x++;
    }
    printf("转化为八进制为:");
    while(x>0)
    printf("%d",a[--x]);
    printf("感谢使用\n");
}

(5).二进制转十进制

void turn5()
{
    char a[30]={0};
    int n ,j,i,sum=0,t=0,p=1;
    printf("请输入一个二进制数:");
    scanf("%s",a);
    n=strlen(a);
    for(i=n-1;i>=0;i--)
     {
        p=1;
        t=(a[i]-48);
        if(i==n-1)
        p=1;
        else
        for(j=0;j<n-i-1;j++) 
        p=p*2;
        sum+=t*p;
     }
     printf("转化为十进制为:%d",sum);
}

(6).八进制转二进制

void turn6(){
    char a[30]={0};
    int n ,j,i,sum=0,t=0,p=1;
    printf("请输入一个八进制数:");
    scanf("%s",a);
    n=strlen(a);
    for(i=n-1;i>=0;i--)
     {
        p=1;
        t=(a[i]-48);
        if(i==n-1)
        p=1;
        else
        for(j=0;j<n-i-1;j++) 
        p=p*8;
        sum+=t*p;
     }
     int c,x=0,d;
    while(sum!=0)
    {
        a[x]=sum%2;
        c=sum/2;
        sum=c;
        x++;
    }
    printf("转化为二进制为:");
    while(x>0)
    printf("%d",a[--x]);
    printf("感谢使用\n");
}

(7).八进制转十进制

void turn7()
{
    char a[30]={0};
    int n ,j,i,sum=0,t=0,p=1;
    printf("请输入一个八进制数:");
    scanf("%s",a);
    n=strlen(a);
    for(i=n-1;i>=0;i--)
     {
        p=1;
        t=(a[i]-48);
        if(i==n-1)
        p=1;
        else
        for(j=0;j<n-i-1;j++) 
        p=p*8;
        sum+=t*p;
     }
     printf("转化为十进制为:%d",sum);
}

(8).十六进制转十进制

void turn8()
{
    int a,b[30],c,i=0,d;
    printf("请输入十六进制数:");
    scanf("%x0",&a);
    while(a!=0)
    {
        b[i]=a%10;
        c=a/10;
        a=c;
        i++;
    }
    printf("转化为十进制数为:");
    while(i>0)
    printf("%d",b[--i]);
}

③ main函数展示

#include <stdio.h>
#include <string.h>
void turn1();
void turn2();
void turn3();
void turn4();
void turn5();
void turn6();
void turn7();
void turn8();
int main(void)
{
    int choice,a;
    do{
        printf("\t-------------------【 进制转换器 】-----------------\n");
        printf("\t-------------0. 退出--------------------------\n");
        printf("\t-------------1. 十进制转二进制----------------\n");
        printf("\t-------------2. 十进制转八进制----------------\n"); 
        printf("\t-------------3. 十进制转十六进制--------------\n");
        printf("\t-------------4. 二进制转八进制----------------\n");
        printf("\t-------------5. 二进制转十进制----------------\n");
        printf("\t-------------6. 八进制转二进制----------------\n"); 
        printf("\t-------------7. 八进制转十进制----------------\n");
        printf("\t-------------8. 十六进制转十进制----------------\n");
        printf("\n\n请输入您的选择:\t");
        scanf("%d",&choice);
        switch(choice)
        {
            case 0:break;
            case 1:turn1();break;
            case 2:turn2();break;
            case 3:turn3();break;
            case 4:turn4();break;
            case 5:turn5();break;
            case 6:turn6();break;
            case 7:turn7();break;
            case 8:turn8();break;
            default:printf("\n选项不存在!\n");
        }
        printf("是否继续!!(继续按1,退出按0):");
        scanf("%d",&a); 
    }while(a==1);
} 

④ 思维导图

(1)缺少函数声明,没有错误提示

询问同学将其补充在头文件之后

(2)二进制和八进制的相互转化模糊不清

先将其转化为十进制数再套用原有公式实现相应进制转变

(3)进制转化器不存在错误提示的纠错功能

在void turn函数里添加if panduan(a[==1){}语句但是操作失败

(4)代码过于冗长不会合并简化

无方法

⑥ 代码互评

    void TenToSixteen()//李曼
    {
        char arr[] = "0123456789ABCDEF";
        char hex[16];
        int i = 0;
        int j = 0;
        int num = 0, a = 0;
        printf("输入一个整数:");
        scanf("%d", &num);
        a = num;
        while (num)
        {
            hex[i++] = arr[num % 16];   //对十进制数求余并最终与hextable数组中的字符匹配
            num = num / 16;
        }
        printf("十进制数%d转换成十六进制数是:", a);
        for (j = i - 1; j >= 0; --j)
            printf("%c", hex[j]);
        printf("\n");
    }



    void turn3()//我的
{
    int a,b[30],c,i=0,d;
    printf("请输入十进制数:");
    scanf("%d",&a);
    while(a!=0)
    {
        b[i]=a%16;
        c=a/16;
        a=c;
        i++;
    }
    printf("转化为十六进制为:");
    while(i>0)
    { 
        d=b[--i];
        if(d==10)
        printf("A");
        else
        if(d==11)
        printf("B");
        else
        if(d==12)
        printf("C");
        else
        if(d==13)
        printf("D");
        else
        if(d==14)
        printf("E");
        else
        if(d==15)
        printf("F");
        else
        printf("%d",d);
    } 
    printf("感谢使用\n");
}

比较代码: (1)自定义函数void TenToSixteen()使用户清晰明了知道进制的准换;

(2)我的代码一直使用多分支结构造成代码冗长不够简洁;

(3)她的代码出现了文字说明便于理解分析

⑦ 自我总结

(1) 通过这次博客园作业,对于进制的转化更加熟练操作得心应手。

(2) 学会了调用库函数中的strlen求字符长度。

(3) 知道了%o是以八进制形式输出一个整数,%x是以十六进制形式输入输出一个整数。

(4)函数是一个完成特定工作的独立程序模块;

通过使用函数避免代长度冗长占用空间;

代码可读性强,独立功能的函数实现预定功能,方便编程者阅读。

猜你喜欢

转载自www.cnblogs.com/zgz123/p/11831941.html