第二次博客做業: 函數+進制轉換器v1.0beta

1、運行截圖。數組

1.函數

 

2.spa

 

 

 

3.3d

 

 

 

4.調試

 

 

 

5.code

 

 

 

6.blog

 

 

 

7.字符串

 

 

 

2、函數功能介紹。get

 

/*將輸入的全部進制數都轉換成十進制數*/ 
int ten(char a[],int b)
{
    int len=strlen(a);
    int i,num,t=1,number=0;
    int sum=0; 
    if(b!=16){
    for(i=len-1;i>=number;i--){
        sum=sum*b+a[i]-'0';
    }
}
    else if(b==16){
        for(i=number;i<len;i++){
            if (a[i] >= '0' && a[i] <= '9')
        {
            num = a[i] - '0';
        }
        else if (a[i] >= 'A' && a[i] <= 'F')
        {
            num = a[i] - 'A' + 10;
        }
        sum = sum * b + num;
        }
    }
    return sum;    
 }
/*將轉換的十進制數轉換爲所需進制數並輸出*/ 
 void shuchu(int n,int c)
{
    if(c!=16){
    if(n>c-1){
        shuchu(n/c,c);
    }
    printf("%d",n%c);
}
else if(c==16){
int a[100]; 
int i=0; 
int yushu; 
char hex[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    while(n>0) 
{ 
yushu=n%16; 
a[i++]=yushu; 
n=n/16; 

} 
printf("轉化爲十六進制的數爲:0x"); 
for(i=i-1;i>=0;i--)
{ 
n=a[i];
printf("%c",hex[n]); 

} 
printf("\n"); 
}
}
/*判斷輸入進制數是否正確*/ 
int panduan(char a[],int d)
{
    int flag1;
    int i,len,number=0;
    len=strlen(a);
    int x=d-1+48;
    if(d!=16){ 
    for(i=number;i<len;i++){
        if(a[i]<48||a[i]>x){
        flag1=0;break;
    }
    else{
        flag1=1;
    }
}
    } 
    else if(d==16){
        for(i=number;i<len;i++)
        {
            if(a[i]<'0'||a[i]>'9'&&a[i]<'A'||a[i]>'F'){
            flag1=0;
            break;
        }
        else
        {
            flag1=1;
        }
        }
    } 
    return flag1;
}

代碼功能在代碼上方以給出,十六進制與其餘進制轉換都不相同,故用if-else if來分別編寫。將全部數轉換爲十進制是一箇中介。思維導圖

 

 3、main函數

int main(){
    int xing,a=0,chu;
    int flag=1; 
    char ru[100];
    printf("輸入數的進制類型:\n");
    scanf("%d",&xing);
    printf("輸入的數:\n");
    getchar();
    scanf("%s",&ru);
    printf("轉換進制類型:");
    scanf("%d",&chu);
    printf("Anser:"); 
    int m,n;
    flag=panduan(ru,xing);
    if(flag==1){
    m=ten(ru,xing);
    shuchu(m,chu);
    }
    else{
        printf("輸入的數錯誤");
    } 
}

用字符來表達數,其中用getchar的形式來輸入。用flag來判斷輸入數的正誤。

4、思惟導圖。

 

 5、問題分析。

1.判斷函數,剛開時調試時,例如輸入一個二進制數,若輸入221,則答案輸出:輸入錯誤。但輸入121的時候,並無顯示輸入錯誤,後來檢查發現判斷的循環語句中沒有break,因此前面的數錯誤時flag1=0,但最後的數是正確的則flag1=0。才致使例子中的問題。

2.用十六進制數輸出時,由於沒有定義大於9以後的數用字母表示,則輸出數不存在1FA類型的數,後來詢問同窗和百度搜索。得出,要定義函數,而後將數用數組定義來輸出,簡潔又明瞭。

6、代碼互評。

void Numchange(int m, int b)//將10進制數轉化爲任意進制數
{
    
    int n = m;
    int count = 0;
    if (m == 0) printf("0");
    while (n != 0)
    {
        n = n / b;
        count++;
    }
    int number;
    for (int i = count; i >= 1; i--)
    {
        number = m / (int)pow(b, i - 1);
        if (number < 10) {
            printf("%d", number);
        }
        else {
            printf("%c", number + 55);
        }
        m = m % (int)pow(b, i - 1);
    }
}

        以上是楊濤同窗的函數代碼。其中該功能的代碼要比個人簡潔的多。個人代碼輸出十六進制數時,又要從新定義和編寫,而後用if-else if放入函數中。他的代碼只需說明當number大於10時用字母的形式輸出,其中代碼量簡潔,也減小了運行時間。

7、總結。

1.加強了自身對函數的理解,函數裏能夠套用函數,省去編寫不少重複代碼。

2.加強了對字符和字符串的運用。

3.調試時要實行多樣化,輸入多種不一樣的數據進行調試,才能發現隱藏的問題。

4.面對問題時,要勤於動腦,代碼每一個人有每一個人的特色,每一個人的想法都略有不一樣。咱們在編寫代碼時,要以簡潔和運行時間最短爲目標。

相關文章
相關標籤/搜索