鐵之狂傲
標題:
程式設計高手 c++ 救我
[列印本頁]
作者:
正義之拳
時間:
07-6-26 13:42
標題:
程式設計高手 c++ 救我
對不起不起~我想麻煩各位,因為很急...明天中午就要了.....= =
不知可否請大大幫我解釋一下
這個程式的一些東西 (紅色部份是我不懂的)
/* 一棵聖誕樹的畫法可以是一個多層的實心等腰三角形疊在一起,
最上層的三角形邊長最小,越往下的三角形邊長越大;
每一個三角形的底部和下一個三角形的頂點重疊在一起。
最底部的三角形下面畫一個實心長方形作為樹幹。
寫一個 C 語言的程式畫一棵如下所定義聖誕樹:
1. 聖誕樹的層數在 2 和 5 之間 (含),
2. 頂端的三角形邊長在 3 和 6 之間 (含),
3. 每一個下面三角形的邊長比其上端三角形大 1 至 5 點 (含),
4. 樹幹的寬是 3 和 9 之間的奇數 (含),
5. 樹幹的高在 4 到 10之間 (含),
6. 使用 '#' 作為三角形邊的點和 [email=]'@'[/email]作為三角形內部的點,
7. 使用 '|' 作為樹幹的點。
*/
#include <stdio.h>
#include <stdlib.h>
//畫樹函式
void printChar(int n, char c)
{
int i;
for (i = 0; i < n; i++) printf("%c", c);
}
int main(void) {
const int leading = 10;
int layer, L, side, growth, theight, twidth, n, i;
// 讀入層數
do {
printf("\n Enter the number of layers (2 to 5): ");
scanf("%d", &layer);
} while ((layer < 2) || (layer > 5));
// 讀入頂端三角形的邊長
do {
printf("\n Enter the side of top layer (3 to 6): ");
scanf("%d", &side);
} while ((side < 3) || (side > 6));
// 讀入下一個三角形邊長增加的點數
do {
printf("\n Enter the growth of each layer (1 to 5): ");
scanf("%d", &growth);
} while ((growth < 1) || (growth > 5));
// 讀入樹幹的寬度
do {
printf("\n Enter the trunk width (odd number, 3 to 9): ");
scanf("%d", &twidth);
} while ((twidth < 3) || (twidth > 9) || (twidth % 2 == 0));
// 讀入樹幹的高度
do {
printf("\n Enter the trunk height (4 to 10): ");
scanf("%d", &theight);
} while ((theight < 4) || (theight > 10));
printf("\n\n");
//樹葉
for (L = 0; L < layer; L++) {
n = side + growth * L;
if (L==0)
{
printChar(leading + n-1+(layer-L-1)*growth, ' ');
printChar(1, '#');
printf("\n");
}
for (i = 1; i < n-1; i++) {
printChar(leading + n-i-1+(layer-L-1)*growth, ' ');
printChar(1, '#');
printChar(2*i-1,
'@'
);
printChar(1, '#');
printf("\n");
}
printChar(leading + (layer-L-1)*growth, ' ');
printChar(2*n-1, '#');
printf("\n");
}
//樹幹部分
for (i = 0; i < theight; i++) {
printChar(leading + (layer-1)*growth+side-1-twidth/2, ' ');
printChar(twidth, '|');
printf("\n");
}
printf("\n");
system("pause");
return 0;
}
[
本文最後由 正義之拳 於 07-6-26 02:05 PM 編輯
]
作者:
夜月小貓
時間:
07-9-12 13:30
//畫樹函式
void
printChar
(int n, char c)
{
int i;
for (i = 0; i < n; i++) printf("%c", c);
}
首先這是可呼叫的函式
呼叫之後給他一個整數 跟 一個字元
他會依照給的數值 印出多少個給的字元
const int leading = 10;
宣告一個常數整數 名稱為leading 值為10
if (L==0)
{
printChar(leading + n-1+(layer-L-1)*growth, ' ');
printChar(1, '#');
如果L變數等於0
呼叫
printChar
給他liading的值+上後面的方程式計算(也就是說這段
leading + n-1+(layer-L-1)*growth
會給入一個整數)
後面給的
' '
字元則是空白
同理類推
下面就是給1並且給#這個字元
你其他紅色部分也都是這樣的模式....
不知道這樣說你懂不懂...不懂再問吧0.0...
歡迎光臨 鐵之狂傲 (https://gamez.com.tw/)