21天C語(yǔ)言代碼訓(xùn)練營(yíng)(第二天)

上一篇的評(píng)論中,大家反饋評(píng)論中貼代碼無(wú)法排版。我們改一下規(guī)則,大家可以把自己實(shí)現(xiàn)的代碼發(fā)布在自己的簡(jiǎn)書(shū)博文中,之后把鏈接貼在評(píng)論中。這樣也方便大家日后追溯。

當(dāng)然,也可以直接發(fā)郵件給我。希望大家堅(jiān)持打卡,共同進(jìn)步。

1. 習(xí)題講解

1.1 題目

上篇最后留下了這樣一道題目,用代碼打印出下面這幅圖。

菱形

1.2 分析

這個(gè)圖形共31行,可以分成兩個(gè)部分。上半部分是一個(gè)16行的正三角形,下半部分是一個(gè)15行的倒三角形。三角形的繪制方法我們上一篇已經(jīng)講過(guò)了,很容易,我們可以寫(xiě)出下面這段代碼。

int main()
{
    int i, j;
    int n;
    // 正三角形
    for (i = 0; i < 16; i++)
    {
        for (j = 0; j < 15 - i; j++)
            printf(" ");
 
        for (j = 0; j < 2 * i + 1; j++)
            printf("*");
    
        printf("\n");
    }

    // 倒三角形
    for (i = 0; i < 15; i++)
    {
        for (j = 0; j < i + 1; j++)
            printf(" ");
    
        for (j = 0; j < 2 * (15 - i) - 1; j++)
            printf("*");
    
        printf("\n");
    }

    return 0;
}

自己執(zhí)行一下這段代碼,功能倒是實(shí)現(xiàn)了,但是兩部分用兩組for循環(huán)實(shí)在有些累贅。把這段代碼進(jìn)行優(yōu)化,得到最終結(jié)果。

1.3 答案

#define LINE 31

int main()
{
    int i, j;
    int n;
    for (i = 0; i < LINE; i++)
    {
        if (i <= LINE / 2)
            n = i;
        else
            n = LINE - i - 1;

        for (j = 0; j < (LINE / 2 - n); j++)
            printf(" ");

        for (j = 0; j < 2 * n + 1; j++)
            printf("*");

        printf("\n");
    }

    return 0;
}

請(qǐng)大家仔細(xì)研讀這段代碼,有問(wèn)題歡迎探討。

2. 例題

今天的例題也不算很難,是之前微信中朋友們提問(wèn)中相當(dāng)簡(jiǎn)單的一個(gè)題目,重點(diǎn)在于幫助大家了解程序設(shè)計(jì)的基本思路。題目如下:

請(qǐng)編程計(jì)算出x + 2y + 3z = 100這個(gè)方程的所有解。

3. 分析

遇到這種問(wèn)題,我們需要有一個(gè)基本的思想就是窮舉出所有的可能,就像密碼試錯(cuò)一樣。我們假設(shè)x,y,z的范圍是0~100,那么總共有100 * 100 * 100種組合。只要我們依次判斷所有的組合就能找到答案。這種排列組合有一個(gè)最基本的方法就是三重循環(huán)。

4. 答案

int main()
{
    int x, y, z;

    for (x = 0; x < 101; x++)
        for (y = 0; y < 101; y++)
            for (z = 0; z < 101; z++)
                if (x + 2 * y + 3 * z == 100)
                    printf("x = %d, y = %d, z = %d\n", x, y, z);
    return 0;
}

執(zhí)行結(jié)果如下:

執(zhí)行結(jié)果

當(dāng)然,這個(gè)程序還有繼續(xù)優(yōu)化的空間,x的取值范圍0100,y的取值范圍050,z的取值范圍是0~34。這樣就能大大提高程序運(yùn)行的效率。請(qǐng)大家自己實(shí)現(xiàn)。

5. 課后練習(xí)

周末了,今天的練習(xí)題給點(diǎn)難度。請(qǐng)大家試著編程完成打印楊輝三角。如下圖:

此圖片來(lái)源于網(wǎng)絡(luò)

我是天花板,讓我們一起在軟件開(kāi)發(fā)中自我迭代。
如有任何問(wèn)題,歡迎與我聯(lián)系。


上一篇:21天C語(yǔ)言代碼訓(xùn)練營(yíng)(第一天)
下一篇:21天C語(yǔ)言代碼訓(xùn)練營(yíng)(第三天)

最后編輯于
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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