数学符号根号疑问 为什么是根号七i 不是七i

数学 很纠结的问题 根号下-16 的结果是4i 还是±4i 请说明理由!_百度作业帮
数学 很纠结的问题 根号下-16 的结果是4i 还是±4i 请说明理由!
数学 很纠结的问题 根号下-16 的结果是4i 还是±4i 请说明理由!
根号下的数字不都是大于等于0的么?根号下怎么可能有负数?
正负4i i的平方=-1,而系数的平方都是正的
能这么推理吗? -4的平方还是16呢。。。。难道根号下16等于±4?
我猪了,应该是4i
根号下-16 的结果是±4i因为-16=16*(-1)=(4i)^2所以根号下-16 的结果是±4i根号下-1等于±i????谁教你的?书上定义是 i=根号下-1
,不是±i.......你可以这样理解-16=(4^2)*(i^2)根号下-16=(根号下16)*(根号下-1)=(±4)*i=±4i√16=4..............-_-||√16=±4.........
书上定义是 i=根号下-1
,不是±i.......
你可以这样理解-16=(4^2)*(i^2)根号下-16=(根号下16)*(根号下-1)=(±4)*i=±4i
√16=4..............-_-||
根号下-1为正负i,,答案为正负4i
书上定义是i=根号下-1高中数学问题求助1.
请写出拥有以下根的多项式. 第一题, -5,3, 正负4+i 第二题,正负2√5,-3,7请附上过程..2.
问题补充:3.
我要的是当他们全部乘起来后的多项式...正负4+i等于正负4_百度作业帮
高中数学问题求助1.
请写出拥有以下根的多项式. 第一题, -5,3, 正负4+i 第二题,正负2√5,-3,7请附上过程..2.
问题补充:3.
我要的是当他们全部乘起来后的多项式...正负4+i等于正负4
高中数学问题求助1.
请写出拥有以下根的多项式. 第一题, -5,3, 正负4+i 第二题,正负2√5,-3,7请附上过程..2.
问题补充:3.
我要的是当他们全部乘起来后的多项式...正负4+i等于正负4+√-1
两题都是先设函数f(x),(为方便计算,首先前两项相乘,同时后两项相乘,然后最后相乘)第一题:f(x)=(x+5)(x-3)(x-4-i)(x+4-i)=(x²+2x-15)(x²+4x-ix-4x-16+4i-ix-4i-1)=(x²+2x-15)(x²-i2x-17)=x⁴-i2x³-17x²+2x³-i4x²-34x-15x²+180x+255=x⁴+(2-i2)x³-(32+i4)x²+146x+255第二题:f(x)=(x+2√5)(x-2√5)(x+3)(x-7)=(x²-20)(x²-4x-21)=x⁴-4x³-41x²-80x+420PS:确实可以是±4+i的,不过同样无法在相乘后消除i,不然根难以出现i
第一题:-5,3,4±i【此处你写错了,应该是4±i,不是±4+i】f(x)=(x+5)(x-3)(x-4-i)(x-4+i)=(x²+2x-15)(x²-8x+17)=x⁴-6x³-14x²+154x-255.第二题:±2√5,-3,7。f(x)=(x+2√5)(x-2√5)(x+3)(x-7)=(x²-20)(x²-4x-21)=x⁴-4x³-41x²-80x+420.问一数学问题.求解倒数第二步。7-3y的值不是和-3y+7的zhi值一样都是?那为什么不能-3Y+7直接根号?_百度作业帮
问一数学问题.求解倒数第二步。7-3y的值不是和-3y+7的zhi值一样都是?那为什么不能-3Y+7直接根号?
问一数学问题.求解倒数第二步。7-3y的值不是和-3y+7的zhi值一样都是?那为什么不能-3Y+7直接根号?
可以的,绝对没有问题,这个只是印刷排版的习惯罢了
这个一个国人习惯问题,另一个也便于方便输写,我的理解
一样的,只不过有些人觉得负号写在前不太舒服吧了。
少写一个“+”,式子显得短些......
就给你好看一点,有什么好纠结的……无语为什么在 C 语言中,i=1;i=(++i)+(++i)+(++i)+(++i); 得到 i 的结果是 15 而不是 14 ?
结果不应该是 i=2+3+4+5=14 吗?
按投票排序
1、这种写法,是C标准严格禁止的。和伸手摸电门一样,写这种代码属于做死。2、关于这种写法的结果的一切讨论,都是无意义的。这在c标准里,叫做未定义行为。当然,我得说,这个术语实在糟糕,可能翻译成“不定义”反而更能反映真实态度。否则搞的好像只是现在没有定义、将来哪天搞c/c++标准的那帮官僚习气严重的老头子们一拍脑袋,给个定义就能扶正一样;但实际上呢,这个术语真正的意思是:相关情况早已被摸透且争论清楚,最终的决定就是“不管这种纯2行为,随便遇到什么结果纯属自己作死”:即“未定义”不是字面意义上看来好像是一个临时的、暂时未能确定的状态,而是对相关行为置之不理、任其自作自受这样一个非常恶劣的态度。一切未定义行为的执行后果都是不可知的;就着某个结果随意发挥,相当于就着某次掷硬币的结果胡说八道,和“未定义行为”的定义八杆子打不着。简单说,c/c++是一种工程师给自己设计的语言。这种语言有个特点,它不像如pascal之类学术界设计的语言那样严谨,丁是丁卯是卯;而是视实际需要允许一些变通。比如说i++,在pascal中是不允许的,因为它并不符合表达式的定义;而在c/c++中,为了少写一行代码、或者为了和某条汇编语句对应,这颗语法糖就被加进去了。但是呢,这种非标准的东西一旦加入,就打开了潘多拉的魔盒。因为它和普通表达式不同啊,还有个赋值的副作用。这下问题就大了。因为和正规意义上的表达式不同,这种东西的副作用发生时机,会深刻改变程序的执行结果。另一个基础知识:当编译器为c表达式生成机器码时,会偷偷做很多优化动作,以尽量加快程序执行速度。怎么保证这些优化动作是对的、没有优化出错误呢?这就要靠C标准来规范了。而对i=i++之类的表达式,C标准委员会说了,这种写法纯属蛋疼,谁写谁2,所以不规定它的正确结果是什么样子(这就是“未定义行为”的含义),编译器折腾成啥都没关系——哪怕你去格他的硬盘,也是符合标准的。——比如说,如果我写个c编译器,发现这种代码就在屏幕上打印出血红的两个大字“F××K YOU”,然后格掉硬盘往BIOS填充垃圾数据……没关系,这个编译器是完全符合C标准的。——而且,说不定这种编译器反而会很受软件公司欢迎。因为老板很容易就可以知道哪个小子喜欢写这种代码,可以及时解雇他。既然这种写法是C标准明文禁止的,那么我们就可以说,任何(严肃的)写出有“未定义行为”代码的家伙,都是装X不成、反而一头撞上了“未定义行为”枪口的小丑。至于那个一脸严肃的教人写这种小丑代码的家伙……3、学术点说,这个写法的错误和“序列点”这个概念相关。序列点就是类似c/c++里面, ; 这样的符号(但要注意,函数调用时,参数之间的逗号并不是逗号运算符)。它的作用就好像打拍子一样,每个拍节结束,就必须有一个确定的状态。显然,只有大家步调一致,才能把事情做好:现在是1点整,两点整我要出门,所以必须在两点前把文件整理好,否则就会误了行程,进而巴拉巴拉……具体每一拍内部做了什么,C标准委员会没兴趣知道。他们只关心结果。但,对i+++i++来说,如果不规定每一拍内部的执行细节,那么就可以有很多很多种不同结果。可如果限定了执行细节,那么在某些机器上可能就会变得很慢、或者导致一些优化算法失效,加大编译器实现的难度。更重要的是,i++本身是一个有着特定内涵(改变i存储的值)的指令,并不是单纯的数学表达式。显然,把它当基本数学表达式滥用,得到的复合表达式是没有数学意义(因而也没有现实意义)的。因此,做出任何规定,都无法为这种怪异的东西赋予合理意义,都不过是要求使用者死记硬背某种毫无意义的咒语罢了——搞C标准的那帮子人还不至于这么没格调。最终,C/C++委员会的决定是:任何类似的写法都不予支持。如果有人这么做了,那么编译器输出任何结果都是合法的。”类似情况“指的就是“在两个序列点之间,不允许一个变量两次改变其值(这是不严谨的简化说法,不要轻信)”——这里就显出格调了:要禁,就禁这种错误的本质。人家才没闲功夫去慢慢罗列各种错误可能呢。对照这个判定标准,很显然,i=i++就不是合法的代码。因为i++本身就改变了一次i的取值,然后赋值操作再次修改了i值。按照规定,这种非法代码,执行结果是无法确定的。编译器为其生成任何代码都合法——当然,目前为止,还没见哪个编译器真的去格式化肇事者的硬盘——所以,现实是,不同编译器、同一个编译器的不同版本、相同版本编译器使用不同编译参数,结果都可能不同。和编译器不同的是,对写出这种代码的人,软件公司的态度倒是完全一致、且非常坚决的:解雇。———————————————————————————— 补充:刚看到的一个花絮: 还真有编译器在遇到未定义代码时玩彩蛋恶搞肇事者的。这个编译器就是著名的gcc,有彩蛋的版本是1.17:花絮:编译器的彩蛋上面说了所谓的undefined行为就全权交给编译器实现,gcc在1.17版本下对于undefined的行为还玩了个彩蛋()。下面gcc 1.17版本下的遭遇undefined行为时,gcc在unix发行版下玩的彩蛋的源代码。我们可以看到,它会去尝试去执行一些游戏,
或是Emacs的 ,如果找不到,就输出一条NB的报错。execl("/usr/games/hack", "#pragma", 0); // try to run the game NetHackexecl("/usr/games/rogue", "#pragma", 0); // try to run the game Rogue// try to run the Tower's of Hanoi simulation in Emacs.execl("/usr/new/emacs", "-f","hanoi","9","-kill",0);execl("/usr/local/emacs","-f","hanoi","9","-kill",0); // same as abovefatal("You are in a maze of twisty compiler features, all different");不知道谭派弟子或者谭浩强本人见到这个彩蛋,又会发表什么神论。将来的计算机二级考试,又会出什么奇葩怪题……_________________________应一些朋友的要求,补充关于i++确切含义的一些解释:i=i+i++之类问题,根本不是优先级的问题。简单说吧,a = b ,和数学课本上的 等式 完全是两个意思。在计算机领域,它的意思是:先计算出表达式b的值,然后把这个值赋给a。表达式的定义为: 一个单独的字面值,或者一个单独的变量,或者通过算术/逻辑运算甚至函数调用连接起来的表达式——注意,赋值操作可不是什么算术/逻辑运算,也不是函数调用。显然,对于表达式b来说,它的运算符优先级有多复杂都不是问题。但,因为太重要所以需要再说一遍:请注意,表达式里面不允许出现赋值操作,因为这个操作并不是算术/逻辑运算。————————————————————显然,i++的问题在于,虽然i++看起来只有操作符和操作数组合、而且通常作为表达式使用,但其实它的含义是i=i+1 ——这根本不是一个表达式,而是“计算表达式i+1的值,并将其赋予变量i”:换句话说,这里面额外有一个赋值操作。事实上,i++本身作为一个c/c++语句,是不可删除的;而 2+3、a&&b、!a之类真正的表达式构成的单独语句则可以在编译时直接删除。原因就是i++另外还隐含了一个赋值操作,从而多了个会影响程序状态的“副作用”。——c/c++里面,类似这个赋值操作的、执行后会影响程序状态的行为,被称为“副作用(side effect)”。进一步的,c/c++标准里面对这类有表达式外表、但却另有额外语义的“假”表达式叫做“有side effect的表达式”(关于何谓side effect,c/c++标准有专门定义,请尽量参考这个定义,因为我的转述很可能会有某些瑕疵之处,不可轻信),实质上也是强调了它和原始意义上的表达式的不同之处。但是呢,为了写代码的便利,c/c++系语言提供了一个语法糖,允许程序员将i++用到表达式里面,同时规定其含义为:首先取i的值,用这个值代入表达式,供以后求值用;之后,执行i=i+1(执行i=i+1的确切时机不限,在表达式求值之前还是之后都行,只要执行了就对)。如此一来,忽略副作用不提的话,i++看起来就像是一个真正的表达式。但,必须注意,i++毕竟不是一个表达式,它毕竟还有个副作用藏在里面。粗暴的用某种规定允许它掺乎进去,就必然带来很多棘手的问题。比如说,i=i++,这个语句如何解释?首先,这显然是一个赋值语句,所以最终i应该存的是等号右侧表达式的值;虽然i++不是表达式,但按照规定,它可以解释为“语句执行前i的取值”;所以,这其实是把语句执行前,i的取值赋给i的一个赋值语句——也就是说,执行后,i的值应该不变。但,注意i++还有一个赋值动作。即:把语句执行前的i值加一,然后赋值给变量i——所以,执行后,i的值应该增加了1。显然,两个赋值动作的执行结果出现了矛盾。究竟哪个对呢?进一步的,i=(i++)+(i++)呢?这里面可有三个针对i的赋值操作啊。不仅如此,对于函数调用,如max(i++, i++),这又是什么意义呢?很显然,不是表达式的i++,绝对不能和表达式混淆。虽然,为了表达简洁,c/c++系列语言允许它在特定场合代替表达式,但这并不等于说,c/c++就认为它和表达式没有差别。相反,c/c++自始至终都认为它是一个赋值操作,只是可以在严格限定的场景替代表达式而已——这个“严格限定”,就是“不允许一个变量在一对序列点之间两次改变其值”(不太严谨的说法)。只有满足了这个“严格限定”,程序才不会出现“二义”。换句话说,i++本身是一个有着特定内涵(对i赋值)的指令,并不是单纯的数学表达式。把它当基本数学表达式滥用,得到的复合表达式是没有数学意义(因而也没有现实意义)的。把它用对,是程序员的责任。
i=1;i=(++i)+(++i)+(++i)+(++i); 这代码是错的 结果没有意义 别跟我提什么能编译没报错能运行有结果稍微纠正一下自己的三观C里面不是能运行出结果的代码就算对的代码 那么BUG根本就不存在了int main(){printf("%d\n", i); //也能得到结果 谁敢说这代码是对的了}好了 离题千百里的纠正三观完毕 回到本题 为什么说这代码是错的++运算符的副作用是令操作数的值+1这个副作用生效的时机[修改 i 的值] 在这里无法确定[强调 别和求值混一起什么优先级高先算 那些说的是求值 说的是整个 ++i 这个表达式的值]于是 对于第二个++i 进行求值的时候 i 的值无法确定第一个++ 的副作用究竟完成了没有第二次++i的时候 i 的值可能是2 可能是1 无解这情况不仅发生在不同的编译器 那么是对于同一个编译器 使用不同的编译参数得到的结果也有可能是不一样的 简称 渣代码
问这种问题的,我个人觉得要么不是计算机软件相关专业的,要么就是只看了谭某的书。关于问题本身前辈们已经说的很清楚了……没有意义的东西,未知的结果。然后我更加费解的是国内所有C/C++,Java的考试都会考这种题。这都是什么心态!觉得自己无法理解这种问题的,请丢掉手上出现这种代码的书,去买一本 C Primer 或 C language,不客气
终于理解为什么很多人都对谭浩强老师那么愤怒了。想一想,为什么当年在学校里,C、Java 之类的考试,总爱有这些乱七八糟小聪明的题目。。。难道,不该就是做出真正实实在在的东西么~i,n 都远去吧。其实很多课程的教学不都是这样么?
未定义的行为编译器爱怎么实现就怎么实现,它没有给你出彩蛋就够“仁慈”了。本来自增自减运算符和其他运算符混用就是不提倡的,你居然还一下用了好几个。唉。
用gcc编译是15。查看了汇编,大概原理如下。计算结果是这样得出的:i=3+3+4+5;首先头两个(++i)相加时,这两个i存放的寄存器是同一个,所以进行了两次自加后才进行相加所以是3+3=6;加完后放到别的寄存器里,然后第三个(++i)加进来就变成了6+4;如此类推。就是用gcc编译这种写法的话第一个++i增加2而不是1。希望对你解释给师妹有帮助。
在同一个语句中对同一个变量使用多次自增减运算的结果是未定义的
D Ritchie已经仙去,中国C语言水平暴增,谭派弟子彻底统治了C语言考试。再过几年,估计K Thompson,B stroustrup等老将加上C Lattner等新锐抱团来中国参加考试都不一定能过
花时间研究这种c语言界的“茴”字问题上,不如花点时间泡妞去
看了这么多没看到有用的c++里面表达式求值虽然有运算符优先级但是求值顺序是是不明确的例如:int i = f1( ) * f2( );我们知道f1 和 f2 一定会在乘法之前被调用 , 但是我们无法知道f1 和 f2 谁先调用,和编译器有关。所以上面的表达式再不同的编译器上有不同答案。以上来自c++primer第5版第123页
已经解释得非常清楚。我补充一点C/C++标准相关背景。对于undefined behavior,C/C++标准的逻辑大概是:“这不是正确的C/C++代码,所以编译器怎么实现都无所谓”。相应的,编译器作者也就从未费心给undefined behavior一个合理/明确/稳定的行为。因此,对某个undefined behavior在某编译器的某特定版本上为什么是某特定行为的探讨意义不大,因为答案就是“碰巧是这样”。可是,“这不是正确的C/C++代码,所以编译器怎么实现都无所谓”是一个非常拧巴的逻辑。正确的思路难道不应该是“这不是正确的C/C++代码,所以编译器应该给出编译错误”?这会节省多少初学者的时间啊。问题在于,C/C++标准都是“事后追认”性质的标准。两个语言开始制定标准时,都已经大获成功,并且有了许多编译器实现。标准是语言设计者/编译器作者/用户之间的协议,而编译器作者们在标准制定过程中是有相当大的影响力的。他们倾向于让标准符合现有编译器的行为(即所谓“追认”),以及如果需要改动编译器以符合标准的话,改动尽量小。很多undefined behavior,比如本问题这个,就属于“在制定标准之前没有编译器检查,要增加检查也比较麻烦”的类型,特别是早期某些C编译器要在资源严重受限的环境下编译。(较新的编译器已经可以对此产生warning)另一方面,当然也可以像Java一样,通过在标准中规定表达式求值顺序来得到确定的行为。但C/C++是极端重视效率的语言,这种规定可能对编译器优化造成限制。类似的,很多undefined behavior也是“虽然检查不麻烦,但有性能开销”,比如数组越界访问就是undefined behavior。(仅此一项,就造成了多少漏洞呀...)
JAVA感觉是这样的,2+3+4+5=14;C感觉是这样的,++i之后等于2,然后再++i之后等于3,然后再发生加法运算,所以等于3+3+4+5=15;我感觉C#的最合理:5+5+5+5=20只是感觉,这样至少自己能个自己一个解释,具体要看编译器是怎么生成代码的。有不懂得就搞懂,只要坚持这么做,只要过几年,你就能感受到自己和别人的差距了。那些告诉你为什么,或者告诉你怎么做才更好的人,要感激,以后你也要多帮助别人。那些尊尊教诲、大放厥词的家伙,当他们放P就行了,好好努力,别和这种蠢货成为同事。
这种题就好像考回字有几种写法一样。工程上写出这种代码的人思想肯定不健康。面试中如果遇到这种写法的人我会要求他手写这行代码的机器码。看谁狠。
这种代码一般在实际的工程项目中是不可能出现的,毫无意义。
看到这个问题,我的心情久久不能平复。不太认同楼上各位某些看法,虽然你们是正确的。如果让我教一个人,我不会刻意去叫他研究这东西,但也不会主动告诉他这种题目是无意义的。一个真正对编程有兴趣的人,一般而言,即使你告诉他这种题目是没意义的,他也会往死里研究,最后把他用的那个编译器的关于这种题目的原理研究透,到最后才发现这种题目是多么荒谬。其实这个过程的的确确是一个升华的过程。自己血拼过,痛苦过的战场才是记忆最深的。再说,以后成为一个编程老手之后,随便一次debug的难度都比吃透这个无意义的问题在自己编译器上的“原理”摸清要大。一开始学的时候,先吃吃苦头其实也没什么。这种无意义的问题,是一个分水岭。对编程有无兴趣,有无足够专注力,这个问题上,足以分开。
如果你懂汇编的话:用 gcc –S 输出 .s 的汇编代码,你会立刻豁然开朗。简单来说,这跟编译器如何优化使用寄存器相关。
这是“未定义”的,说白了就是一个——坑。认真得说,就是C语言标准里没有规定这种情况下的求值顺序,从而允许各个编译器可以根据系统环境的不同而编译出(求值)效率最高的代码。对使用者来说,就是要求使用者不编写依赖于求值顺序的代码。如果要控制求值顺序,可以使用逗号表达式,C语言标准规定逗号表达式中用逗号分开的各个“子表达式”(不知道怎么说,自造的名词)按照从左到右的顺序依次求值(但各个子表达式里的求值顺序还是未定义的)。
Undefined Behaviour不同编译器下结果不同,别折腾了。
这结果是不确定的吧,要看编译?

我要回帖

更多关于 数学开根号 的文章

 

随机推荐