C程序设计课件.ppt_第1页
C程序设计课件.ppt_第2页
C程序设计课件.ppt_第3页
C程序设计课件.ppt_第4页
C程序设计课件.ppt_第5页
已阅读5页,还剩341页未读 继续免费阅读

下载本文档

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

文档简介

C程序设计 第二版 信息工程学院软件教研室 课程内容 C语言程序设计任课班级 电4 4 5课时安排 理论讲解 48学时上机实验 24学时 教材 C程序设计 谭浩强清华大学出版社 C程序设计题解与上机指导 目录 第1章算法第2章C语言概述第3章数据类型 运算符与表达式第4章顺序程序设计第5章选择结构程序设计第6章循环控制第10章指针第7章数组第11章结构体与共用体第8章函数第12章位运算第9章预处理命令第13章文件 第一章程序的灵魂 算法 1 1算法的概念概念 为了解决一个问题而采取的方法和步骤 是解决一个问题方法的精确描述 数据结构 算法 程序程序 算法 数据结构 设计方法 语言工具数值运算计算机算法 非数值运算 1 2简单算法举例 例1 有A B两杯 分别盛有酒和醋 要求它们互换 需借一空杯C A B C 酒 醋 酒 A C酒 B A醋 C B酒 这就是以后经常会用到的两变量值交换的算法 例2 从十个数中挑选出最大的数来 选任意一数放入A中 设一计数器N 0 表示比较的次数 将下一数与A相比 大者放在A中 且N N 1 此时须判断N是否 9 是则执行 如N 9 表示比较了9次 则停止循环 思考 如果题目要求为1000个数 将如何改动程序 例3 求n 初始化 S 1 T 1 使S S T 使T T 1 如果T n 则返回执行 如果T n 则停止循环 此时S中值为n 思考 如果题目改成奇数相乘 应如何改动程序 若将 的终止条件改成T 11 结果将会怎样 结果将是 1 3 5 7 9 例4 对一个大于或等于3的正整数 判断它是不是一个素数 S1 输入n的值S2 i 2S3 n被i除 得余数rS4 如果r 0 表示n能被i整除 则打印n 不是素数 算法结束 否则执行S5S5 i i 1S6 如果i n 1 返回S3 否则打印n 是素数 然后结束 或S6 如果i 返回S3 否则算法结束 1 3算法的特点1 有穷性2 确定性3 没有或有多个输入4 有一个或多个输出5 有效性 1 4算法的表示一 自然语言人们常用的语言 可以是汉字或英语或其它文字 通俗易懂 缺点 1 冗长繁锁2 歧义性3 适合描述顺序执行 而不适合描述判断性 转移及循环语句 二 流程图用一些图框表示各种操作 采用ANSI标准 开始 A C B A C B 结束 开始 输入数A N 0 输入数B A B B A N N 1 N 9 打印A 结束 Y N Y N 优点 1 逻辑清楚 形象化易理解 2 流程线一目了然 占地较大 不适合复杂算法 切记 不要忘记画箭头或画反了箭头 三 伪代码是一种介于自然语言及计算机语言之间的文字与符号来描述 无图形 结构紧凑 例如 要打印x的绝对值 ifxpositivethenifx为正数thenprintx或者打印xelseelseprint x打印 x 四 三种基本结构1 顺序结构 2 选择结构 依先后顺序依次执行 依是否满足条件P 选择执行A或B 3 循环结构 当型 while型 直到型 do while型 先判断P1 满足时反复执行A 一旦不满足则不执行A 先执行A 然后判断P2 不满足时反复执行A 直到满足P2为止 不执行A 区别 whileuntil先判断 后执行先执行 后判断可能一次也不执行循环体 至少执行一次循环体三种结构的共同特点 1 只有一个入口2 只有一个出口 指整个结构讲 3 结构内每一部分都有机会被执行4 不应有死循环由以上三种基本结构所构成的算法属于 结构化 的算法 五 N S结构流程图 顺序结构 选择结构 当循环 直到循环 第二章C语言概述 2 1C语言出现的历史背景C语言是当今国际上最流行的 最有发展前途的计算机高级语言 它集计算与软件开发于一身 即有高级语言的可读性 又有低级汇编语言的软件开发功能 是一种编译语言 尽管当初C语言是为编写UNIX操作系统而设计的 但却不依赖于UNIX操作系统 可在多种操作系统的环境下运行 C语言的发展年代语言名称改进功能设计人或国家地址1960ALGOL面向问题 远离硬件 1963CPL部分驱动硬件英国剑桥大学1967BCPL直接驱动硬件 但太简单英国剑桥大学1970B简单 接近硬件 写出了第一个UNIX美国贝尔实验室1972 1973C直接驱动硬件 功能强大美国贝尔实验室C 面向对象VC可视化编程C 基于 net平台上快速开发大量应用程序 2 2C语言的特点1 语言简洁 紧凑 使用方便 灵活 32个关键字 9种控制语句 2 运算符十分丰富 34个 3 数据结构丰富4 有结构化控制语句5 语法限止不太严格 程序设计自由度大6 允许直接访问物理地址 位操作 位操作 可直接写汇编语句 加asm做前缀 7 生成目标代码质量高 程序执行效率高 exe com效率高 8 可移植性好 对于机器型号 操作系统要求不高 可转换成其它语言 2 3简单的C程序介绍 例1 输出一句话main printf thisisaCprogram n 例2 计算123 456的值 并输出main inta b sum a 123 b 456 sum a b printf sumis d n sum 例3 比较两个数的大小 输出大的值mian inta b c scanf d d 对子函数max 的调用 max 函数的定义 C语言的规则1 C程序由函数构成 其中至少有一个函数main 可使用库函数 printf scanf 也可以自定义函数 max 2 函数的两个组成部分 说明部分 函数体 说明部分 包括函数类型 名字 属性 形参 形参类型 函数体 即 中部分 包括变量定义 执行部分3 C程序总是从main函数开始执行 不论其位置4 书写格式自由 一行可写几个语句 一个语句可写在几行上 5 每个语句间用 分隔开 最后一句也须写上 6 输入输出也用库函数printf scanf 7 表示注释信息 2 4C程序的上机步骤一 步骤1 输入与编辑源程序2 编译3 连接库函数4 运行目标程序二 TurboC2 0主要工作文件Tc exe集成编译器Tcconfig tc环境设置文件 H头文件 BGI图形显示驱动程序 LIB库文件 OBJ模式启动代码文件具体步骤见实际操作 第三章数据类型 运算符与表达式 3 1C语言的数据类型整型 int 整型短整型 short 长整型 long 基本数据类型无符号整型 unsignedint 字符型 char 实型单精度型 float 数据类型双精度型 double 枚举型数组类型构造类型结构体类型共同体类型指针类型空类型 3 2常量与变量一 常量 在程序运行的过程中 其值不能被改变的量称为常量 整型常量 12 0 8实型常量 4 6 1 23 0 9字符型常量 a B 3 符号常量 definePRICE30例3 1一般情况下这种符号常量使用大写字母表示 二 变量 在程序运行过程中 其值能被改变的量 1 每个变量都有两个特点 任一变量都有一个名字 任一变量都占据一块内存单元 2 变量起名原则 变量所起的名字不可与32个保留字重名 P375上部 必须以字母或下划线开头 由字母 数字或下划线组成的长度不超过32的字符串 应本着见名知义的原则 大写字母与小写字母意义不同 被认为是两个不同的字符 一般变量名用小写字母表示 15 学生 二教三阶 a 412 1001H 变量名 变量地址 变量值 存储单元 判断以下变量名是否合法 yearDay a 12 100 abcdef199Ya b1 2 3u nint 3 变量要先定义后使用要用到的变量 必须先对其进行定义 才可以使用 如果是未经定义的变量 在编译时会检查出来 会给出提示信息 undefinedsymbol 变量名 infunctionmain 判断以下变量名是否合法 yearDay a 12 100 abcdef199Ya b1 2 3u nint 3 3整型数据一 整型常量1 十进制数 234 123等 每数位都可以是0 9 2 八进制数 以0开头 128 10 0200 每数位都可以是0 7 3 十六进制数 以0 x开头 128 16 0 x80 每数位都可以是0 9 A F 二 整型变量1 整型量在内存中的存放形式例如10 10 10在内存中的存放形式 2 整型变量的分类在C中 为了更精确描述整型数据 又进一步分为六种类型 区别主要是在表示整数的范围不同 10在内存中的存放形式 Signed int基本整型16 32768 32767216Short int 短整型16 32768 32767216Long int 长整型32 21亿 21亿232Unsingedint无符号整型160 65535216Unsingedshort int 无符号短整型160 65535216Unsingedlong int 无符号长整型320 42亿2323 整型变量的定义格式应为 变量1 变量2 变量3 例3 2注 一般在函数的开头就进行定义 4 整型数据的溢出在运算的过程中 若变量的值超过该类型的范围 则会产生溢出 例3 3 a 32767b 32768 三 如何判断整型常量的类型 要根据给定的常量的大小 符合哪个类型的范围就赋给哪个类型的变量 例如50000如果该常量后面加了一个字母l或L 则一定要认为是longint型的常量 即要赋给longint型的变量 例如432L 3 4实型数据一 实型常量1 十进制小数 由整数部分 小数点和小数部分组成 例如 1 24 0 345 222 234 0333 0 0等2 指数形式 由实数部分 E e 和整数部分组成 用于表示一些比较大的数值 例如 123 1022 123E22注意 E之前必须要有数字 E之后数字必须为整数 e124 4e1 5 e5都是不合法的 二 实型变量1 实型数据在内存中的存放形式 按指数形式 314 15926 2 实型变量的分类float单精度326 710 37 1038double双精度6415 1610 307 10308longdouble长双精度12818 1910 4931 1049323 实型数据的舍入误差例3 4三 实型常量的类型一个实型常量赋值给一个实型变量时 只根据实型变量表示的有效数字的位数 在实型常量中按从左向右的方向截取数据 3 5字符型数据一 字符型常量1 在C语言中字符型常量是用单引号括起来的一个字符 如 a A 3 等 2 以 开头的转义字符 101 65 代表字母 A 012 10 代表换行 x20 32 代表空格字符 例如 main printf ab c t de rf tg n printf h ti b bj k 结果为 fab c gdeh j k 二 字符变量charc1 c2 c1 a c2 b 在内存中占一个字节的空间 三 字符数据在内存中的存储形式字符的ASCII码存入内存 在内存中所有的数据又是以二进制的形式存放的 例如字符 a 的ASCII码为97 b 的ASCII码为98 C1C2C1C2 所以使得在C语言有效的范围中字符数据和整型数据之间通用 0 127 例3 6 main charc 130 printf d c c c 结果为 126 因为 130 10 10000010 2 126 补 四 字符串常量字符串常量是由双引号括起来的字符序列 如 howdoyoudo CHINA a 134323 54 每一个字符串的结尾都有一个字符的结束标志 0 它占一个字节的宽度 在C语言中没有变量来存放字符串常量 须用字符数组来存放 a 和 a 是有本质的区别的 a 在内存中只占一个字节的宽度 而 a 在内存中占两字节的宽度 例 已知字母a的ASCII码为十进制数97 且设ch为字符型变量 则表达式ch a 8 3 的值为 f 或102 3 6变量赋初值一 什么是对变量赋初值变量赋初值就是在定义变量的同时 给变量赋一个值 二 如何进行赋初值定义的同时赋值 floaty 4 6 charz a 定义之后赋值 inta b c a 20 b 10 c 30 三 在赋初值过程中的问题1 intx y z 3 x y没有初值 其初值也不是0 而是一个不确定的值2 inta b c 3 应写成inta 3 b 3 c 3 或定义abc之后再赋值 3 7各类数值型数据间的混合运算原则 在运算过程中 不同的数据类型要先转换成同一类型后 才能进行运算 int char short unsigned long double float 低 高 1 在运算中 先进行水平方向上的转换 2 在进行了水平方向上的转换后 如果仍然存在不同类型的数据 就要进行纵向的类型转换 例如 3 1 0 1 3 5 3 3L 运算结果的类型和本式子中最高级别的类型是一样的 设有说明 charw intx floaty doublez 则表达式w x z y值的数据类型为 double 3 8算术运算符和算术表达式一 算术运算符 使用 时注意 1 5 0 而不是0 2 但是1 0 5 0 2使用 时注意 该运算符的两边只能是整型数据二 算术表达式和算符的优先级与结合性1 算术表达式定义 用算术运算符号和括号将运算对象 也称操作数 连接起来的 符合C语法规则的式子 称为算术表达式 运算对象包括常量 变量 函数等 例如3 4 5 a b 4 3 max c d a b c 1 5 a 2 优先级和结合性 的优先级是4级 的优先级是3级 它们的结合性都是从左至右的 即左结合的 三 强制类型转换运算符 优先级2级 右结合 功能 将一个表达式转换成所需类型 其格式为 类型 表达式 例如 float x int x y int x y double 36 float 5 3 注意 在强制类型转换时 要产生的是一个临时数据 这个临时数据的类型是指定的类型 而原始数据的类型不会发生改变 例3 8四 自增 自减运算符 是自增运算符 k或k 都是让变量k的值加1 是自减运算符 k或k 都是让变量k的值减1 K含义 先使用K值加上1 再使用K值 K 含义 先使用K值 然后再将K值加上1 例如 k 1 k 1 j k j k k 2j 2 k 2j 1 使用时需注意 1 这两种 运算符只能用于变量 而不能用于常量或表达式 2 运算符的优先相同 但比算术运算符优先级要高 其结合性是 从右至左 的 i 3 j i i 3 j i printf d d i j printf d d i j 结果是 4 3结果是 4 4 3 要避免发生歧义i 3 i 3 j i i i k i i i 在某些C中是i 6j 12k 15而在TC MSC中i 6j 9k 184 如何组合多个运算符i j应理解为 i j而不是i j 5 注意程序的写法i 3 i 3 j i printf d d i i printf d d j i 结果为 4 3结果为 3 4 练习 i 3 p 3 求3 5 8 2 10 5 i p 的值 5 3 9赋值运算符和赋值表达式一 赋值运算符 优先级14 右结合 就是赋值运算符 格式 变量 表达式二 赋值过程中遇到的问题1 实型 整型舍弃小数部分inti 3 6 i中只存放整数3 2 整型 实型数值不变 补足有效位数floatx 3 x中存放3 000000 doubley 12345 y中存放12345 0000000000 3 double float截取前面7位有效数字 其余舍弃float double数值不变 有效位扩展到16位4 字符型 整型保持数值不变且进行带符号扩展intx 0 x中存放整数48 inty xFE y中存放整数 2 原最高位若为0则高8位全补0 是1则高8位全补1 5 int short long char只保留低8位 截断inti 289 charc i c的值为33 字符为 6 int long保持数值不变且进行符号扩展long int只保留低16位 截断7 unsignedint long不需按符号扩展 将高位补08 非unsigned 同样长度的unsigned原样赋值 连同符号位也看作是数值一起传送 三 复合的赋值运算符 优先级14 右结合 定义 在赋值运算符之前加上其它运算符 例如 x 3相当于x x 3x y z 相当于x x y z 所以A B解释为 将 A 移到 右侧得到 A B 然后在左侧填上 A 就得到了 A A B 共有10种复合运算符 四 赋值表达式格式为 a b c 5 a 5 b 5 c 5 a 5 c 6 a 11 c 6 x y 4 z 3 x 7 y 4 z 3 x y 4 z 3 x 1 y 4 z 3 例1 x 6 x x x 3 例2 a 12 a a a a 例3 b 3 printf d a b x 8 a 264 输出应为3 3 10逗号运算符和逗号表达式一 逗号运算符 优先级15 左结合 格式为 表达式1 表达式2求解过程是 先求表达式1 再求表达式2 整个表达式的值是表达式2的值 如 3 3 4 4结果应为16 x 8 2 x 4值为 64x 16x z 5 5 2 值为 10z 5 x 8 2 x 4 x 2值为 32x 16程序中并不是所有的逗号都要看成逗号运算符 尤其是在函数调用时 各个参数是用逗号隔开的 这时逗号就不是逗号运算符 如 printf d d d x y z 第四章顺序程序设计 4 1C语句的概述C程序源程序1 源程序i 源程序n预编译命令函数1 函数n说明部分执行部分 语句 1 复合语句 用大括号括起来的一些语句 这些语句被看成一个整体 例如 t x x y y t 注意 复合语句的大括号后面没有分号 如果复合语句中只有一条语句 那么大括号可以省略 2 控制语句 用来规定语句的执行顺序 if 条件 else 条件语句for 条件 循环语句while 条件 循环语句do while 循环语句continue 结束本次循环语句break 结束循环语句或结束switch语句switch 表达式 多分支选择语句goto标号 转向语句return 表达式 从函数返回语句其中 表示循环体或叫内嵌语句 可以用复合语句来表示 3 函数调用语句 由一个函数调用加一个分号构成函数调用语句 例如 printf max d c c max a b 4 表达式语句 在任何一个表达式后加一个分号就构成一条表达式语句 例如 x 3 注意 赋值表达式可以放置在任何可以放置表达式的地方也就是说可以放在某些语句中 而赋值语句只能作为一条语句单独存在 如 if x y 6 y 6 若是if x y 6 y 6 则是错误的 5 空语句 仅由一个分号构成的语句 例如 表示这里有一条什么也不做的语句 4 2数据输入输出的概念及在C语言中的实现C语言本身不提供输入输出语句输入和输出操作是由函数来实现的在C语言中没提供输入和输出语句的目的是使C语言编译系统更简单 因为C语言是翻译语言 没有输入输出语句就避免在编译时还需处理一些硬件的问题 这样增强程序的通用性 可移植性 在C语言函数库中有一批 标准输入输出函数 在不同的计算机系统内都可以被调用的 P381在使用到C语言库函数时 要用预编译命令 include 将有关的 头文件 包括到用户源文件中 4 3字符数据的输入输出一 putchar 原形在stdio h中 这个函数的作用是将给定的一个字符常量或一个字符变量输出到终端 例如 putchar A putchar 33 putchar x 这里x可以是整型或字符型变量 例4 1putchar n 输出一个换行回车putchar 101 Aputchar putchar 015 输出回车 不换行 二 getchar 原形在stdio h中 从终端输入一个字符 该函数无参数 例如 includemain charc c getchar putchar c 输入A 输出也为A 注意 输入时需键入回车后 才可处理 printf c getchar putchar getchar 4 4格式输入与输出一 printf 格式输出函数 原形在stdio h中 作用是向终端输出任意类型的数据 格式为 printf 格式控制字符串 若干表达式 1 格式控制符 是用双引号括起来的字符串 包括两种信息 1 普通字符进行原样输出 printf thisismybook printf x d y d x y 2 起格式说明作用 用来控制对应表达式的输出格式 必须小写 d f c o x s e g u 2 格式字符具体说明 1 d格式符 d是按实际长度进行输出 printf x d y d 83 35 结果为 x 83 y 35 md是按照m指定的宽度进行输出 且数据右靠齐 如果实际宽度要大于m 则按数据的实际宽度进行显示输出 x 123 y 12345 printf 4d 4d 4d x x y 结果为 123 123 12345 ld是将其对应的表达式的值按照长整数方式输出 x 76543 printf x ld x d x x 结果为 x 76543 x 11007 注意 长整型数据一定要用 ld的形式输出 mldx 76543 printf x 7ld x 4ld x x 结果 x 76543 x 765432 o格式符 以八进制数形式输出整数 输出的数不带符号 inta 1 printf d o a a 结果为 1 1777777因为 1的补码形式是 1111111111111111 所以是177777同样 也可以使用l m作为说明符 3 x格式符 以十六进制形式输出整数 也没有负数形式 x 1 printf x x x d x x 结果为 FFFF 1同样 x也可以使用l m l作为说明符 4 u格式符 用来以十进制形式输出无符号数inta 2 unsignedintb 65535 printf a d o x u n a a a a printf b d o x u n b b b b 结果为 a 2 177776 FFFE 65534b 1 177777 FFFF 65535其中 2 补 1111111111111110 65535 补 1111111111111111 同样 u也可以使用l m l作为说明符 5 c格式符 用来输出一个字符 Printf x c y c A 66 结果为 x A y BPrintf x 5c 66 结果为 x B同样 c也可以使用m作为说明符 6 s格式符 用来输出一个字符串 sprintf s china china msprintf 8s china chian msprintf 8s s china isgood china is good m nsprintf 7 2s 4s china china ch chin m nsprintf 5 3s china chi 7 f格式符 用来输出实数 以小数形式输出 f整数部分全部输出 小数部分保留6位 需注意有效位数 floatx 123456 123 doubley 1234567890123 456789 printf f f x y 结果为 123456 125001 1234567890123 456790 m nf指定输出的数据共占m位 小数为n位 floatf 123 456 printf f 10f 10 2f 2f 10 2f n f f f f f 123 456001 123 456001 123 46 123 46 123 46 8 e格式符 以指数形式输出实数 e固定小数部分占5位 整数占1位 小数点占1位 E占1位 指数占2位 指数符号占1位 整体只占11位 printf e 123 456 结果为 1 23456e 02 m ne指定输出的数据共占m位 小数为n位 printf e 10e 10 2e 2e 10 2e f f f f f 1 23456e 02 1 23456e 02 1 2e 02 1 2e 02 1 2e 02 9 g格式符 自动选择实数输出的f或g格式 且不输出无意义的零 f 123 456 printf f e g f f f 结果为 123 456001 1 23456e 02 123 45610 格式符 作用是输出一个 printf 这个月的出勤率是96 注意 除了xX eE gG以外 都不可以使用大写 只可以用小写表示 其中可以使用转义字符 二 scanf 函数 原形在stdio h中 其使用格式为 scanf 格式控制符 地址表列 例如 scanf d d 注意 输入时不须用分隔符将各字母分开 若输入a b c则得到 c1 a c2 c3 b 4 o x用于输入八进制 十六进制的数scanf o x 7 表示空过一个数据 scanf d d d 应输入inputthenumber3才能使x得到3这个值 scanf d d 3 某一数据输入时 遇到下列输入则认为当前输入结束 遇到空格 回车 跳格键到达指定宽度时结束 如 3d则只取3列 遇非法输入时 如下面的例子 scanf d c f 输入为 1234k543o 22则得到 x 1234 y k z 543遇到o认为数据到此结束了 4 5顺序结构程序设计举例例1 输入三角形的三边长 求三角形面积可以利用海伦公式 其面积为 例4 10 例3 求方程的根 a b c由用户键盘输入 设 例4 12方程的根是 可以表示为 例2 从键盘输入一个大写字母 要求改用小写字母输出 例4 11 includemain floata b c disc x1 x2 p q scanf a f b f c f 第五章选择结构程序设计 5 1关系运算符和关系表达式一 关系运算符及优先级 a ba b ca bb c c a b a b c a b c a b c 二 关系表达式定义 用关系运算符将两个表达式 算术表达式 关系表达式 逻辑表达式 赋值表达式 字符表达式 连接起来的式子 称为关系表达式 a b a b b c a 3 b 5 a b bba b cb cb则d f a b c则f 1 1 0 1 0 5 2逻辑运算符和逻辑表达式一 逻辑运算符及其优先级 非 2级 右结合 单目运算符 与 或 11 12级 左结合 双目运算符逻辑运算真值表 二 逻辑表达式1 逻辑表达式的值只有两个 真 1 假 0 2 而在判断一个量真假时原则如下 0为假 非0为真例如 5 3 2 8b n c d 求m n的值是多少 m 0 n 1 main inta x y z a 0 x 1 y 1 z 1 a x 2 1 2 2 2 0 0 1 1 1 2 1 1 1 0 2 1 1 0 1 2 分别写出a x y z的值 5 3if语句一 if语句格式 if 条件 语句一 else 语句二 当条件成立时执行语句一 条件不成立时执行语句二 注意 1 条件是个逻辑表达式 两边必须有括号 2 语句一和语句二是if的内嵌语句 与if看成一条语句3 如语句一 二不只是一句话 而是多句 则须用 括起来 4 else语句二可以省略 5 语句一 语句二中还可包含另外一个if else语句 6 else总是和它上面的if 未曾配对的 配对 例如 if 3 printf OK if x y printf d x elseprintf d y if x y 输入3个数a b c 要求按由小到大的顺序输出 例5 2 二 if语句的嵌套在if语句中又包含一个或多个if语句称为if语句的嵌套 if 条件 if 条件 语句1 else 语句2 elseif 条件 语句3 else 语句4 对于容易产生错误的嵌套语句 最好加上 if if 语句1elseif 语句2else语句3 例 有一函数 1 x0 main intx y scanf d if x 0 if x 0 y 1 elsey 0 elsey 1 三 条件运算符 优先级是13级 右结合 三目运算符 格式 表达式一 表达式二 表达式三if a b max a elsemax b max a b a bx y x z d z d x y x z d z d x y x y 2 x y x y 2 y 1 if x 0 if x 0 y 1 elsey 0 y 0 if x 0 if x 0 y 1 elsey 1 在输入x 0时会出错 应该如何改 在进行混合运算时应注意 x y 1 1 5当x y时 表达式的值为1 0 当x A 5 4switch语句语句格式 switch 表达式 case常量表达式1 语句1case常量表达式2 语句2 case常量表达式n 语句ndefault 语句n 1 注意 1 switch后表达式可以为整型 字符型等 2 每个case后常量表达式只能是常量组成的表达式 当switch后表达式值与某一常表达式值一致时 则执行此case后语句 如无一常量表达式值与switch值一致 则执行default后的语句 3 每个case语句后常量表达式值不应一致 否则程序会出错 4 case语句的次序不影响执行结果 一般情况下尽量使出现机率大的case放在前面 5 执行了一个case语句后 程序就会执行以下case的以及default的语句 除非遇到了break语句停止 执行switch以后的语句 6 default这一行可以省略 7 多个case可以共用一段程序 例 输入一个学生的成绩 打印出相应的等级 main floatgrade intx scanf f 练习题 表示x int型 取值在 1 10 或 200 210 范围内为真 表达式为 判断charc1是否大写字母的表达式为 1 写出程序输出结果 main inta 100 x 10 y 20 ok1 5 ok2 0 if x y if y 0 if ok1 a 1 elseif ok2 a 10 a 1 printf d n a x 1 x 200 x 210 ch1 A ch1 Z 1 2 main intx 2 y 1 z 2 if x12 x 10 x 12 printf d n y 输入为 12 4 main inta 1 b 3 c 3 ints 0 w 0 t 0 if c 0 s a b if a0 if c0 w a b elset c printf d d d s w t 5 main inta 2 b 7 c 5 switch a 0 case1 switch b 0 case1 printf break case2 printf break case0 switch c 5 case0 printf break case1 printf break defualu printf break defualt printf 5 5程序举例1 输入一年份 判断是否为闰年例5 5能被4整除 但不能被100整除的和能被100整除又能被400整除的2 求方程的解 例5 63 运输公司对用户计算运费 路程 s 越远 每公里运费越低 标准如下 s 250s 250km没有折扣0250 s 5002 折扣1500 s 10005 折扣2 31000 s 20008 折扣4 5 6 72000 s 300010 折扣8 9 10 113000 s15 折扣12及12以上所以运费的计算是 f p w s 1 d 例5 7 第六章循环控制 6 1goto语句一 命令格式 goto语句标号主要用途 和if构成循环 从循环体内跳到循环体外 例 求1 2 3 100的值main inti sum 0 i 1 loop if i 100 sum sum i i gotoloop pirntf sumis d sum 6 2while语句一 格式 while 表达式 循环语句例 求1 2 3 100的值main inti sum 0 i 1 while i 100 sum sum i i printf d n sum 注意 1 循环体语句若是多条语句必须用 括上 2 循环体中应有使循环趋于结束的语句 6 3do while语句一 格式 do循环语句while 表达式 main inti sum 0 i 1 do sum sum i i while i 100 printf d sum 注意 必须在while 表达式 后加一个 表示do while语句的结束 在do while和while的使用上 结果一般是相同的 区别是 whiledo while先判断 后执行先执行 后判断可能一次也不执行循环体至少执行一次循环体例 main main intsum 0 i intsum 0 i scanf d 6 4for语句一 格式 for 表达式1 表达式2 表达式3 循环语句 for 循环变量初值 循环条件 循环变量增量 循环语句 main inti sum 0 for i 1 i 100 i sum sum i printf d sum for i 100 i 0 i sum sum i 二 for语句的变形 1 表达式1或表达式3省略 但分号 不能省略 i 1 for i100 break 3 for语句中三个表达式的类型不限 inti sum for sum 1 i 1 i 100 sum i i printf d sum for i 0 c getchar n i c 作用是每输入一个字符就将其ASCII码值累加到变量i中 直到输入回车为止 charc for c getchar n printf c c 作用是输入一个字符给c 判断是否为回车 不是则输出 是则停止输入 停止循环 若输入是 abcdefg回车结果应为 abcdefg练习题 includemain intc for c getchar n switch c 2 case0 case1 putchar c 4 case2 putchar c 4 break case3 putchar c 3 default putchar c 2 break printf n 程序运行时输入值为2473 输出结果为 668977 6 5循环嵌套一个循环体内又包含另一个完整的循环结构 称为循环嵌套 注意 程序中只要能放语句的地方 就可以放三种循环结构 1 while 2 do 3 for while dofor while while 4 while 5 for 6 do dowhile for while while 在使用循环时一定要严防死循环 一旦遇到死循环可以使用Ctrl Break或Ctrl C来停止它的运行 之后返回来对源程序进行修改 main inti sum 0 do i 1 sum 2 i while i 5 printf Thesumis d sum 如何对这个死循环进行修改 main inti 1 sum 0 do sum 2 i while i 5 printf Thesumis d sum main inti b k 0 for i 1 i 0 k printf d d k b 程序运行结果是 8 2 6 6break语句和continue语句一 break语句作用 使执行从switch语句或循环语句中跳中 通过break语句使循环不必等到条件起作用 就在循环内部条件测试中退出循环 for r 1 r100 break printf f area area 3 1412 5628 2650 2478 5113 04注意 break只能跳出它所在的循环语句 而不能从内层循环一下跳到最外层 且只可用在switch与循环之语句之中 二 continue语句continue是结束本次循环 进行下一次循环 当然进入下一次循环之前还需判断循环条件是否满足 main inti for i 1 i 20 i if i 3 0 continue printf d i 此程序是将1 20之间不能被3整除的数求出 一般情况下 continue语句只用在循环语句中 也就是说有的时候它会嵌在switch或其它语句中使用 但它只对循环语句起作用 main inta b for a 1 b 1 a 20 break if b 3 1 b 3 continue b 5 printf d n a main inti j x 0 for i 0 i 2 i x for j 0 j 3 j if j 2 continue x x printf x d n x 程序运行结果为 8 输出为 x 8i 2 j 4 6 7程序举例1 用 公式求的近似值 直到最后一项的绝对值小于为止 例6 62 求Fibonacci数列的前40个数 特点 第1 2数为1和1 从第3个数开始 该数是前两数之和 例6 73 判断输入的数是否是素数例6 84 译密码例6 9注意 从w z及W Z的处理 第七章数组 7 1一维数组的定义和引用一 定义格式 类型说明符数组名 常量表达式 例如 inta 10 floatb 5 charc 10 说明 1 数组名与变量名命名规则相同 代表内存中连续区域的首地址 inta 5 a2000a 0 a 1 a 2 a 3 a 4 20002002200420062008 2 下标的常量表达式应用 而不是 3 中必是常量表达式 是常量或符号常量 不能是变量 例如 intn scanf d X 4 中表示数组元素的个数 是从a 0 开始的 而不是从a 1 开始的 5 在同一程序中数组名不能与变量同名 否则出现逻辑错误 二 一维数组的引用格式 数组名 下标 说明 1 数组必须事先有定义 和变量一样2 下标用 表示 其中可以用常量表达式 也可用变量表达式 但必须为整型 a 3 b 1 b 0 scanf d 结果为 10987654321 三 一维数组的初始化1 定义数组时初始化 inta 10 0 1 2 3 4 5 6 7 8 9 2 给一部分元素赋值 inta 10 0 1 2 3 4 其余元素的值均为0 3 全部元素为0 inta 10 0 0 0 0 0 0 0 0 0 0 或inta 10 或inta 10 0 4 不指定数组的长度 一般用于对全部数组元素都赋初值时 inta 1 2 3 4 5 1 Fibonacci数列 只求前20个数 f1 1 f2 1f3 f1 f2 2f4 f2 f3 3f5 f3 f4 5f6 f4 f5 8 fi f i 2 f i 1 可以将20个数值求出依次放入a 20 数组的20个元素中去 在按时5个一行打印出来 例7 2冒泡排序算法演示2 冒泡法排序 对7个数进行由小到大排序 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 第一趟比了1次 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 第一趟比了2次 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 第一趟比了3次 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 第一趟比了4次 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 第一趟比了4次 第二趟比了1次 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 第一趟比了4次 第二趟比了1次 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 第一趟比了4次 第二趟比了2次 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 第一趟比了4次 第二趟比了2次 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 第一趟比了4次 第二趟比了3次 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 第一趟比了4次 第二趟比了3次 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 第一趟比了4次 第二趟比了3次 第三趟比了1次 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 第一趟比了4次 第二趟比了3次 第三趟比了2次 假设有5个数 2 8 7 1 4需要从小到大排序 2 8 7 1 4 a 0 a 1 a 2 a 3 a 4 第一趟比了4次 第二趟比了3次 第三趟比了2次 第四趟比了1次 假设有5个数 2 8 7 1 4需要从小到大排序 a 0 a 1 a 2 a 3 a 4 第一趟比了4次 第二趟比了3次 第三趟比了2次 第四趟比了1次 例7 3 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 a i printf Thesortednumbers n for j 1 j 11 j printf d a i 由于冒泡法排序的效率很低 所以介绍另一种排序算法 选择排序算法 选择排序算法演示 a 1 a 2 a 3 a 4 a 5 k 1 由于冒泡法排序的效率很低 所以介绍另一种排序算法 选择排序算法 a 1 a 2 a 3 a 4 a 5 k 1 2 由于冒泡法排序的效率很低 所以介绍另一种排序算法 选择排序算法 a 1 a 2 a 3 a 4 a 5 k 1 2 3 由于冒泡法排序的效率很低 所以介绍另一种排序算法 选择排序算法 a 1 a 2 a 3 a 4 a 5 k 1 2 3 4 由于冒泡法排序的效率很低 所以介绍另一种排序算法 选择排序算法 a 1 a 2 a 3 a 4 a 5 k 1 2 3 4 第一趟比了4次 换a k 和a 1 由于冒泡法排序的效率很低 所以介绍另一种排序算法 选择排序算法 8 2 7 4 1 a 1 a 2 a 3 a 4 a 5 k 1 2 3 4 第一趟比了4次 换a k 和a 1 k 2 由于冒泡法排序的效率很低 所以介绍另一种排序算法 选择排序算法 a 1 a 2 a 3 a 4 a 5 k 1 2 3 4 第一趟比了4次 换a k 和a 1 k 2 3 由于冒泡法排序的效率很低 所以介绍另一种排序算法

温馨提示

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

最新文档

评论

0/150

提交评论