• 7

[求助]程式設計 畫星星???

*****
****
***
**
*
解答
For I = 1 To N
For J = 1 To (N + 1 - I)
Picture1.Print "*";
Next J
Picture1.Print
Next I





---
有VB高手嗎

可以幫我解這三題嗎?
GO!MOBILEO!
for(i=5;i>0;i--)
printf("%.*s\n",i,"*****");

%3.2f =印出 ###.## 的浮點數... 3 表示向右對齊3位, 不足的話補空白.
若是 小數 3.1415926 -> 會印出 "^^3.14" ( '^' 為空白)
也就是說, '.' 後面的數字會決定要印出幾位數.
'*' 用在'.' 點之後可以讓下一個引數代入這個數字中.
同樣套用在字串中: %3.2s (s="ABCDEF") 會印出 " AB"

for(i=5;i>0;i--)
printf("%.*s\n",i,"*****");
第1次, i=5, 代入*中, 則為 %.5s, 印出 "*****" 5個*號
第2次, i=4, 代入*中, 則為 %.4s, 印出 "*****" 4個*號
第3次, i=3, 代入*中, 則為 %.3s, 印出 "*****" 3個*號
第4次, i=2, 代入*中, 則為 %.2s, 印出 "*****" 2個*號
第5次, i=1, 代入*中, 則為 %.1s, 印出 "*****" 1個*號
結果變成了:
*****
****
***
**
*
若再改寫一下:
for(i=5;i>0;i--)
printf("%5.*s\n",i,"*****");

加個5, 就會反過來印了.


http://www.math.thu.edu.tw/~aki/data/printf.pdf
Hi libraleu 你好
你真是高手阿, 感謝你的回答
wesley
多翻一下 " TURBO C 函式總整理" 就可以了.

以前有一本 "BORLAN C/C++ 函式總整理" 有兩大本, 1千多頁.....

因為那時太貴沒錢買, 所以買了一本較便宜的...
tenyi wrote:
BTW,main的傳回值請用int,void是msdos錯誤的寫法。(恕刪)


這要看toolchain特性跟撰寫程式的性質
並非是msdos下的錯誤寫法

main 的 return 是給母行程參考
non-os的情況下並沒有 shell 或 command 之類的東西
程式執行也可能沒有母行程
甚至 compiler 不允許 main 改用 void 以外的宣告

standia01 wrote:
for( int i=0; i<5; ++i )
fprintf( stdout, "*****\n" +i );


這個寫法倒是很直接...等同 "*****\n"[i]
效率也比 printf 內帶 * 方式好
而且附帶一點...每家toolchin的printf不見得format會相同

話說回來...不帶指標的寫法....只考慮 '*' 跟 '\n' 的ASCII數值取一個還是可以做到
但用 printf 的 formating output 方式還是脫不了指標

至於單一變數....這我到還沒想到...不過應該可以找到這樣規則的f(x)才對
我是這樣考慮
55 54 53 52 51 50
44 43 42 41 40
33 32 31 30
22 21 20
11 10
想辦法產生上面的數列...被10整除的輸出 '\n' 其餘則是 '*'
i 數值的變化有兩種 -1 (i!=0) 跟 -10 (i==0)
不過不能用到 if 也就表示 ? 運算也不能用
同 '*' 跟 '\n' 的處理 ......根據 i 的狀態選擇 -1 or -10 還是可以用一般運算式表示出來
阿福仔仔 wrote:
這要看toolcha...(恕刪)

嗯, 你這篇有說到重點, void的解釋很正確. 至於"*****"+i 一類的寫法要看授課老師的認定, 要我的話嘛, "*****"-->算是用到陣列, "+i"算是用到指標. 所以, 還要看老師教了些什麼, 才能判斷倒底是想讓學生怎麼做.
至於之前嘛, printf("%.*s\n", i, "*****")也是類似, 由於C本身沒"字串"這種格式, 因此"*****"都算是放在陣列裡(即便只是記憶體當中暫時的地方, 還是依陣列格式存方). 當然, 也許老師沒那麼挑, 把它認定為是某種"常數"也說不定.
公喵不帥, 母喵不愛. 公喵愈壞, 母喵愈愛. 不帥的公喵想要母喵愛, 就只好學壞.
其實若要這樣嚴格的説明"*****" 是陣列或指標,

那就不用寫程式了.

你知道要印出一個字元在螢幕上要怎麼做嗎?

首先, 要在螢幕上顯示字元表示是在顯示記憶體上填入字元,

要怎麼填入? 就是有一個指標指向顯示記憶體, 然後再放入,

這樣就有用到指標了....





libraleu wrote:
其實若要這樣嚴格的&...(恕刪)


所以這是題目語病的問題

C 語言的特性中指標是一個很大的特點
尤其 %.*s 這個 format 就是用到指標概念
%s 在 printf 的參數就是給字串指標
當然扣除這一點...字串對齊輸出方式就跟指標沒有關係了

至於 "*****"+i 更不用說了
完全是字串指標索引的概念

不過講到螢幕要顯示字元就有點扯遠了
這邊要提的應該是語言上指標的概念
如果用的是java之類的語言....原生設計上也談不到指標
請樓主公佈一下老師心目中的正解吧.....

libraleu wrote:
請樓主公佈一下老師心...(恕刪)

其實呢, 看那麼多人寫的, 你寫的算很好的了. 我想表達的是樓主原先說的題目定義有點小問題, 若說不准用指標與陣列, 這個在C的概念裡面是很難躲掉的..若說成是限定用一個for()以及printf()且不准使用recursive, if(), char []以及*的話, 那倒比較說的過去了.
公喵不帥, 母喵不愛. 公喵愈壞, 母喵愈愛. 不帥的公喵想要母喵愛, 就只好學壞.
  • 7
內文搜尋
X
評分
評分
複製連結
請輸入您要前往的頁數(1 ~ 7)
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?