内容简介 · · · · · ·
本书的讲述深入浅出,配合典型例证,通俗易懂,实用性强,适合作为大专院校计算机专业或非计算机专业的C语言教材,也可以作为从事计算机相关软硬件开发的技术人员的参考书。 在计算机发展的历史上,没有哪一种程序设计语言像C语言这样应用如此广泛。
本书原著 即为C语言的设计者之一Dennis M.Ritchie和著名的计算机科学家Brian W.Kernighan合著的 一本介绍C语言的权威经典著作。我们现在见到的大量论述C语言程序... (展开全部) 本书是由C语言的设计者Brian W. Kernighan和Dennis M. Ritchie编写的一部介绍标准C语言及其程序设计方法的权威性经典著作。全面、系统地讲述了C语言的各个特性及程序设计的基本方法,包括基本概念、类型和表达式、控制流、函数与程序结构、指针与数组、结构、输入与输出、UNIX系统接口、标准库等内容。
本书的讲述深入浅出,配合典型例证,通俗易懂,实用性强,适合作为大专院校计算机专业或非计算机专业的C语言教材,也可以作为从事计算机相关软硬件开发的技术人员的参考书。 在计算机发展的历史上,没有哪一种程序设计语言像C语言这样应用如此广泛。
本书原著 即为C语言的设计者之一Dennis M.Ritchie和著名的计算机科学家Brian W.Kernighan合著的 一本介绍C语言的权威经典著作。我们现在见到的大量论述C语言程序设计的教材和专著均以 此书为蓝本。原著第1版中介绍的C语言成为后来广泛使用的C语言版本—— 标准C的基础。人们熟知的“hell, World”程序就是由本书首次引入的,现在,这一程序已经成为所有程序设 计语言入门的第一课。 原著第2版根据1987年制定的ANSIC标准做了适当的修订.引入了最新的语言形式,并增加了新的示例,通过简洁的描述、典型的示例,作者全面、系统、准确地讲述了C语言的各 个特性以及程序设计的基本方法。对于计算机从业人员来说,本书是一本必读的程序设计语 言方面的参考书。
作者简介 · · · · · ·
豆瓣成员常用的标签(共255个) · · · · · ·
喜欢读"C程序设计语言"的人也喜欢 · · · · · ·
按有用程度 按页码先后 最新笔记
-
第4页
eddyzhou (stay hungry,stay foolish)
float类型通常是32位,它至少有6位有效数字,取值范围一般在10^-38 ~ 10 ^ 38之间 1 范围 float和double的范围是由指数的位数来决定的。 float的指数位有8位,而double的指数位有11位,分布如下: float: 1bit(符号位) 8bits(指数位) 23bits(尾数位) double: 1bit(符号位)11bits(指数位)52bits(尾数位) 于是,float的指数范围为-127~128,而double的指数范围为-1023~1024,并且指数位是按补码的.. (更多)
1 范围float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位,分布如下:float:1bit(符号位) 8bits(指数位) 23bits(尾数位)double:1bit(符号位)11bits(指数位)52bits(尾数位)于是,float的指数范围为-127~128,而double的指数范围为-1023~1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。2 精度float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位 (收起)float类型通常是32位,它至少有6位有效数字,取值范围一般在10^-38 ~ 10 ^ 38之间
2011-02-13 11:45:27 1回应
-
第131页
onesuper (穷则独善其身,达则兼济姑娘)
当flag(struct)超过一个机器字长怎么办? 做个实验: /代码内容已省略/ 当flag结构体内部定义“位”的数量小于等于32时,sizeof(flags)的结果都是4,正好是一个机器字长。 当“位”的数量大于32时,sizeof(flags)的结果变成了8,说明编译器会自动扩充flags的长度。 因为flags从32位变成了64位,因此在格式化输出时要用long long。 (更多)当flag(struct)超过一个机器字长怎么办?做个实验:#include<stdio.h> struct { unsigned int is_0 : 1; unsigned int is_1 : 1; unsigned int is_2 : 1; unsigned int is_3 : 1; unsigned int is_4 : 1; unsigned int is_5 : 1; unsigned int is_6 : 1; unsigned int is_7 : 1; unsigned int is_8 : 1; unsigned int is_9 : 1; unsigned int is_10 : 1; unsigned int is_11 : 1; unsigned int is_12 : 1; unsigned int is_13 : 1; unsigned int is_14 : 1; unsigned int is_15 : 1; unsigned int is_16 : 1; unsigned int is_17 : 1; unsigned int is_18 : 1; unsigned int is_19 : 1; unsigned int is_20 : 1; unsigned int is_21 : 1; unsigned int is_22 : 1; unsigned int is_23 : 1; unsigned int is_24 : 1; unsigned int is_25 : 1; unsigned int is_26 : 1; unsigned int is_27 : 1; unsigned int is_28 : 1; unsigned int is_29 : 1; unsigned int is_30 : 1; unsigned int is_31 : 1; /* more than 32 bits */ unsigned int is_32 : 1; } flags; int main() { flags.is_10 = 1; flags.is_32 = 1; printf("%lld\n", flags); printf("%d\n", sizeof(flags)); return 0; }当flag结构体内部定义“位”的数量小于等于32时,sizeof(flags)的结果都是4,正好是一个机器字长。当“位”的数量大于32时,sizeof(flags)的结果变成了8,说明编译器会自动扩充flags的长度。因为flags从32位变成了64位,因此在格式化输出时要用long long。 (收起)2011-07-06 11:20:24 回应
-
第61页
疯子磊 (FIGHTING!)
先贴一段面试中常见的试题(来源于c/c++高质量编程) char *GetMemory(void) { char p[] = "hello world"; return p; } void Test(void) { char *str = NULL; str = GetMemory(); printf(str); } 请问运行Test函数会有什么样的结果? 答:可能是乱码。 因为GetMemory返回的是指向“栈内存”的 指针,该指针的地址不是 NULL,但其原现的 内容已经被清除,新内容不可知。 tcpl p61 代码如下 /* 把字符... (更多)先贴一段面试中常见的试题(来源于c/c++高质量编程)char *GetMemory(void){ char p[] = "hello world";return p;} void Test(void){ char *str = NULL;str = GetMemory();printf(str);} 请问运行Test函数会有什么样的结果?答:可能是乱码。因为GetMemory返回的是指向“栈内存”的指针,该指针的地址不是 NULL,但其原现的内容已经被清除,新内容不可知。tcpl p61 代码如下/* 把字符串s转换成相应的双精度浮点数*/double atof( char s[ ]){ double val, power;int i, sign;for ( i = 0; isspace(s[i]); i++ ) ;sign = (s[i] == '-' ) ? -1 : 1;if ( s[i] == '+' || s[i] == '-' ) i++;for (val = 0.0; isdigit(s[i]); i++) val = 10.0 * val +(s[i] -'0' );if (s [i] ] = = '.') i++;for ( power = 1.0; isdigit(s[i]); i++) { val = 10.0 * val +(s[i] -'0' ); power *= 10.0;} return sign * val / power;}最后一行代码返回的 三个变量 sign ,val ,power 均为局部变量,为什么就可以返回?经查阅,得知在函数返回前 三个变量的表达式(sign * val / power)结果会用临时变量保存,故不存在局部变量值在函数返回后因生命周期原因而无法返回。 (收起)2011-03-25 16:29:01 3回应
-
第4页
eddyzhou (stay hungry,stay foolish)
float类型通常是32位,它至少有6位有效数字,取值范围一般在10^-38 ~ 10 ^ 38之间 1 范围 float和double的范围是由指数的位数来决定的。 float的指数位有8位,而double的指数位有11位,分布如下: float: 1bit(符号位) 8bits(指数位) 23bits(尾数位) double: 1bit(符号位)11bits(指数位)52bits(尾数位) 于是,float的指数范围为-127~128,而double的指数范围为-1023~1024,并且指数位是按补码的.. (更多)
1 范围float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位,分布如下:float:1bit(符号位) 8bits(指数位) 23bits(尾数位)double:1bit(符号位)11bits(指数位)52bits(尾数位)于是,float的指数范围为-127~128,而double的指数范围为-1023~1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。2 精度float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为6~7位有效数字;double:2^52 = 4503599627370496,一共16位,同理,double的精度为15~16位 (收起)float类型通常是32位,它至少有6位有效数字,取值范围一般在10^-38 ~ 10 ^ 38之间
2011-02-13 11:45:27 1回应
-
第105页
timebug (绝对清晰,是风格上唯一的美。)
http://book.douban.com/annotation/14883122/ 接着玩: >> char **argv argv是一个指向一个指向char类型的指针的指针。 >> int (*daytab)[13] daytab是一个指向数组[0..12]的指针,它的元素类型是int类型。 >> int *daytab[13] daytab是一个数组[0..12],它的元素类型是指向int类型的指针。 >> void *comp() comp是一个函数,其指向的函数返回一个指向void类型的指针。 >> void (*comp)(... (更多)http://book.douban.com/annotation/14883122/ 接着玩:>> char **argvargv是一个指向一个指向char类型的指针的指针。>> int (*daytab)[13]daytab是一个指向数组[0..12]的指针,它的元素类型是int类型。>> int *daytab[13]daytab是一个数组[0..12],它的元素类型是指向int类型的指针。>> void *comp()comp是一个函数,其指向的函数返回一个指向void类型的指针。>> void (*comp)()comp是一个指向函数的指针,其指向的函数返回一个void类型。>> char (*(*x())[])()x是一个函数,其指向的函数返回一个指向数组的指针,它的元素类型是指向函数的指针,其指向的函数返回一个char类型。>> char (*(*x[3])())[5]x是一个数组[0..2],它的元素类型是指向函数的指针,其指向的函数返回一个指向数组[0..4]的指针,它的元素类型是char类型。 (收起)2012-01-18 20:00:35 回应
-
第94页
zoo~wee (向着阳光,爱生活)
Pointers and Arrays 本章开头首先点明了指针的作用 原文:Pointers are much used in C,partly because they are the only way to express a computation ,and partly because they usually led to more compact and efficient code than can be obtained in other ways. "the only way to express a computation"这些computations指的是那些? "led to more compact and efficienr code"具体的.. (更多)Pointers and Arrays本章开头首先点明了指针的作用原文:Pointers are much used in C,partly because they are the only way to express a computation ,and partly because they usually led to more compact and efficient code than can be obtained in other ways."the only way to express a computation"这些computations指的是那些?"led to more compact and efficienr code"具体的表现和例子? (收起)2011-10-21 00:28:49 回应
-
第一章
1.c中for循环中必须有循环体: for(nc =0; getchar() != EOF; ++nc) ; 2. 如果程序中的幻数都以符号常量的形式出现,对程序进行大量修改就会相对容易一些 3. getchar函数从文本流中读入下一个输入字符,并将其作为结果值返回 4. 每次调用putchar函数时将打印一个字符,通常是显示在屏幕上 5. define: define constant: #define token [value] create a macro : #define MAX(a, b) ((a) > (b) ? (a)... (更多)1.c中for循环中必须有循环体:for(nc =0; getchar() != EOF; ++nc) ;2. 如果程序中的幻数都以符号常量的形式出现,对程序进行大量修改就会相对容易一些3. getchar函数从文本流中读入下一个输入字符,并将其作为结果值返回4. 每次调用putchar函数时将打印一个字符,通常是显示在屏幕上5. define: define constant: #define token [value] create a macro : #define MAX(a, b) ((a) > (b) ? (a) : (b))6. 我们通常把函数定义中圆括号内列表中出现的变量称为形式参数,而把函数调用中与形式参数对应的值称为实际参数7. 出现在main函数之前的声明语句int power(int m, int n);表明power 函数有两个int 类型的参数,并返回一个int 类型的值。这种声明称为函数原型,它必须与power函数的定义和用法一致。如果函数的定义、用法与函数原型不一致,将出现错误。8. ANSI C同较早版本C语言之间的最大区别在于函数的声明与定义方式的不同。power(base, n)int base, n;{ }9. 在C 语言中,所有函数参数都是“通过值”传递的。也就是说,传递给被调用函数的参数值存放在临时变量中,而不是存放在原来的变量中。被调用函数不能直接修改主调函数中变量的值,而只能修改其私有的临时副本的值。10. 必要时,也可以让函数能够修改主调函数中的变量。这种情况下,调用者需要向被调用函数提供待设置值的变量的地址(从技术角度看,地址就是指向变量的指针),而被调用函数则需要将对应的参数声明为指针类型,并通过它间接访问变量11. 我们在谈论外部变量时谨慎地使用了定义(define)与声明(declaration)这两个词。“定义”表示创建变量或分配存储单元,而“声明”指的是说明变量的性质,但并不分配存储单元12. 过分依赖外部变量会导致一定的风险,因为它会使程序中的数据关系模糊不清——外部变量的值可能会被意外地或不经意地修改,而程序的修改又变得十分困难。13. 字符变量的取值是字符常量,即单个字符。字符变量的类型说明符是char。字符变量类型说明的格式和书写规则都与整型变量相同。例如:char a,b; 每个字符变量被分配一个字节的内存空间,因此只能存放一个字符。字符值是以ASCII码的形式存放在变量的内存单元之中的。如x的十进制ASCII码是120,y的十进制ASCII码是121。对字符变量a,b赋予'x'和'y'值: a='x';b='y';实际上是在a,b两个单元内存放120和121的二进制代码: a 0 1 1 1 1 0 0 0 b 0 1 1 1 1 0 0 1所以也可以把它们看成是整型量。 C语言允许对整型变量赋以字符值,也允许对字符变量赋以整型值。在输出时, 允许把字符变量按整型量输出,也允许把整型量按字符量输出。 整型量为二字节量,字符量为单字节量,当整型量按字符型量处理时, 只有低八位字节参与处理。 (收起)2011-09-25 12:35:43 1回应
书评 · · · · · · (共50条) 我来评论这本书
热门评论 最新评论
K&R的世界
-
- sandorf B5纸的开本,除去附录,这是一本不到200页的小书。根据我20年的读书经验,图书分类上最大的缺陷之一就是没有首先把书分为两类:可以睡前躺在床上看的书和不能躺在床上看的书——因为很多书太重。绝大多数计算机类书籍属于后者,这本书则属于前一类,传递着一种简单、优雅、平实和闲适。 难以置信的是,这样一本C语言的入门书籍,...... (43回应)2007-10-04 163/164有用来自 Prentice Hall1989版
请看C语言圣经!--- 浅谈我个人的阅读体会
-
- 一笑 如果你是一个完完全全的编程新手,本书不适合于你---- 你应该先看一本国内的C语言教材,他们虽然泛泛而谈,但至少可以让你了解具备一点最基本的C语言知识,而且不会让你感到太困难---比如潭老师的书(虽然被很多人唾弃)---何况国内的作者最适合写计算机方面泛泛而谈的书籍..呵呵。 如果你已经看过1到2本最基础...... (11回应)2006-04-16 47/49有用
配套此书的习题集一起看,可功力大增.
-
- compactset 其实第一本c语言书是不是它要看各人功力.要是不会吸星大法, 纵然有高手注入n股纯阳真气, 也练不出九阳神功. 第一遍读此书, 悟性如我这样的, 觉得没有什么收获, 因为自己体质太弱, 突然进补此等无色无臭的高级鸡汤, 实在吸收不了其中的高级营养, 只能喝点米汤,于是我读"C语言的科学和艺术". 后来,慢...... (6回应)2008-07-18 22/22有用
书写出来的只是冰山一角
-
- nokivan 1年前翻过的书,当时感觉就是一本讲的不够详细的一本书,还有题目很难。曾经甚至幼稚的以为看懂了这本书。随着对C和CS的逐渐了解,期间总是想再把它拿过来认认真真的看一遍。他比任何其他任何语言类书籍能让你感觉”踏实“,或许这就是作者功力和经验的体现。现在再翻翻不得不说作者”在下一盘很大的棋“。书写出来的只是冰山一角,能不能看......2012-02-11 1/1有用
推荐一个C语言教程(小学生坐在马桶上都可以读懂的...
-
- 啊哈C语言 推荐一个C语言教程………… 萌爆了……………… 小学生坐在马桶上都可以读懂的“C语言编程”入门书 下载地址:下载地址http://www.docin.com/p-332091647.html......2012-02-04
一本程序员案头必备的书籍
-
- 恋雨晴结 看这本书已经很长一点时间了,当时学习C语言的时候用的谭浩强的书,后来想深入的学习C语言,就买了这本书,本书的作者就是C语言的发明者,本书只有薄薄的两百来页,但是却字字珠玑,深刻透彻,可以说是C语言方面最经典的书,不仅值得阅读,还值得收藏。......2011-12-02
不错的一本书!
-
- summary 有人说C语言超简单啊,可也有人说C语言太难了,自学没法看的!我自己买来书一看,嘿,真不幸,我归后面那一堆儿的!我就在网上到处找怎么学,在猎豹网校上看到,那么多编程课程,一大堆IT课程,就有这个C语言!一看视频,觉得老师讲得挺清楚啊,跟着听,好像也不怎么难啊。我一琢磨,是自己没那个耐心,一行一行去对着书啃那么多代码,搞清......2011-11-21 来自 清华大学出版社2000版
"C程序设计语言"的论坛 · · · · · ·
这本书的其他版本 · · · · · · ( 全部7 )
- Prentice Hall版 1989-03-01 / 855人读过 / 有售
- 机械工业出版社版 2006-8-1 / 254人读过 / 有售
- 清华大学出版社版 2000-7 / 183人读过
- 机械工业出版社版 2001-03-01 / 119人读过
以下豆列推荐 · · · · · · (全部)
- 豆瓣评分>9的书(100人以上) (阿獠)
- 我的编程之路 (风中纸页)
- 程序员最应该读的图书(中译版) (hongqn)
- 计算机科学与技术专业学生的基础书籍 (七月狄奥尼索斯)
- C语言书籍 (sagasw)
谁读这本书?
喜欢这本书的人常去的小组 · · · · · ·

- Vim (6198)

- Python编程 (19003)

- LISP (2011)

- Emacs (2340)

- O'Reilly爱好者 (2803)

- Linux (6610)

- C++及编程 (5000)

- 程序员(不看公告发豆油的... (4662)
喜欢这本书的人关注的活动 · · · · · ·
订阅关于C程序设计语言的评论:
feed: rss 2.0











