




已阅读5页,还剩60页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Chap 2 用C语言编写程序,2.1 在屏幕上显示 Hello World!2.2 求华氏温度 100F 对应的摄氏温度2.3 计算分段函数2.4 输出华氏摄氏温度转换表2.5 生成乘方表与阶乘表,本章要点,怎样编写程序,在屏幕上显示一些信息?怎样编写程序,实现简单的数据处理,例如将华氏温度转换为摄氏温度?怎样使用 if 语句计算分段函数?怎样用 for 语句求 1+2+100?如何定义和调用函数生成一张乘方表?,2.1 在屏幕上显示Hello World!,【例2-1】在屏幕上显示一个短句:Hello World!,2.1 在屏幕上显示Hello World!,/* 显示“Hello World!” */#include int main(void) printf(Hello World! n); return 0;,1.任何程序都有主函数2.程序由若干语句组成3.语句用分号 ;结束,2.1 在屏幕上显示一些信息,【例2-2 】在屏幕上显示两行文字:Programming is fun!And Programming in C is even more fun!# include int main(void) printf(Programming is fun! n); printf(And Programming in C is even more fun! n); return 0;,2.2.1 程序解析2.2.2 常量、变量和数据类型2.2.3 算术运算和赋值运算2.2.4 格式化输出函数printf【例2-3】 求华氏温度 100F 对应的摄氏温度。 其中:c 表示摄氏温度,f 表示华氏温度。,2.2 求华氏温度100对应的摄氏温度,计算公式为:,2.2.1 程序解析,【例2-3】 求华氏温度 100F 对应的摄氏温度。计算公式:c=5*(f-32)/9 #include int main(void) int celsius, fahr; fahr = 100; celsius = 5*(fahr-32)/9; printf(fahr = %d, celsius = %dn,fahr,celsius); return 0;,运行结果:fahr = 100, celsius = 37,/* 变量定义 */,/* 空行,分割变量定义和可执行语句,非必需 */,/* 对变量fahr赋值 */,/*计算且结果赋值变量celsius*/,/*输出结果*/,2.2.2 常量、变量和数据类型,数据类型 C语言中使用的量(数据)都有其类型,最常见的 基本数据类型有: int(整型) char(字符型) float(单精度浮点型) double(双精度浮点型)double 型数据比 float 型数据占用空间多,精度高,取值范围大,2.2.2 常量、变量和数据类型,常量 程序运行过程中其值不能被改变的量称为常量常量的类型通常由书写格式决定,例如: 123 是整型常量(整数) 123.45 是实型常量(实数)变量在程序运行过程中值可以被改变的量称为变量变量名及其类型在定义时指定,2.2.2 常量、变量和数据类型,变量的定义变量必须“先定义,后使用”变量定义的一般形式: 类型名 变量名表; 例如: int celsius, fahr; 定义整型变量 float x; 定义单精度浮点型变量 double area, length; 定义双精度浮点型变量,变量的定义(续),变量名为一个 C 语言中称为“标识符”的字符序列“标识符”只能由字母、数字和下划线三种字符组成,且第一个字符必须为字母或下划线用户自定义的标识符不能是 C 语言的关键字(详见p308附录A之1.关键字)变量名(标识符) 区分大小写字母,一般习惯 用小写字母,变量的定义(续),给变量起名尽量做到 “见名知义”,以及一般习惯变量名代表内存中的一个存储单元,用于存放该变量的值,单元大小由变量类型决定, 有的(如整型)还与编译系统有关,例如: VC+和GUIDE中,int型变量占用4个字节,而在TC中,int型变量只占用2个字节定义变量时可对变量初始化 例如:int a = 10, b = 20, c;,2.2.3 算术运算和赋值运算,算术运算双目算术运算符(加、减、乘、除和取余): + - * / %除运算符(/)的操作数都是整型,运算结果为整型 (商的整数部分),只要有一个是实型,结果为实型。 例如:1/2 商为 0 1/2.0 商为 0.5取余运算符(%)的操作数类型必须是整型 合法:10%2 非法:10.0%2 例:正整数a的个位、十位、百位数: a%10 、a/10%10、a/100%10,算术运算(续),当运算符两侧的操作数类型不同时,会自动转换成 同一类型后再运算,运算结果也为该类型。 数据类型自动转换规则: double float 高 unsigned long long unsigned unsigned short int char, short 低+ 和 - 还可作单目运算符,对数值取正负 例如:-12.3、-a 、-(a+5) (a为整型变量),赋值运算,算术表达式 是用算术运算符将运算对象连接起来的符合C语言 语法规则的式子。例如:5 * (fahr - 32) / 9 赋值运算赋值运算符 = 功能是计算其右边表达式的值再赋予左边的变量赋值表达式 是用=将一个变量和一个表达式连接起来的式子 一般形式为:变量 = 表达式 例如: celsius = 5*(fahr-32)/9,2.2.4 格式化输出函数printf(),功能 按指定的格式向显示器输出指定信息一般调用格式 printf(格式控制串, 输出参数1, , 输出参数n); 其中:格式控制串 用双引号括起来,表示输出的格式输出参数 要输出的数据,可以是常量、变量或表达式,2.2.4 格式化输出函数printf(),格式控制字符串包含的信息输出格式说明 由百分号%和紧跟在其后的格式描述符组成,具体与对 应的输出参数的数据类型有关:int 型 :%dfloat 和 double 型 :%f原样输出字符 需要按原样输出的字符,包括转义字符(如n)。例如: printf(fahr = %d, celsius = %dn, fahr, celsius); 输出为:fahr =100, celsius = 37,2.3 计算分段函数,2.3.1 程序解析2.3.2 关系运算2.3.3 if-else语句2.3.4 格式化输入函数scanf2.3.5 常用数学库函数,2.3.1 程序解析,【例2-4】输入用户的月用水量x(吨),按如下分段函数式计算水费,输出该用户应支付的水费 y(元)(保留2位小数)。本题必须对 x 作判断,如果 x15,则 y=4x/3,否则 y=2.5x-10.5。可用if-else语句实现: if ( x =0):n); /* 输入提示 */ scanf(%lf, ,例2-4程序,运行结果1:Enter x (x=0):9.5f(9.500000) = 12.67,运行结果2:Enter x (x=0):21.3f(21.300000) = 42.75,2.3.2 关系运算,关系运算符(比较运算符) 用于比较两个表达式值的大小,有6种: 、= 、 b 的值为0 关系表达式 c a+b 的值为1,If - else 语句的一般形式为: 执行流程 if (表达式) 语句1 else 语句2,2.3.3 if - else语句,2.3.3 if - else语句,常用于计算二分段函数 【例】 if - else 语句: if(x != 0) y = 1/x; else y = 0;,源程序 #include int main(void) double x, y; printf(Enter x:n); scanf(%lf, ,运行结果1: Enter x:2.5f(2.5)=0.40,运行结果2: Enter x:0f(0.0)=0.00,测试和调试程序,测试和调试程序 就是通过运行程序来发现程序中的错误,并改正错 误的过程。具体做法: 1. 精心设计一批测试用例(包括输入数据和预期输 出结果)。 2. 然后分别用这些测试用例运行程序,看程序的 实际运行结果与预期输出结果是否一致。 3. 如运行结果有错,则查找并改正程序中的错误, 继续步骤2和3,直到运行结果与预期输出结果 全部一致为止。,测试和调试程序,测试用例的设计 测试用例的选取决定了错误是否能被发现。不能简单地认为测试用例越多就越好(穷举所有 测试用例,一般并不可行),而是以能充分体现 程序功能的全貌和特殊细节的处理为好。一般测试用例要选择正常和不正常两类数据。正常数据通常可选择中间和边界的数据。根据自己的经验和易犯的错误,有针对地选择 测试用例。,测试和调试程序,查找程序错误的方法 调试程序查找错误的前提是读懂程序。对不大的程序,可用出现问题的测试用例,通 过“走码”或称“人脑运行程序”,从而发现程序 错误所在。程序中适当位置加入输出语句,通过输出的中 间结果来分析在哪一部分存有问题。借助集成开发环境的程序调试功能,通过设置 断点或单步跟踪运行程序,观测程序执行的流 程和变量值(中间结果)的变化来找到错误。,2.3.4 格式化输入函数scanf,功能 按指定的格式从键盘接受输入数据一般调用格式 scanf(格式控制串, 输入参数1, , 输入参数n); 其中:格式控制串 用双引号括起来,表示输入的格式输入参数 要输入数据的变量的地址(变量名前加&符号),2.3.4 格式化输入函数scanf,格式控制字符串包含的信息输入格式说明 由百分号%和紧跟在其后的格式描述符组成,具体 与对应的输入参数所指变量的数据类型有关:int 型 :%dfloat : %f double 型 :%lf原样输入字符 需要按原样输入的字符。例如: int a,b; scanf(a = %d, b = %d, 输入时键入:a = 100, b = 37,2.3.4 格式化输入函数scanf,double x,y; scanf(%lf%lf, 输入多个数据时,可用空格、回车或制表符作间隔。,改进例2-3的程序,【例2-3】求华氏温度 100F 对应的摄氏温#include int main(void) int celsius, fahr; fahr = 100; celsius = 5 * (fahr - 32) / 9; printf(fahr = %d, celsius = %dn, fahr, celsius); return 0;,scanf(%d, ,printf(Enter fahr: n);,运行结果:Enter fahr:100fahr = 100, celsius = 37,2.3.5 常用数学库函数,库函数C语言处理系统提供事先编好的函数,供用户在编 程时调用,这些函数统称为库函数调用库函数所必需的一些信息在相应的头文件中作 了声明,调用库函数时,必须用 #include 命令将 该库函数对应的头文件包含到源程序中,例如:调用输入/输出函数(如scanf, printf 等) 需要:#include 调用数学处理函数(如fabs, sqrt, pow, exp 等) 需要:#include ,2.3.5 常用数学库函数,常用的数学库函数平方根函数 sqrt(x) 计算绝对值函数 fabs(x) 计算 |x|幂函数 pow(x, n) 计算 xn指数函数 exp(x) 计算 ex以e为底的对数函数 log(x) 计算 ln x以10为底的对数函数 log10(x) 计算 log10x,【例2-5】计算存款的本息,【例2-5】计算存款的本息。输入存款金额 money、存期 year 和年利率 rate,根据下列公式计算存款到期时的本息合计sum(税前),输出时保留 2 位小数。 sum = money ( 1 + rate)year,上述数学计算公式写成C语言表达式为: sum = money * pow(1 + rate), year),例2-5程序,# include # include int main(void) int money, year; double rate, sum; printf(Enter money:); scanf(%d, ,运行结果:Enter money: 1000Enter year: 3Enter rate: 0.025sum = 1076.89,scanf(%d%d%lf, ,2.4 输出华氏摄氏温度转换表,2.4.1 程序解析2.4.2 for语句2.4.3 指定次数的循环程序设计,2.4.1 程序解析,【例2-6】输入2个整数 lower 和 upper,输出一张华氏摄氏温度转换表,华氏温度的取值范围是lower, upper,每次增加1F。 fahr celsius 30 -1.1 31 -0.6 32 0.0 33 0.6 34 1.1 35 1.7,#include int main(void) int fahr, lower, upper; double celsius; printf(Enter lower:); scanf(%d, ,例2-6 程序,Enter lower:30Enter upper:35fahr celsius30 -1.131 -0.632 0.033 0.634 1.135 1.7,例2-6程序中for语句的执行流程,for (fahr = lower; fahr = upper; fahr +) celsius = (5.0 / 9.0) * (fahr - 32); printf(%d %6.1fn, fahr, celsius); ,2.4.2 for语句循环语句,for语句的一般形式 for (表达式1;表达式2;表达式3) 语句(循环体)执行流程如右图所示表达式1:初值表达式 用于对循环控制变量或循环体中的 变量赋初值,可以是逗号表达式表达式2:条件表达式 给出循环的条件,若值为真(即非0),则继续循环; 为假(即0) ,则结束循环,2.4.2 for语句循环语句,表达式3:增量表达式 用于改变循环控制变量的值,从而达到改变表达式 2值的真假,也可用逗号表达式包含一些本来可放 在循环体中执行的其他表达式。三个表达式之间的两个分号 表达式1,表达式2和表达式3都允许缺省,但分号不 可缺少,表达式2缺省表示值为真(即非0),例如: for( ; ; ) .语句(循环体) 只能是一句语句,若要执行多句,可用大括号将这 些语句括起来,使其成为一句复合语句。,2.4.2 for语句循环语句,循环控制变量 for语句中,一般通过改变和判断某个或某些变量的 值来控制循环的执行,这种变量称为循环控制变量。 例如,下面计算整数1到n中奇数之和与偶数之和的程 序段中的变量 i : int i, n, sum_odd, sum_even scanf(%d, ,2.4.2 for语句循环语句,逗号表达式(详见p132) 一般形式为:表达式1, 表达式2, , 表达式n 表示由左到右依次计算各表达式之值,并将表达式n 的值作为逗号表达式的值复合语句 用括号 把若干语句括起来构成的一个语句组,称为 复合语句,一个复合语句在语法上视为单条语句。如: for (fahr = lower; fahr = upper; fahr +) celsius = (5.0 / 9.0) * (fahr - 32); printf(%d %6.1fn, fahr, celsius); ,2.4.2 for语句循环语句,空语句 只有分号 ; 组成的语句称为空语句,空语句在程序执 行时不产生任何动作。 有时需要加一个空语句来表示存在一条语句,但随意 加分号也会导致逻辑或语法上的错误,要小心和慎用。 例如:for ( i = 1, sum = 0 ; i = 100; i+ ) ; sum = sum + i; 又如:if (x != 0) ; y = 1/x; else y = 0;,2.4.3 指定次数的循环程序设计,【例2-7】输入一个正整数n,求1+2+n 之和。 本题实际是对一个数列求n项累加和问题,利用数 列的通项公式是数列求和的方法之一,关键是要确 定通项公式。 设:第 i 项为 ai 则:a1=1,a2=2, a3=3, 可得到: 通项公式:ai = i 求n项的累加和可用以下语句实现: for(sum=0, i=1; i =n; i+) sum=sum+i;,#include int main(void) int i, n, sum; printf(Enter n:); scanf(%d, ,例2-7程序,运行结果:Enter n:100sum = 5050,2.4.3 指定次数的循环程序设计,指定次数的循环程序设计一般包含四个部分:初始化:指定循环起点,给循环变量赋初值,如例中 i = 1;进入循环之前,设置相关变量的初值,如例中sum=0。条件控制:只要循环变量值未超出指定的上限,就继 续循环。如例中 i = 100。工作:指重复执行的语句(循环体)。必须是一条语句, 可以是复合语句或空语句。如例中sum=sum + i。改变循环变量:每次循环中改变循环变量的值。如例 中i+,以改变循环条件的真假,使循环达到指定次数 后结束。,2.4.3 指定次数的循环程序设计,【例2-8】输入一个正整数n,计算1-1/3+1/5-1/7+ 的前n项和之和。 方法一:用通项公式 本题也是个数列求和问题,也可用其通项公式实现。 设:第 i 项为 ai 则:a1=1,a2=-1/3, a3=1/5, 通项公式: ai = (-1)i-1/(2i-1) 求n项的累加和可用以下语句实现: for(sum=0, i=1; i 1 ) 求原数列n项的累加和可用以下语句实现: int den, i, n; double flag, sum; for(sum=0, flag=1, den=1, i=1; i =n; i+) sum=sum+flag/den; den=den+2; flag=-flag; ,#include /* 用通项公式 */#include int main(void) int i, n; double sum; printf(Enter n:); scanf (%d, ,例2-8程序1,运行结果1:Enter n:2sum = 0.666667,运行结果2:Enter n:5sum = 0.834921,#include /* 用递推公式 */int main(void) int den, flag, i, n; double item, sum; printf(Enter n:); scanf (%d, ,例2-8程序2,运行结果1:Enter n:2sum = 0.666667,运行结果2:Enter n:5sum = 0.834921,2.4.3 指定次数的循环程序设计,【例2-9】从键盘输入一个正整数n,求n!。 本题是个累乘的问题,算法上与累加类似,可用下 列语句实现: for (product = i = 1; i = n; i+ ) product = product * i ; 要考虑的是product变量的数据类型。VC+和GUIDE 中,int型变量占用4个字节,数值范围为: -2147483648 +2147483647 而 12! = 479001600 13! = 6227020800,2.4.3 指定次数的循环程序设计,float型变量占用4个字节,数值(绝对值)范围为: 10-38 1038 有效数字 67位 double型变量占用4个字节,数值(绝对值)范围为: 10-308 10308 有效数字 1516位 显然,product变量应定义为double型。 另外,阶乘是整数,输出product应无小数部分: printf ( product = %.0fn, product );,#include int main(void) int i, n; double product; printf(Enter n:); scanf (%d, ,例2-9程序,运行结果:Enter n:14product = 87178291200,2.5 生成乘方表和阶乘表,【例2-10】输入一个正整数 n,生成一张 2 的乘方表,输出20到2n的值,可调用幂函数计算2的乘方。 幂函数pow的原型为: double pow(double x, double y) (功能:计算xy) 可用下列语句实现计算输出20到2n的值: for (i = 0; i = n ; i+) printf(pow(2,%d)= %.0fn, i, pow(2, i);,#include #include int main(void) int i, n; double power; printf(Enter n:); scanf(%d, ,例2-10程序,运行结果:Enter n: 4pow(2,0)= 1pow(2,1)= 2pow(2,2)= 4pow(2,3)= 8pow(2,4)= 16,2.5 生成乘方表和阶乘表,【例2-11】输入一个正整数n,生成一张阶乘表,输出 0! 到 n! 的值。要求定义和调用函数 fact(n) 计算 n!,函数类型为double。 C语言不仅提供了极为丰富的库函数,还允许用户建立自己定义的函数(称为自定义函数)。 本题的关键是如何定义和调用函数 fact() 。,自定义函数初步,1. 函数定义的一般格式: 函数类型
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机电设备安装电气安全防护方案
- 水泥与混凝土配比优化方案
- 水稻贪青课件
- 机电设备安装气动控制系统方案
- 园区创新资源对接方案
- 水电站税务知识培训课件
- 支气管哮喘口腔医10课件
- 水电收费课件
- 2025版海洋工程设计与施工合同样本
- 2025版国际金融合作贷款合同范本(含信用证)
- MissionPlanner地面站操作使用文档
- 中级采气工操作技能鉴定要素细目表
- 油水气井带压井作业操作规程及工艺技术要求
- (33)-钠钾泵细胞生物学
- 配电室巡检记录表
- 紧急宫颈环扎术的手术指征及术后管理
- GB/T 242-2007金属管扩口试验方法
- 政治理论水平任职资格考试题库
- 路基压实度汇总表
- 【食品生产加工技术】香肠的加工技术
- 贫困户访谈记录
评论
0/150
提交评论