C语言作业运行不出来,求指导

Python030

C语言作业运行不出来,求指导,第1张

没有运行结果的原因是代码中存在死循环。

进入 while 循环体前,变量 t 的值为 1。循环过程中 t 的值没有改变,而循环条件是 t >= 0.0001,这个条件一直满足,所以程序不会跳出循环。程序一直卡在循环里面,自然不会执行到下面的 printf 函数。

卡循环是没有运行结果的原因。实际上代码还存在其他问题,无法计算出正确的结果:

[1] 变量 s 的类型应该是 double:格雷戈里公式中的每一项都是小数,使用整型数类型保存结果会将小数部分截断;

[2] 第 10 和 11 行的 if 语句块是不必要的:前面的代码保证变量 t 的值为 1,因此无需负数到正数的转换;

[3] 变量 t 没有迭代:代码中变量 t 的作用是每次循环自增,用以提供分母的值,而实际上在循环中没有更新 t 的值;

[4] 变量 t 和变量 s 混淆了:代码用变量 s 来表示格雷戈里公式中的每一项的值,而循环条件的判断却用了变量 t,这也是死循环的原因。同时原题中要求用 t 表示格雷戈里公式中的每一项,代码中使用了变量 s 来表示;

下面提供能输出正确结果的代码并附上说明:

#include <stdio.h>

#define ABS(X) (X >= 0 ? X : -X)

int main()

{

  double pi = 0, t = 1

  int flag = 1, de = 1

  while (ABS(t) >= 0.0001)

  {

      t = (double)flag / de

      pi += t

      flag = -flag

      de += 2

  }

  pi *= 4

  printf("pi=%.4f\n", pi)

  return 0

}

代码说明:

[1] 第 2 行 ABS 宏定义:用来取绝对值,正数返回自身值,负数返回相反数,因为公式中的每一项是正负交替的,而判断精度只看绝对值;

[2] 变量 t:代表格雷戈里公式中的每一项的值,初始化值为 1 的原因是,while 循环体的循环条件是 "t >= 0.0001",初始化为 0 不能进入循环;

[3] 变量 de:代表每一项的分母的值,每循环一次自身值加 2;

[4] "t = (double)flag / de":变量 flag 和 变量 de 的类型都是 int,被除数和除数都是整型数的除法,结果是舍去余数的整数商,因此需要将变量 flag 强制转换成浮点数类型,这样才能得到小数结果,另外,这个表达式省去了每一项的分子 1,实际上是 "(double)flag * 1 / de"

[5] "+=" 和 "*=":表示变量自增的加数或自乘的因数,"pi += t" 等同 "pi = pi + t" ,"pi *= 4" 等同 "pi = pi * 4"

程序运行结果

