好文档 - 专业文书写作范文服务资料分享网站

C语言基础教程读书笔记

天下 分享 时间: 加入收藏 我要投稿 点赞

C语言基础教程

1. 字符串”\\a”\\b””表示由a”b”组成的字符串。当双引号本身作为字符处理时,前面要加一

个反斜线,以便与定界符的双引号加以区别。 2. 字符常量存放在内存中占一个字节的空间,字符串常量存放在内存中占有的字节个数是

字符个数加1,因为每个字符串存放在内存中都有一个结束符’\\0’。 3. 获得一个字符的函数getchar( ); 4. 获得一个字符串的函数gets( ); 5. 标准格式输入函数scanf( );

6. scanf( )函数的格式说明符如下所示:d-十进制整数;x-十六进制整数;o-八进制整数;

u-无符号十进制整数;f-小数表示的浮点数;e-指数表示的浮点数;c-单个字符;s-字符串; 7. int scanf(“(控制串)”,(参数表)),(参数表)是由一个或多个参数构成,多个参数使用时用逗

号分隔,每个参数用地址值表示。 8. 常用的输出函数:1.输出一个字符函数putchar( );2.输出一个字符串函数puts( );3.标准

格式输出函数printf( ); 9. int printf(“(字符串)”,(参数表)),在格式标识符(%)与格式说明符之间可使用修饰符,用来

限制输出数据的宽度和对齐方式。 10. 数字.数字-小数点前面的数字用来表示输出数据的最小域宽,它用来指出输出数据的最

小宽度,小数点后面的数字用来表示输出数据的精度,对浮点数来讲表示小数点后的位数,对字符串来讲表示输出字符串的最大个数,并将超过的部分截掉,对整数来将表示输出的最大位数超过部分被截去。(很少使用) 11. l-用于格式说明符d\\o\\x前边表示长整数。用于e\\f\\g前面表示双精度浮点数。 12. —-负号用来表示数据在域宽中左对齐,若不用负号,则表示右对齐。

13. 在IBM PC的16位微机中,单精度浮点数占4个字节(32位)可提供7位有效数字,取值范围在10-38-1038之间,双精度浮点数占8个字节(64位),可提供15-16位有效数字。 14. 一个字符数组中存放的是否字符串,关键取决于给它赋值或赋初值的情况,如果对一个

字符数组在赋值或赋初值时将字符’\\0’赋给了某个元素,则该字符数组存放的是一个以’\\0’结束的字符串。 15. 求余运算符的功能是舍掉两整数相除的商,只取其余数,当两个整数中有一个为负数,

则按照下述规则处理:余数=被除数-除数*商。 16. 增1运算符作用于一变量,可使该变量的值增1,如果前缀作用于变量,则其表达式的

值为原变量值增1,如果后缀作用于变量,其表达式的值为原变量的值。 17. —>是用来表示指向结构/联合变量的指针的成员的。 18. 数组名本身是一个地址值了。

19. EOF是一个字符常量,其值被定义为-1。

20. 在包含&&和||运算符的逻辑表达式的求值过程中,当计算出某个操作数的值后就可以确

定整个表达式的值,计算便不再继续进行。 21. switch(整型表达式),要求其表达式的值为int型数,否则转换成int型数。case(整常型

表达式),要求表达式用int型常量组成,不得含有变量,一般用数字或字符组成。 22. goto语句最常见的用法一是用来与if语句构成循环结构,二是用来以多重循环最内重一

次退到最外边。 23. 在循环体中,遇到break语句,则退出该重循环。

24. continue语句的功能只是用在循环体中,执行该语句则结束本次循环,再去判断是否继

续下次循环。 25. return语句有两种格式:不带返回值格式和带返回值格式。该语句用在被调用函数中,

在被调用函数中执行到该语句时,将结束对被调用函数的执行,并把控制器返回给调用函数,继续执行调用函数后边的语句。在带返回值的情况下,将return语句所带的表达式的值返回给调用函数,作为调用函数的值。 26. 在实际应用中,关于形参和实参的使用应注意几点:1.定义函数时,所指定的形参.数在

