C語言代碼訓練營(2)
阿新 • • 發佈:2017-06-01
周末 int main 基本 之前 lin 例題 鏈接 params ![技術分享](http://upload-images.jianshu.io/upload_images/145902-433474a858a6a16a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
菱形![技術分享](http://upload-images.jianshu.io/upload_images/145902-c587f6e5178e3375.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
執行結果
上一篇的評論中,大家反饋評論中貼代碼無法排版。我們改一下規則,大家可以把自己實現的代碼發布在自己的簡書博文中,之後把鏈接貼在評論中。這樣也方便大家日後追溯。
當然,也可以直接發郵件給我。希望大家堅持打卡,共同進步。
1. 習題講解
1.1 題目
上篇最後留下了這樣一道題目,用代碼打印出下面這幅圖。
![技術分享](http://upload-images.jianshu.io/upload_images/145902-433474a858a6a16a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
菱形
1.2 分析
這個圖形共31行,可以分成兩個部分。上半部分是一個16行的正三角形,下半部分是一個15行的倒三角形。三角形的繪制方法我們上一篇已經講過了,很容易,我們可以寫出下面這段代碼。
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;
}
自己執行一下這段代碼,功能倒是實現了,但是兩部分用兩組for循環實在有些累贅。把這段代碼進行優化,得到最終結果。
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;
}
請大家仔細研讀這段代碼,有問題歡迎探討。
2. 例題
今天的例題也不算很難,是之前微信中朋友們提問中相當簡單的一個題目,重點在於幫助大家了解程序設計的基本思路。題目如下:
請編程計算出x + 2y + 3z = 100這個方程的所有解。
3. 分析
遇到這種問題,我們需要有一個基本的思想就是窮舉出所有的可能,就像密碼試錯一樣。我們假設x,y,z的範圍是0~100,那麽總共有100 * 100 * 100種組合。只要我們依次判斷所有的組合就能找到答案。這種排列組合有一個最基本的方法就是三重循環。
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;
}
執行結果如下:
![技術分享](http://upload-images.jianshu.io/upload_images/145902-c587f6e5178e3375.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
執行結果
當然,這個程序還有繼續優化的空間,x的取值範圍0~100,y的取值範圍0~50,z的取值範圍是0~34。這樣就能大大提高程序運行的效率。請大家自己實現。
5. 課後練習
周末了,今天的練習題給點難度。請大家試著編程完成打印楊輝三角。如下圖:
![技術分享](http://upload-images.jianshu.io/upload_images/145902-e3bd52ee03e24d7e.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
學習過程中遇到什麽問題或者想獲取學習資源的話,歡迎加入學習交流群
639368839,我們一起學C/C++!
C語言代碼訓練營(2)