C语言程序设计
· 第一章 程序设计与C语言
o 1.2 程序与程序设计语言
§ 1.2.1 程序设计语言的发展
· 1946年第一台电子计算机问世
· 1.机械语言
o 第一代计算机语言
o 0和1组成的二进制指令代码。机器指令的集合(即指令系统)就是该计算机的机器语言。
· 2.汇编语言
o 用助记符来代替机器指令的二进制串
· 3.高级语言
o 接近于数学语言或人的自然语言,不依赖于计算机硬件
o (1)非结构化的语言
§ 早期追求效率:FORTRAN、ALGOL、BASIC
o (2)结构化语言
§ 良好的基本结构:QBASIC、Pascal、C语言
o (3)面向对象的语言
§ 流水式:C++、C#、Visual Basic、JAVA
§ 1.2.2 程序设计语言的功能
· 1.数据表达(即定义变量)
o 数据类型就是对某些具有相同性质的数据集的总称
· 2.流程控制(数据处理)
o (1)顺序控制结构
o (2)分支控制结构
o (3)循环控制结构
· 共同特点
o 只有单一的入口和单一的出口
o 结构中的每个部分都有被执行的可能
o 结构内不应出现永不终止的死循环
§ 1.2.3 程序的算法表示
· 软件的主体是程序,程序的核心是算法
· 算法特点
o (1)确定性
o (2)有穷性
o (3)可行性
o (4)有零个或多个输入
o (5)有一个或多个输出
· 1.用文字描述算法
· 2.用流程图描述算法
o 顺序结构
o 选择结构
o 循环结构
· 3.伪代码表示
· 4.程序设计语言表示
§ 程序特点
· 完成某一特定的任务
· 使用某种程序设计语言描述如何完成该任务
· 储存在计算机中,并且被运行后才能起作用
o 1.3 C语言程序设计的特点
§ 1.3.1 C语言的发展历史
· C语言是1972年由美国贝尔实验室的Dennis Ritchie设计
§ 1.3.2 C语言的特点
· 语句简洁紧凑,使用方便灵活
o 9种控制语句
· 运算符丰富,表达能力强
· C语言程序可移植性好
· 生成的目标代码质量高、运行效率高
· 语言处理能力强
· C语言是一种结构化语言
o 不足
§ 语法检查不严格
§ 对数组下标越界不检查,导致程序出错
§ 1.3.3 C语言的约定
· 一般将程序设计语言的规范称为语法
· 1.C语言中的约定
o 标识符
§ 第一个字符必须是字母或下划线
o 关键字
§ C语言中共有32个关键字
o 用户自定义标识符
o 预定义标识符
o 分隔符
§ 逗号
· 类型说明和函数参数表中,分隔各个变量
§ 空格
· 用于个单词之间作间隔符
· 2.C语言的语法成分
o 常量
o 变量
o 运算符
§ C语言提供了34种运算符
o 表达式
§ 算术运算优先于关系运算
o 语句
§ 以分号结尾
o 函数定义与调用
§ 函数是完成特定功能的小模块
o 输入与输出
o 1.4 C程序的编辑、编译、链接和运行
§ 1.4.1 程序设计的任务
· 分析问题
· 设计算法
· 程序设计
· 运行并调试程序
· 分析程序运行结果
· 编写程序文档
· 1.4.2 运行C程序的步骤与方法
o 编辑源程序
o 对源程序进行编译
o 链接(库函数)
o 运行(目标程序)
· 第二章 数据类型、运算符和表达式
o 2.1引例
§ 注释可以出现在程序中合适的地方,但必须成对出现
o 2.2 C语言的数据类型
§ 基本类型
· 整形
· 字符型
· 实型(浮点型)
§ 构造类型
· 数组类型
· 结构体类型
· 共用体类型
· 枚举类型
§ 指针类型
§ 空类型
o 2.3 C语言的常量
§ 2.3.1 直接常量
· 1.整型常量
o 即整数,包括正整数、负整数、零
o 十进制表示:数字0~9,正、负号;
o 八进制表示:以0为前缀,其后由数字0~7组成;一般无符号
o 十六进制表示:以0x、0X为前缀,其后由数字0~9和A~F组成;一般无符号
o 后加u、U认为是unsigned int;后加l、L认为是long int;
· 2.实型常量
o 实数又称为浮点数,C语言中,实数只能用十进制形式表示
o 小数形式:整数或小数为零时可以省略,但小数点不可以
o 指数形式:格式+-尾数E指数
§ E或e前后必须有数字,并且指数部分只能是整数
o 3.字符型常量
o 特点:
§ 只能用单引号括起来,不能用双引号或其他
§ 是单个字符,不能是字符串
§ 可以是ASCII字符集中的任意字符,只占一个字符
§ \数字 表示八进制;\x数字 表示十六进制
§ \0放入函数,直接结束
o 4.字符串常量(双引号)
§ 2.3.2 符号常量(用标识符表示常)
§ 形式:#define 标识符 常量值
§ 好处:
· 增加程序的可读性
· 提高程序的可维护性
· 简化程序代码
· 方便数组定义
o 2.4 C语言的变量
§ 2.4.1 变量的定义与使用
· 1.变量的定义
· 2.变量的初始化
· 3.变量的使用
§ 2.4.2 整型变量
§ 说明:
· 有符号整数以二进制补码形式存储
· 无符号整数以二进制原码形式存储
§ 2.4.3 实型变量
· 单精度型数据能保留7位有效数字,双精度型数据能保留16位有效数字
· 双精度只保留6位小数,其余部分四舍五入
§ 2.4.4 字符型变量
o 2.5 运算符和表达式
§ 2.5.1 赋值运算符和赋值表达式
· 1.简单赋值运算符(”=“)
· 2.复合赋值运算符
· 3.赋值表达式
o 赋值语句属于表达式语句
o 赋值运算符左侧必须是一个变量
o 赋值表达式的末尾没有分号,而赋值语句的末尾必须有分号
§ 2.5.2 算数运算符和算术表达式
· 1.基本的算术运算符
o 如果a和b中有一个是实型,则a和b都转换为double类型
· 2.自增、自减运算符
o 前缀方式:先计算,后使用
o 后缀方式:先使用,后计算
o 注意:
§ 两个单目运算符不能出现在同一个式子中。
§ 先单目,后双目
· 3.算术运算符的优先级和结合性
o 单目右结合,双目左结合
· 4.算术表达式
§ 2.5.3 逗号运算符和逗号表达式
· 执行顺序:从左到右依次计算每个表达式的值,并把最后一个表达式的值作为整个逗号表达式的值
§ 2.5.4求字节数运算符(单目)
o 2.6 数据类型转换
§ 2.6.1自动类型转换
· 把占用内存空间少的(低级)类型向占用空间多的(高级)类型转换
§ 2.6.2强制类型转换
· (类型说明符)(表达式)
· 注意:
o 需强制类型转换中的表达式一定要括起来,否则只对紧随括号后的量进行类型转换
o 由高到低,会损失数据的精度
o 并不改变表达式中变量的类型和值
· 第三章 顺序结构程序设计
o 3.2 C语言的语句
§ 1.说明语句
§ 2.表达式语句
§ 3.分支语句
§ 4.循环语句
§ 5.转向语句
§ 6.复合语句
§ 7.空语句
§ 8.函数定义与调用
§ 9.输入和输出
o 3.3 数据的输入和输出
§ C语言本身没有提供输入输出语句,所有的数据输入输出功能都是由系统提供的库函数
§ 3.3.1 输出函数(printf())和输入函数(scanf())
· 1.printf()函数
o (1)格式控制说明
o (2)普通字符
· 2.scanf()函数
o (1)格式控制说明
o (2)普通字符
§ 3.3.2 整形数据的输入和输出
§ 3.3.3 实型数据的输入和输出
§ 3.3.4 字符型数据的输入和输出
· 1.使用scanf()函数和printf()函数对字符型数据进行输入输出
· 2.使用getchar()函数和putchar()函数对字符型数据进行输入输出
o (1)getchar()函数
o (2) putchar()函数
o 3.4 数学库函数
§ exp(x)即e的x次方
§ fabs(x)绝对值
§ 以e为底的对数函数log(x)
§ 幂函数pow(x,y)
§ 平方根函数sqrt(x)
· 第四章 分支结构程序设计
o 4.2 关系运算符、逻辑运算符、条件运算符
§ 4.2.1 关系运算符和关系表达式
· 1.关系运算符
o 注意:1.关系运算符都是双目运算符,其结合方向是左结合
o 2.关系运算符的优先级低于算术运算符,但高于赋值运算符
o 3.关系运算符中,>,<,>=,<=的优先级相同,==,!=的优先级相同,前者的优先级高于后者
· 2.关系表达式
§ 4.2.2 逻辑运算符和逻辑表达式
· 1.逻辑运算符
o ‘!’ 逻辑非 右结合 单目 高
o ‘&&’ 逻辑与 左结合 双目 |
o ‘||’ 逻辑或 左结合 双目 低
· 2.逻辑表达式
· 说明:可以是任何类型的数据,最终都是以非0和0来判断
o a&&(b=0)正确
o 当计算出一个值表达式的值,确定了整个逻辑表达式的值,此后就不再计算右边表达式的值,这种情况叫做“短路”
§ 只有当“&&”左边的表达式值为真时才计算右边表达式的值
§ 只有当“ | | ”左边的表达式值为假时才计算右边表达式的值
· 运算符优先级:
· ! 算术运算符 关系运算符 &&和|| 赋值运算符
· 右结合 左结合 右结合
· 高——————————————————————————低
§ 4.2.3 条件运算符和条件表达式
· 1.条件运算符
o 条件运算符由”?"和“:”两个符号组成,由于条件求值,它是一个三目运算符,需要有三个操作数,条件运算符的优先级低于逻辑运算符,高于赋值运算符,它是右结合的。
· 2.条件表达式
o 形式:表达式1?表达式2:表达式3
o 顺序:计算1,非0真,执行2;否则执行3;
o 4.3 使用if-else实现分支结构
§ 4.3.1 if-else语句
· 1.双分支if语句
· 2.单分支if语句
§ 4.3.2 if 语句的嵌套
§ 4.3.3 多分支if语句
o 4..4 使用switch语句实现分支结构
§ 说明:switch后的表达式可以是任何表达式,但值只能为整形、字符型、枚举型之一
§ 每个case后面的常量表达式的值互不相同,否则就会出现互相矛盾的现象
§ 各个case和default的出现次序不影响执行结果
§ 可以让多个case共用一组执行语句
§ switch语句允许嵌套使用
o 4.5 分支结构程序设计示例
· 第五章 循环结构程序设计
o 5.2 使用for语句实现循环结构
§ for语句是C语言提供的功能强大、使用广泛的一种循环结构,不仅可以解决循环次数未知的循环问题,特别适合解决循环次数已知的循环问题
§ 若输入的数字字符是‘7’,其ASCII码是55,而字符‘0’的ASCII码是48,二者相减即为数字7.这是一种将数字字符转换为数字的常用方法
o 5.3 使用while语句实现循环语句
§ 在C语言中,使用while语句完成不定次数的循环。如果满足循环条件,则反复执行循环语句,当循环条件不满足时退出循环
§ 语句中的表达式可以是任意类型的表达式,若表达式的值为非0,则表示循环条件为“真”,执行循环体语句,若表达式的值为0,则表示循环条件为“假”,不执行循环体语句,结束循环,执行循环结构的下一条语句。
o 5.4 使用do-while语句实现循环语句
§ 在C语言中,do ——while语句也用于完成不定次数的循环控制。与while语句不同的是,do ——while语句首先执行一次循环体,然后判断循环条件,如果满足则反复执行循环体语句,否则结束循环。
§ 一般来说,如果题目中给出的循环次数首选for循环语句,如果循环次数不明确,需要通过其他条件控制循环。通常选用while循环语句,如果需要先执行语句,然后再根据条件判断是否执行循环体,则do while语句最合适。
o 5.5 改变循环结构的跳转语句
§ 5.5.1 break语句
· 当break语句用于循环语句中时,可使程序终止循环而转去执行循环语句的后续语句。通常break语句总是与if一起配合使用,即满足条件时便跳出循环。
§ 5.5.2 continue语句
· continue语句的作用是跳过循环体中continue后面的语句,继续下一次循环。continue语句只能用在循环语句中,常与 if语句一起使用
§ 注意continue语句与break语句有本质的区别;continue语句只是结束本次循环,并不终止整个循环的执行;而break语句的作用是强制终止整个循环程序
o 5.6 循环嵌套
§ 循环嵌套格式中的内外循环不允许出现交叉,即外循环要完全包括内循环
§ 循环嵌套时,内循环中使用break语句和continue语句时,只影响包含它们的内循环,与外循环无关