2015蓝桥杯初赛(省赛)- C语言B组 - 程序填空题 - 5-1

题目+答案

StringInGrid函数会在一个指定大小的格子中打印指定的字符串。 要求字符串在水平、垂直两个方向上都居中。 如果字符串太长,就截断。 如果不能恰好居中,可以稍稍偏左或者偏上一点。

下面的程序实现这个逻辑,请填写划线部分缺少的代码。 对于题目中数据,应该输出:
2015蓝桥杯初赛(省赛)- C语言B组 - 程序填空题 - 5-1_第1张图片

#include 
#include 
void StringInGrid(int width, int height, const char* s)
{
	int i,k;
	char buf[1000];
	strcpy(buf, s);
	if(strlen(s)>width-2) buf[width-2]=0;	
	printf("+");
	for(i=0;i<width-2;i++) printf("-");
	printf("+\n");	
	for(k=1; k<(height-1)/2;k++){
		printf("|");
		for(i=0;i<width-2;i++) printf(" ");
		printf("|\n");
	}	
	printf("|");	
	printf("%*s%s%*s",/*填空*/(width-strlen(s))/2-1," ",s,(width-strlen(s))/2-1," "); 
	printf("|\n");	
	for(k=(height-1)/2+1; k<height-1; k++){
		printf("|");
		for(i=0;i<width-2;i++) printf(" ");
		printf("|\n");
	}		
	printf("+");
	for(i=0;i<width-2;i++) printf("-");
	printf("+\n");	
}
int main()
{
	StringInGrid(20,6,"abcd1234");
	return 0;
}

思路

把这个代码复制到dev上,由
printf("%*s%s%*s",/*填空*/);
%*s表示指定长度;控制这个字符串的长度
%s表示字符串;
即可以看出要填三个数,两个控制长度,一个字符串;
本题就定义了一个字符串s即填入在这里插入代码片
printf("%*s%s%*s", ,s, );
先把这条代码变成printf("%s",s);
2015蓝桥杯初赛(省赛)- C语言B组 - 程序填空题 - 5-1_第2张图片可以看出,还有字符串没有居中,少了很多空格
那么%*s就是做这个用处的了
注意

%*s的输出格式是:
printf("%*s",10," ");

可以看出,长度是指空格的长度,即
width-strlen(s))/2-1," "
width表示整个长度,减去字符串长度后要注意还有两边的框框占了一个格子也要减去

以上皆是个人做题思路,刚学编程,欢迎多多指教

你可能感兴趣的:(蓝桥杯)