注册 登录
编程论坛 C语言论坛

萌新一枚,求求各位大神解答下这个C语言题

iambacking 发布于 2020-01-22 16:05, 2667 次点击
int i=7
printf("%d\n%d\n...............",++i,--i,i++,i--,-i++,-i--);
这个输出来为啥是7 7 6 7 -6 -7?
8 回复
#2
lin51616782020-01-22 16:20
未定义行为
结果没意义
没讨论价值
不用管输出
#3
叶纤2020-01-22 17:06
以下是引用iambacking在2020-1-22 16:05:21的发言:

int i=7
printf("%d\n%d\n...............",++i,--i,i++,i--,-i++,-i--);
这个输出来为啥是7 7 6 7 -6 -7?

你能把你的码完整的打印出来吗?int  i=7后面没分号会报错的啊还有这完全是在胡闹啊,c  printf  打印也有毛病

[此贴子已经被作者于2020-1-22 17:11编辑过]

#4
八画小子2020-01-23 13:59
这种代码恐怕也只有在大学的时候见到,如果在工作中见到,只能被骂成神经病。
#5
自学的数学2020-01-24 11:00
如果将代码补充完整,楼主是这个意思的话:
程序代码:
#include<stdio.h>
int main()
{
int i=7
printf("%d\n%d\n...............",++i,--i,i++,i--,-i++,-i--);

}

编译有一个问题,如下:int i=7 后没分号。修改后。代码运行如下:
7
7
...............
不是7 7 6 7 -6 -7
#6
星系隐2020-01-24 11:17
因为有负号所以最后是负数
#7
jinxiao662020-01-27 19:27
楼主printf函数中的............估计代表着剩余的4个“%d\n”,该题目可能考察的是自增自减运算与赋值的问题。照着这个思路,我试着写了一下程序:
程序代码:
#include <stdio.h>

int main(void)
{
    int i;
    i=7;
    printf("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);
    printf("*************************\n");
    i=7;
    printf("第一步:-i--\ni=%d\n%d\n---------\n",i,-i--);
    printf("第二步:-i++\ni=%d\n%d\n---------\n",i,-i++);
    printf("第三步:i--\ni=%d\n%d\n---------\n",i,i--);
    printf("第四步:i++\ni=%d\n%d\n---------\n",i,i++);
    printf("第五步:--i\ni=%d\n%d\n---------\n",i,--i);
    printf("第六步:++i\ni=%d\n%d\n",i,++i);
    printf("*************************\n");
    i=7;
    printf("%d %d %d\n",i++,i++,i++);
    i=7;
    printf("%d %d %d\n",i--,i--,i--);
    i=7;
    printf("%d %d %d\n",++i,++i,++i);
}

运行结果如下:
只有本站会员才能查看附件,请 登录

1、程序分为三部分,输出时用“************”来分割。
2、第一部分照题目原意写,输出为7 7 6 7 -6 -7;
3、第二部分假设原题目中printf()函数输出的6个数字,自右向左计算:第一步:-i--,先输出-i的数值-7,再自减为i=6;第二步:-i++,先输出-i=-6,再自加为i=7;第三步:i--,先输出i=7,再自减为i=6,;第四步:i++,先输出i=6,再自加为i=7;第五步,--i,先自减为i=6,再输出i=6;第六步,先自加为i=7再输出为i=7,最终输出为7 6 6 7 -6 -7。实际上第五步,也就是第二个数字与第一部分运行结果不一样。
4、第三部分,对i赋值7以后,分别用printf("%d %d %d\n",i++,i++,i++)、printf("%d %d %d\n",i--,i--,i--)、 printf("%d %d %d\n",++i,++i,++i)来验证,结果当使用i++和i--时,与第二部分的假设运行一致,当使用++i时,是先运行完 全部自加运算后,再输出结果,所以,第二部分的假设的第5第6步,应该都是输出第6步的结果i=7。这样就与第一部分的运行结果一致了。
#8
叶纤2020-01-27 21:43
#include<iostream>
int main()
{   int i{7},a{i},b{i},c{i},d{i},e{i};
    std:: cout <<++i<<--a<<b++<<c--<<-d++<<-e--<<'\n' ;
    return 0;
}
//给所有的赋值定义才能是正确答案,要不永远得不到正确答案
#9
jinxiao662020-01-28 06:36
回复 8楼 叶纤
谢谢您的指点。
如同楼主,我也是萌新一枚。对于C语言,还停留在20年前考计算机二级的认识水平,前段时间因工作中的小想法才起意重新学习C语言,您的回帖为我的学习打开了一扇窗。
1