第二次博客园作业:函数+进制转换器v1.0beta

一.程序运运行截图。

 

 

 

 

二.函数介绍。

1.

 1 void twotoeightandten(int x) {
 2     int c,y,s10=0,s8=0,i,l;
 3     y=x;
 4     i=0;
 5     l=0;
 6         //二进制转为十进制
 7     while(y!=0){
 8         c=y%10;
 9             //判断输入是否为二进制
10         if(c>=2)
11             l++;
12         y/=10;
13         s10=s10+c*pow(2,i);
14         i++;
15     }
16     y=s10;
17     i=0;
18         //十进制转为八进制
19     while(y!=0){
20         c=y%8;
21         y/=8;
22         s8=s8+c*pow(10,i);
23         i++;
24     }
25     if(l==0){
26         printf("二进制转为\n"); 
27         printf("八进制:%d\n十进制:%d\n",s8,s10);
28     } 
29     else 
30         //若输入数不为二进制
31         printf("这个输入是错的鸭");
32 }

将二进制转化为十进制,再将十进制转化为二进制达到效果。

2.

void eighttotwoandten(int x) {
        //将八进制转化为二进制和十进制
    int c,y,s10=0,s2=0,i,l;
    y=x;
    i=0;
    l=0;
        //将八进制转化为十进制
    while(y!=0){
        c=y%10;
        if(c>=8)
            l++;
        y/=10;
        s10=s10+c*pow(8,i);
        i++;
    }
    y=s10;
    i=0;
        //将十进制转化为二进制
    while(y!=0){
        c=y%2;
        y/=2;
        s2=s2+c*pow(10,i);
        i++;
    }
    if(l==0){
        printf("八进制转为\n"); 
        printf("二进制:%d\n十进制:%d\n",s2,s10);
    } 
    else
        //若输入数不为八进制
        printf("这个是错的鸭");
}

将八进制转化为十进制,再将十进制转化为二进制达到效果。

3.

void tentotwoandeight(int x) {
        //将十进制转化为二进制和八进制
    int c,y,s2=0,s8=0,i;
    y=x;
    i=0;
        //将十进制转化为二进制
    while(y!=0){
        c=y%2;
        y/=2;
        s2=s2+c*pow(10,i);
        i++;
    }
    y=x;
    i=0;
        //将十进制转化为八进制
    while(y!=0){
        c=y%8;
        y/=8;
        s8=s8+c*pow(10,i);
        i++;
    }
    printf("十进制转为\n");
    printf("二进制:%d\n八进制:%d\n",s2,s8);
}

将十进制转化为二进制和八进制,此代码不需要判断是否为十进制

三.main函数

#include<stdio.h>
#include<math.h>
void twotoeightandten(int x) ;//二进制转化为八进制和十进制函数
void eighttotwoandten(int x) ;//八进制转化为二进制和十进制函数
void tentotwoandeight(int x) ;//十进制转化为二进制和八进制函数
int main()
{
    int jzs, x;
    printf("输入'2'为二进制;输入'8'为八进制;输入'10'为十进制\n输入进制数;");
    //输入进制数
    scanf("%d", &jzs);
    printf("输入一个数:");
    //输入被转化的数
    scanf("%d", &x);
    //判断进制数
    if (jzs == 2) {
        twotoeightandten(x);
    }
    else if (jzs == 8) {
        eighttotwoandten(x);
    }
    else if (jzs == 10) {
        tentotwoandeight(x);
    }
    return 0;
}

四.思维导图

 

五.碰到的问题:

如何判断二进制,八进制,十进制;

解决方案:

通过取余判断每一位数是否小于进制数。是,则输出;出现一位以上不符合条件,则提示输入错误。

进制如何转换

解决方案:

思路:先将二进制或八进制转化为十进制,再将十进制转化为二进制和八进制。

六.代码互评。

void change(int n,char a[],int m,int count)//将用户输入的数先转化成十进制数,在转化成想要转化成的进制数 
{    
    int i,j,k=0,num,sum=0,c;
    char b[1001];
    for(i=0;a[i]!='\0';i++)
    {
        if(a[i]>='0'&&a[i]<='9')num=a[i]-'0';
        else
            num=a[i]-'a'+10;
        sum=sum*n+num;
    }
    while(sum)
    {
        c=sum%m;
        b[k++]="0123456789abcdef"[c];
        sum=sum/m;
    }
    i=0;
    for(i=k-1;i>=0;i--)
    {
        if(b[i]>='0'&&b[i]<='9')printf("%d",b[i]-'0');
        else
            printf("%c",b[i]);
    }
    printf("\n"); 

将十进制转化为十六进制非常巧妙,利用取余,判断取余数并将相应的十六进制数字及字母存入存入数组中,最后利用数组表示出十六进制,非常巧妙。

七.总结

1.对于进制转换及其含义有了更深刻的了解,各进制转为十进制都有规律,可以举一反三,而十进制转为其他进制也有规律且较为容易。

2.学到了很多,代码的简洁,清晰易懂,以及运行过程更能被理解,让使用者了然也是非常重要的。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-11-09 10:05  宋思坡201921123103  阅读(187)  评论(0编辑  收藏  举报