(完整)C语言谭浩强学习笔记.pdf
《(完整)C语言谭浩强学习笔记.pdf》由会员分享,可在线阅读,更多相关《(完整)C语言谭浩强学习笔记.pdf(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、天不造人上人,亦不造人下人福泽谕吉 1 C 语言谭浩强版笔记 第一章 程序设计和 C 语言 1、计算机能直接识别和接受的二进制代码称为机器指令,机器指令的集合就是该计算机的机器语言。2、语言的发展历史:机器语言符号语言高级语言 3、高级语言的发展:非结构化语言结构化语言面向对象的语言 4、C 语言的祖先是 BCPL 语言 5、在字符串中的/和/*都不作为注释的开始。而是作为字符串的一部分。【但是在 vc+6.0 中/显示编译错误】6、不要以为在 max 函数中求出最大值 z 后就会自动地作为函数值返回调用处,必须用 return 语句指定将哪个值作为函数值。也不要不加分析地在所有函数后面都写上
2、 return 0 7、一个程序由一个或多个源程序文件组成 8、全局声明:即在函数之外进行的数据声明,在函数外面声明的变量称为全局变量。例如把 int a,b,sum;放到 main 函数的前面 9、函数是 C 程序的主要组成部分,编写 C 程序的工作主要就是编写一个个函数 10、一个 C 语言程序是由一个或多个函数组成的,其中必须有且只有一个 main 函数 11、一个小程序只包含一个源程序文件,在一个源程序文件中包含若天不造人上人,亦不造人下人福泽谕吉 2 干个函数(其中一个为 main 函数),若程序规模太大,可以使一个程序包含若干个源程序文件,每个源程序文件又包含若干个函数【一个源程序
3、文件就是一个程序模块,一个程序分成若干个程序模块】12、在进行编译时是以源程序文件为对象进行的【分别对各源程序文件进行编译得到相应的目标程序,然后再将这些目标程序连接成为一个统一的二进制可执行程序】13、C 语言的这种特点使得容易实现程序的模块化 14、一个函数名后面必须跟一对圆括号,括号内写函数的参数名及其类型。如果函数没有参数,可以写 void 或空括号【如 int main(void)或 int main()】15、void dump()它是一个空函数,但是是合法的 16、程序总是从 mian 函数开始执行的,不管位置在哪儿 17、程序中对计算机的操作是由函数中的 C 语句完成的 18、
4、二进制目标程序在 visual C+中的后缀为.obj 19、可执行程序在 visual C+中的后缀为.exe 20、一个源程序经过编译后得到的目标程序要经过连接阶段与函数库进行连接才能生成可执行文件 21、程序设计的任务:问题分析设计算法编写程序对源程序进行编辑、编译和连接运行程序,分析结果编写程序文档 第二章 算法 1、对数据的描述:在程序中要指定用到哪些数据类型以及这些数据天不造人上人,亦不造人下人福泽谕吉 3 类型和数据的组织形式,这就是数据结构。2、对操作的描述:即要求计算机进行操作的步骤,也就是算法。3、算法+数据结构=程序 4、算法是灵魂,数据结构是加工对象,语言是工具,编程需
5、要采用合适的方法。5、算法的概念:为解决一个问题而采取的方法和步骤。6、计算机算法可分为两大类:数值运算算法和非数值运算算法【数值运算用于求数值解,非数值运算用于事务管理领域】7、算法的特性:有穷性确定性有零个或多个输入有一个或多个输出有效性 8、怎样表示一个算法:自然语言、传统流程图、结构化流程图、伪代码等 9、连接点就是将画在不同地方的流程图连起来,流程图别忘记画箭头。基本结构的特点:只有一个入口只有一个出口结构内的每一部分都有机会被执行到结构内不存在死循环 10、区分当型和直到型:前者先判断条件成不成立,再执行下一步,后者先执行,再判断条件 11、用 N-S 图表示的算法都是结构化的算法
6、,如果一个算法不能分解为若干个基本结构,则它必然不是一个结构化的算法【N-S 图又称盒图】12、结构化设计方法的基本思路:把一个复杂问题的求解过程分阶段天不造人上人,亦不造人下人福泽谕吉 4 进行,每个阶段处理的问题都控制在人们容易理解和处理的范围内。13、方法:自顶向下逐步细化模块化设计结构化编码 14、程序中的子模块一般不超过 50 行 15、模块的独立性:使用一个模块完成一项功能,耦合性越少越好 16、结构化程序设计方法用来解决人脑思维能力的局限性和被处理问题的复杂性之间的矛盾 第三章 最简单的 C 程序设计 1、vc+把所有实数都作为双精度数处理。因此提醒用户:把双精度常量赋给 flo
7、at 型变量会造成精度损失,知道怎么回事就行了 2、数据有两种表现形式:常量和变量 3、常量分为:整型常量(1000)实型常量(十进制小数形式和指数形式【12.34E3,E 后面必须是整数】)字符常量(普通字符、转义字符)字符串常量 符号常量(#define PI 3.1416)4、基本字符集中的每个字符必须用一个字节表示,空字符也占一个字节,它的所有二进制位都是 0 5、一个 tab 位置为 8 列 6、101代表八进制数 101 的 ASCII 字符,即A(十进制65),x41代表十六进制数 41 的 ASCII 字符,也是A,0天不造人上人,亦不造人下人福泽谕吉 5 或者000是代表 A
8、SCII 码为 0 的控制字符,即空操作字符 7、单撇号内只能包含一个字符,双撇号内可以包含一个字符串 8、符号常量不占内存,只是一个临时符号,在预编译后这个符号就不存在了,故不能对符号常量赋以新值 9、变量必须先定义后使用 10、常变量 const int a=3,表示 a 被定义为一个整型变量,指定其值为 3,而且在变量存在期间其值不能改变,常变量不能出现在赋值号的左边。例如上面一行不能写成:const int a;a=3;可以用表达式对常变量初始化,如 const int b=3+6,c=3*cos(1.5);天不造人上人,亦不造人下人福泽谕吉 6 11、标识符只能由字母、数字和下划线组
9、成,且第一个字符必须是字母或下划线 12、基本类型和枚举类型变量的值都是数值,统称为算数类型 算数类型和指针类型统称为纯量类型(因为其变量的值是以数字来表示的)枚举类型是程序中用户定义的整数类型 数组类型和结构体类型统称为组合类型(共用体类型不属于组合类型,因为在同一时间内只有一个成员具有值 13、TC2.0 为每个整型数据分配 2 个字节(16 个二进位);VC+为每个整型数据分配 4 个字节(32 位)14、求负数的补码的方法:先将此数的绝对值写成二进制形式,然后对其后面所有各二进位按位取反,再加 1 15、取值范围 天不造人上人,亦不造人下人福泽谕吉 7 16、如果既未指定为 signe
10、d 也未指定为 unsigned 类型,默认为有符号类型 17、只有整型(包括字符型)数据可以加 signed 或 unsigned 修饰符,实型数据不能加 18、实型数据取值范围:19、在一个整数末尾加大写字母 L 或小写字母 l,表示它是长整型 20、浮点型常量(小数或指数)在内存中都以指数形式储存 21、C 程序中的实型常量都是双精度浮点型常量 float a=3.14159;在进行编译时,对 float 变量分配 4 个字节,但对于浮点型常量3.14159,则按照双精度处理,分配 8 个字符 22、如果除数或被除数中有一个是负值,则舍入的方向不固定,一般采取“向零取整”的方法,即-5/
11、3=-1 23、%运算符要求参加运算的对象是整数,除%以外的运算符的操作数都可以是任何算数类型 24、+i 是先执行 i=i+1 后,再使用 i 的值;而 i+是先使用 i 的值后,再执行 i=i+1。天不造人上人,亦不造人下人福泽谕吉 8 设已作声明:int i=6,a;25、算数表达式和运算符的优先级与结合性 天不造人上人,亦不造人下人福泽谕吉 9 26、不同类型数据间的混合运算规律为:(取精度较高的)+,*,/运算的两个数中有一个为 float 或 double 型,结果是double 型,因为系统将所有 float 型数据都先转换为 double 型,然后进行运算。如果 int 型与
12、float 或 double 型数据进行运算,先把 int 型和float 型数据转换为 double 型,然后进行运算,结果是 double 型。字符(char)型数据与整型数据进行运算,就是把字符的 ASCII 代码与整型数据进行运算。字符型可以直接与整型数据进行运算。如果字符型数据与实型数据进行运算,则将字符的 ASCII 代码转换为double 型数据,然后进行运算。27、强制类型转换:一般形式为(类型名)(表达式),在强制类型转换时,得到一个所需类型的中间数据,而原来的变量的类型未发生变化 28、左值都可以作为右值,但算数表达式(a+b)或常量不能为左值 29、a=(a=b)=3*4
13、;/报错,左侧的操作数必须是左值 天不造人上人,亦不造人下人福泽谕吉 10 30、C 语言的截断 i=289 0000 0001 0010 0001 c=33 0010 0001 31、在 if 条件中可以包含赋值表达式,但不能包含赋值语句 32、一般变量初始化不是在编译阶段完成的【只有在静态储存变量和外部变量的初始化是在编译阶段完成的】,而是在程序运行时执行本函数时赋予初值的,相当于执行一个赋值语句。33、在 scanf 函数中,输入的数字可以用空格分开 34、在 printf 函数中,例如%7.2f 代表在输出时,指定数据占 7 列,其中小数占 2 列 35、C 语言本身不提供输入输出语句
14、(printf 和 scanf 不是 C 语言的关键字。而只是库函数的名字)36、如果在源程序中有 printf 函数,在编译时并不把它翻译成目标指令,而是在连接阶段与系统函数库相连接后,在执行阶段中调用库函数中的 printf 函数 37、头文件称为标准模式,”编译系统先在用户的当前目录查找 38、由于 printf 是函数,因此,“格式控制字符串”和“输出表列”实际上都是函数的参数 39、float 型数据的存储单元只能保证 6 位有效数字,double 是 15天不造人上人,亦不造人下人福泽谕吉 11 位 40、%-m.nf,输出的数据向左对齐 41、e 格式符是以指数形式输出实数,默认
15、小数部分 6 位,指数部分5 列 42、格式字符含义(注意大小写):43、m.n 中的 n 对实数表示输出 n 位小数,对字符串表示截取的字符个数 44、如果想输出字符%,在“”中用连续 2 个%表示:(经检测只输一个不显示)45、在 scanf 函数中,如果两个%f 间有 2 个空格,在输入时,两个数天不造人上人,亦不造人下人福泽谕吉 12 据之间应有 2 个或更多的空格 46、用%c 格式声明输入字符时,空格字符和转义字符中的字符都作为有效字符输入 47、putchar 函数是输出字符的函数,而不是整数,例如 putchar(66)输出字符 B,putchar 可以是字符常量,字符变量,整
16、型常量,整型变量(ASCII 码范围内)48、putchar(getchar();将接收到的字符输出 49、printf(“%c”,getchar();先从键盘输入一个字符,然后用%c的格式输出 第四章 选择结构程序设计 1、if 复合语句应当用花括号括起来 2、所谓关系运算就是比较运算 3、关系运算符中等于与不等于优先级最低 4、算术高于关系高于赋值,关系表达式的值是一个逻辑值,真或假【d=ab;如果 a 大于 b 为真,则 ab 的值为 1,所以 d 为 1】5、逻辑运算符中,非运算符(!)和单目的算术运算符同级,高于双目的算术运算符,优先于关系运算符,优先于逻辑运算符与(&)和或(|)。
17、逻辑运算符中,非运算符(!)的结合性为右结合;与运算(&)和或运算(|)的结合性为左结合。6、0 为假,非 0 为真 7、逻辑表达式注意“短路”现象 天不造人上人,亦不造人下人福泽谕吉 13 8、逻辑型变量(C99,参考):在头文件 stdbool.h 中,将 bool 定义为_Bool 的同义词,同时定义了两个符号常量 true 代表 1,false 代表 2(作用是将关系运算和逻辑运算的结果存到一个逻辑型变量中,以便于分析和运算,定义逻辑变量用类型符_Bool)9、条件运算符由?和:组成,是 C 语言中唯一的一个三目运算符 10、条件与是哪 U 老虎的优先级别比关系运算符和算术运算符低,所
18、以括号可以不要。例如:max=(ab)?a:b+1;可以写成 max=ab?a:b+1;11、if 语句的嵌套:else 总是与它上面的最近的未配对的 if 配对 12、switch 语句中 break 语句的作用是使流程转到 switch 语句的末尾(即由花括号处)13、switch 语句:switch 后面括号内的表达式,其值的类型应当是整数类型(包括字符型)case 后面跟一个常量(或常量表达式)语句体内包含多个以关键字 case 开头的语句行和最多一个以default 开头的行 天不造人上人,亦不造人下人福泽谕吉 14 case 出现次序不影响执行结果,可以先出现 default 标号
19、 在执行 switch 语句中,根据 switch 表达式的值找到匹配的入口标号,并不在此进行条件检查,在执行完一个case 标号后面的语句后,就从此标号开始执行下去,不再进行判断!最后一个 case 子句可不加 break 多个 case 标号可以共用一组执行语句,例如:case a:case b:case c:printf(“60n”);break;如果条件满足,不管是 abc,都输出60 第五章 循环结构程序设计 1、while 语句中循环体只能是一个语句,特点是先判断条件表达式,然后执行循环体语句【while(表达式)语句】2、dowhile 语句的特点是:先执行,再判断【do 语句
20、while(表达式);】3、循环语句中不要忘记给变量赋初始值 4、当 while 后面的表达式的第 1 次的值为“真”时,两种循环得到的结果相同;否则,两者结果不相同(指两者具有相同的循环体的情况)5、for 语句与 while 语句两者无条件等价 6、for 语句若没有表达式 2 或表达式 3,循环体会无止境地执行下去 天不造人上人,亦不造人下人福泽谕吉 15 7、表达式 1 可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式 for(sum=0;i0);printf(“yes”);31、strlen 函数:测字符串实际长度,不包括0,也可以直接测试字符串常量的长度 32
21、、strlwr 函数:将字符串中大写字母转换为小写字母 strupr 函数:将字符串中小写字母转换为大写字母 33、在使用字符串处理函数时,头文件应加入#include 第 7 章 用函数实现模块化程序设计 1、一个 C 程序可由一个主函数和若干个其他函数构成,由主函数调用其他函数,其他函数也可互相调用,同一个函数可以被一个或多个函数调用任意多次 天不造人上人,亦不造人下人福泽谕吉 22 2、函数声明的作用是让系统中编译时知道它们是函数而不是变量或其他对象 3、一个 C 程序由一个或多个程序模块组成,每一个程序模块作为一个源程序文件。由若干个源程序文件组成一个 C 程序,一个源程序文件可以为多
22、个 C 程序共用 4、一个源程序文件由一个或多个函数以及其他有关内容组成。一个源程序文件是一个编译单位,在编译时以源程序文件为单位进行编译,而不是以函数为单位 5、从 main 开始,从 main 结束 6、一个函数并不从属于另一个函数,函数不能嵌套定义(可以嵌套调用)。函数间可以互相调用,但不能调用主函数,mian 函数是被操作系统调用的 7、无参函数可以带回或不带回函数值,但一般不带回,有参函数应定义为与返回值相同的类型 8、定义函数,函数体可以包括声明部分和语句部分 9、调用函数并不一定要求包括分号,只有作为函数调用语句才需要有分号。如果作为函数表达式或函数参数,函数调用本身是不必有分号
23、的 10、定义函数时函数名后面括号中的变量名称为形式参数;在主调函数中调用一个函数时,函数名后面括号中的参数称为实际参数,实参可以是常量、变量或表达式 11、系统会把实参的值传递给被调用函数的形参 天不造人上人,亦不造人下人福泽谕吉 23 12、如果实参与形参类型不同,则按不同类型数值的赋值规则进行转换 13、在定义函数中指定的形参,在未出现函数调用时,他们并不占内存中的存储单元。在发生函数调用时,函数 max 的形参被临时分配内存单元 14、应当注意返回值的类型与函数类型一致 15、形参与实参是两个不同的存储单元 16、实参向形参的数据传递是“值传递”,单向传递,只能由实参传给形参,实参无法
24、得到形参的值 17、函数的返回值是通过函数中 return 语句获得的 18、一个函数可以有一个已上的 return 语句,执行到哪一个 return语句,哪一个 return 语句就起作用。return 语句后面的括号可以不要,return 语句后面的值可以是一个表达式 19、如果函数值的类型和 return 语句中的表达式不一致,则已函数类型为准(不指定函数类型,编译系统默认为 int 型)20、对于不带回值的函数,应当用定义函数为“void 类型”,或空类型 21、用户定义的函数在调用它的函数的后面(同一文件内),应该在主调函数中对被调用函数作声明 22、函数声明比函数定义中的首行多一个
25、分号 23、函数声明中的形参名可以省写,而只写形参的类型。(函数定义应该不能省略)天不造人上人,亦不造人下人福泽谕吉 24 24、如果在文件的开头,对本文件所调用函数进行了声明,则在各函数中不必对其所调用的函数再做声明 25、一个函数内不能再定义另一个函数,也就是不能嵌套定义,但可以嵌套调用函数 26、凡是变量可以出现的地方,都可以用数组元素代替 27、数组名可以作实参和形参,传递的是数组第一个元素的地址。数组元素可以用作函数的实参,不能用作形参。28、数组元素采用的是值传递的方式,方向是从实参传到形参,单向传递 29、用数组元素作实参时,向形参变量传递的是数组元素的值,而用数组名作函数实参时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 完整 语言 谭浩强 学习 笔记
限制150内