C語(yǔ)言實(shí)戰(zhàn)篇——如何翻譯年齡(age > 0 && age < 100)

目標(biāo):將輸入的數(shù)字年齡翻譯成英文

方法:一

可以使用if語(yǔ)句,編寫每一個(gè)數(shù)字都有輸出一個(gè)英文的代碼如:

if(i=1){
printf("Your age is one\n");
}

不過(guò)這種方法比較麻煩,不好操作。因此我們就應(yīng)該思考如何簡(jiǎn)化程序,很顯然需要插入數(shù)組,那么該如何操作呢,再接著往下看吧。

方法:二

不想要操作方法一那么復(fù)雜的程序,那么就讓我們用數(shù)組來(lái)試一試吧,首先我們要先思考如何來(lái)讓1對(duì)應(yīng)one,讓11對(duì)應(yīng)eleven。
先來(lái)簡(jiǎn)單一點(diǎn)的 如何讓用戶輸入一個(gè)數(shù)字1 來(lái)對(duì)應(yīng)數(shù)組中的one吧!
我們想要讓1 2 3 分別對(duì)應(yīng)數(shù)組中的one two three ,那么我肯定要把這些英文放到一個(gè)數(shù)組里(這里只考慮1-9的情況)那么這里的數(shù)組代碼我就直接給大家寫出來(lái)吧:

char* gewei[] = {"one","two","three","four","five","six","seven","eight","nine"};

那讓我們來(lái)試一試完整的程序是如何執(zhí)行的吧:

現(xiàn)在的問(wèn)題是我們輸入的是6,但它給我們顯示的結(jié)果是seven,因此問(wèn)題就出現(xiàn)了,要解決這個(gè)問(wèn)題就要了解字符串中這個(gè)one到底是從1開(kāi)始還是從0開(kāi)始,可能這時(shí)候大家都明白了,在gewei[ ]中的這個(gè)[ ]中應(yīng)該是輸入的是age-1,這樣就能保證用戶輸入1的時(shí)候?qū)?yīng)的就是one,正確的程序再給大家寫一遍吧:

#include<stdio.h>

int main(){
    int age = 0;
    //數(shù)組:數(shù)字對(duì)應(yīng)的英文 
    char* gewei[] = {"one","two","three","four","five","six","seven","eight","nine"};
    //用戶輸入年齡 
    printf("請(qǐng)輸入你的年齡:");
    scanf("%d",&age);
    //開(kāi)始對(duì)應(yīng)數(shù)組里的字符串
    char *name;//保存每次取出的字符串  
    name = gewei[age-1];
    printf("Your age is %s\n",name);
    return 0;
}

寫到這里,再想一想10-19是不是這樣呢,顯然也是的,但當(dāng)我們寫到20-29呢,30-39呢,是不是一想頭就大了,但先別急,先喝口開(kāi)水冷靜冷靜,仔細(xì)分析一波,21是twenty-one、31是thirty-one,這樣規(guī)律是不是很容易就發(fā)現(xiàn)了,我們需要編一個(gè)

    char* shiwei[]= {"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninty"}; 

這樣的數(shù)組出來(lái) 在和我們前面寫的數(shù)組進(jìn)行鏈接是不是就可以了,那好那我們先把這個(gè)放到一邊,先不說(shuō)它,回頭來(lái)看10-19這一組,因?yàn)闆](méi)有什么規(guī)律,所以完全可以按照第一組的方法來(lái)編,這里呢我就直接把代碼寫出來(lái)吧,但需要注意的是我們這個(gè)時(shí)候需要一個(gè)數(shù)字來(lái)幫我們找是第幾項(xiàng),因此最好的方法呢就是取余,代碼呢就寫好了:

//保存10-19 
char* temp[]= {"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"}; 
    //獲取個(gè)位數(shù)
        int index = age % 10; 
        name = temp[index];//這里的name呢已經(jīng)在前面定義過(guò)了

接下來(lái)就讓我們看看剩下需要我們做的吧:
1.我們輸入的是一個(gè)兩位數(shù),因此就需要對(duì)應(yīng)數(shù)組shiwei[ ]和數(shù)組gewei[ ]。
2.當(dāng)我們輸入的是20+時(shí) 這時(shí)應(yīng)該從twenty開(kāi)始 30+的時(shí)候就應(yīng)該是從thirty開(kāi)始,因此我們需要定義一個(gè)變量s來(lái)使2與twenty對(duì)應(yīng),3與thirty對(duì)應(yīng)。
3.保證了十位數(shù)字對(duì)應(yīng)后,我們還需要對(duì)應(yīng)個(gè)位數(shù)字,此時(shí)我們?cè)谝胍粋€(gè)變量g保證第一組數(shù)組的對(duì)應(yīng)。
好了,大致上我們已經(jīng)被思路捋順了,現(xiàn)在讓我們放到程序里操作試試:

    //保存?zhèn)€位數(shù)
    char* gewei[] = {"one","two","three","four","five","six","seven","eight","nine"};
    //保存十位
    char* shiwei[]= {"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninty"}; 
                //獲取個(gè)位數(shù)
        int g = age % 10;
        //獲取十位數(shù) 
        int s = age / 10;
