C语言程序设计实用教程.ppt_第1页
C语言程序设计实用教程.ppt_第2页
C语言程序设计实用教程.ppt_第3页
C语言程序设计实用教程.ppt_第4页
C语言程序设计实用教程.ppt_第5页
已阅读5页,还剩148页未读 继续免费阅读

下载本文档

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

文档简介

E Mail yangliu4575 C语言程序设计实用教程 第1章C语言概述 第2章数据及其运算 第3章程序的流程控制 第4章数组 第5章模块化程序设计 第6章结构体 共用体和枚举类型 第7章文件 第8章综合实训 目录 C语言发展及特点 TurboC的操作环境 VC 6 0的操作环境 简单的C程序介绍 C程序的上机执行过程 第1章C语言概述 本章小结 返回 1 1C语言发展及特点 返回 1 C语言的发展C语言是在早期的B语言的基础上发展起来的 1960年出现的ALGOL 60是一种面向问题的语言 过于抽象 难以描述系统 没有得到真正的推广 1963年由英国剑桥大学推出了CPL CombinedProgrammingLanguage 语言 1967年英国剑桥大学的MatinRichards对CPL作了简化 推出了BCPL BasicCombinedProgrammingLanguage 语言 1970年由美国贝尔实验室的KenThompson设计的B语言又对BCPL进一步简化 1972年至1973年 贝尔实验室的D M Ritchie在B语言基础上设计出了C语言 取BCPL中的第二个字母来命名 1990年国际标准化组织ISO InternationalStandardOrganization 接受87ANSIC为ISOC的标准 ISO9899 1990 返回 2 C语言的特点 1 语言简洁 紧凑 使用方便 灵活 2 数据类型丰富 C语言的数据类型包括整型 实型 字符型 枚举型 结构体 共用体 数组和文件类型 指针类型 空类型等 3 运算符丰富 一共有44种运算符 4 函数是程序的主体 5 语法检查不太严格 程序书写自由度大 6 C语言允许直接访问物理地址 7 生成的目标代码质量高 程序执行效率高 8 可移植性好 1 1C语言发展及特点 1 2TurboC运行环境 返回 1 TurboC的系统配置TurboC只要求很少的系统资源 它仅占用384KB内存 其系统文件占用的磁盘空间不到3MB TurboC一般要求微机有两个驱动器 一个硬盘驱动器和一个软盘驱动器 对显示器无特殊要求 也不要求有鼠标器 TurboC是基于DOS平台的C编译系统 要求在计算机上安装DOS2 0或更高的DOS版本 2 进入TurboC在Windows操作系统下 进入TurboC环境可以用以下两种方法进行操作 1 可以在桌面上选择 开始 菜单中的 所有程序 选择 附件 中的 命令提示符 2 通过 资源管理器 找到文件夹TC中的tc exe文件 双击该文件名 即可进入TurboC环境 1 2TurboC运行环境 返回 TurboC操作界面 1 3Visualc 6 0运行环境 返回 打开VC6环境 选择VC6运行程序 1 3Visualc 6 0运行环境 返回 VC6操作环境 1 3Visualc 6 0运行环境 返回 新建 对话框 1 4简单的C程序介绍 返回 例1 1一个简单的C程序示例 main printf ThisisaCprogram n 运行结果 ThisisaCprogram 说明 main 表示主函数 每个C程序都必须有一个且只有一个main 函数 函数体由大括号 括起来 printf 是C语言的输出函数 n是转义字符 表示换行符 语句最后有分号 1 4简单的C程序介绍 返回 例1 2求两个数的和 include stdio h 文件包含 main 主函数 inta b c 定义变量 int表示整型 a 4 给变量赋值 b 6 c a b printf sum d n c 调用输出函数printf 输出结果 运行结果 sum 10说明 使用变量时要先定义再使用 printf 是系统函数 包含在stdio h头文件中 由于printf 函数经常使用 因此文件包含可以省略 如 例1 1 表示注释 非执行部分 1 4简单的C程序介绍 返回 例1 3通过自定义函数实现计算三个数的平均值 include stdio h floataverage floatx floaty floatz 自定义函数头部定义部分 floataver 定义变量 float表示实型 aver x y z 3 return aver 函数通过return语句返回函数值 main floata b c ave a 3 5 b 4 6 c 7 9 ave average a b c 调用自定义函数average 同时将a b c的值传给x y z 得到函数的值赋给变量ave printf average f ave 运行结果 average 5 333333说明 程序中可以使用系统函数 也可以使用自定义函数 return是函数返回语句 没有返回值时可以省略 返回 从上面的程序可以看出以下几点 1 一个C程序可以由多个文件构成 每个文件可以由几个函数构成 每个函数完成一个特定的功能 它由一组语句组成 自定义函数的一般形式 函数返回值类型函数名 函数形参表 声明部分执行部分return表达式 2 一个完整的C程序必须有一个主函数 名为main 3 程序中用到的变量要先定义后使用 4 由 开头的行称为宏定义或文件包含 末尾无分号 5 语句必须以分号 结束 6 可以用 对C程序中的任何部分作注释 以增强程序的可读性 可以在任何允许插入空格符的地方插入注释 但注释不能嵌套 7 C语言本身没有输入输出语句 输入和输出的操作是由库函数scanf 和printf 等来完成 1 4简单的C程序介绍 1 5C程序的执行过程 返回 1 程序执行过程 键盘输入源程序f c磁盘文件f objf exe结果 2 常见错误分析 1 语法错误 2 逻辑错误 3 运行错误 本章小结 本章主要介绍了C语言的发展 C语言的特点 C语言的运行环境 简单的C程序的组成 C程序的运行过程 通过本章的学习 使学生对C语言有个大致的了解 熟悉C语言的运行环境 了解如何使用C语言编写简单的程序来解决实际问题 返回 关系运算 逻辑运算 位运算 第2章数据及其运算 本章小结 返回 数值型数据的特征 数据常量 数据变量 算术运算 返回 2 1数值型数据的特征 返回 1 数值的表示形式定点表示和浮点表示是C语言基本数据类型的重要特征 凡不带指数部分的数称为定点数 如 3 14 10 12等 整数都属于定点数 如果数值以指数形式表示 小数点的位置可以是浮动的 称之为浮点数形式 在C语言中采用科学记数法 即e或E加或减一个整数的方法来表示 如 31 4E 1 2 整数的有符号类型与无符号类型数值是以补码形式存放的 一个正数的补码就是该数的二进制数 负数补码的求解过程为 先取该数的绝对值 然后以二进制数的形式表示 再对其按位取反 然后末尾加1 无符号数的含义是指最高位不表示符号 也是数值的一部分 因此 无符号的整数与有符号的整数差别比较大 如 12的存储形式如果表示无符号数 则为65524 注意 在C语言中 实数都是有符号数 2 2常量与变量 返回 常量分为不同的数据类型 如整型常量 实型常量 字符常量和字符串常量等 整型常量整型常量即是整数 包括正整数 负整数和0 在 语言中整型常量有三种表示形式 十进制整数 有效数字为0 9 如20 123 八进制整数 有效数字为0 7 且以0开头 如020表示八进制数20 十六进制整数 有效数字为0 9和a f 或A F 且以0 x开头 如0 x20表示十六进制数20 等价于十进制数32 浮点型常量浮点型常量也称 浮点数 即实型常量 也就是带小数点的数浮点型常量有两种表示形式 十进制小数形式 由正 负号 数字0 9和小数点组成指数形式 或称科学记数法 由正 负号 数字0 9 小数点和字母e 或E 组成 它的表示形式为 me n或mE n 表示m 10 n 2 2数据常量 返回 字符常量用一对单引号括起来的一个字符称为字符常量 如 a 7 等 以 开头的字符序列 称为 转义字符 用来表示一些难以用一般形式表示的字符 2 2常量与变量 2 2数据常量 返回 字符串常量字符串常量是用一对双引号括起来的一个字符序列 字符序列中含有字符的个数称为字符串的长度 说明 字符串常量在存储时除了存储双引号中的字符序列外 系统还会自动在最后一个字符的后面加上转义字符 0 所以一个字符串常量在内存中所占的字节数是字符串长度加1 如 china 的长度为5 而在内存中占的字节数为6 0 是ASCII码为0的空操作字符 C语言规定用 0 作为字符串的结束标志 以便系统根据它来判断字符串是否结束 字符串常量中的字符可以是转义字符 但它只代表一个字符 如 字符串 ab n cd 的长度是6 而不是8 在C语言中没有专门的字符串类型 需要使用字符型数组 即用一个字符型数组来存放一个字符串 数组中的每个单元存放该字符串中一个字符 也可以用一个标识符代表一个常量的符号 称为符号常量 符号常量定义的一般形式 define标识符常量值 2 2常量与变量 2 2数据常量 2 3数据变量 返回 在程序运行过程中 其值可以变化的量称为变量 变量代表内存中具有特定属性的一个存储单元 它用来存放数据 也就是变量的值 2 3数据变量 返回 1 标识符的命名规则给变量 符号常量 函数 数组 数据类型等对象命名的有效字符序列统称为标识符 语言规定标识符只能由字母 数字和下划线组成 且第一个字符必须为字母或下划线 变量使用之前要先定义类型 变量定义的一般形式 类型标识符变量名如 inta 说明 1 变量名不能是关键字 即保留字 是C编译程序中保留使用的标识符 2 可以同时定义两个或两个以上的变量 变量名之间用逗号间隔 3 尽可能做到变量名 见名知义 4 C语言区分英文大小写字母 如 a1和A1是两个不同的标识符 5 对所有用到的变量做强制定义 也就是 先定义 后使用 6 语言允许在函数内部或函数外部定义变量同时给变量赋初值 称为变量的初始化 2 3数据变量 返回 2 基本数据类型 1 整型变量 2 浮点型变量 2 3数据变量 返回 3 字符型变量 4 指针变量指针即是地址 是常量 指针变量是一种特殊类型的变量 即存放指针 地址 的变量 而这个地址往往是其他变量的地址 其在内存中的存储位置 指针变量定义的一般形式 类型标识符 变量名如 inta 10 p p 含义是把变量a的地址赋给指针变量p 此时称指针变量p 指向 整型变量a 见下图 2 4算术运算 返回 1 算术运算符在C语言中 用算术运算符和圆括号将运算对象连接起来的 并且符合C语言语法规则的式子称为算术表达式 1 双目算术运算符 加法运算符 减法运算符 乘法运算符 除法运算符 取余 模 运算符 2 单目运算符 负号运算符 取操作对象的负数 自增运算符 使变量的值增1 j i 前缀式 先将i的值加1 然后再赋给j j i 后缀式 先把i的值赋给j 然后将i的值加1 自减运算符 使变量的值减1 取负 和 的结合性为右结合 和 的结合性为左结合 当运算符 和运算符 进行混合运算时 C语言规定 自左向右尽可能多的组成运算符 2 4算术运算 返回 2 数据类型转换 1 自动数据类型转换转换的规则是 若为字符型必须先转换成整型 即其对应的ASCII码值 若为单精度型必须先转换成双精度型 若运算对象的类型不相同 将低精度类型转换成高精度类型 精度从低到高的顺序是 int unsigned long double 2 强制数据类型转换强制类型转换的一般形式 类型标识符 表达式 如 int x y 将x y的值转换成整型 int x y 将x的值转换成整型说明 类型标识符必须用圆括号括起来 强制数据类型转换只是得到一个所需类型的中间值 原来说明的数据类型并没有改变 由高精度类型转换成低精度类型可能会损失精度 2 4算术运算 返回 3 赋值运算符 1 赋值运算符 基本赋值运算符 它的作用是将赋值运算符 右侧的数据赋给左侧的变量 如 a 12 的作用是将常量12赋给变量a 也可以将一个表达式的值赋给一个变量 如 a 3 5 把3 5的和8赋给变量a 复合赋值运算符 如 a 3 表示a的值加上3的结果再赋给a 如 a 3 表示a的值减去3的结果再赋给a 如 a 3 表示a的值乘以3的结果再赋给a 如 a 3 表示a的值除以3的结果再赋给a 如 a 3 表示a的值除以3的余数再赋给a 赋值运算符都是双目运算符 用赋值运算符实现对变量进行赋值运算 2 4算术运算 返回 2 赋值表达式 基本赋值表达式基本赋值表达式的一般形式 变量名 表达式其求解过程是 先计算赋值运算符右侧表达式的值 然后将其赋给左侧的变量 复合赋值表达式复合赋值表达式的一般形式 变量op 表达式其中 op 其等价于 变量 变量op 表达式 3 优先级所有赋值类运算符的优先级相同 除逗号运算符外 赋值类运算符的优先级是最低的 4 结合性赋值运算符的结合性都是右结合 可以连续给变量赋值 如 a b c 10等价于a b c 10 2 4算术运算 返回 4 逗号运算符逗号运算符 逗号运算符的优先级是C语言所有运算符中最低的 结合性为左结合 逗号运算符是双目运算符 逗号表达式是由一系列逗号隔开的表达式组成 逗号表达式的一般形式 表达式1 表达式2 表达式3 表达式n 其中 方括号内的内容为可选项 表达式i 1 i n 的类型任意 逗号表达式的求解过程是 从左向右依次计算每个表达式的值 逗号表达式的值就是最右边表达式的值 逗号表达式值的类型就是最右边表达式值的类型 2 5关系运算 返回 1 关系运算符 语言规定了六种关系运算符 大于 大于或等于3 c 5 12 关系不成立 表达式结果值为0 假 2 5关系运算 返回 3 关系运算符的优先级与结合性 1 优先级6个关系运算符的优先级分为两级 高级 低级 关系运算符的优先级低于算术运算符 高于赋值运算符 如 a b c d等价于 a b c d 2 结合性关系运算符的结合性都为左结合 如 a b c等价于 a b c根据运算符的优先级和结合性 表达式3 4 1 2 5的求解过程为 算术运算4 1的结果为5 表达式3 5 2 5 关系运算5 2的结果为1 表达式3 1 5 关系运算3 1的结果为0 表达式0 5 关系运算0 5的结果为1 即整个表达式的结果为1 2 6逻辑运算 返回 1 逻辑运算符C语言提供3种逻辑运算符 逻辑与 逻辑或 逻辑非其中 和 是双目运算符 是单目运算符 2 逻辑表达式用逻辑运算符将两个表达式连接起来的式子称为逻辑表达式 如果a b为运算对象 则逻辑运算符的运算规则为 1 a b 只有a b同时为真时 逻辑表达式的值才为真 否则为假 2 a b 当a b同时为假 逻辑表达式的值才为假 否则为真 3 若a为真 则 a为假 若a为假 则 a为真 2 6逻辑运算 返回 3 逻辑运算符的优先级与结合性 1 优先级3个逻辑运算符优先级从高到低的顺序为 高 低 2 结合性 和 的结合性为左结合 的结合性为右结合 如 a b c d e f等价于 a b c d e f a b 等价于 a b 注意 在逻辑表达式的求解过程中 并不是所有的逻辑运算对象都被执行 只有在必须执行下一个逻辑运算才能求出表达式的值时 才执行该运算对象 2 7位运算 返回 C语言提供了六种位运算符 按位与 按位或 按位异或 取反 右移说明 1 位运算符除 以外 均为双目运算符 即要求两侧各有一个操作对象 2 操作数只能是整型或字符型的数据 不能为实型数据 3 操作数以补码方式存储 4 位运算的优先级为 高低 2 7位运算 返回 1 按位与运算按位与运算符 的功能是参加运算的两个数按其对应的二进制位相与 只有对应的两个二进制位均为1时 结果该位才为1 否则为0 运算规则为 0 0 0 0 1 0 1 0 0 1 1 1 按位与具有如下特征 1 任何位上的二进制数 只要和0 与 该位即被屏蔽 清0 2 任何位上的二进制数和1 与 该位保留原值不变 按位与运算符通常有以下特殊用途 1 用来对某些位清0 如果想将一个数据的全部二进位设置为0 可找一个二进制数 原来的数中为1的位 新数中对应位置的数取0 其余各位的数任意 再将新数与原数进行按位与运算 2 保留指定位 如果想将一个数据的哪些位保留下来 可先设一个对应位置为1的新数 再将新数与原数进行按位与运算 2 7位运算 返回 2 按位或运算按位或运算符 的功能是参加运算的两个数按其对应的二进制位相或 只有对应的两个二进制位有一个为1 该位的运算结果就为1 只有当两个相应位的数都为0时 该位的运算结果就为0 运算规则为 0 0 0 0 1 1 1 0 1 1 1 1 按位或具有如下特征 1 任何位上的二进制数和1 或 该位即被指定为1 2 任何位上的二进制数和0 或 该位不变 位或运算符通常用来对某些位置1或保留某些位 如 把a的高4位不变 低4位置1 可进行a 15运算 15的二进制数为00001111 2 7位运算 返回 3 按位异或运算按位异或运算符 的功能是参与运算的两个对象对应的二进制位相异或 当对应的二进位不相同时 结果为1 相同时 结果为0 运算规则为 0 0 0 0 1 1 1 0 1 1 1 0 按位异或具有如下特征 1 对应位上的数相反 结果为1 2 对应位上的数相同 结果为0 可使用 运算符来实现以下功能 1 使特定位翻转 假设有01110110 想使其低4位翻转 即1变为0 0变为1 可以将它与00001111进行 运算 2 与0异或 保留原值 3 交换两个值 不用临时变量 想将a和b互换 可以用这三个语句实现 a a b b b a a a b 2 7位运算 返回 4 求反运算求反运算符 为单目运算符 具有右结合性 其功能是对参与运算的数的各二进制位按位求反 运算规则为 1 0 0 1 5 左移运算左移运算符 的功能与左移运算符相反 它是把 左边的操作数的各二进制位全部右移 右边指定的位数 右移时 右端移出的二进制数舍弃 左端移入的二进制数分两种情况 对于无符号整数和正整数 高位补0 对于负整数 高位补1 如 设a 15 a 2 表示把00001111右移2位后为00000011 十进制3 它在右移时 符号位将随同移动 它为正数时 最高位补0 若a 15 a 2 表示把11110001右移2位后为11111100 十进制 4 它在右移时 最高位补1 2 7位运算 返回 7 复合赋值运算符位运算符与赋值运算符可以组成复合赋值运算符 有 如 a b相当于a a ba 2相当于a a 2前面我们已经介绍过 位运算的对象可以是整型 longint或int 和字符型 char 数据 当两个运算对象类型不同时位数也不同 遇到这种情况 系统将自动进行如下处理 1 首先将两个运算对象右端对齐 2 再将位数短的一个运算对象往高位扩充 即 无符号数和正整数左侧用0补齐 负数左侧用1补齐 然后对这两个长度相等的两个运算对象 按位进行运算 本章小结 本章主要介绍了C语言中的常量和变量 算术运算 关系运算 逻辑运算 赋值运算 位运算 逗号运算和指针 通过本章的学习 清楚C语言中各种常量 变量 运算符和表达式的规则 了解字面常量和符号常量的特点 掌握C语言中各种运算符的功能 运算符要求运算对象的个数 运算符要求运算对象的数据类型以及运算符的优先级和结合性 熟悉各种表达式值的数据类型 理解指针的概念 掌握指针变量的定义和使用的方法 返回 算法 输入输出函数 选择结构程序设计 第3章程序的流程控制 本章小结 返回 循环结构程序设计 3 1算法 返回 1 算法及基本性质算法就是进行操作的方法和操作的步骤 算法含有两大要素 1 操作 每个操作的确定不仅取决于问题的需求 还取决于它们取自哪个操作集合 与具体使用有关 在高级语言中所描述的操作主要包括 算术运算 关系运算 逻辑运算等 计算机算法是由这些操作组成的 2 控制结构 每一个算法都要由一系列的操作组成 控制结构即如何控制组成算法的各操作的执行顺序 结构化程序设计方法要求 一个程序只能由三种基本控制结构组成 顺序 选择和循环 通常认为算法有如下的性质 1 解题算法是一个有穷动作序列 2 此动作序列只有一个初始动作 3 序列中每一动作仅有一个后续动作 4 序列终止表示问题得到解答或问题没有解答 3 1算法 返回 2 算法的描述算法的描述方法很多 比如流程图 N S图 PAD图 伪代码等 下面介绍三种结构的流程图 N S图的画法 1 顺序结构 3 1算法 返回 2 选择结构 3 1算法 返回 3 1算法 返回 3 循环结构 当型循环结构 当条件p为 真 时 反复执行A操作 直到p为 假 时才停止循环 3 1算法 返回 直到型循环结构 先执行A操作 再判断条件p是否为 真 若为 真 再执行A 如此反复 直到p为 假 为止 3 1算法 返回 3 自顶向下 逐步细化的算法设计过程按照这种方法 解题之初不要马上就力图触及问题解法的细节 而应当从问题的全局角度出发 给出高度概括 高度抽象的算法 通常是把这些问题的求解分成可独立求解的若干子问题 接着对每一个子问题再进行分解 最后对不可再划分的子问题分别设计算法 而且设计的过程也是从概括逐步走向细化 一般说来 上层所解决的是 做什么 逐步细化的过程解决的是 怎么做 3 2输入输出函数 返回 在调用标准输入输出库函数时 文件开头应该有 include stdio h 或 include1 字符数据的输入和输出 1 字符输出函数 putchar 函数调用格式 putchar 参数 功能 向显示器输出一个字符 返回值 如果输出成功 返回值就是输出的字符 否则返回EOF 1 说明 putchar 函数一次只能输出一个字符 即该函数有且只有一个参数 可以是字符变量 字符常量或表达式 也可以是整数 以ASCII码形式 最后输出对应的字符 putchar 函数可以输出转义字符 3 2输入输出函数 返回 2 字符输入函数 getchar 函数调用格式 getchar 功能 从键盘读入一个字符 返回值 如果读入成功 返回值就是读入的字符 否则返回EOF 1 说明 getchar 一次只能接收一个字符 即使从键盘输入多个字符 也只接收第一个字符 空格和转义字符都作为有效字符接收 接收的字符可以赋给字符型变量或整型变量 也可以作为表达式的一部分不赋给任何变量 getchar 是无参函数 从键盘上输入的字符不能带单引号 输入以回车结束 3 2输入输出函数 返回 2 格式输入输出函数scanf 和printf 1 格式输出函数 printf 函数调用格式 printf 格式控制字符串 输出表列 功能 按指定格式输出数据 返回值 输出成功 返回输出字节数 否则返回EOF 1 说明 输出表列 要输出的数据 可以没有 当有两个或两个以上输出项时 要用逗号 分隔 输出表列中的输出项可以是常量 变量或表达式 格式控制字符串 由普通字符和格式说明符两部分组成 普通字符 即需要原样输出的字符 包括转义字符 格式说明符是以 开始 以一个格式字符结束 中间可以插入附加格式说明符 它的作用是将输出的数据转换为指定的格式输出 其一般形式 附加格式说明符 格式字符 3 2输入输出函数 返回 函数printf 格式字符 3 2输入输出函数 返回 printf 函数常用的附加格式说明符 3 2输入输出函数 返回 2 格式输入函数 scanf 函数调用格式 scanf 格式控制字符串 地址表列 功能 按指定的格式从键盘读入数据 并存入地址表列指定的内存单元中 返回值 返回输入数据个数 说明 地址表列 是由若干个地址组成的表列 可以是变量的地址或其他地址 C语言中变量的地址通过取地址运算符 得到 表示形式为 变量名 如 变量a的地址为 a 格式控制字符串 同函数printf 类似 是由普通字符和格式说明符组成 普通字符 即需原样输入的字符 包括转义字符 格式说明符同函数printf 相似 3 2输入输出函数 返回 函数scanf 格式字符 3 2输入输出函数 返回 函数scanf 常用附加格式说明符 3 3选择结构程序设计 返回 1 if语句if语句是用来判断所给定的条件是否满足 根据判断的结果 真或假 决定执行给出的两种操作之一 if语句有以下四种形式 单选择 双选择 多选择和嵌套选择 1 单选择格式为 if 表达式 语句执行过程 先计算if后面的表达式 若结果为真 非0 执行后面的语句 若结果为假 0 不执行该语句 2 双选择格式为 if 表达式 语句1else语句2执行过程 先计算if后面的表达式 若结果为真 非0 则执行语句1 否则执行语句2 3 3选择结构程序设计 返回 3 多选择格式为 if 表达式1 语句1elseif 表达式2 语句2elseif 表达式3 语句3 elseif 表达式n 语句nelse语句m执行过程 先计算表达式1 若表达式1的结果为真 非0 执行语句1 否则计算表达式2 若表达式2的结果为真 非0 执行语句2 以此类推 若n个表达式的结果都为假 0 则执行语句m 3 3选择结构程序设计 返回 4 嵌套选择if else语句可以嵌套 即在一个if else语句中又可以包含一个或多个if else语句 格式为 if 表达式1 if 表达式2 语句1else语句2elseif 表达式3 语句3else语句4 使用if语句时应注意以下几点 if后面圆括号内的表达式可以为任意类型 但一般为关系表达式或逻辑表达式 if和else后面的语句可以是任意语句 if x 与if x 0 等价 if x 与if x 0 等价 if和else的配对关系是 从最内层开始 else总是与它上面最近的并且没有和其他else配对的if配对 3 3选择结构程序设计 返回 2 条件表达式条件表达式的格式为 表达式1 表达式2 表达式3条件表达式的求解过程是 先求解表达式1 若表达式1的值不为0 则求解表达式2 表达式2的值就是条件表达式的值 若表达式1的值为0 则求解表达式3 表达式3的值就是条件表达式的值 3 3选择结构程序设计 返回 3 switch case语句虽然用if语句可以解决多分支问题 但如果分支较多 嵌套的层次就多 会使程序冗长 可读性降低 C语言提供了专门用于处理多分支情况的语句 switch case语句 switch case语句的格式为 switch 表达式 case常量表达式1 语句1 break case常量表达式2 语句2 break case常量表达式n 语句n break default 语句n 1 break switch case语句的执行过程 首先计算switch后面圆括号中表达式的值 然后用其结果依次与各case后面的常量表达式的值进行比较 若相等 执行该case后面的语句 执行时 如果遇到语句break 就退出switch case语句 转至花括号的下方 否则顺序往下执行 若与各case后面常量表达式的值都不相等 则执行default后面的语句 3 3选择结构程序设计 返回 4 goto语句一般格式为 goto语句标号 功能 无条件地将程序控制转至语句标号处 说明 语句标号是一种标识符 在goto语句所在的函数中必须存在 并且其后必须跟一个冒号 冒号的后面可以为空 也可以是任何语句 语句标号代表程序在该点的地址 使用goto语句只能实现在同一个函数内跳转 可以向前跳转 也可以向后跳转 但不能实现从一个函数跳转到其他函数 只能从循环嵌套的内循环跳转到外循环 不能从外循环跳转到内循环 goto语句可以和if语句一起构成循环结构 goto语句使程序流程无规律 可读性差 不符合结构化程序设计的原则 一般不宜采用 只有在不得已时才使用 3 4循环结构程序设计 返回 1 while格式 while 表达式 循环体 while循环的执行过程 计算while后面圆括号中表达式的值 若其结果为真 非0 转 否则转 执行循环体 转 退出循环 执行循环体下面的语句 3 4循环结构程序设计 返回 2 do while格式 do 循环体 while 表达式 do while循环的执行过程 执行循环体 转 计算while后面圆括号中表达式的值 若其结果为真 非0 转 否则转 退出循环 执行循环体下面的语句 3 4循环结构程序设计 返回 3 for格式 for 表达式1 表达式2 表达式3 循环体 for语句的执行过程 计算表达式1 转 计算表达式2 若其值为非0 转 否则转 执行循环体 转 计算表达式3 转 退出循环 执行循环体下面的语句 3 4循环结构程序设计 返回 说明 在for语句中 在分号 必须保留的前提条件下 三个表达式的任何一个都可以省略 因此for语句又有如下省略形式 for 表达式2 表达式3 表达式1省略 此时应在for语句之前给变量赋初值 for 表达式1 表达式2 表达式3省略 此时应在循环体中修正循环变量 for 表达式1 表达式3 表达式2省略 此时认为表达式2的值始终为真 for 循环体三个表达式同时省略 此时相当于 while 1 循环体 若循环体不是空语句 不能在for语句的圆括号后面加分号 表达式1和表达式3经常使用逗号表达式 3 4循环结构程序设计 返回 4 循环语句嵌套一个循环语句的循环体中又有循环语句 称为循环语句嵌套 三种循环语句可以互相嵌套 并且可以嵌套多层 注意 循环语句在嵌套时应该是水平嵌套 不能交叉嵌套 3 4循环结构程序设计 返回 5 中途结束语句 1 break格式 break 功能 用于switch case语句时 退出switch case语句 用于循环语句时 退出循环体 程序转至循环体下面的语句 2 continue格式 continue 功能 结束本次循环 跳过循环体中尚未执行的部分 进行下一次是否执行循环的判断 在while语句和do while语句中 continue把程序控制转到while后面的表达式处 在for语句中 continue把程序控制转到表达式3处 本章小结 本章主要介绍了常用的输入和输出函数和三种控制结构的实现 其中scanf 和printf 是最常用的输入 输出函数 需要用心去掌握各常用格式字符的使用 通过本章的学习 使学生了解C程序的控制结构 清楚顺序结构 选择结构和循环结构设计的思路 掌握基本的输入 输出函数的使用 本章内容需要多上机操作 以加强对C语言输入 输出函数的理解和掌握程序控制流程的实现 掌握穷举法和迭代法的思想及其应用 提高用C语言解决实际问题的能力 返回 数组概述 一维数组 二维数组 第4章数组 本章小结 返回 字符串操作 数组与指针 4 1数组概述 返回 数组是指一组相同类型数据所组成的序列 它有如下3个特点 1 组织一组相同类型数据并用一个名字命名 2 这组数据被存储在内存的一块连续区域中 3 这组数据具有顺序关系 组成它的每个元素可以通过序号进行区别 4 2一维数组 返回 1 一维数组的定义在C语言中 使用数组前必须先定义 数组定义的形式 类型说明符数组名 数组长度 对于数组的定义说明如下 1 类型说明符可以是以前我们学过的任何一种基本数据类型 也可以是指针类型或结构体类型 它说明数组每一个元素的类型 对于同一个数组 其所有元素的数据类型都是相同的 2 数组名是用户定义的标识符 应符合标识符的命名规定 3 数组名不能与其它变量名相同 4 方括号 为下标运算符 其中数组长度表示数组元素的个数 因此它只能是整数 5 方括号中可以是常量 也可以是符号常数或常量表达式 但不能是变量 6 允许在同一个类型说明中 定义多个数组和多个变量 7 C编译程序将为数组在内存中开辟连续的存储单元 4 2一维数组 返回 2 一维数组的引用在C语言中只能逐个引用数组元素而不能一次引用整个数组 数组元素是组成数组的基本单元 其引用方法 数组名 下标 说明 1 下标为整型数据 如果是小数 将自动取整 如 a 2 5 a 2 i a i 都是合法的数组元素 2 只能逐个引用数组元素而不能一次引用整个数组 如 输出含有10个元素的数组必须使用循环语句逐个输出各数组元素 4 2一维数组 返回 3 一维数组的初始化数组初始化的一般形式 类型说明符数组名 数组长度 常量序列 说明 1 在 中的各常量即为各元素的初值 各常量之间用逗号间隔 如 inta 10 0 1 2 3 4 5 6 7 8 9 2 给部分元素赋初值 当 中值的个数少于元素个数时 只给前面部分元素赋值 其他元素自动赋值为0 如 inta 10 0 1 2 3 4 3 只能给元素逐个赋初值 不能给数组整体赋初值0 如 给十个元素全部赋值1 只能写成 inta 10 1 1 1 1 1 1 1 1 1 1 而不能写成 inta 10 1 4 给全部元素赋初值 则可省略数组的长度 如 inta 5 1 2 3 4 5 可写成 inta 1 2 3 4 5 2020 3 17 77 可编辑 4 3二维数组 返回 1 二维数组的定义与存储 1 二维数组的定义二维数组定义的形式 类型说明符数组名 行数 列数 2 二维数组的存储存储器是连续编址的 也就是存储器单元是按一维线性排列的 在C语言中 在一维存储器中存放二维数组是按行排列的 2 二维数组的引用二维数组的元素也称为双下标变量 其表示的形式 数组名 行下标 列下标 4 3二维数组 返回 3 二维数组的初始化二维数组的初始化也是在数组定义时赋初值 二维数组可按行分段赋初值 也可按行连续赋初值 如 对数组a 3 4 赋初值 1 按行赋初值 将二维数组中每一行元素的初值分别写在一对花括号内 如 inta 3 4 1 2 3 4 11 12 13 14 21 22 23 24 2 按数组的存储顺序赋初值 将数组所有元素的初值写在一对花括号内 如 inta 3 4 1 2 3 4 11 12 13 14 21 22 23 24 3 可以对部分元素赋初值 如 inta 3 4 1 11 21 其作用是只对各行的第一列元素赋初值 其余元素值自动取0 4 若对全部元素都赋初值或按行赋初值时 则可以省略行数 但列数不可以省略 如 inta 4 1 2 3 4 11 12 13 14 21 22 23 24 4 4字符串操作 返回 1 字符数组 1 字符数组的定义用来存放字符的数组称为字符数组 即数组元素的类型为字符型 如 charc 10 其中 c被定义为一维字符数组 在这个数组的每一个元素中存放的都是单个字符 由于字符型数据和整型数据通用 也可以定义为 intc 10 但这时每个数组元素占2个字节的内存单元 2 字符数组的初始化字符数组也允许在数组定义时赋初值 如 charc 10 I a m h a p p y 赋值后各元素c 0 c 9 的值分别为 I a m h a p p y 如果花括号中提供的初值个数大于数组长度 则按语法错误处理 如果初值个数小于数组长度 则只将这些字符赋给数组中前面那些元素 其余的元素自动取空字符 即 0 4 4字符串操作 返回 2 字符串在C语言中没有专门的字符串数据类型 字符串用一个字符数组来存放 为了便于识别一个字符串 C语言规定 以 0 作为字符串的结束标记 有了 0 标志后 我们就不必再用字符数组的长度来判断字符串的长度了 并且 还可用字符串对数组作初始化 如 charc C p r o g r a m 0 可写为 charc Cprogram 或去掉 写为 charc Cprogram 3 字符串的输入与输出我们可以使用scanf 和printf 函数一次性输入 输出一个字符数组中的字符串 而不必使用循环语句逐个地输入输出每个字符 如 charc Cprogram printf s n c scanf s c 用来输入一个字符串 注意此处不能加取地址运算符 4 4字符串操作 返回 1 字符串输出函数puts 函数调用格式 puts s 功能 向标准输出设备输出一个字符串 以 0 结束字符序列 并换行 说明 s为字符型数组或字符型指针变量 也可以是字符串常量 说明 函数puts 的作用与printf s n s 相同 函数puts 只能输出字符串 不能输出数值或进行格式变换 可以将字符串直接写入函数puts 中输出 如 puts Hello TurboC2 0 puts 函数中可以输出转义字符 2 字符串输入函数gets 函数调用格式 gets s 功能 从键盘输入字符串赋值给数组变量 说明 其中s为字符串数组名或字符指针 读取字符串直到回车结束 但回车符不属于这个字符串 4 4字符串操作 返回 函数gets s 与scanf s 输入字符串时存在一个问题 如果输入空格会认为输入字符串结束 空格后的字符将作为下一个输入项处理 但函数gets 将接收输入的整个字符串直到遇到回车为止 4 字符串处理函数用于输入输出的字符串函数 在使用前应包含头文件 stdio h 使用其它字符串函数则应包含头文件 string h 1 字符串连接函数strcat 函数调用格式 strcat 字符数组名1 字符数组名2 功能 把字符数组2中的字符串连接到字符数组1中字符串的后面 并删除字符串1后面的 0 本函数返回值是字符数组1的首地址 2 字符串拷贝函数strcpy 函数调用格式 strcpy 字符数组名1 字符数组名2 功能 删除字符数组1中的原有字符 把字符数组2中的字符串拷贝到字符数组1中 字符串结束标志 0 也一同拷贝 字符数组2也可以是一个字符串 这相当于给字符数组赋值 4 4字符串操作 返回 3 字符串比较函数strcmp 函数调用格式 strcmp 字符数组名1 字符数组名2 功能 按照ASCII码值的大小关系顺序比较两个字符数组中的字符 并由函数返回值返回判断比较结果 若字符串1 字符串2 函数返回值 0 若字符串1 字符串2 函数返回值 0 若字符串1 字符串2 函数返回值 0 本函数也可用于比较两个字符串常量 注意 不能用关系运算符对两个字符串进行比较 如 str1 str2是错误的 4 测字符串长度函数strlen 函数调用格式 strlen 字符数组名 功能 测试字符串的实际长度 不含字符串结束标志 0 函数返回值为字符串的实际长度 4 5数组与指针 返回 1 一维数组与指针 1 定义指向一维数组的指针变量如 inta 6 10 20 30 40 50 60 int p a 第一个语句定义了一个一维整型数组a 第二个语句定义了指针变量p 同时利用a数组的首地址对指针变量p进行初始化 从而使指针p指向了数组a的首元素 2 通过指针引用数组元素通过指针引用数组元素的方法如下 第i个元素a i 指向它的指针为p i 其数组元素可表示为 p i 可以使用带下标的指针变量表示数组元素 p i 与a i 等价 数组名a是数组首元素的地址 因此也可以用a i表示第i个元素的首地址 该数组元素也可表示为 a i a 0 a 1 a 2 a 3 a 4 a 5 pp 1p 2p 3p 4p 5 一维数组元素的指针 aa 1a 2a 3a 4a 5 4 5数组与指针 返回 2 二维数组与指针对于二维数组a 其a 0 数组由a指向 a 1 数组则由a 1指向 以此类推 因此 a与a 0 等价 a 1 与a 1 等价 即对于a i 数组 由 a i 指向 由此 对于数组元素a i j 用数组名a的表示形式为 a i j 指向该元素的指针为 a i j 3 字符串与指针使字符串指针指向字符串的方法通常有两种 1 通过定义指针变量时初始化指向字符串 如 char p astring 把字符串首字符的地址赋予给p 2 利用赋值语句使指针变量指向字符串 如 charch 20 s char str1 ch str2 s string str2 str1 4 5数组与指针 返回 4 指针数组数组元素为指针类型的数组称为指针数组 指针数组中的每一个元素都是指针变量 它们指向相同类型的数据 1 指针数组的定义一维指针数组的定义形式为 数据类型说明符 数组名 数组长度 如 char days 7 该语句定义了一个名为days的字符型指针数组 它有7个指向字符数据的指针变量 2 指针数组的初始化由于指针数组的每个元素是指针变量 只能存放地址 所以对指向字符串的指针数组赋初值时 可把存放字符的首地址赋给指针数组的对应元素 4 5数组与指针 返回 如 char day 7 Sunday Monday Tuesday Wednessday Thursday Friday Saturday 初始化后 days的每一个元素都指向一个字符串 元素值是对应字符串的首元素地址 本章小结 本章主要介绍了数组的定义 引用和初始化方法 数组的使用技巧 字符串的输入 输出和字符串处理函数 指针与数组的关系 通过本章的学习 使学生认识一种稍复杂的数据结构 数组 对数组数据的存储有一定的了解 掌握数组的定义 引用技巧和初始化方法 掌握字符串的输入 输出方法 能用字符串处理函数解决字符串问题 掌握指针的应用 返回 C程序结构 函数定义与调用 函数参数传递 第5章模块化程序设计 本章小结 返回 函数的嵌套调用与递归调用 变量的存储属性 编译预处理 带参数的主函数 运行一个多文件的程序 5 1C程序结构 返回 一个源文件可以由若干个函数和编译预处理以及全局变量声明部分组成 5 1C程序结构 返回 程序实现时 主菜单由主函数提供 下面的各级子菜单由各级子函数提供 最末一级的菜单 提供一些具体的功能 菜单程序是一种常见的程序 它主要由两部分内容构成 1 显示菜单 由一些显示操作提供 2 根据用户的选择转向相应的函数 由选择结构实现 5 2函数定义与调用 返回 1 函数定义的一般形式函数定义的一般形式 函数存储类别函数返回值类型函数名 函数形参表 形参说明 函数体声明部分函数执行语句序列 说明 函数存储类别 表明该函数是外部函数 还是内部函数 extern表示外部函数 可以被其他文件中的函数调用 static表示内部函数 只能在定义该函数的文件中被调用 如果存储类别省略 代表extern 函数返回值类型 表明调用该函数时将带回一个何种类型的值 函数返回值是通过return语句返回的 省略函数返回值类型则系统默认为int 一般来说 函数返回值的类型就是函数返回语句中表达式值的类型 5 2函数定义与调用 返回 函数形参表 它们的数值是通过调用函数传递过来的 每个参数都必须独立说明类型 可以包含多个形参 中间用 间隔 可以把形参说明放在外面 也可以放到括号里面 两种效果相同 函数可以没有参数 这时可以在括号中写void 也可以空白 函数体声明部分 定义函数包含的变量等 函数执行语句序列 实现函数功能的语句的有机集合 函数定义不能嵌套 一个函数不能定义在其他函数的内部 所有函数定义都是平行的 相互独立的 如果函数功能没确定 可以写一个空函数 以后再填上相应的代码 如 voidbb void 5 2函数定义与调用 返回 2 函数调用格式 函数名 实参表 说明 实参表中参数的类型不能写上 但参数的类型和个数一定与形参表中的各个参数的类型和参数个数一一对应 保持一致 3 函数声明函数声明的一般形式 函数返回值类型函数名 类型标识符形参1 类

温馨提示

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

评论

0/150

提交评论