c语言疑难 .. 会的帮帮忙 .. 谢谢 .. 帮帮忙帮帮忙.. 帮帮忙 ..帮帮忙..

一 若输入5,输出结果是 _6__× 4 √ ,为什么?
main()
{ int x;
scanf("%d",&x);
if(x--<5) /*不是将5代入x,然后x<5作比较,再x--吗? 莫非是因为--的优先级 比<大,所以先--再比较?所以等于4?*/
printf("%d",x);
else printf("%d",x++);
}

二 输出结果是____ n e
main()
{ char b[]="Language";
char *p=b;
printf("%c",*(b+2));
p=p+7; /*这是p[0]的地址加7吗? 关于地址还是内容加的不懂*/
printf("%c\n",*p++);
}

三 输出结果为____ 0
main()
{ int y=10;
do{y--;}
whitle(--y); /*这意思是直到--y!=0,即y==2时,不再循环,这时是y--==2吗?*/
printf("%d\n",y--); /*然后自减两次,所以等于0?*/
}

还有 字符串 的整体输出与输入 怎么输?

1. 你对if的条件测试起初的分析没有错,x-- < 5是先将5代入x将x与5作比较再将x递减1,所以x的值变成了4。注意这个递减操作是在执行跳到else分支之前完成的。当执行else分支的 printf("%d", x++);,x++的值就是4。这里运算符优先级并不是起决定作用的。起决定作用的是与右边那个5进行比较的值是x递减1之前的值,也就是5,而将x递减1这个副作用必须在退出条件测试这一单元(就是离开包围测试条件的圆括弧)之前生效。

2. 是p[0]的地址加7,char *p = b;相当于char *p = &b[0];,因为数组名课看作一个常数,指代的是数组的第一个元素的地址。

3. 那个do { y--; } while (--y);相当于do { ; } while (y -= 2);,所以你的分析是对的,当y == 2时,不再循环,但是注意在循环退出前,y已经被减了2了,更准确地说是当y == 2时,y先被减2,变成0,再测试循环条件,发现是0,所以退出循环,执行下面的printf。作为一个思考题,你可以可考虑一下当y的初始值是9而不是10的时候,程序的运行情况。

从你对1,3题的问题反映出你对if,while,do ... while和for结构里的测试条件的理解不太全面,这四类结构的测试条件里的表达式如果带有副作用的话,副作用是在控制流离开测试条件前生效。C语言里面一个很晦涩的概念,叫顺序点。这四类结构的条件测试之后都有一个顺序点。

字符串的输入一般你要先分配一个字符串数组,参见下面的例子:

#include <stdio.h>

int
main(void)
{
char name[16];

puts("What's your name?");
scanf("%s", name);
printf("Hello, %s\n", name);

return 0;
}追问

3中 while(--y);

中的-- 也会使y的值少1吗? 不是只是判断 , 发现不符合然后退出循环 ,此时y值是--前的吧? 就是+回1?

= =..不知道表达得清楚不... 谢谢

追答

--y会先将y减1,再进行判断。循环退出后y值是--后的值。你可以考虑进入条件判断前y=1的情况。

追问

再问一个问题..考完试了..^^
int k=10;
while(k=0);
……
是不是循环体一次也不执行呢?因为k=0的逻辑值一直为0。
倘若改为while(k=1)循环体就无限循环,对不对?

追答

嗯,对。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-06-13
一、c语言中运算时,运算符的先后使用时依据优先级的先后。--的优先级在<,所以先计算,再比较。权威的优先级的排列顺序,见课本附录。
二、b+2=b[2]
地址向下移两位。*为取该地址中的内容的意思。即使language中的第三位,即吧b[2]
的值,n。
char *p=b,定义p为指针,并赋值为b,即*p=b[0]
p=p+7;写法上未加取地址的符号——*,即是地址增加7位,数晚之后为e。
三、本题考查的是y--及--y的用法及区别。
y--:表示本句话运行时的值为y的原值,运行至下一句时,再运行y=y-1。
--y:表示本句话运行之前即运行y=y-1,即判断之时,y已经做过递减的运算了。
针对本题,while括号中的值为0时,循环结束。括号中的表达式为--y,所以做完递减运算后,y=0被while接收。printf的时候,本句运行之时,y--还未做递减运算,所以值仍然是0.等输出0后,再进行递减运算。若在本程序的最后加上同样的一句。则输出的结果则是0 ,-1。。
希望我的回答能给你带来帮助!~
相似回答