回 帖 发 新 帖 刷新版面

主题:C语言高手进下~~赋值语句 我有点不懂的地方

昨天 C语言我学到了  赋值语句  后来我看到 自增自减运算符    有一个例题我看不懂   我不知道他为什么算出来不是12   而是9   你帮我 看看哈  最好可以把它的运算步奏 写给我 ~~~谢谢 你了

程序一;
main()
{
     int j,i=3;
     j=(i++)+(i++)+(i++);
     printf("%d",j);
}   结果为什么是9   



程序二 ;
main()
{
     intj,i=3;
     j=(++i)+(++i)+(++i);
     printf("%d",j); 
结果是18  我怎么算  也不是18 啊 迷糊


程序三

main()
{
     int a=100;
     printf("a++=%d\n",a++);  这些什么意思啊
     printf("++a=%d\n",++a);  我看每个程序都有
     printf("a--=%d\n",a--);   这些东西 但每个
     printf("--a=%d\n",--a);   意思都不一样,
     输出结果              我用什么方法一看就    
     a++=100              知道这些是什么意思
     ++a=102              呢???
     a--=100
     --a=102

为什么会是这个结果啊 我不懂什么, 意思

以上的问题 希望 你帮我 看看

在告诉我为什么哈 谢谢你 哟 [em10][em10][em10][em10][em10]

回复列表 (共60个回复)

51 楼

没错
楼主的程序的结果没错
usojay123分析的第一个程序也没错

52 楼

对程序 2 和3  我有个很好的解释 拿 程序三 做个例题

程序三

main()
{
     int a=100;       //先声明一个变量 a 并给它赋值100
     printf("a++=%d\n",a++);  //先打印a 然后再运行a++ 以后a的值就是101了
     printf("++a=%d\n",++a);  //先进行a++,就是拿101+1=102然后在打印 a
     printf("a--=%d\n",a--);   //先打印a 也就是102 然后在进行a-- 以后a就是    101了
     printf("--a=%d\n",--a);   //先进行--a 就是101-1 然后在打印a 也就是打印101-1=100
最后打印结果为:
a++=100
++a=102
a--=102
--a=100
Press any key to continue
++/--在前就先++/--,++/--在后就先进行当前运算(除用括号)后++/--
程序二就是
4+5+6=14
如果在程序一中该最后打印为这样的格式
  printf("%d%d",j,i);
那么i 一定为6 至于j为什么是9 我就不理解了(可能是用到栈了吧) 

53 楼

对程序 2 和3  我有个很好的解释 拿 程序三 做个例题

程序三

main()
{
     int a=100;       //先声明一个变量 a 并给它赋值100
     printf("a++=%d\n",a++);  //先打印a 然后再运行a++ 以后a的值就是101了
     printf("++a=%d\n",++a);  //先进行a++,就是拿101+1=102然后在打印 a
     printf("a--=%d\n",a--);   //先打印a 也就是102 然后在进行a-- 以后a就是    101了
     printf("--a=%d\n",--a);   //先进行--a 就是101-1 然后在打印a 也就是打印101-1=100
最后打印结果为:
a++=100
++a=102
a--=102
--a=100
Press any key to continue
++/--在前就先++/--,++/--在后就先进行当前运算(除用括号)后++/--
程序二就是
4+5+6=14
如果在程序一中该最后打印为这样的格式
  printf("%d%d",j,i);
那么i 一定为6 至于j为什么是9 我就不理解了(可能是用到栈了吧)

54 楼

对程序 2 和3  我有个很好的解释 拿 程序三 做个例题

程序三

main()
{
     int a=100;       //先声明一个变量 a 并给它赋值100
     printf("a++=%d\n",a++);  //先打印a 然后再运行a++ 以后a的值就是101了
     printf("++a=%d\n",++a);  //先进行a++,就是拿101+1=102然后在打印 a
     printf("a--=%d\n",a--);   //先打印a 也就是102 然后在进行a-- 以后a就是    101了
     printf("--a=%d\n",--a);   //先进行--a 就是101-1 然后在打印a 也就是打印101-1=100
最后打印结果为:
a++=100
++a=102
a--=102
--a=100
Press any key to continue
++/--在前就先++/--,++/--在后就先进行当前运算(除用括号)后++/--
程序二就是
4+5+6=14
如果在程序一中该最后打印为这样的格式
  printf("%d%d",j,i);
那么i 一定为6 至于j为什么是9 我就不理解了(可能是用到栈了吧)

55 楼


对程序 2 和3  我有个很好的解释 拿 程序三 做个例题

程序三

main()
{
     int a=100;       //先声明一个变量 a 并给它赋值100
     printf("a++=%d\n",a++);  //先打印a 然后再运行a++ 以后a的值就是101了
     printf("++a=%d\n",++a);  //先进行a++,就是拿101+1=102然后在打印 a
     printf("a--=%d\n",a--);   //先打印a 也就是102 然后在进行a-- 以后a就是    101了
     printf("--a=%d\n",--a);   //先进行--a 就是101-1 然后在打印a 也就是打印101-1=100
最后打印结果为:
a++=100
++a=102
a--=102
--a=100
Press any key to continue
++/--在前就先++/--,++/--在后就先进行当前运算(除用括号)后++/--
程序二就是
4+5+6=14
如果在程序一中该最后打印为这样的格式
  printf("%d%d",j,i);
那么i 一定为6 至于j为什么是9 我就不理解了(可能是用到栈了吧)

56 楼

友情提示

做软件时不要这样些

57 楼


j=(++i)+(++i)+(++i);


汇编:

5:         j=(++i)+(++i)+(++i);
0040D41F   mov         eax,dword ptr [ebp-8]
0040D422   add         eax,1
0040D425   mov         dword ptr [ebp-8],eax
0040D428   mov         ecx,dword ptr [ebp-8]
0040D42B   add         ecx,1
0040D42E   mov         dword ptr [ebp-8],ecx
0040D431   mov         edx,dword ptr [ebp-8]
0040D434   add         edx,dword ptr [ebp-8]
0040D437   mov         eax,dword ptr [ebp-8]
0040D43A   add         eax,1
0040D43D   mov         dword ptr [ebp-8],eax
0040D440   add         edx,dword ptr [ebp-8]
0040D443   mov         dword ptr [ebp-4],edx

 这下明白了吧!!

58 楼

trubo c  18   good

59 楼

哇...如果编译器编译出来不是你的答案的话 说明这个题目没有遵循ANCI-C标准...
就是执行先后的问题拉~估计你们考试会考。。
一般人不会去写这种模糊不清的代码
把3个i++分开写就好了
你要知道的就是i++和++i的区别

60 楼


i++ 是先运算,运算完这一行,或到“;”。。

程序一;
main()
{
     int j,i=3;
     j=(i++)+(i++)+(i++);
     printf("%d",j);
}   结果为什么是9   

程序一改写;
main()
{
     int j,i=3;
     j=(i)+(i)+(i);
     i++;
     i++;
     i++;
     printf("%d",j);
}   结果是:9

程序二 ;
main()
{
     intj,i=3;
     j=(++i)+(++i)+(++i);
     printf("%d",j); 
结果是18  我怎么算  也不是18 啊 迷糊

程序二改写 ;
main()
{
     intj,i=3;
     i++;
     i++;
     i++;

  //此时,i=6..

     j=(i)+(i)+(i);
     printf("%d",j); 
结果是:18  

程序三

main()
{
     int a=100;
     printf("a++=%d\n",a++);  这些什么意思啊
     printf("++a=%d\n",++a);  我看每个程序都有
     printf("a--=%d\n",a--);   这些东西 但每个
     printf("--a=%d\n",--a);   意思都不一样,
     输出结果              我用什么方法一看就    
     a++=100              知道这些是什么意思
     ++a=102              呢???
     a--=100
     --a=102

程序三改写

main()
{
     int a=100;
     printf("a++=%d\n",a);  
     a++;
     a++;
     printf("++a=%d\n",a);  
     printf("a--=%d\n",a);   
     a--;
     a--;
     printf("--a=%d\n",a);  
}
输出结果:                 
     a++=100             
     ++a=102              
     a--=102
     --a=100

我来回复

您尚未登录,请登录后再回复。点此登录或注册