该函数被调用前是不被分配内存单元的,只有在被调用时,才给形参分配单元,并且赋值,一旦调用结束,形参所占内存单元被释放。2.函数调用时所用的实参是一个具有确定值的表达式,调用时先计算表达式的值,再将其值传递给对应的形参。3.函数的形参是属于定义它的函数的局部变量,因此,允许一个函数的形参和实参同名,它们在内存中占有不同的存储单位。4.函数调用要求形参和实参在个数上相等,并且对应参数类型相同。 27. C语言中函数的定义不允许嵌套,就是说不允许在函数中定义函数。C语言程序中若干

个函数都是平行的、独立的,函数之间是通过调用联系的,函数的调用是允许嵌套的,就说说在调用某个函数的过程中还允许调用其他函数。 28. 并非所有的问题都可采用递归调用的方法,只有满足下列要求的问题才可使用递归调用

方法来解决:能够将原有的问题化为一个新的问题,而新的问题的解决方法与原有问题的解决办法相同,按这一原则依次化分下去,最终化分出来的新的问题可以解决。 29. 用递归函数编写的程序执行起来在时间和空间的开销上都比较大。 30. 语句标号属于函数级。符号常量属于文件级。

31. 程序级是指作用范围(即作用域)在整个程序内,包含该程序的所有文件。同样,文件

级的是指作用范围在定义它的文件中,往往是从定义时开始。函数级的是指作用范围在定义它的函数体内。程序段级是指作用域在定义它的分程序内。 32. 存储类是指数据被存放的地方不同而进行的分类。C语言中,有的变量可以被存在CPU

的通用寄存器中,多数的数据是存在内存中,内存中的数据又被氛围静态存储区和动态存储区。变量按其作用域可分为全局变量和局部变量,按其寿命可分为静态存储变量和动态存储变量。 33. C语言规定变量的存储类分为4种:1.自动存储类变量(auto)。2.寄存器存储类变量

(register)。3.外部类变量(extern).4.静态类变量(static)。

34. 自动类变量的作用域是在定义它的函数体或分程序内,一旦退出了该函数体或分程序,则是不可见的。这类变量的寿命是短的,它被存放在内存的动态存储区内。每次进入定义它的分程序或函数体内被动态分配存储区域,一旦退出该程序或函数体内,所占用的内存区域被释放掉,即不存在了。 35. 寄存器类变量的作用域是在定义它的函数体或分程序内,寿命是短的。这类变量与自动

类变量的区别在于寄存器变量有可能被存放在CPU的通用寄存器中。若是则将大大提高对数据的存取速度。定义寄存器变量时,应注意如下几点:1.定义的寄存器变量的个数不能太多,空闲的通用寄存器数目是有限的。2.由于通用寄存器数据长度的限制,一般定义为寄存器的数据类型为char\\int型。3.通常选择使用频率较高的变量被定义为寄存器类,将有利于提高效率,如在多重循环程序的最内重循环的循环变量定义为寄存器类变量。 36. 外部类变量的作用域是整个程序,包括组成该程序的所有文件,外部类变量的作用域最

大,寿命是长的,其被存放在内存的静态存储区,某个程序的外部变量的寿命直到程序结束才被释放。 37. 函数之间传递信息有如下三种方式:1.返回值方式,安全可靠,但只能返回一个值。2.

传址调用方式,既安全又可传递多个值。3.外部类变量方式,虽可传递多个值,但是不安全。 38. 静态类变量又分为内部静态类和外部静态类两种。内部静态类的作用域同于自动类,即

在定义它的函数或分程序内是可见的。同于外部类,这类变量被存放在内存的静态存储区。这类变量被定义后,一直存在到程序结束才被释放,外部静态类变量是在定义它的文件中,并且从定义开始。 39. 外部静态类变量定义在函数体外,即在某个文件中,在文件后文件首或文件尾都可以,

也可以在文件中间。但是它的作用域是从定义时起。 40. 外部类变量在引用前一般要进行说明,说明的方法是在变量名前面加上说明符extern,

这种说明可以放在函数体内,也可放在函数体外,有时引用外部类变量可以不说明,但在下面两种情况下必须说明:1.在一个多文件程序中,某个文件中定义了外部类变量,如要在另一个文件中引用,则引用前必须说明。2.在一个文件中,如果是先引用外部类变量,后定义外部类变量,则引用前必须说明。 41. 自动类和寄存器类变量定义后在没有赋值或赋初值之前,其值不可使用,是无意义的数

