為了配合專題C語言從零開始半醉,今天開始一個新的專題《21天C語言代碼訓(xùn)練營》谚中。這個專題重點(diǎn)針對從零開始系列進(jìn)行練習(xí)題講解饰恕。以21天為一個周期牲览,為大家提供編程方面的實(shí)例講解墓陈。
最近,越來越多的初學(xué)者朋友在給我的郵件中提出這樣的問題:我在文章中講的東西他們都看懂了第献,但具體到自己寫代碼的時(shí)候卻完全不知道從何入手贡必。其實(shí)看懂知識點(diǎn)例程和真正學(xué)會寫代碼之間相差了好幾條街,我一再強(qiáng)調(diào)庸毫,學(xué)編程沒有捷徑仔拟,只有老老實(shí)實(shí)地敲代碼。對于文章中的例子飒赃,大家一定要達(dá)到自己能夠完整的敲出來才行利花。當(dāng)然,這里并不是要求大家死記硬背盒揉,要求的是在懂得設(shè)計(jì)思路和程序語法的基礎(chǔ)上晋被,經(jīng)過自己的二次加工后重新實(shí)現(xiàn)的過程。
在這個專題中刚盈,我們以練習(xí)為主,講解為輔挂脑,力求尋找出一種幫助大家快速提高編碼能力的新玩法藕漱。也希望朋友們緊跟我的更新速度堅(jiān)持每天做練習(xí)欲侮,大家共同進(jìn)步。
歡迎大家每天前來打卡~
訓(xùn)練營規(guī)則
- 每天出一道練習(xí)題肋联,請大家自己完成編碼
- 第二天的文章中會告訴大家一種或幾種經(jīng)典解決方法
- 完成練習(xí)的同學(xué)威蕉,歡迎大家把代碼貼在留言中
- 如果有問題,也請留言橄仍,我會找機(jī)會集中解答
希望這種手把手的方式能夠幫助大家盡快掌握C語言編程韧涨。
1. 例題
今天我們先來講解一道C語言的經(jīng)典例題,也是從零開始系列中的一道課后練習(xí)題侮繁。
請用控制臺程序繪制如下圖案虑粥。
2. 分析
這個題目是要求打印30行"*",每行打印的個數(shù)不同宪哩。通過這個信息娩贷,我們應(yīng)該立刻反映出運(yùn)用循環(huán)來完成。那么我們想想锁孟,在循環(huán)部分我們都學(xué)到了什么彬祖。
關(guān)于循環(huán),我首先會想到一些例題:
2.1 例題1
打印30個"*",每個"*"占一行品抽。
int i;
for (i = 0; i < 30; i++)
{
printf("*\n");
}
2.2 例題2
打印一行"*",個數(shù)為30
int i;
for (i = 0; i < 30; i++)
{
printf("*");
}
這兩個題目的代碼只差一個\n,結(jié)果卻完全不同储笑。掌握了這兩個例題,我們自然能夠完成下面這個例題了圆恤。
2.3 例題3
打印一個由"*"組成的30行30列的矩陣突倍。
int main()
{
int i, j;
for (i = 0; i < 30; i++)
{
for (j = 0; j < 30; j++)
{
printf("*");
}
printf("*\n");
}
return 0;
}
執(zhí)行結(jié)果如下:
我們再把例3的要求改一改,要求如下
2.4 例題4
打印30行“*”哑了。第一行打印1個“*”赘方,第二行打印3個“*”,第三行打印5個“*”弱左,... 窄陡,第三十行打印59個“*”。
在前面的程序中拆火,我們用變量i控制行的循環(huán)跳夭,變量j控制列的循環(huán)。i的范圍029们镜,j的范圍029币叹。那么在例題4中,i和j有什么樣的關(guān)系呢模狭?
找規(guī)律 | ||
---|---|---|
第一行 | i = 0; | j循環(huán)1次 |
第二行 | i = 1; | j循環(huán)3次 |
第三行 | i = 2; | j循環(huán)5次 |
... | ... | ... |
第三十行 | i = 29; | j循環(huán)59次 |
于是得到這樣一個關(guān)系:
規(guī)律 | ||
---|---|---|
第n行 | i = n - 1; | j循環(huán)2i + 1次 |
那么如何實(shí)現(xiàn)循環(huán)2i + 1次呢颈抚,就是讓j從0到2i + 1。
按照這個思路嚼鹉,可以得到下面的代碼:
#include <stdio.h>
#define LINE 30
int main()
{
int i, j;
for (i = 0; i < LINE; i++)
{
for (j = 0; j < 2 * i + 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
執(zhí)行結(jié)果如下:
這里要說一個問題贩汉,其實(shí)for循環(huán)有兩種常見形式:
for (i = 0; i < n; i++)
和
for (i = 1; i <= n; i++)
這種寫法執(zhí)行的次數(shù)相同驱富,可以相互代替。大部分C語言程序員喜歡第一種方式匹舞,因?yàn)閿?shù)組的下標(biāo)訪問是從0開始的褐鸥,這樣寫更方便。目前大家可以選擇自己喜歡的方法赐稽。
好了叫榕,回到例題中來。現(xiàn)在我們的代碼距離目標(biāo)輸出已經(jīng)很接近了姊舵,缺少的是在每行“*”之前需要輸入不同數(shù)量的空格晰绎。我們分析i和空格數(shù)量,可以得到如下關(guān)系:
每行輸出LINE - i個空格
于是蠢莺,我們得到了最終的實(shí)現(xiàn)程序寒匙。
3. 答案
#include <stdio.h>
#define LINE 30
int main()
{
int i, j;
for (i = 0; i < LINE; i++)
{
for (j = 0; j < (LINE - i); j++)
{
printf(" ");
}
for (j = 0; j < 2 * i + 1; j++)
{
printf("*");
}
printf("\n");
}
return 0;
}
運(yùn)行一下這段代碼,你會看到打印結(jié)果就是最前面的那張圖躏将。
4. 課后練習(xí)
自己編寫代碼锄弱,打印出下面這張圖。
明天會講解這個程序祸憋,請大家先做練習(xí)会宪。歡迎將自己的程序貼在留言中。
我是天花板蚯窥,讓我們一起在軟件開發(fā)中自我迭代掸鹅。
如有任何問題,歡迎與我聯(lián)系拦赠。