2019寒假做業2 編程總結

7-1 幣值轉換 (20 分)
輸入一個整數(位數不超過9位)表明一我的民幣值(單位爲元),請轉換成財務要求的大寫中文格式。如23108元,轉換後變成「貳萬叄仟壹百零捌」元。爲了簡化輸出,用小寫英文字母a-j順序表明大寫數字0-9,用S、B、Q、W、Y分別表明拾、百、仟、萬、億。因而23108元應被轉換輸出爲「cWdQbBai」元。
輸入格式:
輸入在一行中給出一個不超過9位的非負整數。
輸出格式:
在一行中輸出轉換後的結果。注意「零」的用法必須符合中文習慣。
輸入樣例1:
813227345
輸出樣例1:
iYbQdBcScWhQdBeSf
輸入樣例2:
6900
輸出樣例2:
gQjB數組

(1)實驗代碼函數

#include<stdio.h> 
#include<string.h>         //字符串操做函數,如求字符串長度 
int main() 
{ 
    int lenth,l; 
    char str[10];          //定義字符串數組 
    gets(str); 
    lenth=strlen(str);     //求長度 
    while(lenth>9)
    { 
        lenth--; 
    } 
    l=lenth;               //用l來保存當前位數,即千位,百位。 
    int t=1;               //定義t用於判斷萬位是否輸出單位(W) 
    if(str[1]=='0'&&str[2]=='0'&&str[3]=='0'&&str[4]=='0')
    { 
        t=0;               //若萬位,十萬位,百萬位,千萬位都爲零,則不須要輸出單位萬(W) 
    }
    else
    { 
        t=1; 
    } 
    for(int i=0;i<lenth;i++,l--)
    { 
        char c=str[i]; 
        switch(c)
        { 
            case'0':c='a';break; 
            case'1':c='b';break; 
            case'2':c='c';break; 
            case'3':c='d';break; 
            case'4':c='e';break; 
            case'5':c='f';break; 
            case'6':c='g';break; 
            case'7':c='h';break; 
            case'8':c='i';break; 
            case'9':c='j';break; 
            default:break; 
        } 
        if(lenth==1&&str[0]=='0')
        { 
            printf("a"); 
            return 0;       //當只輸入一個數時,且該數爲0,即數組長度只有1位,且str[0]=='0'。 
        } 
        if(c=='a') 
        {                   //0特殊,爲0(a)的字符單獨考慮 
            if(l==5&&t)
            { 
                printf("W");//當0在萬位時,直接輸出單位萬,不須要輸出零(a) 
            }
            else
            {                               //當0不在萬位時 
                for(i++,l--;i<lenth;i++,l--)
                {                           //看0的下幾位是否爲0 
                    if(str[i]=='0')
                    {                       //數組中的字符還是數字,因此要用數字’0‘判斷 
                        if(l==5&&t)
                        { 
                            printf("W");    //下幾位如有萬位爲0的,直接輸出單位萬(w) 
                        } 
                    }                       //若爲0的數中沒有萬位的,直接跳過,判斷下一位,不須要輸出任何東西 
                    else
                    {                       //下面幾位數中,0後面有不爲0的數 
                        printf("a"); 
                        l++;i--;                   /*將l和i的值恢復到上一位爲0的數所表明的值,由於break後,上面的for循環又要把l和i的 
                                           恢復到先前那個不爲0的值所表明的值 */ 
                        break; 
                    } 
                } 
            } 
        }
        else
        {                                   //字符不爲0(a)。 
            printf("%c",c);                 //輸出字符 
            switch(l)
            {                               //位數 
                case 9:printf("Y");break; 
                case 8:case 4:printf("Q");break; 
                case 7:case 3:printf("B");break; 
                case 6:case 2:printf("S");break; 
                case 5:printf("W");break; 
                default:break; 
            } 
        } 
    } 
    return 0; 
}

(2)設計思路
設計

第一步:運用字符串操做函數
第二步:定義變量(整型與字符型)
第三步:運用while語句判斷出位數,再用switch語句選擇每一個數字對應的字符(詳細講解對應(1)中代碼)
第四步:打印結果調試

(3)本題調試過程碰到問題及解決辦法
問題1:不會用字符串操做函數
解決方法:找書上有關字符串操做函數的內容,而後仔細看,最後再查資料,看其餘同窗的博客code

問題2:零的狀況考慮不全
解決方法:本身慢慢思索,而後參看其餘同窗的博客視頻

問題3:不懂輸出億位, 萬位,千位,百位,十位
解決方法:查資料,看了幾個大佬的博客blog

問題4:不知道gets(str)的意思,而且不太懂數組的運用
解決方法:搜視頻看,看書,查資料字符串

(4)運行結果截圖
get

相關文章
相關標籤/搜索