你做对了么? 简单的=和+

xinhua0910 2009-03-15 09:21:24
闲来没事,发大家一起讨论一下。 说来惭愧,看第一眼时就做错了,看了结果才明白
大家也来看一下,你做对了么?
说说你的想法,你是怎么理解的。我是从地址的角度理解的

#include <stdio.h>
void main()
{
int i;
i = (i=2)+(i=10);
printf("%d\n", i);

i = 1;
i = (++i)+(i=10);
printf("%d\n", i);

i = 1;
i = (i++)+(i=10);
printf("%d\n", i);

i = 1;
i += ++i;
printf("%d\n", i);

i = 1;
i += i++;
printf("%d\n", i);

i = 1;
i = (++i)+(++i);
printf("%d \n", i);

i = 1;
i = (++i)+(i++);
printf("%d\n", i);

i = 1;
i = (i++)+(++i);
printf("%d\n", i);

i = 1;
i = (i++)+(i++);
printf("%d\n", i);

i = 1;
i = (++i)+(i++,++i);
printf("%d\n", i);
}

...全文
141 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
我们编程吧 2009-03-16
  • 打赏
  • 举报
回复
这种题目估计不同的编译环境,我感觉结果可能也不会一样的
xinhua0910 2009-03-16
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 xinhua0910 的回复:]
今天看了一下半开“未定义”的一些资料,看完后觉得过意不去啊
浪费了大家时间,请见谅
[/Quote]
打错了“半开”是关于!

加分补尝大家浪费的时间和精力 ,谢谢
xinhua0910 2009-03-16
  • 打赏
  • 举报
回复
今天看了一下半开“未定义”的一些资料,看完后觉得过意不去啊
浪费了大家时间,请见谅
benhuang 2009-03-15
  • 打赏
  • 举报
回复
再遇未定义行为....
每次笔试,只要我一看到这样的题,我马上交卷走人!
lwouyang 2009-03-15
  • 打赏
  • 举报
回复
呵呵!!
为什么越来越多?? 有必要吗?

其实只要记住:

1、任何像(i=10)之类的等号表达式(姑且这样叫吧)的结果一定是等号右边的结果,管它千变万化也不离其宗;

2、++i求i前先自增,i++求i值后自增,标准仅仅保证这一条,至于其他的像同一个i又有自增又有多次求值的表达式,或多个自增运算符等,标准都是未定义的;

3、逗号运算符标准有要求是从左到右顺序求子表达式的值——注意!仅仅保证到求出子表达式的值而已,当子表达式的值已经求出,子表达式里未尽的运算,比如三元运算式的另一支,后自增运算等,就没保证了;

4、对于其他的同一个表达式中的前后子表达式的计算顺序,比如a[i]=(i+=2)的等号前后是未定义的;

5、函数实参的求值顺序是未定义的,虽然大多情况是从右到左;

6、以上在标准中未定义的运算顺序,各编译器各有不同表现,具体要看实际的编译环境;

就这几点而已。

因此,要编写具有良好的可移植性的代码的话,不要用超出以上几点的范围的表达式。简单说,尽量写简单点,为不易出错,为别人容易看,也为自己省些麻烦。又不是非得那样写不可。
arong1234 2009-03-15
  • 打赏
  • 举报
回复
所以才说,拿了计算机等级证书的,就是证明自己是外行,因为那些考试不但不代表水平多好,反而证明他水平多臭,只有非计算机职业岗位才需要这种证书
[Quote=引用 11 楼 xinhua0910 的回复:]
恩,是的,这是我朋友不晓得是哪里考试做的题吧,发我看的
要是产品代码,那就真是要拉出去枪毙五分钟了
[/Quote]
xinhua0910 2009-03-15
  • 打赏
  • 举报
回复
恩,是的,这是我朋友不晓得是哪里考试做的题吧,发我看的
要是产品代码,那就真是要拉出去枪毙五分钟了
arong1234 2009-03-15
  • 打赏
  • 举报
回复
写出void main和有副作用的代码的,都是值得说自己不扎实的
heise007w 2009-03-15
  • 打赏
  • 举报
回复
又是未定义啊……
cnStreamlet 2009-03-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 xinhua0910 的回复:]
呵呵,基础不够扎实才会错的。谁来讲一下真正原理,就是底层是怎么运转的
[/Quote]

不对,除非是写编译器的人
arong1234 2009-03-15
  • 打赏
  • 举报
回复
你错了,只有基础不扎实的人才会去出和研究这种题目的,一个基础扎实的程序员绝对不会做这种傻事的
[Quote=引用 2 楼 xinhua0910 的回复:]
呵呵,基础不够扎实才会错的。谁来讲一下真正原理,就是底层是怎么运转的
[/Quote]
Sco_field 2009-03-15
  • 打赏
  • 举报
回复
出这种题的人欠扁~
kestre1 2009-03-15
  • 打赏
  • 举报
回复
给一个GCC的输出结果:警告: ‘i’上的运算结果可能是未定义的

20
20
21
4
3
6
5
5
4
8
  • 打赏
  • 举报
回复
还有更无耻的,
i = (++i)+(i++,++i);
printf("%d\n", (++i)+(++i));
kestre1 2009-03-15
  • 打赏
  • 举报
回复
答案不确定~
xinhua0910 2009-03-15
  • 打赏
  • 举报
回复
呵呵,基础不够扎实才会错的。谁来讲一下真正原理,就是底层是怎么运转的
fibbery 2009-03-15
  • 打赏
  • 举报
回复
楼主不用惭愧,出这种题的人是可耻的。
基于强化学习的五子棋强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一。它主要用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。强化学习的特点在于没有监督数据,只有奖励信号。 强化学习的常见模型是标准的马尔可夫决策过程(Markov Decision Process, MDP)。按给定条件,强化学习可分为基于模式的强化学习(model-based RL)和无模式强化学习(model-free RL),以及主动强化学习(active RL)和被动强化学习(passive RL)。强化学习的变体包括逆向强化学习、阶层强化学习和部分可观测系统的强化学习。求解强化学习问题所使用的算法可分为策略搜索算法和值函数(value function)算法两类。 强化学习理论受到行为主义心理学启发,侧重在线学习并试图在探索-利用(exploration-exploitation)间保持平衡。不同于监督学习和非监督学习,强化学习不要求预先给定任何数据,而是通过接收环境对动作的奖励(反馈)获得学习信息并更新模型参数。强化学习问题在信息论、博弈论、自动控制等领域有得到讨论,被用于解释有限理性条件下的平衡态、设计推荐系统和机器人交互系统。一些复杂的强化学习算法在一定程度上具备解决复杂问题的通用智能,可以在围棋和电子游戏中达到人类水平。 强化学习在工程领域的应用也相当广泛。例如,Facebook提出了开源强化学习平台Horizon,该平台利用强化学习来优化大规模生产系统。在医疗保健领域,RL系统能够为患者提供治疗策略,该系统能够利用以往的经验找到最优的策略,而无需生物系统的数学模型等先验信息,这使得基于RL的系统具有更广泛的适用性。 总的来说,强化学习是一种通过智能体与环境交互,以最大化累积奖励为目标的学习过程。它在许多领域都展现出了强大的应用潜力。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