当前位置:编程学习 > C/C++ >>

还有一题,C/C++

#include "stdio.h"
void main()
{
int i=4,k;
k=(++i)+(++i);
printf("%6d",k);
}

运行结果为什么是12,不是11?
答案:由自加自减运算符开始的研究:
很久以前作的研究,现在写整理一下写出来:
以自加为例:
无论VC和TC中:

int i=5,p;
p=(i++)+(i++)+(i++);

最终的p都为15,i都是8。

下面的式子:
int i=5,p;
p=(++i)+(++i)+(++i);

在TC中,p=24,i=8;
在VC中,p=22,i=8;

而在下面的式子中:

int i=5;
printf("%d",(++i)+(++i)+(++i));

其结果在VC中仍然为22,但在TC中却是18

为什么呢?

先说TC,在TC中,printf()外可以这么理解:
int i=5,p;
p=(i++)+(i++)+(i++);
可以当成:
int i=5,p;
p=i+i+i;
i++;i++;i++;

int i=5,p;
p=(++i)+(++i)+(++i);
可以当成:
int i=5,p;
++i;++i:++i;
p=i+i+i;
也就是说,可以把式子中所有的i++和++i都改成i,然后,把++i放在本条语句之前执行,把i++放到本条语句执行完之后再执行。
所以,可以知道int i=5,p;
p=(i++)+(++i)+(i++)+(i++);
相当于++i;p=i+i+i+i;i++;i++;i++;

但是,在VC中却不是这样。
在VC里,i++可以和TC一样,先把i++换成i,然后,把在执行过本语句后执行一次i++;
但VC里的++i却不同了。
比如:还是上面的值,p=(++i)+(++i)+(++i);
相当于TC中的这么一句:q=(++i)+(++i);p=q+(++i);
所以q的值为7+7等于14。
(如果你问为何是7+7,参看上面讲的TC中的运算方法).
而p的值为14+8即22.

下面还有一些相类似的东西,可以体现VC与TC中计算思想的差异:
p=(i=5)+(i=6)+(i=7);
在TC中结果为18;
但在VC中结果为19;
即在VC中相当于下面语句:
这个不好说,大家自己悟一下到底是怎么得出19的吧:提示:6+6+7。

类似的还有:
int i,p;
p=i+i+(i=5);
在p的值TC下的为15,但在VC中为-1717986915。
大家可以再想下为什么会是-1717986915。提示:刚i+i时,没有执行i=5,故,i未初始化。

---------------------------------------

这些语句都是undefined,标准C语言里没有规定其运算顺序,只有在各个编译器中自行规定了。所以不必深究。上面一篇文章是我很久以前研究的,现在已经忘了写的什么了。其实没必要那么深究,只需要大致理解,知道以后不要写这种代码就行了
#include<stdio.h>
#definePI3.1415926
intmain()
{
doubler;
scanf("%lf",&r);
printf("%lf%lf\n",2*PI*r,PI*r*r);
return0;
}
还有圆周率怎么可能是3.12.......
高手来了。。这是修改后的程序。。

#include <iostream>
using namespace std;
int main()
{ float score;
cout<<"输入成绩(0~100):";
cin>>score;
if(score<0||score>100)
cout<<"输入错!\n";
else if(score>=90)
cout<<"A\n";
else if(score>=80)
cout<<"B\n";
else if(score>=60)
cout<<"C\n";
else cout<<"D\n";
}

上一个:哪里有免费的C++的软件
下一个:C++程序设计难学吗

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,