一道计算机二级C++的题,请高手解答!急!!

2009年3月(34)假定下列语句都是程序运行后首次执行的输出语句,其中输出结果与另外三条语句不同的语句是A)cout<<setfill('*’)<<123<<setw(... 2009年3月

(34)假定下列语句都是程序运行后首次执行的输出语句,其中输出结果与另外三条语句不同的语句是
A)cout<<setfill('*’)<<123<<setw(9)<<321;
B)cout<<setfill(‘*’)<<setw(6)<<left<<123<<setw(6)<<right<<321;
C)cout<<123<<setfill(‘*’)<<setw(6)<<321;
D)cout<<setfill(‘*’)<<SetW(9)<<left<<123<<321;
参考答案是:C

不明白,为什么选C,请高手帮忙解释一下!
您好!jhb86253817 !请问为什么setw(9)占9格输出6个*啊?
我知道“setfill是填充字符,setw设置输出的宽度”,个人感觉应该是sete(12)啊!麻烦您,说详细点儿,我这人有点笨!
展开
 我来答
黄邦勇帅哥哥
2010-08-19 · TA获得超过3989个赞
知道大有可为答主
回答量:1199
采纳率:100%
帮助的人:581万
展开全部
setw()函数表示的是输出字符的宽度,不是指的填充或者空格的宽度,也就是说你使用cout<<setw(9)<<123;之后,如果是右对齐则在123前面有6个空格,整个输出占9个字符,并不是前面有9个空格或者填充符,如果是9个空格或者填充符,则输出的就是不9个字符宽了,而是12个字符宽,而且这样也根本如法控制输出的宽度,比如你可以cout<<setw(9)<<12345;如果前面是9个空格或填充符,则实际输出就占了14个字符了。

注意setw(9)是设置的下一次输出的字符宽度,并不是设置的前一次输出的字符宽度,而且再一次输出时则会还原为默认的宽度

下面逐一解释答案
cout<<setfill('*’)<<123<<setw(9)<<321;
首先设置使用'*'填充空白处,然后输出123,然后再设置下一次输出的字符宽度为9,注意setw(9)是设置的下一次输出的字符宽度,并不是设置的前一次输出的字符宽度,而且再一次输出时则会还原为默认的宽度,也就是输出123时不是9个宽度,而输出321时则必须要有9个字符宽度,因为默认输出是右对齐的,因此321被输出到宽度的最右面,这样的话在321的前面就有6个空白,因此使用'*'填充,结果就输出123******321

cout<<setfill(‘*’)<<setw(6)<<left<<123<<setw(6)<<right<<321;
同理,第一个setw(6)表示输出123时要占据6个字符宽度,空白处使用*填充,而且输出123时使用左对齐(左对齐就意味着输出的数据在整个字符宽度的最左边,而空白或者填充字符自然就在这些数据的右边了)因此输出123,然后在数字123的右边填充3个*,同理输出321是在右边,然后在321的左边(也就是前面)填充3个*,因此结果就是123******321

cout<<123<<setfill(‘*’)<<setw(6)<<321;
这一个输出的结果很明显是123***321,这里不解释了

cout<<setfill(‘*’)<<SetW(9)<<left<<123<<321;
这一个解释一下,这里要特别注意setw()只对后一次的输出有效,再一次输出就会被还原为默认值,因此这里的setw(9)只对输出的数字123有效果,对输出的数字321则是无效的,而setw(9)后面的left并不是输出内容,而是在为输出设置格式,所以cout<<left并不算输出,并不会影响到setw()函数的设置。因此这道题在输出123时是使用的左对齐,也就是123被输出到左边占据9个字符宽度,因此会被填充6个*,然后再输出321,这里的321占据的宽度被还原为了默认值,因此只占3个宽度,所以结果就是123******321

综上所述,只有答案C的输出不一样,所以选C

补充一点:应用控制符之后的内容将一直按照该格式输出,除非重新对格式进行设置,题目中的left和right是属于控制符。而setfill和setw是属于头文件iomanip中的内容,而setfill()的设置会一直保持有效,直到被重新设置;但setw()的设置则只在下一次输出时有效,再一下次输出时系统将还原为默认的宽度。
jhb86253817
2010-08-19 · 超过15用户采纳过TA的回答
知道答主
回答量:84
采纳率:0%
帮助的人:53.4万
展开全部
setfill('*’)是把空格填充成*
A 先输出123,setw(9)是一共占9格,默认右对齐,所以又输出6个*和321
B left表示左对齐,所以先输出123和3个*,right表示右对齐,所以再输出3个*和321
C 先输出123,再输出3个*和321
D 因为输了left,所以这一次左对齐,先输出123,再输出6个*,然后又输出321
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huangkehan
2010-08-19 · TA获得超过111个赞
知道答主
回答量:52
采纳率:0%
帮助的人:76.8万
展开全部
解释:
setfill是设置填充填充字符。
setw设置输出的宽度。
它们的只作用表现在紧接着输入的字符串上。这个宽度是填充后的宽度。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
墨夷忆之0Ga5af
2010-08-19 · 超过24用户采纳过TA的回答
知道答主
回答量:102
采纳率:0%
帮助的人:0
展开全部
就像一楼说的宽度是包括后面输出字符在内的总宽
所以
A:123******321
B:123******321
C:123***321
D:123******321 注意是紧跟的那个
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式