C语言知识要点.doc_第1页
C语言知识要点.doc_第2页
C语言知识要点.doc_第3页
C语言知识要点.doc_第4页
C语言知识要点.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章 概述 c语言的源程序后缀(*.c),经过编译后生成目标程序(*.obj),经过链接后生成可执行文件(*.exe). VC6.0的使用,跳过,上机课再讲解 解决问题的方法和步骤称为算法,包括数值运算和非数值运算。 算法的五个特点:有穷性、确定性、可以没有输入、必须有输出、有效性。 三种基本结构:顺序结构、选择结构、循环结构。由三种基本结构组成的算法可以解决任何复杂问题。第二章 数据类型 2.1n 任何一个可执行c程序,必须有且只有一个主函数main,程序总是从主函数开始执行,到主函数结束。n 每条语句都是由半角的分号结束。n 程序注释放在/*和 */之间,注释可以为任意内容,但不允许出现嵌套。 2.2 了解c语言数据类型分类 2.3n 标识符命名规则:字母、数字、下划线组成,不能以数字开头。n 标识符分为关键字、预定义标识符和用户标识符。n 用户标识符不能使用关键字,尽量不要使用预定义标识符。 2.4n 对于基本数据类型量,根据取值是否可以改变,分为常量和变量。n 变量的值可以改变,常量的值不可以改变。n 了解使用符号常量的好处。 2.5n 2.5.1u 整型常量根据进制分为八、十、十六进制,熟悉二、八、十、十六进制的转换。u 只有十进制可以带负号,由0-9共10个数码组成。u 八进制由0-7八个数码组成,必须有前缀0。u 十六进制由0-9,A-F组成,必须有前缀0X(十六进制中的字母不分大小写)。n 2.5.2u 整型数据在内存中以补码的形式存放,正数和无符号数的补码为二进制原码。u 负数的补码:绝对值的二进制形式按位取反然后加1。u 整型变量的分类:unsigned /signed short/ long int 及其数值范围。u 整型变量定义的方法及其注意要点 2.6n 2.61u 实型数据在c语言中只使用十进制,分为小数形式和指数形式。u 小数形式:由0-9和小数点组成,必须有小数点,可以有负号。u 指数形式:aEn(a为十进制数,n必须为整数,都可以有负号,E不分大小写)n 2.62u 实型变量使用float或double来定义。u 实型数据有舍入误差,如1.0/3*3不等于1。 2.7n 2.7.1u 字符常量:只能使用半角的单引号,只能是单个的字符,如 a、1等。u 字符可以是字符集中任意字符。字符 1 和数字 1 代表不同的值。n 2.7.2u 转义字符使用 ” 开头,代表的也是单个字符。u 常用转义字符 n t。u 特殊转义字符 ”u 八进制数表示转义字符 ddd(ddd代表1-3位八进制数,没有前缀)。u 十六进制数表示转义字符 xhh(hh代表1-2位十六进制数,有前缀x)n 2.7.3u 字符变量使用char来定义,如:char c;。n 2.7.4u 字符型数据在内存中占一个字节的空间,存放的是字符的ASCII 码。u 字符数据可以参与运算,其值为字符的ASCII码值。u 字符 a 的ASCII码值为十进制的97、八进制的0141、十六进制的0X61给变量c赋值字符 a 的六种表示形式:字符形式 c = a;c = 141;c = x61;整型形式 c = 97;c = 0141; c = 0X61;。 n 2.7.5u 字符串常量使用双引号括起来,如 ”abc”,内存中占有4个字节。u 系统自动在字符串末尾添加一个字符0作为字符串结束标记。u 字符串占有的字节数因为有结束标记,所以占用空间比实际字符个数多一个。n 2.8定义变量的时候给变量赋值称为变量赋初值,如:int a = 3, b = 1;第三章 运算符和表达式 3.1了解c运算符的构成和分类 3.2n +、-、*、/是双目运算符,具有左结合性。n - 作为负号时,为单目运算符,具有右结合性。n 参与运算的对象都为整型时,结果也为整型,如10/3的值为3。n %为求余运算,运算对象只能为整数,如10%3的结果为1。103=31。n 运算符和操作对象构成的式子称为表达式,任何表达式都是有值的。n 优先级决定了运算的先后顺序,结合性决定了运算的方向。n 自加自减+ - 运算的对象必须为变量,是单目运算符,右结合性。n 自加自减前置后置都会使运算对象的值增1或减1。n 前置则该表达式的值为当前变量的值,后置则表达式的值为当前变量的值加1或减1后的值。 3.3n 赋值运算符 = ,右结合性,作用是把右边的值赋值给左边的变量。n 赋值运算符两边数据类型不一致时,将自动进行数据类型转换,右边的类型或转换为左边的类型。n 转换的具体规定:实型-整型,舍弃小数。整型-实型,增加小数部分整型-字符型,只取低8位。n 复合赋值,优先级与结合性与赋值运算符相同。如 a += 3相当于a = a + 3。 3.4n 逗号运算符 , ,一般形式:表达式1,表达式2 。规定把表达式2的值作为整个表达式的值。n 逗号运算符的优先级最低。 3.5n char 和short类型参与运算会自动转换为int类型n float类型参与运算会自动转换为double类型n 数据类型不同的数据混合运算时,会自动向精度高的方向转换为相同类型进行运算。n 赋值运算的转换规则参考3.3n 强制类型转换的作用是把表达式的结果强制转换为指定的数据类型,其一般形式:(类型说明符) (表达式)n 所有转换都是为了当次运算的需要,并不会改变变量原有的数据类型和数值。 第四章 顺序结构 4.0 程序中按语句出现顺序执行的结构程序顺序结构。 4.1 半角分号 ; 是c语言语句结束的标志,了解c语句的分类。 4.2n 赋值表达式加分号 ; 构成赋值语句。n 区分int a = b = c = 5;是非法的;a = b = c = 5;是合法的。n 区分表达式和语句的区别(在于语句结束标志分号;)。 4.3了解输入输入的概念,使用系统提供的标准输入输入函数,需要添加stdio.h 头文件。 4.4 字符输入输出函数putchar和getchar,只能输入输出单个字符。 char c;/*定义字符变量*/c = getchar();/*使用字符输入函数给字符变量赋值*/ putchar(c);/*使用字符输出函数输出变量c所代表的字符*/ 4.5n 格式输出函数printf,一般形式: printf(“格式控制字符串” , 输出表列);n 格式控制字符串的一般形式:%标志最小宽度.精度长度类型 ( 内为可选项)参考教材Page33的表。n 格式输入函数scanf,一般形式:scan(“格式控制字符串” , 输入表列);n 格式控制字符串的一般形式:%*最小宽度长度类型( 内为可选项) 参考教材Page35的表。第五章 选择结构 5.1n 关系运算符 、 、 =、 =、 !=共6个,其中、 、 =的优先级相同,高于=、 !=。n 关系表达式的值是“真”或“假”,分别用1和0表示。 5.2n 逻辑运算符 &与、|或、!非,其中!的优先级高于&,&高于|。n 熟悉逻辑运算的真值表。n c语言没有表示逻辑值的数据类型,所以用1表示“真”,0表示“假”,但在判断的时候,非0值为“真”,0值为“假”。n &和|运算时,当根据运算符左边的表达式可以求出整个表达式的值的时候,右边的表达式将不会被执行。例如:1|任何表达式、0&任何表达式。n 判断闰年:(year % 4 = 0 & year % 100 != 0) | year % 400 = 0 5.3n 5.3.1u if(表达式) 语句 当表达式为真的时,执行语句,否则什么也不执行u if(表达式) 语句1 当表达式为真的时,执行语句1 else 语句2 否则,执行语句2au if后必须为表达式,此处可以为任意表达式,值为0则为假,!0则为真u 后面的语句必须为一条语句,需要执行多条语句时,使用复合语句形式。u 两种if结构在语法上都认为是一条语句n 5.3.2u 两种if结构中,语句部分又可以是if结构,这样就构成了嵌套。u else总是和if配对的,不能单独出现,配对原则是:与它前面最近的没有配对的if进行配对 5.4n 条件运算符 ? :的一般形式:表达式1?表达式2:表达式3n 求值规则:计算表达式1为真,则表达式2的值为整个表达式的值 表达式1为假,则表达式3的值为整个表达式的值 5.5n switch 语句,一般形式:swith(表达式)case 常量1:语句1;case 常量2:语句2;case 常量3:语句3;default : 语句n;n 表达式的值必须是整形或其兼容类型:short、long、char,不能用实型n 掌握switch结构的执行过程n break语句用于跳出switch结构,不能单独使用第六章 循环结构 6.1n while语句的一般形式: while(表达式) 循环体语句n 执行过程,当表达式为真值时,执行循环体语句,否则循环结束。n 循环体语句为单条语句,如需执行多条语句则需使用符合语句。 6.2n do while语句的一般形式:do 循环体语句 while(表达式);n 执行过程,执行循环体,然后判断表达式,如果为真值,则继续执行循环体,否则循环结束。 6.3n for语句的一般形式:for(表达式1;表达式2;表达式3) 循环体语句;n 执行过程: 求解表达式1 判断表达式2的真假值,如果为假,循环结束 执行循环体并求解表达式3 转回到步骤n 其中表达式1、2、3都是可以省略的,但括号里的两个分号不能省略。n 省略表达式2相当于其值恒为真。 6.5n break语句,在循环体中出现break语句,则退出循环,使循环结束。n continue语句,结束本次循环,进入下次循环。第七章 数组 7.1n 7.1.1u 一维数组的定义形式: 类型说明符 数组名常量表达式; 例: int a10;u 中的常量表达式必须为常量值,表示元素的个数。n 7.1.2u 数组元素的引用:数组名下标 例:a2。u 下标可以为变量、常量、表达式等,下标是从0开始,表示第一个元素。u 下标会自动取整,如 a3.2 等价于 a3n 7.1.3u 一维数组的初始化:类型说明符 数组名常量表达式=值1,值2;u 可以只给部分元素赋值,若给全部元素赋值,可以省略数组的长度。 7.2n 7.2.1u 二维数组的定义形式: 类型说明符 数组名常量表达式1常量表达式2; 例: int a23;n 7.2.2u 数组元素的引用:数组名下标 例:a00。n 7.2.3u 二维数组初始化:按行分段赋值 如:int a23=1,2,3,4,5,6; 按行连续赋值 如:int a23=1,2,3,4,5,6;u 可以对部分元素赋初值,未赋值的元素自动取0值。u 如对全部元素赋初值,则第一维的长度可以不给出。 7.3n 7.3.1u 字符数组具有普通数组的特点,定义、引用、赋初值和普通数组相同,另还具有其他特殊的属性。u 使用字符串赋初值: char c = “ABCDF”; 系统在字符串后自动添加结束标志0,所以字符数组c有6个元素。u 字符数组可以按照 “%s”格式,使用printf和scanf整体输入或输出。n 7.3.2u 字符串输出函数: puts(str1); /输出字符数组str1中的字符串。u 字符串输入函数: gets(str1);/输入字符串给字符数组str1赋值。u 字符串连接函数: strcat(str1,str2); /把字符数组str2中的字符串连接在字符数组str1的字符串后面。u 字符串复制函数: strcpy(str1,str2);/把字符数组str2中的字符串复制到字符数组str1中。u 字符串比较函数:strcmp(str1,str2);/比较字符数组str1和str2中字符串的大小,并返回结果(0 =0)。u 字符串测长函数:strlen(str1);/返回字符数组str1中字符串中实际字符的个数,不包括结束标志。第八章 函数 8.1概述n c语言中,一个函数体内不能定义另一个函数,函数的定义必须放在函数体的外边,即不能嵌套定义,但可以嵌套调用。n main函数不允许被其他函数调用,c程序执行的过程总是从主函数开始到主函数结束,并且只能有且只有一个主函数main。 8.2函数定义的一般形式n 类型说明符 函数名( 类型说明符 形式参数列表) 函数体n 如果定义没有返回值的函数,函数名前的类型说明符使用void关键字。n 如果定义没有参数的函数,函数名后的括号留空或使用void关键字。n 如果定义空函数,函数体部分留空。n 函数体中,声明语句要放在执行语句之前。 8.3函数的参数和函数的值n 8.3.1形参和实参u 形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。u 实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。u 实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。u 函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。n 8.3.2函数返回值u 函数的值只能通过return语句返回主调函数。 return 语句的一般形式为:return 表达式;或者为:return (表达式);u 应在函数定义的时候指定函数值类型。若不指定,系统默认为int型。u 定义函数时,函数值的类型应和函数定义中return语句中表达式类型一致。如果两者不一致,则以函数类型为准,自动进行类型转换。u 不返回函数值的函数,可以明确定义为“空类型”,类型说明符为“void” 8.4函数的调用n 8.4.1函数调用的一般形式: 函数名(实参表)n 8.4.2函数调用的方式:u 函数表达式:z = max( x , y )u 函数语句:max( x , y );u 函数实参:printf( “%d” , max( x , y ) );n 8.4.3函数的声明和函数原型u 一般形式:类型说明符 函数名( 类型说明符 形式参数列表);或 :类型说明符 函数名( 类型说明符);u 以下情况省略函数声明:返回值是整形或字符型的函数。函数的定义出现在主调函数之前。在函数外预先说明了各个函数的类型(包括库函数)。 8.5函数嵌套调用n 函数1中调用函数2,函数2中调用函数3,就构成了函数的嵌套调用,c语言允许嵌套调用。 8.6函数递归嗲用n 函数在它的函数体内调用它自身,称为递归调用。 8.7数组作为函数的参数n 数组元素作为函数参数:数组元素等同于普通变量,作为函数实际参数时,值是单向传递的。n 数组名作为函数参数:数组名为数组的地址,和指针变量类似,传递的是地址值。 8.8局部变量和全局变量n 8.8.1局部变量u 局部变量也称为内部变量。局部变量是在函数内作定义说明的,其作用域仅限于函数内。u 形参变量是属于被调函数的局部变量,实参变量是属于主调函数的局部变量。u 允许在不同的函数中使用相同的变量名,它们代表不同的对象,分配不同的单元,互不干扰,也不会发生混淆。u 在复合语句中也可定义变量,其作用域只在复合语句范围内。n 8.8.2全局变量u 全局变量也称为外部变量,它是在函数外部定义的变量。它不属于哪一个函数,它属于一个源程序文件。其作用域是整个源程序。u 如果同一个源文件中,外部变量与局部变量同名,则在局部变量的作用范围内,外部变量被“屏蔽”,即它不起作用。 8.9变量的存储类别n 变量的存储类别分为静态存储和动态存储。n auto自动变量register寄存器变量static为静态变量,变量默认为auto类型。n 静态变量在整个程序运行期间均有效,只在编译时复一次初值,如果没有赋初值,则自动赋0值。n 使用extern声明外部变量。第九章 预处理命令 9.1 概述n 预处理命令以“#”开头,不属于c语言语句。 9.2 宏定义n 9.2.1 无参宏定义u 一般形式: #define 宏名 字符串u 作用类似于文本替换,使用宏名表示字符串,若出现在双引号内的宏名则不替换。u 宏定义不是说明或语句,行尾不加分号。u 宏定义必须写在函数之外,允许嵌套使用。u 习惯上宏名使用大写字母表示,以便于和变量区别。n 9.2.2带参宏定义u 一般形式: #define 宏名(形参表) 字符串u 宏名和形参表之间不能有空格。u 形参是不分配内存单元的,所以形参不必指定数据类型,本质上区别于函数。u 字符串中的形参通常需要使用括号以避免出错。n 9.3 文件包含u 一般形式: #include “文件名” 或 #include u 区别:在系统头文件目录查找文件,” ”则到源程序目录查找文件。n 9.4条件编译u 第一种形式:#ifdef 标识符程序段1#else程序段2#endif它的功能是,如果标识符已被 #define命令定义过则对程序段1进行编译;否则对程序段2进行编译。本格式中的#else可以没有。u 第二种形式: #ifndef 标识符 程序段1 #else 程序段2 #endif与第一种形式的区别是将“ifdef”改为“ifndef”。它的功能是,如果标识符未被#define命令定义过则对程序段1进行编译,否则对程序段2进行编译。这与第一种形式的功能正相反。u 第三种形式: #if 常量表达式程序段1#else 程序段2 #endif它的功能是,如常量表达式的值为真(非0),则对程序段1 进行编译,否则对程序段2进行编译。因此可以使程序在不同条件下,完成不同的功能。第十章 指针 10.1地址指针的概念n 内存中每个存储单元都是有编号(或称为地址),通常也称为指针。n c语言中允许用一个变量存放指针,这种变量称为指针变量。 10.2变量的指针和指向变量的指针变量n 10.2.1定义一个指针变量u 一般形式:类型说明符 * 变量名;u 一个指针变量只能指向同类型的变量。n 10.2.2指针变量的引用u &:取地址运算符。*:指针运算符(间址运算符)u 初始化给指针变量赋值 int a;int * p = &a;u 给指针变量赋值int a, *p;p = &a;n 10.2.3指针变量作为函数的参数u 指针变量作为函数的参数,传递的是地址值。u 指针变量作为函数的实参时,函数不会改变实参的值,但是可能会改变实参指针所指向地址里的值。 10.3数组指针和指向数组的指针变量n 10.3.1指向数组元素的指针u 数组名代表的是数组的首地址,是一个指针常量,其值不可以改变。u int a10; a等价于&a0。n 10.3.2通过指针引用数组的元素若有int a10, * p; p = a;u p+i和a+i都是ai的地址值。u *(p+i)和*(a+i)都是引用ai这个元素。u pi和*p(p+i)等价,和ai、*(a+i)等价。n 10.3.3数组名作为函数参数:等同于指针作为函数的参数。 10.4字符串指针和指向字符串的指针变量n 10.4.1字符串的表示形式u 用字符数组存放一个字符串 :char st =”abcdef”;u 使用一个字符指针指向一个字符串:char *st = “abcdef”; 10.5函数指针变量 10.6指针型函数 10.7指针数组和指向指针的指针第十一章 结构体和共用体 11.1类型定义符typedefn 一般形式:typedef 原类型名 新类型名n 方法:定义普通变量的方式定义变量把变量的名字替换成新类型名最左边加typedef可以使用新类型说明符来定义该类型的变量 11.2结构体类型n 11.2.1结构体定义的一般形式:struct 结构名 成员表列n 11.2.2结构类型的变量声明方法先定义结构再说明结构变量定义结构类型的同时说明结构变量直接说明结构变量使用typedef说明一个结构体类型名,使用类型名来定义变量。n 11.2.3结构体成员的表示方法:结构变量名.成员名n 11.2.4结构变量的赋值u 可以直接给结构成员赋值。u 可以使用结构变量整体给其他结构变量赋值。n 11.2.5结构变量初始化:在定义结构变量的时候给结构变量赋值,将各个成员的值按顺序放在 中。n 11.2.6结构数组n 11.2.7结构指针 11.3动态存储分配n 分配内存空间函数malloc:(类型说明符 *)malloc(size)向内存申请size字节的空间n 分配内存空间块函数calloc:(类型说明符 *)calloc(n,size)向内存申请n块的size字节的空间n 释放内存空间函数free:free(void *ptr)释放指针ptr所指的内存空间 11.4链表 略 11.5共用体n 11.5.1共用体定义的一般形式:union 结构名 成员表列n 11.2.2共用类型的变量声明方法先定义共用再说明结构变量定义共用类型的同时说明结构变量直接说明共用变量使用typedef说明一个共用体类型名,使用类型名来定义变量。n 11.2.3共用体成员的表示方法:共用变量名.成员名n 11.2.4共用变量的赋值u 可以直接给共用体中占用空间最大的成员赋值。u 可以使用共用变量整体给其他结构变量赋值。n 11.2.5共用变量初始化:在定义共用变量的时候给共用变量赋值,将各个成员的值按顺序放在 中。第十二章 位运算 “左移”运算运算符与类似,是双目运算符。运算符左边是运算对象,右边是整型表达式,代表右移的位数。右移时,右端(低位)移出的二进制数舍弃,左端(高位)分两种情况:对于无符号整数和正整数,高位补0;对于负整数,高位补1。 “按位取反”运算运算符是位运算中唯一一个单目运算符,运算对象影置于运算符的右边,其运算功能是把运算对象的内容按位取反,即,使每一位上的0变1,1变0。 “按位与”运算运算符&的作用是把参加运算的两个运算数按对应的二进制位分别惊醒“与”运算,当两个对应位都为1时,该位的结果为1;否则位0。 “按位或”运算运算符|的作用是把参加运算的两个运算数的每一个二进制位进行或运算,即两个相应的二进制位中有一个为1,该位的运算结果为1;只有两个相应的二进制位都为0时,该位的运算结果才为0。 “按位异或”运算运算符的运算规则是:参与运算的两个运算数中相应的二进制位上,如果数字相同,则该位的结果为0,若数不同,则该位结果为1。 位数不同的运算数之间的运算规则(1)先将两个运算数右端对齐。(2)再将位数短的一个运算数位往高位扩充,即:无符号数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论