求高手帮忙解答两个C语言问题!

问题一:求printf的输出结果:
int x,y,z;
x=y=z=o;
++x||++y&&++z;
printf("%d %d %d\n",x,y,z);
输出的结果是:1 0 0
我想问的是为什么y,z的结果是0?麻烦讲一下详细过程。
问题二:关系运算符“==”表示什么意思,怎么用的,举一例子,谢谢!
问题三:为什么 61f 是不合法的常量?答案给我的解释是:使用十进制,但是“f”是非法数符。难道"f"只能跟在浮点型数据后边吗?
问题:常量PI表示什么?
本来只有2个问题的,但是在打的时候又想到了2个,就顺便打了上来,麻烦高手帮我解答一下。小弟最近刚学C语言,问题多多啊!

这样的,解释一下,不对的表怪我。
1.编辑器有优化算法,对于表达式的值有时候是不会全部计算的,如果第一项的值能确定整个表达式的值的话,那编辑器是不会计算后面各项的值的,好比计算两个数相乘,如果知道第一个数是0,那就没必要计算第二个数了,因为结果一定是0。你的例子中编辑器会从左导游计算,计算第一项是1,表明这个表达式的值为真,可能就不会计算y和z的值了,于是就保留了他们的初始值0、
2,==是比较类运算符,只有两个值,真和假,也就是布尔型变量。如果两边相等就为真,否则为假,==和=不同,=是赋值的意思,是把等号右边的值赋给左边,例如0==1是假,y=5,是给y赋值5
3.f的出现表明你是十六进制,十六进制作为左值的时候必须以0x开始也就是要写成0x61f,八进制要以0开头,貌似,你查下书。
4.常量pi就是π啊,3.1415926,无线不循环小数,表示圆的周长和直径的比值。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-01-28
1. &&的运算优先级比||高,所以++x||++y&&++z;相当于++x||(++y&&++z);
x=y=z=0, ++x后x值为1,表达式的值也是1,由于1||任意值,结果都是1,所以||(++y&&++z);被短路,不运行,y和z的值都是0

2.c语言中,=是赋值运算符,而==才是判断相等的运算符,比如x=1;是将1赋值给x,而x==1,是判断x的值是否是1

3.f只能用在16进制中,比如0x61f是合法常量,使用十进制,后面跟的符号是d或者什么都不写。
定义一个浮点数,可以用float或者double,但不能用f,f用于浮点数输出格式控制%f

4. PI只是一个符号而已,要有预定义才行,比如
#define PI 3.14
则PI就相当于是3.14本回答被网友采纳
第2个回答  2013-01-28
问题一:其实很简单,||和&&优先级相同,所以会从左到右进行运算,但条件运算有个优化,就是当||前面条件为真时,会默认认为整个条件运算的结果一定为真,所以会忽略后面的一切运算,所以你这个是执行++x为真忽略了后面++y&&++z的运算;扩展一下,一个&&运算的前面条件为假也会忽略后面的运算。
问题二:==是条件运算符,我们经用于判断两个或变量或常量相不相等,真返回1,假返回0,所以经常用到判断语句中if(a==10)、while(a==1),如果a=1;b=a==1;c=a==0这样的代码b会等于1,c会等于0。
你的问题很让人无语,自己去看一下小甲鱼的零基础C语言视频,看完什么都懂了
第3个回答  2013-01-28
问题一:系统执行完++x后x的值变为1,随后执行||代码,因为前面是1,所以||后面无论是什么代码,编译器都不在执行,因为后面的代码无论是什么,++x||++y&&++z;这个语句的输出结果都是真。
问题二:“==”表示相等,等于。(单独一个=表示赋值)比如
int i;
scanf (" %d ",&i);
while ( i == 1 )
{
printf (" OK "); //如果输入的是1,就输出OK。
}
问题三:f只能用在16进制中
常量PI在宏定义中一般是表示圆周率3.1415926

