简单C语言程序设计.ppt

上传人:max****ui 文档编号:6142541 上传时间:2020-02-17 格式:PPT 页数:74 大小:1.48MB
返回 下载 相关 举报
简单C语言程序设计.ppt_第1页
第1页 / 共74页
简单C语言程序设计.ppt_第2页
第2页 / 共74页
简单C语言程序设计.ppt_第3页
第3页 / 共74页
点击查看更多>>
资源描述
第2章简单C程序设计 回顾 程序是为执行一项任务而编写的有序指令集C程序的特点C语言的组成C程序的编译和运行过程编译器将源程序转换成机器能理解的程序连接器用于连接相关的目标文件以生成可执行程序 本章要点 C语言的数据类型 运算符C语言的常量和变量C语言的表达式常用数学函数 includeintmain intcelsius fahr fahr 100 celsius 5 fahr 32 9 printf fahr d celsius d n fahr celsius 执行程序的输出结果为 fahr 100 celsius 37 2 1温度转换 例2 1求华氏温度100F对应的摄氏温度 2 1 1内存 内存可以理解为一排井然有序的小开关 每个开关有两个状态 开表示1 断表示0 所以每个开关表示一个二进制数 0或1 称为一个位 bit 为管理方便 8个位为一组 称为一个字节 byte 然后为所有字节从0开始编号 这个编号称为字节的地址2的10次方 1024 个字节称为1k2的20次方 1048576 个字节称为1M2的30次方 1073741824 个字节称为1G 2 1 2变量 intcelsius fahr celsius 5 fahr 32 9 变量是计算机里一块特定的内存 它由一个或多个连续的字节组成 每个变量都有一个名称 表示内存中的这个位置 以便通过变量名读取该位置的数据或存储一个新数值 变量的值不是固定的 随时都可以改变 且次数不限 编写程序时 通常使用变量来存储数据 方便后面使用这个数据或者修改这个数据的值 变量 程序 存储fahr 计算5 fahr 32 9 将值存储为celsius 100 32 输出fahr和celsius 内存变量用来存储数据 系统需要知道每个变量要存储什么类型的数据 然后为每个变量分配一块足够大的内存空间 用来该类型的数据 2 1 3数据类型 数据属于不同类别 Africa Thequickbrownfox TRUE 数据 非数值 数值 整型 非整型 9002 12 999 9 12 2003 2 175 123 JackieChan char 数据类型 非数值 数值 整型 int shortint longint double float 非整型 整型变量类型 shortint 2个字节 2 15至215 1 32768至 32767 整数变量还分为几种不同的类型 以存储不同范围的整数 int 4个字节 2 31至231 1 2147438648至 2147438647 longint 4个字节 2 31至231 1 2147438648至 2147438647 int64longlongint 8个字节 2 63至263 1 1 数据类型所占字节数 取决于所使用的编译器2 shortint可以简写为short longint可以简写为long3 不同编译器对64位的支持不同 在VC中只支持 int64 gcc g 支持longlong windows平台的gcc g 也支持 int64 无符号的整数类型 unsignedshortint 2个字节 0至216 1 0至 65535 unsignedint 4个字节 0至232 1 0至 4294967295 unsignedlongint 4个字节 0至232 1 0至 4294967295 unsigned int64unsignedlonglongint 8个字节 0至264 1 0至18445744073709551615 当处理不能为负的数据时 可以使用无符号类型 所占内存与有符号型相同 但对正数的表示范围比有符号型大一倍 2 1 4变量的声明和使用 声明变量 intcelsius fahr 定义时初始化变量 intcelsius fahr 100 定义后初始化变量 fahr 100 给变量赋值 除了给一个直接的值以外 还可以通过计算获得如 celsius 5 fahr 32 9 变量的命名规则 在C语言中 变量命名需要遵循一定的规则 有效名称 principal cost price marks 3 lastname city 无效名称 123rate currency discount zipcode 变量的命名规则 变量名可以由字母 数字和 下划线 组合而成变量名不能包含除 以外的任何特殊字符 如 逗号 空格等变量名必须以字母或 下划线 开头变量名不能包含空白字符 换行符 空格和制表符称为空白字符 C语言中的某些词 例如int和float等 称为保留字 具有特殊意义 不能用作变量名C语言区分大小写 因此变量price与变量PRICE是两个不同的变量 2 1 5赋值运算 赋值运算符 赋值表达式 用 将一个变量和一个表达式连接起来的式子变量 表达式例如 fahr 100 celsius 5 fahr 32 9 计算赋值运算符右侧表达式的值将赋值运算符右侧表达式的值赋给左侧的变量 的左边必须是一个变量 分析错误程序 求两个整数的和 includeintmain inta b sum sum a b a 3 b 5 printf d n sum return0 该程序为何得不到正确结果 错误原因是受数学思维的影响 吴以为sum a b 是建立sum和a b之间的一个等量关系 赋值运算 表示的是一个动作 先计算表达式的值 再存入赋值号左边的变量中 既不表示数学中的等量代换 也不表示相等关系 执行sum a b 语句是 因为a和b中的值都不确定 是随机的 所以其和也是随机的 然后把这个数赋给了sum 该程序为何得不到正确结果 2 1 6格式化输出函数printf printf d count 格式 printf 格式控制串 输出参数表 输出格式 printf fahr d celsius d n fahr celsius 普通字符 原样输出 开头的是转换说明 对应与后面一个输出参数 对应参数将被转换成指定格式后在该位置输出 输出结果 fahr 100 celsius 37 输出参数列表 n 是转意字符 用来输出一个回车 转换字符串 printf d count d 转换字符串 d intvisitor count 150 printf d visitor count 输出结果 150 转换字符串 md intsalary 5500 printf 10d salary 输出结果 5500 输出结果的左边显示了6个空格 10d 数据以十进制整数格式输出 宽度占m列 数据不足m列左补空格 超过m列按实际位数输出 转换字符串 md intsalary 5500 printf 10d salary 输出结果 5500 输出结果的右边显示了6个空格 10d 数据以十进制整数格式输出 宽度占m列 数据不足m列右补空格 超过m列按实际位数输出 课堂练习 输出整数幂 已知m 11 n 41 输出m和n的2次方 3次方和4次方 要求每个数据占8列 左对齐 效果如下 1211331146411681689212825761 2 2 使用浮点数进行温度转换 例2 2 例2 1中程序的运行结果并不令人满意 因为华氏温度100 对应的摄氏温度应该为37 7777 而不应该是37 需要使用浮点型变量来存储带小数点的数 我们需要将celsius fahr声明为双精度浮点型 includeintmain doublecelsius fahr 声明两个双精度浮点型变量fahr 100 0 赋值运算celsius 5 fahr 32 9 计算摄氏温度 并存入变量celsiusprintf fahr f celsius f n fahr celsius 2 2 1浮点变量类型 浮点数在计算机中的表示 基于指数表示法 将分为指数和尾数来存储 浮点变量根据数据表示范围和精确度不同 有一下几种类型 float 4个字节 3 4E38 6位有效数字 浮点变量用来存储浮点数 浮点数包含的值带小数点 也可以表示分数和整数 double 8个字节 1 7E308 15位有效数字 课外作业 查阅资料 了解浮点数是如何存储的 Longdouble 12个字节 1 19E4932 18位有效数字 注意有效位数的不同 float double 213 5671435568967 64位 取值范围 10 308至10308 16位有效数字 flaotf level 213 5671435568967 doubled level 213 5671435568967 去VC下试试 转换字符串 f floatcircumference 78 53 printf f circumference 输出结果 78 530000 默认情况下精确到六位小数 9 4786789 9 478679 2 2 2浮点数据的输出 doublemercury level 168 2251074 printf 7 2f mercury level 输出结果 168 23 宽度 表示所有的数字和小数点所占的位数 不够7位右对齐 7 2f 精度 精确到小数点后多少位 转换字符串 m nf 2 2 2浮点数据的输出 程序 指令 2 2 3常量 标识符关键字常量运算符分隔符等 常量是在程序中保持不变的量 分为 立即数符号常量 宏常量 const常量 立即数整型常量 如32 100实型常量 如1 23123 567e5字符常量 a 2 n 字符串常量 cprogram 定义常量 为使程序易于阅读和便于修改 可以给程序中经常使用的常量定义一个有一定含义的名字 常量用于定义具有如下特点的数据 在程序中保持不变在程序内部频繁使用需要用比较简单的方式替代某些值防止意外的修改 增强程序的健壮性 定义宏常量 definePI3 1415926 编译预处理指令 define将PI定义成一个要被3 1415926取代的符号 此时PI不是一个变量 而是3 1415926的别名 在编译开始之前 只要在程序的表达式中引用PI 预处理器就会用 define指令中的值 3 1415926 来取代它 宏常量的缺点 宏常量被替换成立即数之后 内存中有同一个立即数的多份拷贝 定义const常量 在定义变量时 加上const修饰 告诉编译器 它的值是固定的 不能被改变 编译器会帮你检查 监督 constdoublePI 3 1415926 const推出的初始目的 正是为了取代预编译指令 消除它的缺点 同时继承它的优点 在编译的时候 由于const定义常量只是给出了对应的内存地址 而不是象 define给出的是立即数 所以 const定义的常量在程序运行过程中只有一份拷贝 而 define定义的常量在内存中有若干个拷贝 例2 3求圆柱体的体积 求圆面积 圆周率用立即数 include stdio h intmain doulbev r h r 10 0 h 20 0 v 3 1415926 r r h printf v f n v return0 求圆面积 圆周率用宏常量 include stdio h definePI3 1415926intmain doublev r h r 10 0 h 20 0 v PI r r h printf v f n v return0 求圆面积 圆周率用const宏常量 include stdio h constdoublePI 3 1415926 intmain doublev r h r 10 0 h 20 0 v PI r r h printf v f n v return0 模仿练习 1 编程 已知圆的半径radius 实数 输出圆的面积 保留两位小数 2 3 对任意华氏温度进行温度转换 例2 3 例2 2中的程序运行后只能输出华氏温度100F对应的摄氏温度 为提高程序地通用性 要求程序运行后等待键盘输入一个华氏温度 实数 程序输出其对应的摄氏温度 读入一个华氏温度 输出其对应的摄氏温度 includeintmain doublecelsius fahr 声明两个双精度浮点型变量scanf lf scanf d 2 3 1scanf 函数 scanf函数从标准输入 键盘 读取信息 按照格式描述把读入的信息转换为指定数据类型的数据 并把这些数据赋给指定的内存区域中 转换字符串 符号 附在读取的每个变量上 用于指明变量在内存中的位置 变量的名称 scanf 函数的格式 scanf 格式控制字符串 内存地址1 内存地址2 内存地址n 取地址符 scanf d 1 d为格式转换符 每个格式转换符对应后面一个内存地址 2 scanf将读入数据 按指定格式理解该输入 然后存入对应内存地址 3 1 2格式转换符 格式控制字符串 1 由一对双引号括起来 2 可以包含格式转换符和普通字符 格式转换符以 开头 不同类型的数据 采用不同的格式转换符 目前常用的转换符见下表 内存 用scanf 读入整形数据 intnum scanf d num 在内存中分配一块32位存储空间存储空间使用名称 num 标识 等待用户输入一个值将输入的值按十进制整数来理解 然后内存中 因为scanf提供了num的内存地址 123 内存 用scanf 读入单精度浮点数据 floattax rate scanf f tax rate 在内存中分配一块32位存储空间存储空间使用名称 tax rate 标识 等待用户输入一个值将输入的值按十进制单精度实数来理解 然后内存中 因为scanf提供了tax rate的内存地址 12 234 内存 doubletax rate scanf lf tax rate 在内存中分配一块64位存储空间存储空间使用名称 tax rate 标识 等待用户输入一个值将输入的值按十进制双精度实数来理解 然后内存中 因为scanf提供了tax rate的内存地址 12 234 约定 以后凡说要定义实型变量 都使用double 用scanf 读入双精度浮点数据 3 1 3格式控制字符串中的普通字符 scanf 格式字符串 地址列表 在格式字符串中若有普通字符 则输入时在对应位置也必须输入该普通字符 否则会因读入格式错误而终止程序 如果有scanf d d a b 输入的两个数直接必须有一个逗号3 5正确35错误如果有scanf a d b d a b 输入应该是 a 3 b 5 否则就会失败 scanf的格式字符串中最好不加任何普通字符 只写 开头的格式转换符 如scanf d d a b 不要给自己制造输入格式限制 课堂练习 1 读入两个整数 输出它们的和2 读入两个实数 输出它们的平均值 结果保留两位小数 常见错误分析1 两个整数的运算 includeintmain intm n scanf d d 输入85输出结果是错误的 若输入8 5 则运行结果正确 scanf中的格式字符串中若有普通字符 则输入时在对应位置也必须输入该普通字符 分析如下程序错误的原因 常见错误分析2 输入半径 输出面积 include definePI3 1415926intmain doublea b scanf d d 输入 35输出结果错误 错误原因 因a b是double类型的变量 故scanf的格式转换符应该是 lf 分析如下程序错误的原因 lf lf 2 4整数的运算 例2 4分糖果 老师有n个糖果 要分给m个小朋友分糖果 n和m由键盘输入 输出每个小朋友分几个 老师还剩余几个 程序2 4 整数运算 includeintmain intcandies kids scanf d d 2 4 1算术运算 算术运算 算术 一元 二元 操作数 操作数 运算符 二元运算符 算术运算注意 1 整数除整数 得整数如 1 2 0 9 4 2思考 5 fahr 32 9和5 9 fahr 32 等价吗 2 模运算 针对整型数据如 5 6 5 9 4 1 100 4 0模运算的结果与第一个操作数相同 3 乘号不能省略5 a不能5a 4 双目运算符两侧操作数的类型要相同 课堂练习 求各位数字和 由键盘输入一个整数n 小于1000 计算n的各位数字和 includeintmain intn d0 d1 d2 scanf d 课堂练习 两个整数的和差积商 输入两个整数 求两个数的和 差 积 商 要求商保留2位小数 整数运算 includeintmain inta b c scanf d d 常见错误1 两个整数的运算 includeintmain inta b c scanf d d 输入 85商的结果是0 00 分析原因 原因是输出格式控制 0 2f与对应输出项类型不匹配 a b的结果是整型数据 2f用来输出浮点型数据 整数除法的运算结果是整数商 直接扔掉余数 分析如下程序错误的原因 常见错误2 两个整数的运算 includeintmain inta b doublec c a b scanf d d 输入85运行结果是1 00 分析原因 依然是整数除法带来的问题 整数除法的运算结果是整数 5 3的结果是1 把1赋给实型变量c c的值是1 0 而不是你期望的1 6 分析如下程序错误的原因 2 4 2类型转换 1 不同级别的操作数运算时 精度低的自动向精度高的转换如 doublea 1 2 a的值是0 0doublea 1 0 2 a的值是0 52 赋值时类型转换如 doublea 1 会把1 0赋给ainti 1 5 会把1 5转换为整型得1 赋给i 类型转换 3 强制类型转换 类型名 操作数如 doublea 2 5 intn n int a 将a的值转换为整型2 赋给n又如 求两整数的商 商为实数inta 2 b 3 doublec c double a b 强制类型转换或c 1 0 a b 不同类型运算时向精度高的转换 先将a转换为实数 再除以b 强制转换优先级最高 2 5两个数的最大值 例2 5输入两个数 输出其中较大的数 includeintmain inta b max scanf d d 1 读入a b 2 把a赋给max 3 如果b max 或b a 把b存入max 4 输出max 2 5 1关系运算 关系运算符种类 结合方向 自左向右优先级别 关系预算的结果是整型 若关系成立 结果为1 若关系不成立 结果为0 inta 3 b 5 a b结果为0 A 2 b结果为12 3 3 7结果为1 关系运算注意 例若inta 0 b 5 x 100 则a x b的值为 1 例5 2 7 3符合C的语法 值为 1 例inti 1 j 7 a a i j 4 0 则a 2 例 a 0结果为 A 100结果为 1 0 2 5 2基本if语句 if 表达式 语句 如果括号内表达式的值为真 则执行if后的语句 否则什么也不做 语句1可以是单个语句 也可以是用 括起来的复合语句 模仿练习 改写上例 实现 输入三个数 输出其中最大的数 1 读入a b c 2 把a赋给max 3 如果b max 把b存入max 4 如果c max 把c存入max 5 输出max includeintmain inta b c max scanf d d d 比武招亲 擂台赛的思想 2 5 3条件表达式 本题可以用如下条件运算符来处理 max a b a b includeintmain inta b max scanf d d 其中 a b a b 是一个条件表达式 若条件 a b 成立 则条件表达式取值a 否则 取值b 相当于if a b max a elsemax b 条件表达式的一般形式 表达式1 表达式2 表达式3 条件表达式的求解过程先求解表达式1的值若表达式1的值为真 非0 则求解表达式2的值 将其作为条件表达式的值 表达式3不计算 若表达式1的值为假 0 则求解表达式3的值 将其作为条件表达式的值 表达式2不计算 模仿练习 用条件表达式实现 输入三个数 输出其中最大的数 1 读入a b c 2 把a和b中较大者赋给max 3 把c和max中较大者赋给max 4 输出max includeintmain inta b c max scanf d d d 课堂练习 时间间隔从键盘输入两个时间点 24小时制 输出两个时间点之间的时间间隔 时间间隔用 小时 分钟 秒 表示 Input输入包括两行 第一行为时间点1 第二行为时间点2 都以 小时 分钟 秒 的格式输入 Output以 小时 分钟 秒 的格式输出时间间隔 格式参看样例 Hint注意 要输出01 08 31中的占位符0 SampleInput12 01 1213 09 43SampleOutput01 08 31 SampleInput12 40 1213 09 43SampleOutput00 28 31 思路分析 方法1 两个时间点都转换成秒 然后相减 再把结果转换为时分秒方法2 时分秒对应相减 不够减向上借位 2 6计算两点间距离 例2 6编程 输入4个实数x1 y1 x2 y2 数据之间用空格隔开 表示两点坐标A x1 y1 B x2 y2 计算并输出两点间的距离 结果保留两位小数 1 定义x1 y1 x2 y2 dist为double类型 2 读入x1 y1 x2 y2 3 利用两点间距离公式求距离 存入dist 4 输出dist 如何求平方根呢 用C语言的标准库函数sqrt 例2 6的源程序 求两点之间的距离 include includeintmain doublex1 y1 x2 y2 dist scanf lf lf lf lf 也可以写成两个语句 dist x1 x2 x1 x2 y1 y2 y1 y2 dist sqrt dist 2 6 1常用数学函数 要包含头文件 include1 求绝对值求整数的绝对值 用abs inti 3 j j abs i 求实数的绝对值 用fabs doublea 12 3 b b fabs a 数学函数 2 求开方 用sqrtdoublea 2 3 b b sqrt a 3 求幂xy 用powdoublex 2 y 3 z z pow x y 4 求ex 用expdoublex 2 3 b y exp x 数学函数 5 求自然对数 用logdoublex 13 y y log x 6 求以10为底的对数 用log10doublex 13 y y log10 x 数学函数的使用 7 三角函数doublex 1 5 y y sin x y cos x y tan x 例2 7求整数的位数 输入一个整数 输出该整数的位数 提示 1 求n的对数函数为 log10 n 2 考虑一个整数的对数和位数的关系 对数取整加1即该数的位数 3 可用强制类型转换扔掉小数部分由以上3点可知 整数n的位数是 int log10 n 1 例2 7的程序 include includeintmain intn len scanf d 上机作业 1 1 输入两个整数 输出他们的和 2 输入两个实数 输出它们的平均值 结果保留2位小数 3 输入圆的半径 求圆的周长和面积 要求定义如下宏常量 definePI3 141594 和差积商 从键盘读入两个整数数求他们的和差积商 要求商保留2位小数 5 输入三个整数 请你设计一个程序 求出这三个数的和 乘积和平均数 平均数保留2位小数 6 温度转换 从键盘读入华氏温度 输出摄氏温度7 输入一个小于1000的整数n 逆序输出该整数的各位数字 要求能默写或熟练输入以上程序 上机作业 2 1 输入三个整数 输出最大值2 实数的绝对值 输入一个实数 输出它的绝对值 结果保留两位小数 3 两点间距离 输入4个实数x1 y1 x2 y2 数据之间用空格隔开 表示两点坐标 x1 y1 x2 y2 计算并输出两点间的距离 结果保留两位小数 4 编程 输入三角形的三边长 实数 输出三角形的面积 结果保留两位小数 提示 用海伦公式 5 编程 输入一元二次方程ax2 bx c 0的系数a b c 假定满足b2 4ac 0 输出方程的两个根 结果保留两位小数 6 输入存款金额money 存期year和年利率rate 根据公式计算存款到期时的本息合计sum 税前 输出时保留2位小数 sum money 1 rate year提示 sum money pow 1 rate year
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!