藍橋杯2015 C t4 格仔中輸出

2022-02-28 03:02:02 字數 2004 閱讀 7694

這題考冷門知識點,提前科普:

下面這段來自c++ reference的printf(),*可作為乙個設定輸出寬度的佔位符:

翻譯了一下:

(number) 要列印的最小字元數。如果要列印的值小於此數字,則結果將用空格填充。即使結果更大,也不會截斷該值。

*               寬度不是在格式字串中指定的,而是作為必須格式化的引數前面的附加整數值引數指定的。

可能還是看不懂,舉個例子:

printf ("

width trick: %*d \n

", 5, 10);

輸出結果:width trick:    10

這裡的*相當於乙個設定寬度的數字的佔位符,表示後面的這個%d要佔多少個字元。我們可以數一下,10前面有4個空格。

下面我們來看**:

1/*2

格仔中輸出

3stringingrid函式會在乙個指定大小的格仔中列印指定的字串。

4要求字串在水平、垂直兩個方向上都居中。

5如果字串太長,就截斷。

6如果不能恰好居中,可以稍稍偏左或者偏上一點。

7下面的程式實現這個邏輯,請填寫劃線部分缺少的**。

8對於題目中資料,應該輸出:

9+------------------+

10| ? ? ? ? ? ? ? ? ?|

11| ? ? abcd1234 ? ? |

12| ? ? ? ? ? ? ? ? ?|

13| ? ? ? ? ? ? ? ? ?|

14+------------------+

15*/

16 #include 17 #include

18void stringingrid(int width, int height, const

char*s)

1934

35 printf("|"

);36

37//

printf("%*s%s%*s",--------------------------------------);

//填空

3839

40 printf("

|\n"

);41

42for(k=(height-1)/2+1; k1; k++)

4748 printf("+"

);49

for(i=0;i2;i++) printf("-"

);50 printf("

+\n"

); 51}

5253

54int

main()

55

view code

可以先把要填空的地方注釋掉執行一下:

很明顯,我們要填的就是居中列印字串的**。

經過上面對*的分析,我們大概已經能看懂這個 "

%*s%s%*s

" 的意思了,就是要列印的字串前需要有多少空位,後面又需要有多少空位。

先試著填兩個數字上去: printf("

%*s%s%*s

",10,"",buf,10,""); ,執行一下:

數了下,前面10個空格,後面10個空格。大概能看明白了,因為要居中,其實左右邊的空格數都是一樣的,就是寬度-2-字串長度(-2是有兩個'|')

填空: printf("

%*s%s%*s

",(width-2-strlen(buf))/2,"",buf,(width-2-strlen(buf))/2,"");

2015藍橋杯 4 格仔中輸出

題目描述 stringingrid函式會在乙個指定大小的格仔中列印指定的字串。要求字串在水平 垂直兩個方向上都居中。如果字串太長,就截斷。如果不能恰好居中,可以稍稍偏左或者偏上一點。下面的程式實現這個邏輯,請填寫劃線部分缺少的 include include void stringingrid in...

藍橋杯 格仔中輸出

參考 格仔中輸出 stringingrid函式會在乙個指定大小的格仔中列印指定的字串。要求字串在水平 垂直兩個方向上都居中。如果字串太長,就截斷。如果不能恰好居中,可以稍稍偏左或者偏上一點。下面的程式實現這個邏輯,請填寫劃線部分缺少的 如圖 include include void stringin...

格仔中輸出 藍橋杯

格仔中輸出 stringingrid方法會在乙個指定大小的格仔中列印指定的字串。要求字串在水平 垂直兩個方向上都居中。如果字串太長,就截斷。如果不能恰好居中,可以稍稍偏左或者偏上一點。下面的程式實現這個邏輯,請填寫劃線部分缺少的 public static void stringingrid int...