两题C语言,高手求助啊
第一题:第一次5%2=1,所以执行i--,得i=4,因continue继续,所以用4%2=0,执行case0,i--得3,跳出,跳出后继续--得2,打印输出。下一次循环用2%2=0,执行case 0,i--得1,跳出继续--,得0;所以输出为2和0 第二题:调用函数后,主要看里面的循环情况,第一次循环i=0;c=8;当j=8时...

两道c语言题,谢谢帮帮忙
我给你第一题的答案:include<stdio.h> include<math.h> void getit(int);bool haveit=false;void main(){ while(true){ int a,i;printf("请输入一个整数\\n这个数以下的完全平方数将全部输出>:");scanf("%d",&a);getit(a);printf(haveit==true? "输出完毕!\\n":"%d 以下没有完全平...

求助高手,两个C语言程序的区别
第一个程序输出的i是main里定义的i。调用f(int p)的时候其实经历的是这样的过程:p = i; \/\/p是i的拷贝副本,值为9 p=100;所以外面main()里的i还是9,没有变。f(i)里的i是局部变量。而第二个调用f(&i)的时候,传入的是指向i的指针&i,&i指向的内存块原本存储的值是9,(即*(&i)=...

请高手做下这两道C语言题目,答案好追加100分!
第一题 int sumx( int a0, int d,int n ) {\/*参数要指明类型*\/ int i, k, s=0;k = a0;for ( i=0; i<n; i++ ){s += k; \/*加上左大括号*\/ s += i*d;}\/*改正算术错误,并加上右大括号*\/ return s;} main() { int a0, d, n;scanf( "%d %d %d", ...

C语言菜鸟求高手解答...
1. 第一个问题似乎是一个关于C语言条件判断的疑问。你需要明确表达你的问题,以便得到具体的解答。2. 在C语言中,`m++` 表示先使用变量 `m` 的值,然后将 `m` 的值加1。所以,表达式 `m++ > 5` 首先将 `m` 的值(初始为5)用于比较,然后 `m` 自增。3. 由于 `m` 的初始值是5,...

c语言编程问题,求高手解答(高分)
你的程序没有大的问题,可以执行,只是以下几个小问题:一、第一行包含的文件不存在,这一行应该删除。二、定义了argc、argv两个变量没有使用,编译会有警告,可以删除他们或者不管,最好改为:int main()三、scanf输入n和k的时候,中间有个逗号分隔,这样输入的时候会麻烦,最好改为:scanf("%d%d...

几个C语言问题
1. A语句,首先执行 b = 34 ,接着执行 a = b 语句本身无错误。B语句,实际上是一个表达式,但没有接收该值。C语句,实际上是一个表达式,但没有接收该值。2. 很明显, 029带0前缀而且无后缀。3. 100!结果溢出了。4. 常识性问题。

C语言高手,帮帮忙
(9) 1,2,3 因为if的条件是a>c,那么要当a>c成立的时候,才执行后面的语句,但是初值给出了a=1,c=3,所以,不执行后面的语句,所以还是现实原来的值 (10)x=0;y=2;z=3;switch(x){ case O:switch(y==2){ case 1:printf(”*”);break;case 2:printf(”%”);break;} ...

求高手解释c语言问题: char *p="china";char a[]="china";区别 a[0...
a[0] = 'd'; \/\/正确,因为a实在堆栈上,china被赋值给数组a,程序可以操作这部分内存,所以可以修改整个 (p+0) = 'd'; \/\/错误,字符串"china"是const型的数据,p指针指向这个字符串,不能通过这种方式修改,会导致程序崩溃 === 好心回答问题,还被你BS,哎,蛋疼的紧!

C语言运算问题
第一问 假设x为0 则!x为1,而!(!x)即!(1)所以结果为0,反之,x为1时结果也为1,即 是判断x的值是否为 1等价, 所以应该结果为C,布尔型的话 答案也可以是B 第二问:这是个优先级的问题 += 、-=等符号运算是自右向左运行的,优先级小于加减乘除,运行后赋值,因此a+=a-=a*a ...

相似回答