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

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)啊!麻烦您,说详细点儿,我这人有点笨!

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()的设置则只在下一次输出时有效,再一下次输出时系统将还原为默认的宽度。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-08-19
setfill('*’)是把空格填充成*
A 先输出123,setw(9)是一共占9格,默认右对齐,所以又输出6个*和321
B left表示左对齐,所以先输出123和3个*,right表示右对齐,所以再输出3个*和321
C 先输出123,再输出3个*和321
D 因为输了left,所以这一次左对齐,先输出123,再输出6个*,然后又输出321
第2个回答  2010-08-19
解释:
setfill是设置填充填充字符。
setw设置输出的宽度。
它们的只作用表现在紧接着输入的字符串上。这个宽度是填充后的宽度。
第3个回答  2010-08-19
就像一楼说的宽度是包括后面输出字符在内的总宽
所以
A:123******321
B:123******321
C:123***321
D:123******321 注意是紧跟的那个
相似回答