以下程序执行输出结果第一行为?第二行为?

来源:百度知道 编辑:UC知道 时间:2024/05/22 21:41:49
#include<stdio.h>
#define p1 1
#define p2 2
void main()
{
int x;
for (x=5;x<=10;x++)
{ switch(x%4)
{ case p1 :printf ("%d",x++);
case p2 :x++;break;
default :x++;
}
printf ("%o\n",x);
}
}
为什么?能说清楚些吗?
大家交流嘛!你看我都没的什么分的?!什么叫没有给予肯定啊?你在世上又得到了一个欣赏你的人!

我向你表示道歉,不该这么傲慢无礼,而且今天重新解释程序的时候才发现昨天回答有误。

我们直接看for循环:
第一次循环x=5,x%4的结果是1,所以执行第一个printf()语句,以十进制形式输出5;然后x的值变为6,由于case p1 语句块缺少break;语句,程序将继续和后续的分支语句比较,这样就到了default语句,将x的值加1,变为7。此时就跳出了switch语句的作用域,执行第二个printf()语句。以八进制形式输出7(此时它和十进制的7等价)并换行。

第二次进行for循环开始的时候,x的值为7,将其加1后进入循环,x%4的结构不满足case p1和case p2,所以x将自增1,变为9。第二个printf()语句以八进制形式输出9。将9化为二进制:00,001,001,从右到左每三位转化成八进制,就是11。要是这样解释你还不懂,还是回去翻翻书。

同第二次,第三次进入循环体的时候x=10,x%4=2,转到第二个case语句,使x自增1并跳出switch语句的作用域,执行第二个printf()语句以八进制形式输出11。即13.(00001011=>13)

..........我说的不含糊啊。
我可以给你更详细的解释,但你得给分 ^_^,虽然我分数并不是我回答问题的目的,但你总得对回答者给予肯定。

57
11
13

第一行的5是第一个printf()语句以十进制的形式输出的,第一行的7是第二个printf()语句以八进制的形式输出的。

第二行的11是第二个printf()语句以八进制的形式输出的。

第三行的13第二个printf()语句以八进制的形式输出的