资源描述
第一章 概述
Ø c语言的源程序后缀(*.c),经过编译后生成目标程序(*.obj),经过链接后生成可执行文件(*.exe).
Ø VC6.0的使用,跳过,上机课再讲解
Ø 解决问题的方法和步骤称为算法,包括数值运算和非数值运算。
Ø 算法的五个特点:有穷性、确定性、可以没有输入、必须有输出、有效性。
Ø 三种基本结构:顺序结构、选择结构、循环结构。由三种基本结构组成的算法可以解决任何复杂问题。
第二章 数据类型
Ø 2.1
n 任何一个可执行c程序,必须有且只有一个主函数main,程序总是从主函数开始执行,到主函数结束。
n 每条语句都是由半角的分号结束。
n 程序注释放在/*和 */之间,注释可以为任意内容,但不允许出现嵌套。
Ø 2.2 了解c语言数据类型分类
Ø 2.3
n 标识符命名规则:字母、数字、下划线组成,不能以数字开头。
n 标识符分为关键字、预定义标识符和用户标识符。
n 用户标识符不能使用关键字,尽量不要使用预定义标识符。
Ø 2.4
n 对于基本数据类型量,根据取值是否可以改变,分为常量和变量。
n 变量的值可以改变,常量的值不可以改变。
n 了解使用符号常量的好处。
Ø 2.5
n 2.5.1
u 整型常量根据进制分为八、十、十六进制,熟悉二、八、十、十六进制的转换。
u 只有十进制可以带负号,由0-9共10个数码组成。
u 八进制由0-7八个数码组成,必须有前缀0。
u 十六进制由0-9,A-F组成,必须有前缀0X(十六进制中的字母不分大小写)。
n 2.5.2
u 整型数据在内存中以补码的形式存放,正数和无符号数的补码为二进制原码。
u 负数的补码:①绝对值的二进制形式②按位取反③然后加1。
u 整型变量的分类:unsigned /signed short/ long int 及其数值范围。
u 整型变量定义的方法及其注意要点
Ø 2.6
n 2.61
u 实型数据在c语言中只使用十进制,分为小数形式和指数形式。
u 小数形式:由0-9和小数点组成,必须有小数点,可以有负号。
u 指数形式:aEn(a为十进制数,n必须为整数,都可以有负号,E不分大小写)
n 2.62
u 实型变量使用float或double来定义。
u 实型数据有舍入误差,如1.0/3*3不等于1。
Ø 2.7
n 2.7.1
u 字符常量:只能使用半角的单引号,只能是单个的字符,如 ’a’、‘1’等。
u 字符可以是字符集中任意字符。字符 ’1’ 和数字 1 代表不同的值。
n 2.7.2
u 转义字符使用 ”\” 开头,代表的也是单个字符。
u 常用转义字符 ‘\n’ ‘\t’。
u 特殊转义字符 ‘\\’ ‘\’’ ‘\”’
u 八进制数表示转义字符 ‘\ddd’(ddd代表1-3位八进制数,没有前缀)。
u 十六进制数表示转义字符 ‘\xhh’(hh代表1-2位十六进制数,有前缀x)
n 2.7.3
u 字符变量使用char来定义,如:char c;。
n 2.7.4
u 字符型数据在内存中占一个字节的空间,存放的是字符的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.5
u 字符串常量使用双引号括起来,如 ”abc”,内存中占有4个字节。
u 系统自动在字符串末尾添加一个字符’\0’作为字符串结束标记。
u 字符串占有的字节数因为有结束标记,所以占用空间比实际字符个数多一个。
n 2.8定义变量的时候给变量赋值称为变量赋初值,如:int a = 3, b = 1;
第三章 运算符和表达式
Ø 3.1了解c运算符的构成和分类
Ø 3.2
n +、-、*、/是双目运算符,具有左结合性。
n - 作为负号时,为单目运算符,具有右结合性。
n 参与运算的对象都为整型时,结果也为整型,如10/3的值为3。
n %为求余运算,运算对象只能为整数,如10%3的结果为1。10÷3=3…1。
n 运算符和操作对象构成的式子称为表达式,任何表达式都是有值的。
n 优先级决定了运算的先后顺序,结合性决定了运算的方向。
n 自加自减++ -- 运算的对象必须为变量,是单目运算符,右结合性。
n 自加自减前置后置都会使运算对象的值增1或减1。
n 前置则该表达式的值为当前变量的值,后置则表达式的值为当前变量的值加1或减1后的值。
Ø 3.3
n 赋值运算符 = ,右结合性,作用是把右边的值赋值给左边的变量。
n 赋值运算符两边数据类型不一致时,将自动进行数据类型转换,右边的类型或转换为左边的类型。
n 转换的具体规定:①实型-》整型,舍弃小数。②整型-》实型,增加小数部分③整型-》字符型,只取低8位。
n 复合赋值,优先级与结合性与赋值运算符相同。如 a += 3相当于a = a + 3。
Ø 3.4
n 逗号运算符 , ,一般形式:表达式1,表达式2 。规定把表达式2的值作为整个表达式的值。
n 逗号运算符的优先级最低。
Ø 3.5
n char 和short类型参与运算会自动转换为int类型
n float类型参与运算会自动转换为double类型
n 数据类型不同的数据混合运算时,会自动向精度高的方向转换为相同类型进行运算。
n 赋值运算的转换规则参考3.3
n 强制类型转换的作用是把表达式的结果强制转换为指定的数据类型,其一般形式:(类型说明符) (表达式)
n 所有转换都是为了当次运算的需要,并不会改变变量原有的数据类型和数值。
第四章 顺序结构
Ø 4.0 程序中按语句出现顺序执行的结构程序顺序结构。
Ø 4.1 半角分号 ; 是c语言语句结束的标志,了解c语句的分类。
Ø 4.2
n 赋值表达式加分号 ; 构成赋值语句。
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.5
n 格式输出函数printf,一般形式:
printf(“格式控制字符串” , 输出表列);
n 格式控制字符串的一般形式:
%[标志][最小宽度][.精度][长度]类型 ([ ]内为可选项)参考教材Page33的表。
n 格式输入函数scanf,一般形式:
scan(“格式控制字符串” , 输入表列);
n 格式控制字符串的一般形式:
%[*][最小宽度][长度]类型([ ]内为可选项) 参考教材Page35的表。
第五章 选择结构
Ø 5.1
n 关系运算符 <、 <=、 >、 >=、 ==、 !=共6个,其中<、 <=、 >、 >=的优先级相同,高于==、 !=。
n 关系表达式的值是“真”或“假”,分别用1和0表示。
Ø 5.2
n 逻辑运算符 &&与、||或、!非,其中!的优先级高于&&,&&高于||。
n 熟悉逻辑运算的真值表。
n c语言没有表示逻辑值的数据类型,所以用1表示“真”,0表示“假”,但在判断的时候,非0值为“真”,0值为“假”。
n &&和||运算时,当根据运算符左边的表达式可以求出整个表达式的值的时候,右边的表达式将不会被执行。例如:1||任何表达式、0&&任何表达式。
n 判断闰年:(year % 4 == 0 && year % 100 != 0) || year % 400 == 0
Ø 5.3
n 5.3.1
u ① if(表达式) 语句 当表达式为真的时,执行语句,否则什么也不执行
u ② if(表达式) 语句1 当表达式为真的时,执行语句1
else 语句2 否则,执行语句2a
u if后必须为表达式,此处可以为任意表达式,值为0则为假,!0则为真
u 后面的语句必须为一条语句,需要执行多条语句时,使用复合语句形式。
u 两种if结构在语法上都认为是一条语句
n 5.3.2
u 两种if结构中,语句部分又可以是if结构,这样就构成了嵌套。
u else总是和if配对的,不能单独出现,配对原则是:与它前面最近的没有配对的if进行配对
Ø 5.4
n 条件运算符 ? :的一般形式:表达式1?表达式2:表达式3
n 求值规则:计算表达式1为真,则表达式2的值为整个表达式的值
表达式1为假,则表达式3的值为整个表达式的值
Ø 5.5
n switch 语句,一般形式:
swith(表达式)
{
case 常量1:语句1;
case 常量2:语句2;
case 常量3:语句3;
default : 语句n;
}
n 表达式的值必须是整形或其兼容类型:short、long、char,不能用实型
n 掌握switch结构的执行过程
n break语句用于跳出switch结构,不能单独使用
第六章 循环结构
Ø 6.1
n while语句的一般形式: while(表达式) 循环体语句
n 执行过程,当表达式为真值时,执行循环体语句,否则循环结束。
n 循环体语句为单条语句,如需执行多条语句则需使用符合语句。
Ø 6.2
n do while语句的一般形式:do 循环体语句 while(表达式);
n 执行过程,执行循环体,然后判断表达式,如果为真值,则继续执行循环体,否则循环结束。
Ø 6.3
n for语句的一般形式:for(表达式1;表达式2;表达式3) 循环体语句;
n 执行过程: ①求解表达式1
②判断表达式2的真假值,如果为假,循环结束
③执行循环体并求解表达式3
④转回到步骤②
n 其中表达式1、2、3都是可以省略的,但括号里的两个分号不能省略。
n 省略表达式2相当于其值恒为真。
Ø 6.5
n break语句,在循环体中出现break语句,则退出循环,使循环结束。
n continue语句,结束本次循环,进入下次循环。
第七章 数组
Ø 7.1
n 7.1.1
u 一维数组的定义形式: 类型说明符 数组名[常量表达式]; 例: int a[10];
u []中的常量表达式必须为常量值,表示元素的个数。
n 7.1.2
u 数组元素的引用:数组名[下标] 例:a[2]。
u 下标可以为变量、常量、表达式等,下标是从0开始,表示第一个元素。
u 下标会自动取整,如 a[3.2] 等价于 a[3]
n 7.1.3
u 一维数组的初始化:类型说明符 数组名[常量表达式]={值1,值2……};
u 可以只给部分元素赋值,若给全部元素赋值,可以省略数组的长度。
Ø 7.2
n 7.2.1
u 二维数组的定义形式: 类型说明符 数组名[常量表达式1][常量表达式2]; 例: int a[2][3];
n 7.2.2
u 数组元素的引用:数组名[下标] 例:a[0][0]。
n 7.2.3
u 二维数组初始化:①按行分段赋值 如:int a[2][3]={{1,2,3},{4,5,6}};
②按行连续赋值 如:int a[2][3]={1,2,3,4,5,6};
u 可以对部分元素赋初值,未赋值的元素自动取0值。
u 如对全部元素赋初值,则第一维的长度可以不给出。
Ø 7.3
n 7.3.1
u 字符数组具有普通数组的特点,定义、引用、赋初值和普通数组相同,另还具有其他特殊的属性。
u 使用字符串赋初值: char c[] = “ABCDF”; 系统在字符串后自动添加结束标志’\0’,所以字符数组c有6个元素。
u 字符数组可以按照 “%s”格式,使用printf和scanf整体输入或输出。
n 7.3.2
u 字符串输出函数: 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 =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 a[10]; a等价于&a[0]。
n 10.3.2通过指针引用数组的元素
若有int a[10], * p;
p = a;
u p+i和a+i都是a[i]的地址值。
u *(p+i)和*(a+i)都是引用a[i]这个元素。
u p[i]和*p(p+i)等价,和a[i]、*(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类型定义符typedef
n 一般形式: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结构变量初始化:在定义结构变量的时候给结构变量赋值,将各个成员的值按顺序放在{ }中。
展开阅读全文