C和C + +的区别<br />C是一种结构化语言,如谭父说:“它集中在算法和数据结构。 C程序设计的首要考虑的运算处理,通过一个过程,输入(或环境条件),得到输出(或实现过程控制(交易)),而对于C + +,首要考虑的是如何构造一个对象模型,该模型能够适应相应的问题域,这样您就可以获取状态信息输出或过程控制(交易)。 <br />C和C + +最大的区别是,他们的思维来解决问题的方式是不一样的。之所以C + +比C更先进,因为设计这个概念已经被集成到C + +“,而在C语言本身,是该算法的概念,所以C是重要的,错了!该算法是程序设计的基础和良好的设计一个好的算法,同样也不会做。此外,“C加上好的设计”也能写一个非常好的事情。<br />语言本身的一个子集,C是C + +的一个子集,它是什么呢?从上面可以看出,CC + +过程控制等相关功能的C + +,C(我把它称为一个“ C +“),相对于引进的重载,内联函数,异常处理,所以还加强了原有的C上的东西,C + +的面向对象设计的内??容,如类,继承扩大,虚函数,模板和容器类。<br />在C + +中的数据封装,键入这些东西是不是没有什么新的需要考虑,如:对象粒度的选择,对象接口的设计和继承,组合继承和其他问题。<br />相对于C,C + +包含了更丰富的设计概念,但C是C + +,一个自洽子集,也具有强大的功能,也是值得我们学习。<br /><br /><br />几点建议:<br />1。基本概念是非常重要的。无论是学习,或学习C + +的基本概念是第一位的,是比较困难的,但只有把握的基本概念,以便从总体上把握的情况下,可以居高临下。<br />2。C的一个子集,C + +和它的基本概念和设计方法是比较容易理解,初学者可从它开始。<BR />3。如果你想学习C + +,建议初学者最好不要写一个程序,如VC,BCB平台,自动代码生成什么样的,丰富多彩的界面,你就会知道该怎么做。先找到一个开放的空间(UNIX,DOS),从头开始,写了几个大点的程序,轮数,然后看VC,BCB,你会很。在我看来,学习C / C + + VC,BCB唯一的主。<br />4。停止做梦的崩溃,必须有一个字节拉了一下,试图找出每一个问题。<br />5。几本书: <br />机械工业出版社出版的一套“计算机科学系列从C到C + +,面向对象的设计,一切,TMD是经典中的经典,而且价格也公道,童心灵和诚实。 <br />国内也有几本书,谭父的书非常好,实在是太多了程序上的错误。强烈推荐清华周英现代软件工程(上,中,下),这是罕见的,我看到的一本好书的精髓,精华的元素的要点,薄的材料,至少降龙十八掌级的东西。 <br /><br /><br />如果人们仍然希望学习C / C + +,有一些小的问题,我很乐意回答任何问题,但我认为学习C / C + +并不重要,重要的是如何锻炼你的想法没有发现的一些问题不太清楚做<br /><br />我认为谭浩强“同志诈骗嫌疑人(我做了一个几乎相同的英语书),但他带来了入门手册介绍了无数的程序员理解C语言,我想信贷他的不可磨灭在C语言编程>这本书的所有例子可以用来作为行使想法的基石,他的编程是有帮助的大家,我认为这是值得一买的。课后编程很有帮助认为的例子。不要低估了一个简单的例子,他们是你的道路走向成功。<br /><br />当你基本上可以掌握的例子前一本书,你有自己的一些实例程序一开始可能无法读取,但只要努力就没什么问题了,当你看到几个较大的例子,你会突然看到了光明,(例如计划,读了很多学习C / C + +快捷键),您会发现您的显着提高。例如,你看到越来越多的理解您的Windows / DOS,最好能够看一些书本上的知识系统,他将你的编程有帮助。以免<br /><br />这是我学习C / C + +一个点的经验,而不是我吓坏了,想继续学习C / C + +的朋友有一定的帮助。有的同志说我破坏中国软件人才的发展<br /><br />最后,我祝愿所有坚持学习C / C + +的朋友成功!同时同志感谢您阅读我的文章。<br /><BR />你想学C + +,非学校C不!<br /><br />今天,我确定这里说的这些话,初学者陷入更多的语言吗?更好的误区,其实,这个问题是不是很严格,但我必须说几句话来说,为C平反!<br /><br />C + +和C,什么不同呢?我们现在的一个步骤,通过步骤分析<br />一类,类的我就不说了,它的没有错,但对于初学者来说,它是一种负担。类的封装使得初学者程序累了,不舒服和麻烦。<br />参考C + +,最骄傲的事情,最好是尽量不要使用它,我从来没有不引用,除非万不得已。引用初学者更容易造成混乱,不知道有一定的参考,这是一个变量。<BR />,函数重载,初学者学习函数重载似乎没有伤害,但是,这会使初学者潜意识的C语言变量类型的重要性稀释记住C语言的变量类型是最敏感的,和的重要性。 C语言中的变量的类型是不言自明的。<br />四流运营商,和上面同样的道理,使可变式海水淡化的重要性,CIN这东西是有点不太方便,有时会产生结果不知何故初学者。<br />五,运算符重载,典型的高级应用,初学者可能根本就不需要这个东西让他们觉得C + +是很难,门槛不能阅读.......... .. <br />6,继承,虚函数,典型的模仿四不象,这的狗屎事情似乎深奥的,实用价值非常低...................怎么可能我把一个类类型的指针指向不同的类型,但在类的继承关系,实现动态绑定,晕............ <br />...... ............一些东西,我不会评论,如:新建,删除,运营商,等............ <br /></误区三:提问和回答形式:<br />Q:C + +面向对象技术和面向过程?<br />答:第二对,第一个问题是错误的,C + +是不完全面向对象的技术,恐怕,真正的面向对象的语言,只有Java只能在<br />问:C + + C无法实现的功能吗?<br />答:至少我没有找到...... <br />Q:学习C学习C + +的障碍是什么?如程序设计思想...... <br />A:至少我没看清是谁拥有这症状。<br />Q:学习C + +学习C + +,并有重新启动?<br />A:没有,C + +可以将所有的C语言的特点。<br />问:我完成学校C将肯定需要学习C + +可以通过编程?<br />A:完全不必要的。<br />问:C + +比C好?<br />答案:更多一致的软件工程<br />Q:学完了C到学习C + +是不容易吗?<br />答:这取决于你是不是真的学完了C语言,从C到C + +的前一个星期临睡前看两本书,然后大彻大悟。然后去发布狗屁文章。<br /><br /><br />看到很多网上学习的人,我非常不同意。很多人想一口吃个胖子,要学习,要学习最新的,如果没有人愿意去学那些老的,旧的编程语言,但你可以学习,明白了吗?学习TC2。优秀的编程语言,你能理解VC6。0?如果你真的,我宁愿做你的门徒!令人奇怪的是,那些人不知道的基本语言,如何了解最新的编程语言?我学过编程的三年。结果是,多,只有一个计算机四的证书和海拔证书,但我认为我学习VC + +时,有很多不明白的,没有人教我,我只能靠自己,包括所有的结果都在他们的自己,我从来没有汇报过上课。到学校超过6个月的VC,我想我已经基本入职,但仍然是一个很大的混乱。刚开始学习VC,面临着一个项目,我真的像傻瓜一般,四恐慌触摸,毫无章法,最后勉强可以认为是大致相同的。到学校去学习VC + +高级WINDOWS编程,我认为这是很容易的,毕竟,有很多的东西,在Windows内部可以直接在VC调用,你可以先有了新的认识WINDOWS,去学习其他的语言吗?气虚不能简单吗?<br /><br />我觉得,其实,是面向过程和面向对象非常重要的是,VC还需要一个面向过程的,很多东西是相互关联的,而不是面向过程的思想,怎么会编程吗?建议看到更多的关于Windows编程的书籍,但大多数都是比较老的书呦!我还记得的TC编程的辛苦了一整天,但我仍然怀念当年的劳动付出,毕竟,我得到的一切 - 我想获得编程思想。我认为一个良好的编程思路,完全以学习一门计算机语言好更重要比你要形成自己的编程风格。一个良好的编程思想在你的心中,一旦形成,学习什么语言,会很容易,因为你是不会在这个时候是非常简单易学,但验证!