//取出對(duì)應(yīng)的單詞
        char* sString = shiwei[s]; 
        char* gString = gewei[g];
        printf("Your age is %s-%s\n",sString,gString);

好了寫到這里,問(wèn)題又來(lái)了,當(dāng)我們輸入20的時(shí)候會(huì)發(fā)現(xiàn)這時(shí)候十位對(duì)應(yīng)的是forty,但我們想要的是twenty,好吧,細(xì)心一點(diǎn)我們會(huì)發(fā)現(xiàn)這個(gè)問(wèn)題之前已經(jīng)提過(guò)了 所以就需要把這個(gè)char* sString = shiwei[s]; 改成char* sString = shiwei[s-2]; 那么問(wèn)題又來(lái)了,此時(shí)的g為0啊,但它對(duì)應(yīng)的是one,那么我們就需要在數(shù)組gewei[ ]中改一下數(shù)據(jù):

char* gewei[] = {"","one","two","three","four","five","six","seven","eight","nine"};

這樣是不是就可以實(shí)現(xiàn)了,需要注意的是,這樣改,我們求第一組的時(shí)候的gewei[age-1]中age就可以不用減一了。
最終的代碼結(jié)果為:

#include<stdio.h>

int main(){
    int age = 0;
    //保存?zhèn)€位數(shù)
    char* gewei[] = {"","one","two","three","four","five","six","seven","eight","nine"};
    //保存10-19 
    char* temp[]= {"ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"}; 
    //保存十位
    char* shiwei[]= {"twenty","thirty","forty","fifty","sixty","seventy","eighty","ninty"}; 
    
    printf("請(qǐng)輸入年齡:");
    scanf("%d",&age);
    
    char *name;//保存每次取出的字符串 
    if(age < 10){
        name = gewei[age];
    }else if(age >= 10 && age <= 19){
        //獲取個(gè)位數(shù)
        int index = age % 10; 
        name = temp[index];
    }else{
        //獲取個(gè)位數(shù)
        int g = age % 10;
        //獲取十位數(shù) 
        int s = age / 10;
        //取出對(duì)應(yīng)的單詞
        char* sString = shiwei[s-2]; 
        char* gString = gewei[g];
        printf("Your age is %s-%s\n",sString,gString);
        //程序還未運(yùn)行完畢就提前結(jié)束 
        return 0;
        }
    printf("Your age is %s\n",name);
    return 0;
    
}

自我感悟


編寫代碼時(shí),一定要有清晰的思路,邏輯要完善,編寫帶有數(shù)組的代碼時(shí),一定要了解到數(shù)組的使用規(guī)則;仔細(xì)分析每一個(gè)步驟,盡量使代碼更加簡(jiǎn)潔規(guī)范,總之,編碼不易,禿頭肯定也是遲早的事了。。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Python簡(jiǎn)介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡(jiǎn)介】: Python 是一個(gè)...
    _小老虎_閱讀 6,335評(píng)論 0 10
  • 2014年的蘋果全球開(kāi)發(fā)者大會(huì)(WWDC),當(dāng)Craig Federighi向全世界宣布“We have new ...
    yeshenlong520閱讀 2,402評(píng)論 0 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,659評(píng)論 1 32
  • 昨天下午整體是一個(gè)修復(fù)性質(zhì)的反彈,整體來(lái)講下午反彈力度也是比較強(qiáng)的,整體個(gè)股也是一個(gè)相對(duì)普漲的狀態(tài),呈現(xiàn)出了一個(gè)漲...
    ViRRo王茜閱讀 122評(píng)論 0 0
  • 魯鎮(zhèn)的駕校的格局,是和別處不同的:都是進(jìn)門一個(gè)報(bào)名處,用來(lái)接待學(xué)員過(guò)來(lái)咨詢的,可以辦理學(xué)員報(bào)名。學(xué)車的人,由介紹人...
    Person10閱讀 235評(píng)論 0 1

友情鏈接更多精彩內(nèi)容