第二次博客园作业

一.运行截图

一.二进制

第二次博客园作业_第1张图片

二.八进制

第二次博客园作业_第2张图片

 

三.十进制

第二次博客园作业_第3张图片

四.十六进制

第二次博客园作业_第4张图片

五.运行失败

第二次博客园作业_第5张图片

二.函数介绍

一.

void Change2(long long int a,char b[],int n)//十进制转其他进制 ,n表示哪个进制转换成十进制
{
    int i=0;
    int c;
    while(a>0){
        c=a%n;
        if(c>=10) b[i]=(c-10)+'a';
        else b[i]=c+'0';
        a=a/n;
        ++i;
    }
    b[i]='\0';
}

二.

long long int Change(char a[],int n)//十进制转其他进制 ,n表示哪个进制转换成十进制
 {
     long long int sum=0;
     for(int i=0;i)
     {
         if(a[i]>='a')
             sum=sum*n+(a[i]-'a'+10);
         else sum=sum*n+(a[i]-'0');
     }
     return sum;
 }

三.

void Main()//主菜单
 {
     printf("请选择你要输入的进制数:\n");
    printf("1.二进制\n");
     printf("2.八进制\n");
     printf("3.十进制\n");
     printf("4.十六进制\n");
     printf("请输入:"); 
 }

四.

int Check(char a[],int n)//检查数据是否错误
 {
     int flag=0;
     for(int i=0;i)
     {
         if(n==16)
         {
             if((a[i]<='9'&&a[i]>='0')||(a[i])>='a'&&a[i]<='f') flag=1;
             else return 0;
         }
         if(n==2)
         {
             if(a[i]<='1'&&a[i]>='0') flag=1;
             else return 0;
         }
         if(n==8)
         {
             if(a[i]<='7'&&a[i]>='0') flag=1;
             else return 0;
         }
    }
    return 1;
 }

三.main函数

int main()
{
    int n;
    long long int a;
    char b[100];
    char c[100];
    Main();
    scanf("%d",&n);
    switch(n)
    {
        case 1:
            printf("请输入数值:");
            scanf("%s",b);
            if(!Check(b,2)) //判断数据是否符合要求 
            {
                printf("数据错误");
                break; 
            }
            a=Change(b,2);
            printf("十进制:%lld\n",a);
            Change2(a,c,8);
            printf("八进制:");
            Print(c);
            Change2(a,c,16);
            printf("十六进制:");
            Print(c);
            break;
        case 2: 
            printf("请输入数值:");
            scanf("%s",b);
            if(!Check(b,8)) //判断数据是否符合要求 
            {
                printf("数据错误");
                break; 
            }
            a=Change(b,8);
            printf("十进制:%lld\n",a);
            Change2(a,c,2);
            printf("二进制:");
            Print(c);
            Change2(a,c,16);
            printf("十六进制:");
            Print(c);
            break; 
        case 3:
            printf("请输入数值:");
            scanf("%lld",&a);
            Change2(a,c,2);
            printf("二进制:");
            Print(c);
            printf("八进制:");
            Change2(a,c,8);
            Print(c);
            Change2(a,c,16);
            printf("十六进制:");
            Print(c);
            break; 
        case 4:
             printf("请输入数值:");
            scanf("%s",b);
            if(!Check(b,16)) //判断数据是否符合要求 
            {
                printf("数据错误");
                break; 
            }
            a=Change(b,16);
            printf("十进制:%lld\n",a);
            Change2(a,c,2);
            printf("二进制:");
            Print(c);
            Change2(a,c,8);
            printf("八进制:");
            Print(c);
            break; 
    }
  return 0;    
} 

四.思维导图

第二次博客园作业_第6张图片

 

 

五.遇到的问题

1.制作主菜单函数,一开始没有思路,不知道void函数的意思

后向学长请教,制作出了主菜单。

2.本来想写各种进制互转,写没多久觉得各种进制互转的话太复杂也写的很乱。

后面百度了一下,改变了自己的思路,写成二八十六进制转换为十进制,再十进制转化为各种进制。

3.对数组的运用很不熟练,一开始基本上写不出来。后面自己看书上例题,向学长请教,才慢慢可以自己写出来。

六.代码互评

 

 刘炜

int main()
{
    int N, b;
    char a[20]; //定义数组(用来以字符串的形式存放转化数 )       
    printf("请输入待转换数字的进制:");

        scanf("%d", &N);         
    
        if(N!=2&&N!=8&&N!=10&&N!=16)//判断 
    {
    printf("错误!该进制无法转换。");
    return 0;
    } 
    printf("请输入待转换数字:");
    getchar();//将转化数存入数组         
    gets(a);                        //将输入的n进制数存放在数组a中
    int m = Numberchange10(a, N); //将输入数转换为10进制
    printf("请输入需转化的进制数:");
    
        scanf("%d", &b);
    
        if(b!=2&&b!=8&&b!=10&&b!=16)//判断 
    {
    printf("错误!该进制无法转换。");
    return 0;
    } 
    printf("转换的结果为:");
    Numberchange(m, b);//执行函数输出10进制转换结果
    printf("\n");
    system("pause");//暂停等待用户信号 
    return 0;
}

 

 代码的思路与我的差不多,我把判断错误给写成一个函数,他是直接在主函数里面进行判断,我比他多做了一个主菜单。

但他的代码看起来比我的更容易理解,能让使用者使用更方便。

六.总结

收获

1.进制转化一开始没有思路,靠看书上的例题才慢慢有思路。

2.对数组的运用变得有点熟练。

对函数的理解:

有些函数是可以不用返回值的,

你可能感兴趣的:(第二次博客园作业)