




已阅读5页,还剩430页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言程序设计Copyer Vigiking 1 第一章计算机语言与C语言概述 1 1计算机语言概念 计算机语言定义计算机能够识别和接受的语言 要使计算机按自己的意图工作 必须使用计算机所能接受 理解和执行的指令指挥计算机工作 2 计算机语言的种类机器语言低级语言汇编语言 面向计算机 BASIC入门语言F77科学计算高级语言Foxpro数据库管理 面向问题 C多用途 计算机语言 3 机器语言最早问世 用二进制代码构成指令 如 100000 110000 用机器语言编程的缺点 繁琐 不直观 不易调试 如计算y 2x2 3x 1需要七八条指令 移植性差 依赖于计算机 4 汇编语言用符号构成指令 如 MOV ADD用汇编语言编程 相对直观 但仍繁琐 仍是面向计算机的语言 汇编语言是计算机间接接受的语言 5 高级语言与低级语言相比 有根本性的区别 是面向问题的语言 高级语言的一条指令 语句 y 2 x x 3 x 1 对应于 y 2x2 3x 1y sin x 对应于 y sinx用高级语言编程 直观 易懂 移植性好 不依赖于具体计算机 6 上机运行高级语言程序需经过编译 编译执行要上机完成一个计算问题 主要的任务就是用高级语言编写出相应的源程序 即至少要学会一种计算机语言 高级语言源程序 机器指令目的程序 结果 编译程序 7 1 2C语言的特点集高级语言和低级语言的优点于一身 能实现低级语言的大部分功能 如直接访问内存物理地址 进行位操作等 图形功能强 运算符和数据结构丰富 语法限制不太严格 程序设计自由度大 生成目标代码质量高 程序执行效率高 8 1 3简单的C程序介绍例1 main 主函数说明 程序框架printf abcdef 函数体 语句程序的功能是输出字符串 abcdef 9 例2 求两数之和 main inta b c aa 100 b 50 bc a b cprintf nc d c 程序运行结果 c 150 10 例3 求两数中的最大值 函数类型函数名形参main intmax intx inty inta b c intz scanf d d axbycz 两个函数组成 3 5 3 5 5 5 11 总结上例可知 1 C程序由函数构成 2 函数由两部分组成 函数说明部分 函数名 函数类型 形参名 形参类型 函数体 实现函数的具体操作 由语句构成 3 程序总是从main函数开始执行 4 书写格式自由 5 语句必须有分号 12 第二章算法2 1算法的概念要利用计算机处理问题 光学习语言的语法规则还不够 最重要的是要学会针对各类型的问题 拟定出有效的解题方法和步骤 解题方法和步骤就是算法 13 算法 为了解决一个问题而采取的有限步骤 计算机算法 如何使计算机一步一步地工作的具体过程 14 利用计算机处理问题的步骤 1 设计好算法 算法设计 2 用计算机语言实现算法 程序设计 算法必须是 有效 的 算法设计还要充分考虑算法的好坏 衡量算法好坏的主要标准 程序简练 执行速度快 占空间少 15 例 考虑的算法 算法 直接表达 直接用语句s 1 2 3 4 5 6 7 8 9 10 当项数较多时该算法不适用 s i 1 10 16 算法 迭代法 累加求和法 s 1 2 3 4 5 6 7 8 9 10算法步骤 si 使s 0 使i 1累加器记数器 s i s i 1 i 若i 10转 否则转 输出s 0 1 1 2 3 3 6 4 10 5 该算法通用 是好算法 17 2 2算法的表示算法需要有统一的表示方法常用的表示方法有 自然语言流程图结构化流程图N S流程图 18 1 自然语言对于计算s 1 2 3 4 5 6 7 8 9 10用自然语言表示为 使s 0 s为累加器 使i 1 i为计数器 s i s 累加求和公式 i 1 i 计数器加1 若i 10转 否则转 输出s的值特点 通俗易懂 文字冗长 含义不大严格 19 2 流程图用流程图符号表示算法 常用的流程图符号起止框输入输出框处理框流程线判断框 20 对于计算s 1 2 3 4 5 6 7 8 9 10用流程图表示为 s i s i 1 i S i s S i s i 10 输出s 0 s 1 i 直观形象 易于理解 次序清楚 Y N 21 3 结构化流程图传统的流程图有一个弊端 对流程线没有严格的限制 对于较复杂的算法可能会变成乱麻一般 BS型算法 为克服这一弊端 提出了由三个基本结构组成算法流程图的思想 结构化流程图 22 三个基本结构 顺序结构按固定顺序 从上到下或从左到右 执行的结构 A B a b 23 选择结构根据条件P选择执行哪一个分支 成立不成立 p A B a b 成立 不成立 24 例 计算y 1 x当x 0时y 10000当x 0时的算法流程图图 选择结构 输入x X 0 10000 y 1 x y 输出y Y N 25 循环结构重复执行某些操作的结构 分为两种 当型循环和直到型循环 当型循环直到型循环 P1 A A P2 a a b b Y Y N N 26 可以看出 每个基本结构都只有一个入口和一个出口 因此 用三个基本结构构成的流程图不会象乱麻一般 用三个基本结构构成的流程图就成为结构化流程图 用结构化流程图描述的算法称为结构化算法 相应的程序设计就称为结构化程序设计 27 观察前例 0 s 1 i S i s i 1 i i 10 输出s 顺序结构 循环结构 y n 28 4N S流程图N S流程图的三个基本结构 A B P 成立 不成立 A B A B 当P1 直到P2 顺序结构 选择结构 循环结构 29 例 计算y 1 x当x 0时y 10000当x 0时的N S流程图 输入x X 0 是 否 10000 y1 x y 输出y 30 例 计算s 1 2 3 4 5 6 7 8 9 10的N S流程图 i 10直到i 10直到型当型 0 s 1 i 输出s 1 i 0 s s i s i 1 i s i s i 1 i 输出s 31 第三章数据类型 运算符与表达式3 1C的数据类型 基本类型 整型 实型 字符型 枚举型 构造类型 略 指针类型 略 空类型各类型包含常量与变量 32 3 2常量与变量 常量与符号常量常量在程序运行过程中其值保持不变的量 符号常量用来代表一个常量的标识符 definePI3 1415926 33 例 definePI3 1415926main floatr 2 c c 2 PI r printf f c 34 变量其值可以改变的量 变量的三要素 变量名每个变量有一个名字 作为识别该变量的标识符 变量的值每个变量有一个值 变量的值是随时可以改变的 35 变量的存储单元每个变量占据一个内存单元 用于存放变量的值 变量名a变量值存储单元 3 36 变量的命名规则 由字母 数字和下划线组成以字母或下划线开头a x1 y 2 b1 1c合法1x a 2 不合法变量必须先定义后使用 程序中何时使用常量 何时使用变量 37 3 3整型数据 整型常量即整常数 c的整常数有三种形式 十进制整数与数学中的整数一致 如 100 123 15等 八进制整数以0开头的整数 如 010 07 020等 十六进制整数以0 x开头的整数 如 0 x10 0 xff 0 x2a等 38 整型变量用于存放整数的变量 分4种类型 基本型 inta16位 可表示的数值范围 32768 32767 短整型 shortintb16位 可表示的数值范围 32768 32767 长整型 longintc32位 数值范围 2147483648 2147483647 39 无符号型 加上unsigned只存放正数 如 unsignedintx变量x为无符号整数 16位全表示数码 数值范围 0 65535在程序设计中 如果要使用整型变量 必须首先选择以上类型符来定义变量 然后才能使用 40 例 main 定义 inta b c a 100 b 50 使用c a b printf d c 一般根据什么原则选择变量的类型 41 3 4实型数据 实型常量可使用两种形式表示 小数形式 如1 23 3 141592615 48 指数形式 如1e 201 23e5 42 实型变量用于存放实数的变量分单精度和双精度两种 floata b定义a和b为单精度型变量32位 7位有效数字 10 38 1038doublex y定义x和y为双精度型变量64位 15位有效数字 10 308 10308 43 例 main floatr c doubler c r 5 c 2 3 1415926 r printf f c 44 3 5字符型数据 字符常量用单引号括起来的一个字符 a x 1 等除此外 以 开头的字符如 n t 等称为转义字符 祥见书表3 3 45 字符型变量用于存放字符的变量 charc1 c2定义c1和c2为字符型变量c1 a c2 b 字符赋值字符型变量存放一个字符 占据一个字节 46 字符型数据的存储形式存放ASCII码不是而是如字符 a 在内存中存放97 b 存放98 与整数的存储形式一致 它们之间可以通用一个字符数据既可以作字符用 也可以作整数用 取其ASCII代码 如 32 a 相当于32 97若intx charc 则x a c 97 x 97 c a 都允许 a 97 47 字符串常量用双引号括起来的字符序列 如 abcde china a 也属字符串 注意 a 与 a 的区别 对于 charc c a 用法错误 48 字符串中每个字符各占一个字节 并且在字符串结尾加上一个结束标记 0 如 china 在内存中占6个字节 china 0C语言中专门的字符串变量 可用字符数组存放 以后介绍 49 3 6变量赋初值在定义变量的同时给相应的变量赋初值 如 inta 3 afloatb 5 2 charc a intx y z 6 效果 在给变量分配内存单元的同时在相应的单元中存放初值 3 50 3 7各数值型数据间的混合运算整型 实型 字符型数据间可以进行混合运算 如 10 a 1 5运算时 参加运算的两个数据如果类型不同 则首先将其类型转换成一致再运算 转换规则是 将优先级低的类型转换到优先级高的类型 51 数据类型的优先级 高doublefloatlongunsignde低intchar 52 3 8算术运算符与算术表达式 基本的算术运算符 算术表达式用算术运算符将运算对象连接起来的式子用于表达数学公式的式子如 2 x y 1 a表达式经过运算最终得到一个值 算术表达式的值 53 运算符的优先级与结合性优先级 在对表达式求值时 如果存在多个运算符 则运算的先后次序按运算符的优先级别从高到底进行 运算符的优先级关系为 高 低 如 a 2 x先算 2 a 2 有括号的情况 54 结合性 如果在一个运算对象两边的运算符的优先级相同 则按规定的 结合方向 处理 如 a b cb与 结合是从左到右 称 左结合性 b与 结合是从右到左 称 右结合性 每个运算符都有相应的优先级和结合性 基本算术运算符都是左结合性 55 计算表达式例 2 A 1 2 01 3 2 1构造表达式例2x2 3x 1 a ba b a ba bx yx y a b a b a b a b 2 x x 3 x 1 不能省 a b a b x y x y a b a b x y x y a b a b x y x y 56 强制类型转换可以用强制类型转换运算符将一个表达式的值转换成所需类型 如 int x y float 7 3 57 应用举例 inta 200 b 300 c c a b 100 可知 有自动转换和强制转换 当自动转换达不到目的时 可用强制转换 c long a b 100 c long a b 100 58 自增 自减运算符自增运算符 使变量值加1自减运算符 使变量值减1两种用法 i i先加 减 后用i i 先用后加 减 两种用法对i效果一样 但表达式的值不同 例 假设i的原值为5 j i j j i j 59 注意 和 只能用于变量 如 3 和 a 1 不合法 和 为右结合性 i i i 若i的原值是5 则该表达式的值是多少 60 例 分析执行下列语句后的结果 a 5 abcdb a c a b d a b c 5 5 6 5 0 6 7 2 6 1 61 两种特殊情况 k i i i i j是i j 还是 i j i 虽然与i i 1等效 但使用自增自减运算符的代码优化程度好 因而经常使用 但用时需特别小心 62 3 9赋值运算符和赋值表达式 赋值运算符 称赋值运算符 其作用是将一个数据赋给一个变量 如 a 5不要理解为 等号 执行赋值运算的结果 是将右边的数据存入左边变量所对应的内存单元中 63 赋值规则如果赋值运算符两侧的类型不一致 则在赋值时要进行类型转换 转换规则为 实型 整变量舍去小数部分 inta 5 5 a中为5 整型 实变量数值不变 以浮点形式存储 字符型 整变量放在整形变量低8位 保持原值不变原则 inta A 64 复合赋值运算符在赋值运算符前加上其它运算符 可以构成复合赋值运算符 a 3 a a 3b x 5 b b x 5 x c 6 x x c 6 y a 4 y y a 4 k b 2 k k b 2 属于高效率运算符 65 赋值表达式主要实现赋值运算的表达式 一般形式 如 a 5y 2 x 3a a 1不是衡等作用 将右边表达式的值赋给左边的变量 赋值表达式的值取左边变量的值 66 赋值表达式右边的可以是任何表达式 如 a b 5 赋值表达式中包含赋值表达式赋值运算符的优先级低于所有算术运算符 且是右结合性 a b 5 与a b 5等效 67 例 计算以下表达式的值 a b c 5a 5 c 6 a b 4 c 6 a b 4 5 c 6 5 a b c为整型变量 a a a a 设a的原值为3 68 赋值表达式是C语言中的一个重要成分 在赋值表达式后加一分号就成为常用的赋值语句 如y 2 x 1 赋值表达式作为表达式的一种 可以出现在任何表达式中 如 x 2 b 3 a k 5 b 69 3 10逗号表达式逗号也是一种运算符 用它对两个表达式实现连接运算 3 5 6 8称逗号表达式 逗号表达式的一般形式 表达式1 表达式2取表达式2的值作为整个逗号表达式的值 如 a 3 5 a 4逗号表达式的值为 60 70 一个逗号表达式又可以与另一个表达式组成一个新的逗号表达式 如 a 3 5 a 4 a 5因此 逗号表达式的一般形式可以扩展为 表达式1 表达式2 表达式3 表达式n取表达式n的值作为整个逗号表达式的值 逗号运算符的优先级最低 且是左结合性 逗号运算符只起到连接作用 没有实际操作 71 第四章最简单的C程序设计 C程序最基本的成分是语句目前我们已掌握的语句 变量说明语句 inta b c 表达式语句 x y 特别地 a 5 赋值语句 72 可以编写简单程序如 main intx y x 5 y 2 x x 3 x 1 该程序语法上完整 但还缺少输出 73 数据的输出用输出函数实现 其中的两种输出函数 1 putchar函数 字符输出函数 用于输出一个字符 如 putchar a putchar 100 charc b putchar c 74 例 输出单词Boy的完整程序 include stdio h 注意该语句的作用main chara b c a B b o c y putchar a putchar b putchar c 75 2 printf函数 格式输出函数 任意类型 任意格式 任意个数 例如 inta 100 b 56 printf a d b d a b 普通字符格式说明格式控制输出表列输出结果 a 100 b 56 后的字符称格式字符 不同格式字符对应不同的数据类型 76 d格式符 按整数格式输出几种用法 d不指定宽度 按实际宽度输出 md按指定宽度输出 m为宽度 ld用于输出长整型数 77 例 inta 125 b 453 longc 65535 printf a d b 5d c ld a b c 输出结果 a 125 b 453 c 65535 78 ld也可以按指定宽度输出 printf c 8ld c 输出结果 c 65535注意 格式字符的类型要与对应的输出对象的类型一致 79 c格式符 用于输出字符charc A printf c c c c B 输出结果 c A B输出对象既可以是字符变量 字符常量 还可以是整型表达式 80 如 inta 100 charb A printf n d c a a printf n c d b b 输出结果 100 dA 65 81 s格式符 用于输出字符串 s不指定宽度 ms指定宽度 左靠齐 ms指定宽度 右靠齐 m ns指定宽度m 只取左端n个字符 右靠齐 m ns指定宽度m 只取左端n个字符 左靠齐 82 例 printf 1 s abcd printf 2 8s abcd printf 3 8s abcd printf 4 8 3s abcd printf 5 8 3s abcd 1 abcd2 abcd3 abcd4 abc5 abc 83 f格式符 按小数形式输出实数 f由系统指定宽度 6位小数 m nf指定宽度m 小数位数n 右靠齐 m nf指定宽度m 小数位数n 左靠齐注意 宽度包括符号和小数点 84 例 floata 3 141592654 b 14 326795 c 125 2468 printf na f b 8 3f c 10 2f a b c 输出结果 a 3 141592 b 14 326 c 125 24 85 完整前面的程序 main intx y x 5 y 2 x x 3 x 1 printf ny d y 86 程序设计例 编写程序计算如图中的电流I 假设U 220 R1 30 R2 60 R3 45 U I R1 R2 R3 87 算法设计 I U R1 U R2 U R3程序设计 main I U R1 U R2 U R3 intU 220 R1 30 R2 60 R3 45 floatI printf nI f I 88 正确的程序 main intU 220 R1 30 R2 60 R3 45 floatI I float U R1 float U R2 float U R3 printf nI f I 89 考虑通用 main intU R1 R2 R3 floatI 输入U R1 R2 R3I float U R1 float U R2 float U R3 printf nI f I 90 数据的输入getchar函数 字符输入 include stdio h main charc c getchar 等待键盘输入putchar c 91 scanf函数 格式输入 与printf函数相反 用于输入若干任意类型的数据 scanf d d d 格式控制地址列表 92 scanf d d d 执行此函数时 等待从键盘输入三个整数给a b c若从键盘输入358则系统即从键盘缓冲区取出这三个数分别赋给a b c注意与printf的区别 注意格式的匹配 93 如 scanf 3d 2d 4d 94 在键盘输入时 用分隔符把每个数据隔开 标准的分隔符是空格 如 12315023若想用逗号作分隔符 则 scanf d d d 不要随便使用普通字符 如使用 scanf a d b dc d a b c 对应数据输入 a 123 b 150 c 23 95 前面的欧姆定律 main intU R1 R2 R3 floatI scanf d d d d 96 求三角形面积 include math h main floata b c area s scanf f f f 使用数学函数 97 使用三角函数 include math h main floatx y scanf f 98 第五章选择结构程序设计 对于如下的函数计算 算法上属于一个选择结构 y 用于实现选择结构的主要是if语句 1 x当x 0时 10000当x 0时 99 if语句的最常见形式为 if 关系表达式 语句1 else语句2 如 if x 0 y 1 x elsey 10000 其中x 0就是一个关系表达式 就是一个关系运算符 100 5 1关系运算符和关系表达式1 关系运算符用于进行比较运算的运算符 共有六种 优先级与结合性 前4种大于后两种 低于算术运算符而高于赋值运算符 左结合性 101 2 关系表达式一般形式 表达式 关系运算符 表达式 如 a ba b b c经过关系运算后最终有一个值 关系表达式的值 关系表达式的值只有0 假 或1 真 102 例 设a 2 b 4 c 1计算以下关系表达式的值 a ba b b c a b 可以是字符表达式 x 2 y 5 可以是赋值表达式 a b c 甚至可以是关系表达式a b b c 103 例 假设x 3 y 5 z 1 计算以下关系表达式的值 x z yxz x zy x z x y 2 x 1 104 5 2逻辑运算符和逻辑表达式有时 只用一个简单的关系表达式无法完整地表达一个条件 如 y 其中的条件需要用逻辑表达式来表达 x 0 a 0 就是一种逻辑运算符 1 x 1 a当x 0 a 0时 10000其它 105 1 逻辑运算符 逻辑与两个操作数都为真时 运算结果为真 逻辑或两个操作数之一为真时即为真 逻辑非 单目运算 操作数为真 假 时为假 真 如 若a 2 b 3 c 0则 a b b c0a b b c1 a b 0 106 优先级 由高到低 逻辑非算术运算符关系运算符 逻辑与 逻辑或赋值运算符 结合性 左结合性 107 2 逻辑表达式实际上 前面所举例子即为逻辑表达式 a b b ca b b c a b 逻辑表达式的值同样只有1和0 但参加逻辑运算的操作数可以是任意类型的数据 可以是任意大小 例 a b b c是合法的逻辑表达式 此时以0代表假 非0代表真 108 例 设a 2 b 3 c 0 计算以下表达式的值 a bb ca c a c b c c a b bc 10 109 对于逻辑表达式的两种基本技能 逻辑表达式的计算 逻辑表达式的构造 110 逻辑表达式的构造举例 a b ca和b之一为0 但不同时为0 a b c5 4 3 a b b c a 0 b 0 a 0 b 0 a b 0 a b 0 a b 0 111 对于a 0 b 0 a 0 b 0a 0可以用 a代替a 0可以直接用a a b a b但必须是运算结果作为逻辑量的情况下 y a 0 与y a不等效 112 5 3if语句1 if语句的三种形式 if 表达式 语句 有一分支为空 scanf d 113 if 表达式 语句1 else语句2 if x 0 y 1 x elsey 10000 114 if 表达式1 语句1 elseif 表达式2 语句2 elseif 表达式3 语句3 else语句n if score 100 printf A elseif score 90 printf B elseif score 80 printf C elseif score 70 printf D elseif score 60 printf E elseprintf F 115 对于 1 x当x 0时 10000当x 0时 一般用 if x 0 y 1 x elsey 10000 也可用 y 10000 if x 0 y 1 x y y 1 x if x 0 y 10000 116 例 习题5 5 x x 1 2x 1 1 x 10 3x 11 x 10 y 117 main floatx y scanf f 118 说明 语句中的表达式可以是任意表达式 if x y 1 x elsey 10000 一个if结构不可分割 if x y 1 x z 10 elsey 10000 一个分支中包含多个语句时 要用 if a 0 x 1 y 2 else x 10 y 20 119 分支程序设计举例 基本技巧和算法 例 从键盘输入三个整数到变量a b c 输出其中最大的数 两种典型算法 枚举法 将各种可能性枚举出来 选择法 先假设后判断更新 120 选择法main inta b c max scanf d d d 121 例 从键盘输入三个整数到变量a b c 要求按从大到小的顺序输出 两种典型算法 枚举法 将各种可能的排列枚举出来 换位法 将a b c中的数据换位 122 换位法main inta b c t scanf d d d 3 5 8 5 3 8 5 5 3 a b c 123 2 if语句的嵌套在if语句中 又包含一个或多个if语句 if score 80 if score 90 printf A elseprintf B elseif score 60 printf C elseprintf D 注意else与if的匹配 124 3 条件运算符如果两个分支的内容都是给同一个变量赋值 则可用简单的条件运算符处理 if a b max a elsemax b 可用 max a b a b 赋值运算符右边为一条件表达式 条件表达式的一般形式 表达式1 表达式2 表达式3 125 条件表达式的执行过程 a b a b优先级 低于关系运算符 高于赋值运算符 结合性 右结合性 表达式1 条件表达式取表达式3的值 条件表达式取表达式2的值 非0 0 126 例 求a b c中的最大值 max a b a c a c b c b c 127 5 4switch语句 多分支 适用于根据一个表达式的值就可确定走哪个分支的情况 switch 表达式 常量表达式1 语句1常量表达式2 语句2 常量表达式n 语句ndefault 语句n 1 128 例 成绩分档 switch score 10 case10 printf A case9 printf B case8 printf C case7 printf E case6 printf F default printf G 注 应使用break 129 switch score 10 case10 printf A break case9 printf B break case8 printf C break case7 printf E break case6 printf F break default printf G 130 5 5程序举例 习题5 10 有4个圆塔 圆心分别为 2 2 2 2 2 2 2 2 圆半径为1 这4个塔的高度为10m 塔以外无建筑物 今输入任一点的坐标 求该点的建筑高度 塔外的高度为0 131 算法设计 条件 在某一圆内 在圆1内或在圆2内或在圆3内或在圆4内 若设变量c1 c2 c3 c4分别代表是否在相应的圆内 则以上条件为 c1 c2 c3 c4 10在某一圆内 0在圆外 x y h 132 c1 x 2 2 y 2 2 1c2 x 2 2 y 2 2 1c3 x 2 2 y 2 2 1c4 x 2 2 y 2 2 1 133 main inth c1 c2 c3 c4 floatx y scanf f f 134 第六章循环控制6 1概述所谓循环控制 就是如何实现循环结构的控制问题 有4种方法 用goto语句和if构成循环 用while语句 用do while语句 用for语句 135 6 2用goto语句和if语句构成循环例 对于计算s 1 2 3 4 5 6 7 8 9 10 0s 1i s i s i 1 i i 10 输出s y n 136 s 0 i 1 lable s i i if i 10 gotolable printf d s 语句标号 无条件转向语句 goto语句可以构造循环 但不主张用 因为它容易破坏结构化程序设计 goto语句可以构造循环 但不主张用 因为它容易破坏结构化程序设计 137 6 3while语句while语句是专门用于实现循环控制的语句之一 其一般形式为 while 表达式 语句含义 当表达式的值为非0时 执行循环体 否则执行后续语句 语句关键 表达循环条件的表达式 循环体 语句关键字 138 执行过程 while 表达式 语句 表达式 循环体 0 非0 139 i 10 s 0i 1 s s ii i 1 例 用while语句实现前面算法 main inti 1 s 0 while i 10 s s i i printf n d s 注意与if语句的区别 循环体中要有使循环条件趋于成立的条件 y n 140 while i 10 s s i i 可简写为 while i 10 s i 141 非0 真 0 假 表达式 循环体 6 4do while语句do while语句主要用于实现直到型循环 其一般形式为 do循环体while 表达式 执行过程 142 真 s 0i 1 i 10 s s ii i 1 假 例 用do while语句实现前面算法 main inti 1 s 0 dos i while i 10 printf n d s 注意与while语句的区别 143 假 表达式2 求解表达式1 循环体 求解表达式3 真 6 5for语句for语句是一种使用最为灵活 并且是用得最多的循环控制语句 其一般形式为 for 表达式1 表达式2 表达式3 循环体大体含义 对于 的情况执行循环体内容 144 例 用for语句实现前面的算法 s 0 for i 1 i 10 i s i 标准形式 表达式1 表达式2 表达式3 循环体 可以理解 循环变量i从初值1开始到终值10 步长为1 重复执行循环体 145 for语句的常见变化 s 0 i 1 for i 10 i s i s 0 for i 1 i 10 s i s 0 i 1 for i 10 s i 省略表达式1 省略表达式3 省略表达式1和3 146 s 0 i 1 for s i if i 10 break s 10 i 10 for i s i 省略表达式2 表达式2是任意表达式 147 s 0 for i 1 j 10 i j i j s i j 12345678910在程序设计中不要过分追求它的多变性 i j 用逗号表达式 148 例 求n n 1 2 3 n 1 n参照累加求和main inti n 5 s 1 for i 1 i n i s i printf ns d s 注意s的初值 注意当n较大时的情况 求和与连乘都是最常用的算法 要熟练掌握 149 例 求自然数1 100中能被3整除的数之和 main inti s 0 printf n d s 求能被3整除但不被7整除的数之和 for i 1 i 100 i s i for i 1 i 100 i if i 3 0 s i for i 3 i 100 i 3 s i for i 3 i 100 i 3 if i 7 s i 150 例 求任意100个数中的最大值 main inti a max max for i 1 imax max a printf nmax d max 循环体中没有引用循环变量 i的作用 求任意个数中的最大值 for i 1 i if a 9999 break max 32768 151 外重循环 内重循环 执行200次 要掌握多重循环执行的全过程 6 6循环的嵌套循环体内又包含另一个完整的循环结构 多重循环 for i 1 i 10 i for j 1 j 20 j s i j 152 以上多重循环结构可以简写为 for i 1 i 10 i for j 1 j 20 j s i j 153 例 找出行号乘以列号等于100的座位 main inti j for i 1 i 30 i for j 1 j 20 j if i j 100 printf n d d i j 注意循环的关系 154 例 百钱买百鸡问题 给定100块钱 要求正好买100只鸡 已知公鸡5元 只 母鸡3元 只 小鸡1元 3只 问公鸡 母鸡和小鸡应各买多少只 若考虑用方程组 x y z 1005x 3y z 3 100是一多解问题 155 用测试法求解的程序 main intx y z for x 1 x 100 x for y 1 y 100 y for z 1 z 100 z if x y z 100 156 程序可进一步简化为 main intx y z for x 1 x 20 x for y 1 y 33 y z 100 x y if 5 x 3 y z 3 0 100 printf n d d d x y z 用测试法求解问题的典型例子 157 测试法求解的程序设计有两个要点 通过循环列出所有可能的解 对所有列出的可能的解进行条件测试 158 例 判断一个数m是否为素数 main inti m scanf d 用测试法求解 159 例 习题6 6 打印出所有的 水仙花数 所谓 水仙花数 是指一个三位数 其各位数字的立方和等于该数本身 如 153是一水仙花数 因为153 13 53 33 160 main inti j k n for n 100 n 999 n i j k if i i i j j j k k k n printf n d n 通过循环列出n的所有可能的范围 i n 100 k n 10 j n 10 10 161 main inti j k n for i 1 i 9 i for j 0 j 9 j for k 0 k 9 k n i 100 j 10 k if i i i j j j k k k n printf n d n 通过循环列出i j k的所有可能的范围 162 例 习题6 4 求S i 1 2 3 4 19 20 20 i 1 163 main inti j floatt s 0 for i 1 i 20 i s printf ns f s 用两重循环实现 s t t 1 for j 1 j i j t j 164 用递推法 递推公式 ti ti 1 i 求S i 1 2 3 4 19 20 20 i 1 1 i 1 i 1 ti 1 i 20 i 2 20 i 2 165 main inti j floatt 1 s t for i 2 i 20 i t t i s t printf ns f s 166 例 递推公式 s i 1 1 20 1 2 3 4 20 11111 ti ti 1 i 167 main inti j floatt 1 s t for i 2 i 20 i t t i s t printf ns f s t t i 168 习题6 3 s a aa aaa aaaa aaaaa2 22 222 2222 22222递推公式 ti ti 1 ti ti 1 10 a 169 main inti j a 2 floatt a s t for i 2 i 5 i t t 10 a s t printf ns f s 170 例 求方程2x3 3x2 4x 1 0的根 简单迭代法基本思想 将原方程f x 化为 x2 g x1 x2 2x13 3x12 1 4迭代公式 171 迭代过程 假定一个x1 x2 g x1 不成立 x2 x1 x1 x2 输出x2 成立 172 main floatx1 x2 scanf f x1 x2 173 牛顿迭代法基本思想 牛顿迭代公式f x1 f x1 x1 x2 x2 x1 f x1 f x1 x1 x2 y x f x1 f x2 174 main floatx1 x2 f1 f scanf f 175 例 求定积分 数值积分 f x a b x sinx x dx a b 等分n h b a n 第i个矩形 x x a i 1 h 176 include math h main intn i floata b x y h s 0 scanf f f d 177 第七章数组7 1数据结构与数组的概念影响程序设计的因素除算法外还有数据结构 数据结构概念编写一个程序除了重视算法的设计外 还需重视数据类型的选择 即选择合适的数据类型来存放要处理的数据 在程序设计中 数据类型就称为数据结构 选择合适的数据类型实际上就是进行数据结构的设计 178 在程序设计中有格言 数据结构 算法 程序说明数据结构与算法同等重要 算法依赖于数据结构 对于同一个问题的求解 可以采用不同的数据结构和不同的算法 对不同的数据结构有不同的算法 其复杂程度也会不同 选择合适的数据结构 可以降低算法的复杂程度 因此 在程序设计中应重视数据结构的设计 179 例 求任意100个数中的最大值 main inti a max max 32768for i 1 imax max a printf nmax d max 用一个简单变量作为数据结构 合理 算法简单 180 对于三个数的排序 main inta b c t scanf d d d 对于很多个数的排序用变量会很复杂而用数组会使算法很简单 仍可用变量作为数据结构 181 数组的概念inta 10 a 0 a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 一组具有同样类型的数据的集合统一用一个名字代表 数组名 代表一组数 数组元素 下标 数组名 182 数组中的各成员称数组元素 由数组名加下标唯一地确定 将一组数用一个名字代表 便于管理 只有一个下标的数组称为一维数组 可有二维数组 三维数组 七维数组 183 7 2一维数组的定义和引用 定义一般形式 类型符数组名 常量表达式 inta 10 floatb 10 类型符数组名长度作用 分配一组连续的内存单元 184 说明 数组必须先定义后使用 数组名的命名规则与变量相同 常量表达式表示元素的个数 长度 下标从0开始 常量表达式不能包含变量 即不允许作动态定义 185 引用逐个引用其元素 不能进行整体引用 引用的一般形式 数组名 下标 如 a 0 50 a 1 100 a 2 a 0 a 1 与a2 a0 a1有根本性的区别 下标可变 186 例 从键盘输入10个数 用变量 不方便 scanf d d d d d d d d d d 用循环控制输入个数和下标的变化 注意下标的变化范围 187 初始化在定义数组的同时给数组赋初值 inta 10 0 1 2 3 4 5 6 7 8 9 inta 10 0 1 2 3 4 inta 0 1 2 3 4 188 应用举例 1 对100个学生的分数统计最高分 最低分和平均分 两种方法 用变量作为存放初始数据的数据结构用数组作为存放初始数据的数据结构 189 main inti a max min floataver 0 max 0 min 100 for i 0 imax max a if a min min a aver a aver 100 printf n d d f max min aver 用变量 190 main inti a 100 max min floataver 0 for i 0 imax max a i if a i min min a i aver a i aver 100 printf n d d f max min aver 用数组 找最大最小的位置 max 0 min 0 if a i a max max i if a i a min min i 191 2 统计高于平均分的人数 main inti a n floataver 0 for i 0 i 100 i scanf d n 0 for i 0 iaver n printf n d n 用变量 数据结构不合理 192 main inti a 100 n floataver 0 for i 0 iaver n printf n d n 用数组 193 1 3 对100个学生的分数统计出每分一档人数 0 1 2 3 4 99 100 main inti a for i 1 i 100 i scanf d 输出 inti a n 101 for i 0 i 101 i n i 0 n a 194 完整程序 main inti a n 101 for i 0 i 0 i printf n 3d 3d i n i 体会数组作为存放结果的数据结构时的优越性 195 按10分一档统计 main inti a n 101 for i 0 i 101 i n i 0 for i 1 i 100 i scanf d inti a n 11 for i 0 i 11 i n i 0 n a 10 196 4 对10个学生的分数按从小到大的顺序排序后输出 两种典型的排序算法 选择法和起泡法 选择法基本思想 首先选择最小的数放在0位置 再在剩下的数中选择最小的数放在下一位置 依次类推 共进行9次选择 5874390126 197 每次选择都要与其后的所有数进行比较换位 5874390126 i j 198 main inta 10 i j t for i 0 ia j t a i a i a j a j t for j 0 j 10 j printf 3d a j 5874390126 199 5874390126 i j 200 先找最小值所在的位置 最后再换位 main inta 10 i j t k for i 0 i 10 i scanf d 201 起泡法基本思想 首先将所有数中的最大值 冒泡 到最后位置 再将剩下的数中的最大值 冒泡 到上一位置 依次类推 共进行9次 冒泡 每次 冒泡 都是一种翻滚过程 即相邻两个数进行比较换位 5874390126 202 main inta 10 i j t for i 0 ia i 1 t a i a i a i 1 a i 1 t for j 0 j 10 j printf 3d a j 要特别注意两个循环的范围 203 5 循环移位对一数列中的每个数向后移3个位置 最后3个数移到最前面 58743901261265874390 204 用循环移位实现 5874390126main inti j k a 10 for i 0 i 10 i scanf d for i 1 i 10 i a i a i 1 for i 9 i 0 i a i a i 1 k a 9 a 0 k for j 1 j 3 j k a 9 205 6 狐狸找兔子问题绕围绕着山顶有10个洞 一只兔子和一只狐狸分别住在洞里 狐狸总想吃掉兔子 一天 兔子对狐狸说 你想吃掉我有一个条件 先把洞顺序编号 你从最后一个洞出发 第一次先到第一个洞找我 第二次隔一个洞找 第三次隔两个洞找 依次类推 寻找次数不限 我躲在一个洞里不动 只要找到我你就可以饱餐一顿 狐狸一想只有10个洞 寻找次数又不限 那有找不到的呢 马上答应了条件 结果狐狸跑断了腿也没找到 请问兔子躲在哪个洞里 206 1 2 3 4
温馨提示
- 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年我国优抚安置政策法规考试试题及答案解析
- 快递驿站分区管理办法
评论
0/150
提交评论