




已阅读5页,还剩199页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计 主讲 高照艳 2 第一章C语言概述 主要内容 C语言的发展C语言的特点简单C程序介绍算法结构化程序设计C程序的执行过程 3 C语言出现的历史背景 1 C语言的发展源于人们希望用高级语言编写操作系统 ALGOL60 高级语言 60 CPL 剑桥大学推出接近硬件规模大难实现 63 BCPL 剑桥大学简化CPL 67 B语言 贝尔实验室用B写了UNIX操作系统 70 C语言 用C改写了UNIX90 即第5版 72 73 标准C K R TheCProgramminglanguage 78 ANSIC83 ANSI美国国家标准化协会 87ANSIC ISOC90 ISO 国际标准化组织 版本 MicrosoftC TurboC BorlandC QuickC 2 C语言既具有高级语言特性 又具有低级语言特性 中级语言 1 1C语言的发展 4 1 2C语言的特点 语言简洁 表达能力强 易于理解只有32个关键字 9种控制语句 32个关键字 由系统定义 不能重作其它定义 autobreakcasecharconstcontinuedefaultdodoubleelseenumexternfloatforgotoifintlongregisterreturnshortsignedsizeofstaticstructswitchtypedefunsignedunionvoidvolatilewhile 5 9种控制语句 if else for while do while continuebreakswitchgotoreturn 6 运算符丰富34种运算符 运算能力强 效率高 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 及其扩展条件运算符 逗号运算符 指针运算符 求字节数 sizeof强制类型转换 类型 分量运算符 下标运算符 其它 7 数据类型丰富 8 具有结构化的控制语句程序书写格式自由能进行位操作 能实现汇编语言的大部分功能 可以直接对硬件进行操作语言生成的代码质量高 程序执行效率高可移植性好 9 例1 1编写程序 在屏幕上打印字符串 ThisisaCprogram n main printf ThisisaCprogram n 1 3简单C程序介绍 10 例1 2 求两数之和 main inta b sum 定义变量 a 123 b 456 sum a b printf Sumis d n sum Sumis579 11 例1 3求两数之最大值main inta b c scanf d d 12 C程序结构 C程序由函数构成必须有 且只能有一个main 主函数 总是从main函数开始执行函数由函数首部和函数体组成函数首部指定函数名 函数参数 类型函数体从 开始 到 结束函数内有语句 13 C程序结构 续 语句包括说明性语句 可执行语句以 表示语句结束注释可以出现在程序的任何位置用 和 括起来 必须成对出现书写格式C语言没有行的概念 书写格式自由 习惯小写字母 缩进格式 14 1 4程序的灵魂 算法 程序包括两方面内容 1 对数据的描述 数据元素及各元素之间的关系 即数据结构 2 对操作的描述 即操作步骤 也就是算法 程序 数据结构 算法程序 数据结构 算法 程序设计方法 语言工具环境说明 高级语言的数据结构是以数据类型来体现的 15 1 4 1算法 什么是算法为解决某一应用问题而采用的解题步骤算法的描述方式用自然语言描述算法用流程图描述算法用N S结构图描述算法用计算机语言表示算法 即实现算法 例如 输出两个数中的最大数 16 用自然语言描述算法 第一步 输入x和y的值第二步 比较x和y的值 如果x大于y 则输出x的值 否则输出y的值 例如当描述 输出10个数中最大数 的算法时 会冗长 难于理解 17 图1 5用流程图描述算法 用流程图描述算法 起止框 输入 输出框 判断框 处理框 流程线 18 用N S结构图描述算法 图1 7用N S结构图描述的算法 19 算法的特性 1 有穷性 2 确定性 3 有效性 4 输入 5 输出 20 1 4 2结构化程序设计 程序的三种基本结构顺序结构程序 按照书写顺序依次执行语句选择结构程序 按照条件判断选择执行语句循环结构程序 通过条件控制循环执行语句 三种基本结构的共同点 都是只有一个入口和一个出口 结构内的每一个框都有机会被执行 结构内没有死循环 21 结构化程序设计的三种基本结构 1 顺序结构传统流程图N S流程图 A B 开始 结束 其中 A B为操作框 可由一条或多条语句实现 22 2 选择结构 分支结构 传统流程图N S流程图入口出口 A B P TF TF 其中 P为分支判断条件 A B必有一个且只有一个被执行 A B之一可是空操作 用 表示 23 3 循环结构当型循环 先判断后循环 有可能一次也不循环 入口FT P A 当P为真A 出口 其中 P为循环判断条件 A为要重复执行的操作 称为循环体 24 直到型循环 先循环后判断 至少循环一次 入口FT P A A直到P为真 出口 其中 P为循环判断条件 A为要重复执行的操作 称为循环体 25 算法举例例 计算5 1 2 3 4 5 当型循环直到型循环 26 结构化程序设计的基本原则 结构化程序设计的基本原则 采用自顶向下 逐步细化的方法进行设计 采用模块化原则和方法进行设计 即将大型任务从上向下划分为多个功能模块 每个模块又可以划分为若干子模块 然后分别进行模块程序的编写 每个模块都是用结构化程序实现 即都只能由三种基本结构组成 并通过计算机语言的结构化语句实现 27 1 5C语言的上机操作步骤 一 上机过程 编译 正确 正确 正确 有错误 有错误 编辑 运行 28 C程序的执行过程 1 源程序文件的建立和编辑编写源程序 形成 C文件需用编辑工具 tc exe 记事本2 编译编译源程序 形成目标程序 Obj文件需用编译工具 tcc exe3 连接连接OBJ文件和调用的库函数 形成运行程序 exe文件需用连接工具 tlink exe4 运行 exe文件 29 2 上机过程流程图 30 3 编写 运行C程序时常用功能键 31 三 需要记住的TC中一些常用功能键 F1 帮助 F2 将当前文件存盘 F3 装载原有文件或给新文件命名 F4 程序运行到光标所在行 F5 放大或缩小活动窗口切换 F6 开或关活动窗口切换 F7 单步运行程序 跟踪进入函数内部运行 F8 单步运行程序 不跟踪进入函数内部 32 实验报告 实验一 实验目的 实验内容和步骤 1 设计算法 写出程序2 在TurboC下编辑 得到源程序 c 3 编译 得到目标文件 obj 4 连接 得到可执行文件 exe 5 分析结果 实验体会 C程序设计数据类型 运算符与表达式 34 2 1数据类型2 2常量与变量2 3整型数据2 4实型数据2 5字符型数据2 6变量赋初值2 7混合运算2 8运算符与表达式 数据类型 运算符与表达式CHAPTER2 35 数据类型 运算符与表达式 的数据类型 C语言提供的数据结构是以数据类型形式出现的数据在内存中存放的情况有数据类型决定数据的操作要依靠运算符实现 而数据和运算符共同组成了表达式 36 数据类型 运算符与表达式 的数据类型 37 3 2常量与变量 3 2 1常量和符号常量常量 在运行过程中 其值不能被改变的量称为常量 分类 整型 实型 字符 字符串符号常量 用一个标识符代表的常量 习惯上 符号常量名用大写 变量用小写 以示区别 1 0 123为整型常量4 6 1 23为实型常量 a d 为字符常量 definePRICE255A PRICE A 6C PRICE C 120PRICE是标识符 符号常量 38 3 2 2变量变量 在程序运行过程中 其值可以改变的量称为变量 标识符 用来标识变量名 符号常量名 函数名 类型名 数组名 文件名的有效字符序列称为标识符 由字母 数字和下划线三种字符组成 且第一个字符必须为字母或下划线 合法的变量名如 average abd a s2 student name init不合法的变量名 M D John 1a 33 a b3 C语言要求对变量 先定义 后使用 39 3 3整型数据 3 3 1整型常量由一系列数字组成 也可带有减号 但不使用加号 十进制整数 123 456 0八进制整数 以0开头的数据 如 011 0123十六进制整数 以0 x开头的数据 如 0 x123整型常量的分类根据其值的范围而决定其类型 并可以赋值给类型相匹配的整型变量 40 3 3 2整型变量 1 整数数据在内存中的存放形式数据在内存中是以二进制形式存放的 例如 3 0000000000000011 2要区别 3和 3方法是 将符号也数码化即 正的符号 用0表示负的符号 用1表示数值是以补码表示的 正数的补码和其原码的形式相同 负数的补码 将该数的绝对值的二进制形式 按位取反再加1 3 11111111111111101 2 41 2 整型变量的分类整型 int在内存中以二进制形式存放 每一个整型变量在内存中占2个字节 短整型 以shortint表示或以short表示 一般与int占有的内存相同 长整形 以longint表示或以long表示 一般占有在内存中字节为int两倍 无符号型 只能存放正整数 它的表示是在上述三种类型之前加上unsigned 42 3 整型变量的定义对变量的定义一般放在函数的开头部分 例2 1 main inta b c d unsignedu a 12 b 24 u 10 c a u d b u printf a u d b u d n c d a u 22 b u 14 不同类型的数可以直接运算 43 4 整型数据的溢出main inta b a 32767 b a 1 printf d d a b 运行结果为32767 327683 3 3整型常量的类型 一个整常量 其值在 2 15 2 15 1内可认为是int型 并可赋值给int型和longint型变量 一个整常量 其值在 2 31 2 31 1范围内则认为它是longint型 可赋值给一个longint型变量 常量中无unsigned型 但一个非负值的整常量可以赋给unsigned型整变量 44 3 4实型数据 3 4 1实型常量1 十进制小数形式 日常记数形式 1 0 12 0 12 00 02 指数形式 科学记数形式 E e 例如3 0 5等 3 4 2实型变量1 类型 单精度 float 分配4Byte双精度 double 分配8Byte2 存储 45 实型数据的类型及规定 实型常量不分float和double 根据范围赋值给相应的变量 如 floata doubleb a 111111 111 b 111111 111a中实际存储的是111111 1 7位有效 b中实际存储的是111111 111 全部有效 46 3 5字符型数据 3 5 1字符常量1 定义用一对单引号括起来的单个字符 称为字符常量 例如 A 等 2 转义字符 语言还允许使用一种特殊形式的字符常量 就是以反斜杠 开头的字符序列 47 3 5 2字符型变量字符变量的类型关键字为char 一般占用1字节内存单元 1 变量值的存储将一个字符常量存储到一个字符变量中 实际上是将该字符的ASCII码值 无符号整数 存储到内存单元中 例如 charch1 ch2 定义两个字符变量 ch1 ch2 ch1 a ch2 b 给字符变量赋值 a b 的ASCII码为97 98 2 特性1 字符数据在内存中存储的是字符的ASCII码 2 语言允许字符型数据与整型数据之间通用 可以互相赋值 3 字符数据也可以整数形式输出 48 例1 字符变量的字符形式输出和整数形式输出 main charc1 c2 c1 a c2 b printf c1 c c2 c n c1 c2 printf c1 d c2 d n c1 c2 程序运行结果 c1 a c2 bc1 97 c2 98 49 例2 大小写字母的转换 main charc1 c2 c1 a c2 b c1 c1 32 c2 c2 32 printf cc2 c n c1 c2 程序运行结果 AB 50 数据类型 运算符与表达式字符型数据 3 5 3字符串常量用双引号括起来的字符序列 如 Howdoyoudo CHINA a 123 34 等 字符串可以一次输出 如 printf Howdoyoudo C语言规定 在存储字符串常量时 由系统在字符串的末尾自动加一个 0 作为字符串的结束标志 在内存中 对字符串常量是采用字符数组表示 即用一个字符型数组来存放一个字符串 注意 a 是字符常量 a 是字符串常量 二者不同 51 综上所述 字符常量 A 与字符串常量 A 是两回事 1 定界符不同 字符常量使用单引号 而字符串常量使用双引号 2 长度不同 字符常量的长度固定为1 而字符串常量的长度 可以是某个整数 3 存储要求不同 字符常量存储的是字符的ASCII码值 而字符串常量 除了要存储有效的字符外 还要存储一个结束标志 0 52 3 6变量赋初值 在变量定义的同时可以为变量赋初值 如 inta 3 相当于inta a 3 floatf 3 56 charc a inta b c 5 表示只给c赋初值 相当于inta b c c 5 53 3 7各类数值型数据间的混合运算不同类型的数据 整型 实型 字符型 可进行混合运算 如 10 a 1 5 8765 1234 b 必须首先将它们转换成同一类型的数值 转换原则是由低向高转换 运算结果为最高级别的类型 54 数据类型 运算符与表达式混合运算 55 例2 5 已知 floata 2 0 intb 6 c 3 求解 a b c 1 5 A abs 5 12 0 3 4 0 1 5 2 5 65 int 67 5 5 72 5 56 3 8算术运算符和算术表达式1 基本的算术运算 是模运算 即求余运算 要求整数 如 7 4的结果是3 说明 5 3的结果仍是整数 小数部分被忽略 5 3 3或5 3 0的结果为double型 C编译系统将实型常量作为双精度来处理 如果参加 运算的两个数中有一个数为实数 则结果是double型 2 算术表达式 用算术运算符将运算对象按C的语法规则连接起的式子 例如 a b c 1 5 a 优先级 算术运算 在同一级别中 采取由左至右的结合方向 如 a b c相当于 a b c 57 3 强制类型转换运算符可将一个表达式转换成所需类型 其一般形式为 类型名 表达式 例如 double a int x y float 5 3 在强制类型转换时 得到一个所需类型的中间变量 原来变量的类型未发生变化 58 练习 main inti floatx x 3 6 i int x printf x f i d n x i 59 数据类型 运算符与表达式运算符和表达式 4 自增 自减运算符使变量的值加1或减1 如 i i在使用i之前 先使i的值加 减 1i i 在使用i之后 再使i的值加 减 1例如 i的值为3 则j i j的值为4 i的值为4j i j的值为3 i的值为4又如 printf d i 输出结果为4printf d i 输出结果为3单独使用时 i i等价 60 结合性 自右向左 例 i 2 j i 分析 1 是同级运算符 结合方向 自右向左 2 i 等价于 i 3 对于括号内的自增运算 要先使用i 再使i增加1 运算结果 i的值为3 j的值为 2 61 练习 a 1 b 2 c 3 d 4下列式子的值分别是多少 a b ca b c 1 a b c 62 3 9赋值运算符和赋值表达式1 赋值运算符 2 复合赋值运算 在赋值符号前加上其它运算符号 赋值运算符仅优先于 且具有右结合性例如 a b b c等价于 a b b c 赋值号与数学中的等号含义不同例如 数学中a b等价于b aC语言中a b不等价于b a 63 3 赋值运算中的类型转换 小数部分自动补0 自动舍去实型表达式的小数部分 注意不进行四舍五入 自动截取表达式值的低字节赋值 舍去高字节 自动给高字节补0或补1 64 数据类型 运算符与表达式运算符和表达式 4 赋值表达式 由赋值运算符将一个变量和一个表达式连接起来的式子 一般形式为 例如 inta 12 求下列运算的结果 a a a a a a a a 12 12 12 132 a 132 a a 132 132 132 264 a 264 65 练习 inti 1 j 2 k 3 m 4 计算下列式子的值i j kj k m 5 66 数据类型 运算符与表达式运算符和表达式 3 10逗号运算符和逗号表达式逗号运算符又称为 顺序求值运算符 是所有运算符中级别最低的 它将两个表达式连接起来 一般形式为 表达式1 表达式2求解过程是 先求解表达式1 再求解表达式2 整个逗号表达式的值是表达式2的值 例如 a 3 5 a 4 a的值为15 表达式的值为60 a 3 5 a 4 a 5 a的值为15 表达式的值为20又如 x a 3 6 3 x的值为18x a 3 6 ax的值为3 表达式的值为18 第4章最简单的C程序设计 顺序程序设计 68 1C语句概述2赋值语句3数据的输入输出4字符数据输入输出5格式输入输出7程序举例 69 4 1C语句概述用C语言编写的程序称为C语言源程序 简称C程序 C语言一般由一个或若干个函数组成 而这些函数可以保存在一个或几个源程序中 这些文件都以 C作为文件扩展名 70 C语句分类和其他高级语言一样 C语言的语句也是用来向计算机发出操作命令的 一条语句经过编译后生成若干条机器指令 在C语言中只有可执行语句 没有非执行语句 C语句有以下五类 控制语句 完成一定的控制功能 if else 条件语句 for 循环语句 while 循环语句 do while 循环语句 continue 结束本次循环语句 break 中止执行switch或循环语句 Switch 多分支选择语句 goto 转向语句 return 从函数返回语句 71 函数调用语句 由一次函数调用加一个分号构成一个语句 如 printf ThisisaCstatement 表达式语句 由一个表达式构成一个语句 如 a 3 是表达式 不是语句 a 3 是语句 空语句 只有一个分号 什么也不做 复合语句 用 把一些语句括起来成为复合语句 相当一条语句 哪里有语句 哪里就可用复合语句 if a b max a min b 复合语句最后一个语句中最后的分号不能忽略不写 72 4 2赋值语句赋值表达式后面加上分号 构成赋值语句 功能 将数据赋给变量 如 x 3 1 a d 123 b d 程序中基本的命令行必须是一个语句 表达式不能单独构成语句 例如 d 123 b d是一个表达式a d 123 b d 是一个赋值语句特点 C语言中的赋值号 作为赋值运算符 作为赋值表达式可以被包括在其他表达式之中 if a b 0 t a 赋值语句可以连接赋值 a b c 2 73 4 3数据输入输出的概念1 所谓输入输出是以计算机主机为主体而言的 主机向外部设备 输出 外部设备向主机 输入 2 C语言本身不提供输入输出语句 输入和输出操作是由函数实现 C语言通过调用四个系统函数来实现输入输出 printf scanf getchar putchar 3 在使用C语言库函数时 要用到预编译命令 include 将有关的 头文件包括到用户源文件中 在调用标准输入输出库函数时 文件开头应有以下预编译命令 include或 include stdio h 74 4 4字符数据的输入输出1 字符输出函数putchar 向终端输出一个字符 如 putchar c 输出变量c的值 c可以是字符型变量或整型变量 例3 1 include stdio h main chara b c a B b O c Y putchar a putchar b putchar c BOY 75 也可以输出控制字符 如putchar n 输出一个换行符 输出其它转义字符putchar 101 输出 A putchar 输出单引号putchar 015 使输出回车 不换行 例3 2 includemain chara b c a B b O c Y putchar a putchar n putchar b putchar n putchar c putchar n BOY 76 2 字符输入函数getchar 从终端 或系统隐含指定的输入设备 输入一个字符 一般形式为 getchar 函数的值就是从输入设备得到的字符 例 include stdio h main charc c getchar putchar c a a 77 例 从键盘上输入一个大写字母 分别用大小写字母形式输出 同时输出它们的ascii码 include stdio h main charc1 c2 c1 getchar printf c d n c1 c1 c2 c1 32 printf c d n c2 c2 A A 65a 97 78 4 5格式输入与输出函数1 格式输出函数printf 按规定格式向终端输出若干个任意类型的数据 一般格式 printf 控制格式 输出列表 被输出的数据 可以是常量 变量 表达式 用双引号括起的转换控制字符串 它包括两种信息 格式说明 由 开始 如 d f c 普通字符 要输出的字符 printf d d a b 格式说明输出列表 printf a db d a b 控制格式输出列表 79 printf 格式字符 80 printf 附加格式说明字符 例如 ld 输出十进制长整型数 m nf 右对齐 m位域宽 n位小数或n个字符 m nf 左对齐 81 例1 main intx1 123 longx2 123456 printf x1 d x1 5d x1 5d x1 2d n x1 x1 x1 x1 printf x2 ld x2 8ld x2 5ld n x2 x2 x2 程序运行结果如下 x1 123 x1 123 x1 123 x1 123x2 123456 x2 123456 x2 123456 82 例2 main intm 1 longn 123456789 printf m d o x u n m m m m printf n d n n printf n ld n n 程序输出 1122a 11 b 22m 1 177777 ffff 65535n 13035n 123456789 83 例3 main floatf 123 456 doubled1 d2 d1 1111111111111 111111111 d2 2222222222222 222222222 printf f 12f 12 2f 12 2f 2f n f f f f f printf d1 d2 f n d1 d2 程序运行结果如下 123 456001 123 456001 123 46 123 46 123 46d1 d2 3333333333333 333010对于实数 也可使用格式符 e 以标准指数形式输出 尾数中的整数部分占一位 小数点占一位 尾数中的小数部分占5位 指数部分占4位 如e 03 共计11位 也可使用格式符 g 让系统根据数值的大小 自动选择 f或 e格式 且不输出无意义的零 84 最简单的C程序设计数据输出 在使用printf 函数时要注意 有些系统要求格式字符必须用小写字母 2 格式控制符中 可包含转义字符 3 格式说明必须以 开头 欲输出字符 则应在 格式控制 字符串中用连续两个 表示 5 不同的系统在实现格式输出时 输出结果可能会有一些小的差别 85 2 格式输入函数scanf 把从输入设备输入的数值按先后顺序存入在内存的地址中去 一般格式 scanf 格式控制 地址列表 例 main inta b c scanf d d d 345 3 4 5 86 最简单的C程序设计数据输入 scanf 格式字符 87 最简单的C程序设计数据输入 scanf 附加格式说明字符 88 在使用scanf 函数时要注意 Scanf 函数中的 格式控制 后面应当是变量地址 如果在 格式控制 字符串中除了格式说明以外还有其他字符 则在输入数据时应输入与这些字符相同的字符 在用 c 格式输入字符时 空格字符和 转义字符 都作为有效字符输入 在输入数据时 遇到以下情况时该数据认为结束 遇空格 或按回车 遇指定的宽度结束 如 3d 只取3列 遇非法输入 89 3 4 6 a 3 00 b 4 00 c 6 00 s 6 50area 5 33 4 6顺序结构程序设计举例 第五章选择结构程序设计 关系运算符和关系表达式逻辑运算符和逻辑表达式If语句三种形式条件运算符Switch语句 91 5 1关系运算符和关系表达式1 关系运算符关系运算实际上是两个量的比较 比较的结果只有两种可能 真 1 假 0 例如 a 3 当a 5时 比较的结果为真 当a 1时 结果为假 C语言提供6种关系运算符 大于 大于或等于 相等 不等 92 2 关系表达式用关系运算符或者等式运算符将两个表达式连接起来 叫关系表达式 合法的关系表达式 a b a b b c a 3 b 5 a 3 b 5 a b b 0的值为真 在计算机中记为1 例 a 3 b 2 c 1 则 1 a b的值为1 2 a b c的值为真 即1 3 b cb中d的值为a b的值 为 5 f a b c中f的值为 c的值 为 93 关系 等式和逻辑运算符 关于优先次序 为同一级别 和 为同一级别 在同一级别中 采取由左至右的结合方向 算术运算符 关系运算符 赋值运算符 高 低 例 c a bc a b a b c a b ca bca b c 等式运算符 94 5 2逻辑运算符逻辑运算 产生真假值的运算 逻辑运算符 逻辑与 AND 逻辑或 OR 逻辑非 NOT 和 是双目运算符 是一元运算符 如 a ba b同时为真 则表达式为真a ba b只要有一个为真 表达式为真 aa为真 则表达式为假 95 关系 等式和逻辑运算符 96 逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来就是逻辑表达式 在C语言中 当判断一个量的真假时 一切非 数均被当成 真 来处理 例如 若a 4 则 a的值为 若a 4 b 5 则a b的值为 a b的值为 a b的值为 4 0 2的值为 区分下面的表达式中算术运算量 关系运算量和逻辑运算量 5 3 2 83是两个数值间的比较 结果为 1 2是两个非 值 逻辑量 间的运算 结果为 1 8 4 0 根据优先级 先计算 结果为 97 例 判断某一年是否是闰年 条件是 能被4整除 但不能被100整除 能被4整除 又能被400整除 用year表示年份 判断闰年的逻辑表达式为 year 4 0 year 100 0 year 400 0 如果给year输入一个值 使上面的表达式的值为 时 则year所代表的年份就是闰年 变换一下角度 如何判断year不是闰年 year 4 0 year 100 0 year 400 0 当year的值使表达式的值为 时 则year所代表的就不是闰年 关系 等式和逻辑运算符 98 例如 如果输入的是正数 则打印出来 if x 0 printf d x 99 选择结构程序设计if语句 例如 输出两个数中较大的一个 if x y printf d x elseprintf d y 100 选择结构程序设计if语句 101 选择结构程序设计if语句 例如 商场促销 购物500元以上 8折 购物300元以上 85折 购物100元以上 9折 购物50元以上 95折 购物50元以下 不打折 根据消费量 计算优惠率 设 消费量为money 折扣为cost 实际花费priceif money 500 cost 0 2 elseif money 300 cost 0 15 elseif money 100 cost 0 1 elseif money 50 cost 0 05 elsecost 0 price money money cost 102 选择结构程序设计if语句 If语句的嵌套嵌套的定义 在if语句中又包含一个或多个if语句 嵌套的一般形式 If if 语句1else语句2Elseif 语句3else语句4 注意 If与else的配对关系 103 例 比较两个整数的关系 includemain intx y printf EnterintegerXandY scanf d d 104 例 输入两个数 按数值大小次序排列输出 main floata b t scanf f f 输入为3 6 3 2输出为 3 20 3 60 105 例 输入三个数 按由小到大次序排列并输出 main flaota b c t scanf f f f 输入为 3 7 1输出为 1 00 3 00 7 00 106 选择结构程序设计程序举例 例 写一程序判断某一年是否是闰年 main intyear leap printf 输入年份 scanf d 输入年份 20042004isleapyear 107 选择结构程序设计if语句 条件运算符max a b a b 条件表达式当 a b 为真时 表达式取a的值当 a b 为假时 表达式取b的值条件运算符是三目运算符表达式1 表达式2 表达式3条件运算符的结合方向为 从右向左 例如 a b a c d c d相当于a b a c d c d 如果a 1 b 2 c 3 d 4 则条件表达式的值为4 108 选择结构程序设计if语句 输入为 4输出为 x 4 y 1 109 例 输入一个字符 判断大小写 如是大写 则转换成小写 输出 main charc scanf c printf c c 选择结构程序设计if语句 110 5 4switch语句Switch语句是多分支选择语句 也叫开关语句或者选择语句 一般形式 switch 表达式 case常量表达式1 语句1 case常量表达式2 语句2 case常量表达式n 语句n default 语句n 1 功能 1 计算表达式的值 与常量表达式的值比较 等于第i个值时 顺序执行语句序列i i 1 n 12 若与所有常量表达式值都不相等 执行语句序列n 1 如 switch a case5 printf 如 switch a case5 printf 111 选择结构程序设计switch语句 例 根据成绩等级打出成绩范围 main chargrade printf Enteryourgrade n scanf c 输入为B输出为70 84 112 选择结构程序设计switch语句 113 例 给出百分制成绩 要求输出等级 A B C D E 90分以上为 A 80 89分为 B 70 79分为 C 60 69分为 D 60分以下为 E main intscore num chargrade scanf d 输入为76输出为76C 114 选择结构程序设计switch语句 switch语句的说明条件表达式的类型和常量表达式的类型是整数 字符 当表达式的值与某一个case后面的常量表达式的值相等时 就执行此case后面的语句 若所有的case中的常量表达式的值都没有与表达式的值匹配 则执行default后面的语句 每一个case的常量表达式的值必须互不相同 case常量表达式只起语句标号作用 必须用break语句终止多个case连续执行 否则只要有一个case满足后 以下的语句全部无条件执行 多个case可共用一组执行语句 115 1概述2goto语句3while语句4do while语句5for语句6循环的嵌套7break语句和continue语句8程序举例 循环控制 116 6 1概述一般需要使用循环的情况是 有重复的动作 循环体 循环次数可以控制 循环条件 例如 1 2 3 100在C语言中可以用下列语句实现循环 goto和if结合whiledo whilefor 117 6 2goto语句Goto语句的一般形式 goto语句标号 语句标号 语句 功能 无条件转向语句 Goto语句的常用形式 1 与if语句构成循环 2 从循环体中转到循环体外 例 求1 2 3 100 main inti sum 0 i 1 loop if i 100 sum sum i i gotoloop printf d n sum 118 6 3while语句一般形式 While 表达式 语句功能 实现 当型 循环 先判断 后执行 表达式为真时 非0值 执行while语句的内嵌语句 说明 可以是关系表达式 逻辑表达式或其它类型 表达式后不允许有分号结尾 语句可以是简单的 也可以是复合的 循环体中应有使循环趋向于结束的语句 119 例 求1 2 3 100 main inti 1 sum 0 while i 100 sum sum i 累加器i printf d sum 如果有一个以上的语句循环 则必须用 构成复合语句 要有修改循环变量的语句 120 6 4do while语句 一般形式 do循环语句while 表达式 功能 实现 当型 循环结构 说明 当while后面的表达式的第一次的值为 真 时 两种循环得到的结果相同 否则 二者结果不相同 dowhile中的循环体至少执行一次 而while语句中的循环语句可能一次都不执行 表达式 语句 非0 真 0 假 121 例 求1 2 3 100 main inti sum 0 i 1 do sum sum i i while i 100 printf d sum 122 6 5for语句在C语言中用for语句构成的循环最为灵活 一般形式 for 表达式1 表达式2 表达式3 语句执行过程 例 for i 1 i 100 i sum sum i 从图中可以看出FOR语句等价于下列程序 表达式1 While 表达式2 语句表达式3 123 说明 语句的一般形式中的 表达式1 可以省略 此时应在语句之前给循环变量赋初值 注意 省略表达式1时 其后的分号不能省略 如 for i 100 i sum sum i 如果表达式2省略 即不判断循环条件 循环无终止地进行下去 如 for i 1 i sum sum 1 表达式3也可以省略 但此时应另外设法保证循环能正常结束 如 for i 1 i 100 sum sum i i 可以省略表达式1和表达式3 只有表达式2 即只给循环条件 如 for i 100 sum sum i i for 表示无限循环 相当于while 1 语句 124 循环控制for语句 说明 循环终止条件的种类 逻辑 关系表达式 如 for a b由以上说明可以看出 C语言中for语句的功能比其它语言中的for语句功能要强 要灵活 它能替代while语句 例 求n 1 2 3 n main doubles 1 intk for k 1 k 100 k s s k printf s f s 整数连乘结果一定是整数 而本例中结果数值相当大 用long型都无法存放 因此将存放累乘结果的变量s定义为double型 126 6 6循环的嵌套嵌套的概念 一个循环体内又包含另一个完整的循环结构 称为循环的嵌套 while while 2 for for 3 for while 127 break语句用来从循环体里退出 中止循环Continue语句用来跳过剩下的语句 回到循环开始 6 7break语句和continue语句 128 例 把100 200之间不能被3整除的数输出 main intn for n 100 n 200 n if n 3 0 continue printf d n 129 例 判断m是否是素数 操作 用2 m 1依次去除m 若其中有任意一个数被除尽 则没有必要再判断下去 它肯定不是素数 跳出循环 若所有数都不能被除尽 则循环可以自然完成 include math h main intm i k scanf d 130 例 打印出100到200之间所有的素数 include math h main intm i k n 0 for m 101 mk printf d n m n n 1 if n 10 0 printf n printf n 131 例 用 4 1 1 3 1 5 1 7 的公式求 的近似值 直到最后一项的绝对值小于10 6为止 include math h main ints floatn t pi t 1 pi 0 n 1 0 s 1 while fabs t 1e 6 pi pi t n n 2 s s t s n pi pi 4 printf pi 10 6f n pi 132 例 裴波那契数列的第1 2项分别为1 1 从第3个数开始 该数是其前面两项之和 即1 1 2 3 5 8 13 求前40项菲波那契数 分析 f1 第一个数f2 第二个数f1 f1 f2第三个数f2 f2 f1第四个数main longf1 1 f2 1 inti for k 3 k 20 k printf 12ld 12ld f1 f2 if k 2 0 printf n f1 f1 f2 f2 f2 f1 133 循环控制本章总结 三种循环语句 while do while和for建立循环通常有以下情况 1 给定次数 for比较适用for i 1 i a c A c Z 134 例 编程序 输出以下图形 一共有4行 每行由空格和星号组成 空格数按行增加 星号按行减少变量i控制输出行数 从1变化到4变量j控制输出每行的空格和星号 j从1变化到i 每次输出一个空格j从1变化到8 2 i 1 每次输出一个星号 思路 135 算法和程序 main inti j for i 1 i 4 i for j 1 j i j printf for j 1 j 8 2 i 1 j printf printf n 思考 如何输出10行图形 输出图形向右平移20个字符位置 应如何修改程序 136 总结 for while do while continuebreakgoto 137 例 打印图形 分析 行的控制i 1 4 的个数 与当前行的关系j 2 i 1 前面的空格k与行的关系 开始时 第一行有3个空格每多一行 少一个空格k 4 iwhile i 4 for k 1 k 4 i k 输出空格 for j 1 j 2 i 1 k 输出 main inti j k for i 1 i 4 i for j 1 j 4 i j printf for j 1 j 2 i 1 j printf printf n for i 1 i 3 i for j 1 j i j printf for j 1 j 7 2 I j 138 例 输入若干字母 将它们变成其后的第四个字母 A E W A 非字母字符忽略 思路 1 建立循环 循环结束以输入回车符为准 while c getchar n 2 判断输入是否是字符 否则忽略 if c a 4 若变换后超出z时 要轮回 if c Z c z c c 26 include stdio h main charc while c getchar n if c a abdEgWefhIkA 139 6 1一维数组的定义和引用6 2二维数组的定义和引用6 3字符数组 第七章数组 140 在c语言中 除了前面介绍的基本类型之外 还有另外一些数据类型 构造类型 其中数组就属于构造类型中的一种 数组是有序数据的集合 数组中的每一个元素都属于同一个数据类型 用一个统一的数组名和下标来唯一的确定数组中的元素 7 1一维数组的定义和引用一 定义一般形式 类型说明符数组名 常量表达式 例如 inta 10 141 二 一维数组元素的引用数组元素的引用形式 数组名 下标 每次可引用一个数组元素 不能引用整个数组一个数组元素就如同一个简单变量 例 main inti a 10 for i 0 i 0 i printf d a i 9876543210 142 数组一维数组的定义和引用 一维数组的初始化初始化方法 从数组的第一个元素开始依次给出初始值表 表中各值之间用逗号分开 并用一对大括号括起来 在定义数组时对数组元素赋予初值inta 10 0 1 2 3 4 5 6 7 8 9 只给一部分元素赋初值inta 10 0 1 2 3 4 欲使一个数组中全部元素初值为0 可以写成inta 10 0 0 0 0 0 0 0 0 0 0 或inta 10 0 在对全部数组元素赋初值时 可以不指定数组长度inta 0 1 2 3 4 5 143 数组一维数组的定义和引用 例 求Fibonacci数列 1 1 2 3 5 8 13 21 main intf 20 1 1 inti for i 2 i 20 i f i f i 2 f i 1 for i 0 i 20 i if i 5 0 printf n printf 12d f i 144 例 用冒泡法对10个数排序 第1次 a 0 和a 1 比较 9854206137 8954206137 8594206137 8549206137 8542906137 8542096137 8542069137 8542061937 8542061397 8542061379 第2次 a 1 和a 2 比较 第i次 a i 和a i 1 比较 98 95 94 92 97 for i 0 ia j 1 t a j a j a j 1 a j 1 t 145 main inta 11 inti j t printf input10number n for i 1 ia i 1 t a i a i a i 1 a i 1 t for i 1 i 11 i 输出数组元素printf 3d a i 146 7 2二维数组的定义和引用 147 多维数组的定义多维数组的定义与二维数组相同 例如 三维数组floata 2 3 4 共有2 3 4 24个元素floata 100 100 100 共有1000000个元素 a 0 1 0 a 0 0 0 a 99 99 99 148 二 二维数组元素的引用二维数组元素的引用形式 数组名 下标 下标 三 二维数组的初始化初始化方法 分行给二维数组赋初值inta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 可以将所有数据写在一个花括弧内 按数组排列的顺序对各元素赋初值inta 3 4 1 2 3 4 5 6 7 8 9 10 11 12 可以对部分元素赋初值 其余元素值自动为0inta 3 4 1 5 9 inta 3 4 1 0 6 9 0 11 inta 3 4 1 5 6 inta 3 4 1 9 149 初始化方法 如果对全部元素都赋初值 则定义数组时对第一维的长度可以不指定 但第二维的长度不能省inta 4 1 2 3 4 5 6 7 8 9 10 1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025瓷砖外贸出口代理及售后服务合同范本
- 2025版园林植物种植与养护合作协议
- 2025版农业设施土建工程施工合同规范
- 2025年广告宣传策划执行合同书范本
- 2025版智能家居全屋定制项目-签约与节能环保承诺合同
- 2025版室内外景观装修合同纠纷处理办法
- 2025版商业街区物业服务与安全保障合同
- 2025年劳动合同制员工加班费支付标准合同
- 2025年度高端铜合金材料进口贸易合同范本
- 2025版人工智能助手开发与落地应用合同
- 妇产科危重护理常规、应急预案、工作流程
- 土木工程毕业设计最终模板
- 彩妆行业发展趋势
- 《慢性肾脏病(CKD)的诊断与治疗》课件
- 【培训课件】跨部门沟通与协作(讲解版)
- 物流建设项目可研报告
- 声音和影像的数字化行业研究报告
- 2024-2030年中国白银境外融资报告
- 韦莱韬悦-东方明珠新媒体职位职级体系咨询项目建议书-2017
- DB43T 2558-2023 城镇低效用地识别技术指南
- 八上外研版英语书单词表
评论
0/150
提交评论