同样的代码,结果完全不同(C语言)

软件和网站开发以及相关技术探讨
Isbasic
帖子: 73
注册时间: 2005-11-16 8:39

同样的代码,结果完全不同(C语言)

#1

帖子 Isbasic » 2008-03-20 0:54

以下是我自己按照教程范例写的代码:

代码: 全选

#include <stdio.h>
#include <stdlib.h>
main()/*求梯形面积*/
{
	int up,bot,h;/*定义up,bot,h为整型变量*/
	float area;/*定义area为实型单精度变量*/
	 up=3;bot=5;h=3;/*分别把3,5,3赋给up,bot,h*/
	area=h*(up+bot)/2;/*右边表达式的值赋给左边的area*/
	printf("area=%f\n",area);/*输出area的值*/
}
和范例不同的地方就是原文没有注明需要调用哪个库文件,而我自己加上了

代码: 全选

#include <stdio.h>
#include <stdlib.h>
这两个库文件

下面是教程中关于这段代码的解释,原文是建立在turbo c的基础上进行讲学的,新手入门其间,似懂非懂,,希望有朋友帮忙解惑,不胜感激!

教程原文说明:

代码: 全选

1.2.1 一个简单的例子

main()/*求梯形面积*/
{
	int up,bot,h;/*定义up,bot,h为整型变量*/
	float area;/*定义area为实型单精度变量*/
	 up=3;bot=5;h=3;/*分别把3,5,3赋给up,bot,h*/
	area=h*(up+bot)/2;/*右边表达式的值赋给左边的area*/
	printf("area=%f\n",area);/*输出area的值*/
}


这个C程序可命名为exam1_1.c存入磁盘,下面,我们逐行解释这个C程序.

(1)main()	叫做C程序的主函数.在一个完整的C程序中一定要有一个主函数main(),不惯这个函数放在什么地方,C程序总是从它开始执行.
(2)花括号{},是函数体的界限符.在降到复合语句时,将会看到,花括号可作为复合语句的界限符.
(3)/*与*/之间的内容是注释.在本例中说明这事一个求梯形面积的函数,注释可提高程序的可读性,便于理解.它不影响程序的执行,也不被编译.
(4)int up,bot,h;是变量说明语句,说明up,bot和h是整型(int)变量,它们取整数值.这个说明语句的作用是通知计算机,程序用到三个整型变量,为它们分配存储单元.
(5)float area;也也是变量说明语句,说明变量area是浮点型变量,它通知计算机,程序中用到浮点型变量area,并为其分配存储单元.整型和浮点型,均是C语言中常用的数据类型,关于数据类型,将在第2章中详细介绍.
(6)接下来的两行中出现的=,是赋值符号,也成为赋值运算符,便是把赋值运算符右边的数值或是运算结果赋给其左边的变量所指定的存储单元.习惯上,把赋值运算符左边部分称为左值,右边部分称为右值.
(7)printf()是格式输出函数.它是编译系统中预先编制好的函数,俗称库函数,随着学习的逐步深入,将会见到更多的库函数.

其中%f是转换控制符,它指示双引号外的相应参数,这里是变量area,所需的最少位数,按10进制浮点数输出,其输出位置是%f所处的位置.因此,本例执行后的输出结果是:

area=22.500000

另一个符号\n是换行符,表示碰到该符号就要换行,即在气候还要输出其他信息时,必须另起行.

(8)分号;表示语句结束.C程序中要求每个语句后面要加分号.语句是C程序的执行单位.

此外还要注意C程序书写的小写化,C语言所定义的关键字,转换控制符,控制语句,以及所有库函数用的都是小写字母,我们在用到它们时也必须小写.即C语言是区分大小写字母的.至于每一个程序行,既可只写一个语句,也可写多个语句,只要在每个语句结尾写上分号即可,比较灵活.而在{}之后是不比加任何标点符号的,不惯它是作为函数体的分界符,还是作为复合语句的分界符都一样.
如上,可悲的是我竟然得到的是12.000000,为什么会有这么大的区别呢?因为调用的库文件不对吗?

附上截图一张,盼各位大大能给予解答.
附件
bad.jpg
dbzhang800
帖子: 3182
注册时间: 2006-03-10 15:10
来自: xi'an China
联系:

Re: 同样的代码,结果完全不同(C语言)

#2

帖子 dbzhang800 » 2008-03-20 3:55

和范例不同的地方就是原文没有注明需要调用哪个库文件,而我自己加上了

代码: 全选

#include <stdio.h>
#include <stdlib.h>
这两个库文件
这两个叫头文件,不叫库文件。
下面是教程中关于这段代码的解释,原文是建立在turbo c的基础上进行讲学的,新手入门其间,似懂非懂,,希望有朋友帮忙解惑,不胜感激!
这个你大概看看就行了。看不懂的话不妨找本书慢慢来。
如上,可悲的是我竟然得到的是12.000000,为什么会有这么大的区别呢?因为调用的库文件不对吗?
可悲?难道你认为 (3+5)*3/2. 不等于 12 ??
不要迷信书。


