两个关于C语言的问题。

第一道题:int x=3; do{printf("%d\n",x-=2);}while(!(--x));输出值为什么是1和-2?
第二道题:for(i=1;i++<4;); 变量i的值为什么变成了5,它的计算是怎么样的?

望高手不吝赐教,不胜感激。

1、在x=3的状态下进入do循环,第一次运行printf语句,首先使 x -= 2 ,x的内容减掉2,输出x的当前值,所以输出了1。接着进行循环条件判断,先进行 --运算,使x的内容变为0,!0的计算结果为真,循环继续进行。第二次运行printf首先 x-=2 即 x = 0-2,使x的内容变为-2,并被输出。当x=-2 时进行循环执行条件的判定,!(-2) 的计算结果为假(所有非零的数表示真),所以循环停止。输出的两次,为:1和-2。

2、i++ 这个表达式的计算方式是先取后+,产生的计算结果使i的当前值,然后i再进行+1运算。所以当i的内容是3时,i++<4 的计算结果为真,并且同时使i的内容变为4,循环继续,当循环下一次运行 i++<4 时i++产生的表达式的计算结果是4,同时进行+1运算使i的内容变为5,然后用i++的表达式结果4进行关系运算,4<4 关系运算计算结果为假,使循环停止。所以循环停止时,变量i的内容是5。

这题出的真够绕的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-11-02
第一题:
打印1你应该知道的,说为什么是-2吧。
因为在while时,是先判断,然后在对X进行减1,所以第二次do时,x已经等于0,所以打印的结果为-2了。

第二题:
i++<4是先进行i<4的比较,然后i才加1.
在最后一次比较时,i=4,所以不进行循环,但是i还是自加1,所以等于5

两个个关于C语言循环跳出的问题
1、goto:用于模块之间的跳转,次跳转功能强大,可实现在程序内部任意位置跳转。在C语言中这种形式的调用通常发生在菜单的制作上,用于多个模块之间进行切换,可以嵌套使用。但是这种编程方式并不提倡使用,在跳转过程中可能会带来不可预知的BUG,应尽量避免使用;2、continue:一般用于加速循环,一般在循环体内...

两个关于C语言的问题。
1、在x=3的状态下进入do循环,第一次运行printf语句,首先使 x -= 2 ,x的内容减掉2,输出x的当前值,所以输出了1。接着进行循环条件判断,先进行 --运算,使x的内容变为0,!0的计算结果为真,循环继续进行。第二次运行printf首先 x-=2 即 x = 0-2,使x的内容变为-2,并被输出。当x...

关于C语言的两个问题
1.D. stu[0].score 是正确的,stu 是数组,stu[0] 是结构,stu[0].score 可以访问结构成员。2.(B)*p.num 不正确,因为 . 的优先级更高,*p.num 会被解析为 *(p.num),而 p 是结构指针,应该用 (*p).num 来访问结构成员。

两个关于C语言的问题
第一题:应该这样看 if(a>c) b=a;a=c;c=b;如果你明白可追问 第二题:首先,在 switch(x) {} 中,case 0与case 1之间没有break;所以执行完case 0后面的内容后还会执行case 1后面的内容,这就是为什么会输出 #,因为执行了default : printf ("#");其次,* 这个是得不到的,除...

亲,关于C语言的两个问题,100分悬赏!!!
原文地址:http:\/\/bbs.bccn.net\/thread-316069-1-1.html 第二个问题:对于十六位机器而言,如果是int型,则c是-32768。最高位为符号位。d=32767 说明:32767十六进制0x7fff这是十六位表示的最大有符号正数了 32768十六进制0x8000符号位是1,自然就是负数了 正数和负数换算就是二进制位按位取反...

两个个关于C语言循环跳出的问题?
通常在C语言里面使用的跳转语句主要有四种: goto continue break return 先将四种都为你做一个简单的介绍: goto : 用于模块之间的跳转,次跳转功能强大,可实现在程序内部任意位置跳转,调用形式为: A: 模块一;\/\/在这里A是一个标示符,常用大写字母表示,表示跳转后程序执行的起始位子 模块二...

有关c语言的两道问题
第6题 以下关于数组的描述正确的是 本题2分 C、数组大小固定,所有元素的类型必须相同 第7题 设有变量int x=0,y=1,z=1,则运行表达式:x=y++>z--后,x,y,z的值分别是 本题2分 D、0,2,0

关于数据结构(C语言版)的两个问题
如果不为空则弹出栈顶元素,将`top`减一。在遍历结束后,检查`stack`是否为空。如果为空,表示所有括号均匹配,返回1;否则表示存在未匹配的括号,返回0。通过上述程序,可以实现对给定字符串中括号匹配性的判断,对于数据结构(C语言版)中的括号匹配问题,此方法提供了一种简洁、高效的解决方案。

关于C语言 memcpy的问题
两个问题:1、readfile参数用整数指针并不能将分配的内存地址带出该函数,应该用指针的指针才能带出;2、没有地方等程序执行完,否则除非在命令行状态,否则看不到数据。修改如下:void readfile(int **pa){ int a[3] = {1, 2, 3};pa = (int*)calloc(3, sizeof(int));memcpy(*pa, a...

c语言常见问题有哪些?
但C语言中,“=”是赋值运算符,“==”是关系运算符。如:if (a==3)a=b;前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。5.忘记加分号。分号是C语句中不可缺少的一部分,语句末尾必须有分号。a=1 b=2 编译时,编译程序在“a=...

相似回答
大家正在搜