stringingrid函式會在乙個指定大小的格仔中列印指定的字串。 要求字串在水平、垂直兩個方向上都居中。 如果字串太長,就截斷。 如果不能恰好居中,可以稍稍偏左或者偏上一點。
下面的程式實現這個邏輯,請填寫劃線部分缺少的**。
#include
#include
void
stringingrid
(int width,
int height,
const
char
*s)printf
("|");
printf
("%*s%s%*s"
,_______________________________)
;//填空
printf
("|\n");
for(k=
(height-1)
/2+1
;k1;k++
)printf
("+");
for(i=
0;i2;i++
)printf
("-");
printf
("+\n");
}int
main()
{stringingrid(20
,6,"abcd1234");
return
0;
對於題目中資料,應該輸出:
注意:只填寫缺少的內容,不要書寫任何題面已有**或說明性文字。
由**行
strcpy
(buf,s)
;
我們知道s,拷貝給了buf
;
我們需要填空的**為printf("%*s%s%*s",_______________________________); //填空
。
這裡我們要清晰*s
的用法,即引數為2
,("*s",數量,實際填充字元)
因為我們要得到上圖的造型,則我們先嘗試填寫,printf("%*s%s%*s",10," ",buf,10," ");
得到下圖
於是此時我們只需要減少兩邊的空格量即可。
那麼一邊空格的長度就應該為width - strlen(buf) - 2) / 2
//即寬度減去字元長再減去兩個便|
字元再除以2
printf
("%*s%s%*s"
,(width -
strlen
(buf)-2
)/2,
" ", buf,
(width -
strlen
(buf)-2
)/2,
" ")
;
藍橋杯第六屆 省賽C B組 答案
第一題ans 52488 include using namespace std bool check int x return true int main cout cnt endl return0 第二題 ans 2017 08 05 include using namespace std in...
第六屆藍橋杯省賽C B組 星系炸彈
在x星系的廣袤空間中漂浮著許多x星人造 炸彈 用來作為宇宙中的路標。每個炸彈都可以設定多少天之後 比如 阿爾法炸彈2015年1月1日放置,定時為15天,則它在2015年1月16日 有乙個貝塔炸彈,2014年11月9日放置,定時為1000天,請你計算它 的準確日期。請填寫該日期,格式為 yyyy mm...
第六屆藍橋杯省賽C B組 生命之樹
生命之樹 在x森林裡,上帝建立了生命之樹。他給每棵樹的每個節點 葉子也稱為乙個節點 上,都標了乙個整數,代表這個點的和諧值。上帝要在這棵樹內選出乙個非空節點集s,使得對於s中的任意兩個點a,b,都存在乙個點列 使得這個點列中的每個點都是s裡面的元素,且序列中相鄰兩個點間有一條邊相連。在這個前提下,上...