另外, main 前面加上 int
大扩号 } 前面加上一句 return 0;
可以消除编译器的警告。
Isbasic
帖子: 73
注册时间: 2005-11-16 8:39

#3

帖子 Isbasic » 2008-03-20 7:36

谢谢楼上的哥们解惑,我在继续看看~
pigflyjky
帖子: 20
注册时间: 2008-03-14 17:39

哈哈

#4

帖子 pigflyjky » 2008-03-23 20:16

哈哈 :roll:
头像
shellex
帖子: 2180
注册时间: 2007-02-18 19:33
系统: OSX
来自: lyric.im
联系:

#5

帖子 shellex » 2008-03-23 20:23

好冷
头像
Strange
帖子: 1824
注册时间: 2006-05-19 9:54
来自: Shanghai

#6

帖子 Strange » 2008-03-24 11:51

写出这个书的人太强大了
ニンニク入れますか?
x60 with gentoo
头像
Yizer
帖子: 297
注册时间: 2007-11-07 14:41
来自: 佳木斯
联系:

#7

帖子 Yizer » 2008-03-24 12:47

好冷
书上大错了呗
3*(3+5)/2=12
Dell 1520
------------------------
Intel Core T7500
1G*2
120G
Nvidia 8600 GT
My BLOG
flyinflash
帖子: 2376
注册时间: 2006-09-21 14:28

#8

帖子 flyinflash » 2008-03-31 13:43

http://www.shuge.org/share/project/gent ... 4%E7%94%A8

编译型语言 C

想入门,有三本书是必看的。
《C 程序设计语言》
《Linux 程序设计》
《Unix 环境高级编程》
头像
itux
帖子: 223
注册时间: 2008-01-10 14:03

#9

帖子 itux » 2008-05-23 0:24

呵呵,中国人写的这些书还是不要看了,浪费时间!
Morain
帖子: 27
注册时间: 2006-06-21 19:03
联系:

#10

帖子 Morain » 2008-05-26 0:13

itux 写了:呵呵,中国人写的这些书还是不要看了,浪费时间!
深有同感,感慨于在科技方面中国人写的好书太少,市面上现在流传的好书也大概都是老教授写的,年轻的能写出真正的“书”科技类作者可以说凤毛麟角~
qyll17
帖子: 10
注册时间: 2008-05-03 17:20

#11

帖子 qyll17 » 2008-05-26 7:45

想问个弱智问题,他用的是谁么编译器阿,我的C++就只会在终端里编译,有点麻烦,KDEVELOP不会用
头像
linlee
帖子: 1132
注册时间: 2007-10-20 11:30

#12

帖子 linlee » 2008-05-26 10:45

flyinflash 写了:http://www.shuge.org/share/project/gent ... 4%E7%94%A8

编译型语言 C

想入门,有三本书是必看的。
《C 程序设计语言》
《Linux 程序设计》
《Unix 环境高级编程》
很有用!谢谢提供。
头像
yangcheng
帖子: 498
注册时间: 2005-09-27 18:24
来自: 杭州

#13

帖子 yangcheng » 2008-05-27 4:24

Morain 写了:
itux 写了:呵呵,中国人写的这些书还是不要看了,浪费时间!
深有同感,感慨于在科技方面中国人写的好书太少,市面上现在流传的好书也大概都是老教授写的,年轻的能写出真正的“书”科技类作者可以说凤毛麟角~
cs方面不要迷信老教授
潭够老吧 c已经垃圾的不行.. 为了说明有书可以更垃圾 他还写了本c++
头像
jaywee
帖子: 517
注册时间: 2006-06-18 21:49
联系:

#14

帖子 jaywee » 2008-05-27 7:53

yangcheng 写了:
Morain 写了:
itux 写了:呵呵,中国人写的这些书还是不要看了,浪费时间!
深有同感,感慨于在科技方面中国人写的好书太少,市面上现在流传的好书也大概都是老教授写的,年轻的能写出真正的“书”科技类作者可以说凤毛麟角~
cs方面不要迷信老教授
潭够老吧 c已经垃圾的不行.. 为了说明有书可以更垃圾 他还写了本c++
貌似我们老师都 强推荐谭老的书,可我没来没看过.一看那么薄,我直接飘过!
Time waits for no man!
头像
冲浪板
论坛版主
帖子: 7513
注册时间: 2007-05-06 8:19

#15

帖子 冲浪板 » 2008-05-27 8:21

问题就在printf的输出格式上面(你自己可以控制的)

btw:我
//#include <stdio.h>
//#include <stdlib.h>
也是正常编译与运行
回复