据。外部类和静态类变量定义后在没有赋初值或赋值之前,它们有默认值,对int型变量为0,对浮点型变量为0.0,对char型变量为空。 42. 全局变量是指作用域在文件级以上的,它包含外部类变量和外部静态类变量。局部变量

是指作用域在函数级以下的,另外,函数的形参也属于局部变量。 43. 内部函数的只能在定义它的文件内调用,不能在一个文件内调用同一程序中的另一个文

件中的内部函数。内部函数的作用域是文件级的,而外部函数的作业域是程序级的。 44. 预处理功能包含宏定义、文件包含、条件编译三部分。类型定义是通过使用类型定义语

句将已有类型定义成新的标识符所代表的类型。

45. 预处理命令不同于C语言的语句,它们具有如下特点:1.多数预处理命令只是一种替代的

功能,这种替代是简单的替换,而不进行语法检查。2.预处理命令都是在通常的编译之前进行的,编译时已经执行完了预处理命令,即对预处理后的结果进行编译。3.预处理命令后面不加分号。4.凡是预处理命令都以井号(”#”)开头。5.多数预处理命令根据它的功能而被放在文件开头为宜,但根据需要也可以放到文件的其他位置。 46. 宏定义分两种,一种是简单的宏定义,它不带有参数,另一种是带参数的宏定义。 47. 简单宏定义是定义一个标识符(宏名)来代表字符串,其使用注意事项:1.宏名一般用

大写字母,以便于与变量名区别。2.宏定义的预处理功能中的一种命令,它不是语句。若行末加了分号,则该分号将作为所定义的字符串的一部分来处理。3.宏替换是一种简单的替换,替换时不作语法检查。4.宏定义中的宏的作用域为定义该命令的文件,并从定义时起,到终止宏定义命令(#undef(标识符))为止。5.宏定义可以嵌套,指在进行宏定义时,可以引用已定义的宏名。6.一般编译系统对加有双引号的字符串的宏名不予替换。7.一般编译系统在宏替换时,隐含一空格符,将前后两部分分开。 48. 带参数的宏定义的格式如下:#define (宏名)(参数表)(宏体),如#define SQ(x)

x*x,a=SQ(x),则a=5*5。 49. 使用带参数宏定义该注意的事项:1.宏定义时,宏名与左圆括号之间不能出现空格符,

否则空格符后将作为宏体的一部分。2.宏体中,各参数上加括号是十分重要的。3.带参数的宏定义与函数的区别:1.定义形式上不同,宏定义通过预处理命令define来定义。2.处理时间上不同,宏定义是在编译预处理时处理的,而函数是在执行时处理的。3.处理方式上不同,带参数的宏定义进行宏替换时,用实参来代表形参,而函数调用时是将实参的值赋给形参。4.时间和空间上的开销不同,带参数的宏定义是在通常的编译之前完成替换的,它在该程序的目标代码的形成上并没有影响,函数调用是在执行时进行的,采用函数调用的方式可以减少该程序的目标代码,在空间开销上可以减少,但函数调用要有额外时间上的开销。5.类型要求上不同,带有参数的宏定义对形参的类型不必说明,它没有类型的限制,而函数的形参在定义时必须进行类型说明。 50. 宏定义主要用于下述几个方面:1.符号常量的定义。2.功能简单、使用频繁的情况下,

用带参数的宏定义比用函数可以提高速度。3.多数情况下,为书写简练、程序易读而采用宏定义。 51. 文件包含命令是C语言程序常用的一个预处理命令,它的格式:#include (文件名),它

的功能就是将指定的被包含的内容放置在文件包含命令出现的地方,一般写在一个文件的开头,被包含的.h文件中往往是一些该程序所需要的一些说明或定义,它包括符号常量的定义、类型定义、带参数的宏定义、数组、结构、联合和枚举的定义等等,它还包含外部变量的定义,函数的定义和说明等。 52. 使用文件包含命令时应注意事项:1.一个文件包含命令只能包含一个文件,如某个程序

需包含多个文件,则可使用多条文件包含命令,如:#include “xy.h” #include “mn.h”。2.文件包含的定义可以嵌套,是指在一个被包含的文件中还可以包含其他文件。3.文件包含命令中,#include <文件名>,表示所引用的被包含是系统提供的。#include “文件名”,表示所引用的被包含文件可能是用户自己定义的。编程人员对自己定义的被包含文件,引用时使用双引号,而系统提供的.h文件最好使用尖括号,这样查找可能快些。4.为提供程序的可移植性,编程时先将一些在不同环境或条件下需要修改的量或需修改部分放在一个被包含的文件中。

53. 条件编译指的是对编译的源程序的某种控制,即根据不用的条件来控制源程序参加编译

内容,称为条件编译。 54. 条件编译常用命令格式:1.#ifdef (标识符) <程序段1> #else <程序段2> #endif 该格式的

功能描述如下,当(标识符)被宏定义时,<程序段1>中的语句或命令参加编译,否则<程序段2>中的语句或命令参加编译。2.#ifndef(标识符) <程序段1> #else <程序段2> #endif 该格式的功能是:当(标识符)未被宏定义时,<程序段1>中的语句或命令参加编译,否则<程序段2>中的语句或命令参加编译。3.#if(表达式) <程序段1> #else <程序段2> #endif 该格式的功能是:当表达式是非0值时,则<程序段1>参加编译,否则<程序段2>参加编译。 55. 1.条件编译可以用来提高程序的通用性。2.条件编译会给程序调试带来方便。3.使用条件

编译替代if语句会减少目标代码的长度。 56. 类型定义指根据某种需要对已有的类型用一种新的类型名字来替代,其定义语句格式如

下:typedef (已有类型说明符) (新类型名表) 57. 类型定义语句在使用时应注意如下事项:1.该语句只是对已有的类型定义一个新名。2.

使用该语句时,习惯将新定义的类型名用大写字母。3.类型定义可以嵌套,所谓嵌套,是指用该语句定义的新的类型名再用来定义新的类型。4.常把使用该语句定义的数据类型包含在某个头文件中。5.在使用中会看到typedef语句与#define有相似之处,但三者实际不同。#define在编译的预处理完成,只是简单的替换,而typedef语句在编译时处理,它不是替换。 58. 1.使用类型定义可以简化书写,将一个复杂的类型定义成简单的新类型名。2.使用类型

定义会给一些变量带来更多的有用信息。3.使用类型定义,用新类型定义的变量在编译时做类型检查,从而增加安全性。 59. 指针是用来存放某个变量的地址值的,当然被存放地址值的那个变量已经定义过,并且

被分配了确定的内存地址值。一个指针存放了哪个变量的地址值,就说该指针指向那个变量。 60. 指针的类型是该指针所指向的变量的类型,而不是指针本身值的类型,指针本身值是内

存的地址值,其类型自然是int型或long型。 61. 函数的地址值用该函数的函数名来表示,指向函数的指针可用它所指向的函数名来赋

值。 62. 结构变量的指针用&运算符加结构变量名表示,结构变量的成员的地址也用&运算符加

结构变量的成员名来表示。 63. 在float m[3][2]、*p1[3]、(*p2)[2]中,m是一个二维数组名,p1是一个一维一级指针数

组名,所谓指针数组就是数组的元素为指针的数组。数组p1有3个元素,每个元素是一级指针。p2是一个指向数组的指针,它指向一个每列有2个元素的二维数组。 64. 指向函数的指针表示如下:int (*pf)(),pf是一个指向函数的指针,它指向的函数的返回值

为int型。 65. 指针函数表示如下:int *pf(),pf是一个返回值为int型数的指针函数,所谓 指针函数是

一种返回值为指针的函数。

C语言基础教程读书笔记

C语言基础教程1.字符串”\\a”\\b””表示由a”b”组成的字符串。当双引号本身作为字符处理时,前面要加一个反斜线,以便与定界符的双引号加以区别。2.字符常量存放在内存中占一个字节的空间,字符串常量存放在内存中占有的字节个数是字符个数加1,因为每个字符串存放在内存中都有一个结束符’\\0’。3.获得一个字符的函数getchar();
推荐度:
点击下载文档文档为doc格式
3v0rt0pzus7b3ef97wu606i7k4fff900ze1
领取福利

微信扫码领取福利

微信扫码分享