C语言的一题目完全不知道怎么来做! 回的好加分

来源:百度知道 编辑:UC知道 时间:2024/05/20 11:04:12
以下C程序,正确的运行结果是____
main()
{ long y=-34567;
printf(“y=%-8ld\n”,y);
printf(“y=%-O8ld\n”,y);
printf(“y=%O8ld\n”,y);
printf(“y=%+8ld\n”,y);}

A.y=两个空格-34567
y=-两个空格34567
y=-0034567
y=-34567

B y=-34567 (这里偶觉得应该有两个空格可答案上是空白的)
y=-34567
y=-0034567
y=+一个空格-34567

C y= -34567
y=-34567
y=-0034567
y=两个空格-34567

D y=两个空格-34567
y=-0034567
y=0034567
y=+34567

首先不明白的地方是 到底是-零8ld 还是-字母o8ld 不明白
若是字母的话,那应该是八进制输出啊,那怎么还是34567类

然后是为什么会有0034567 什么意思
这题目把我给蒙了
我只知道第一个是-34567(两个空格)
后面那几个什么意思都不知道

望高手不看选择项,直接能给出自己的分析和答案 最好
谢谢各位了

大哥程序应该这样写
#include<stdio.h>

int main()
{ long y=-34567;
printf("y=%-8ld\n",y);
printf("y=%-08ld\n",y);
printf("y=%08ld\n",y);
printf("y=%+8ld\n",y);
getch();
return 0;
}
答案是这样:
y=-34567
y=-34567
y=-0034567
y=两空格-34567

printf("y=%-8ld\n",y);首先你知道这里正负号的意思吗?是使打印出来的东西左对齐(-)或右对齐(+),这ld前面的8代表的是域宽,就是说打印出来的数占的宽度是几。

而为什么有的有用零填充,而有的没有呢?是因为有些8前面没有写0,
如printf("y=%08ld\n",y);它是右对齐,剩下的位置以0填充。像第三答案 y=-0034567填充了在前面数值大小是不受影响的。

但像这个printf("y=%-08ld\n",y); 向左对齐,如果剩下的两位填上0的话,那数值就被改变了,变成-3456700,因此它打印出来还是
y=-34567.

没有写0的,向右对齐的话,就会以空格填充。
像最后一个。y=两空格-34567.

如果我语言不够明白。只能等待高手了。

答案选C,通过vc6.0运行验证.分析如下:
1.你不明白的地方是-零8ld,不是-字母8ld.如果是字母,那么它会首先和%结合,输出八进制,而轮不到ld.
2.0034567 什么意思?输出格式为%零8ld,那么是右对齐,那个零就是让高位补零,满足域宽为8.也就是说,如果以该格式输