c语言第3章顺序结构程序设计.ppt_第1页
c语言第3章顺序结构程序设计.ppt_第2页
c语言第3章顺序结构程序设计.ppt_第3页
c语言第3章顺序结构程序设计.ppt_第4页
c语言第3章顺序结构程序设计.ppt_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

第 三 章 顺序结构程序设计 1 程序是对数据进行各种操作,其中运算操作是最基本的操作 之一。 在C语言程序中,使用表达式描述各种运算。 表达式是由参与运算的数据和表示运算的符号,按照一定的 规则组成的式子。 描述运算的符号称为运算符,由一个或两个特定符号表示。 引言 2 语言具有丰富的运算符,可分为多种类型,包括: (1)算术运算符 (+ - * / %) (2)关系运算符 ( = | ) (5)赋值运算符 (= += -= *= /= %= 等) (6)条件运算符 (? : ) (7)逗号运算符 (,) 引言 3 (8)指针运算符 (*和) (9)求字节数运算符(sizeof) (10)强制类型转换运算符( (类型) ) (11)分量运算符( -) (12)下标运算符( ) (13)其他 (如函数调用运算符() 引言 4 主要内容 3.1 算术运算和算术表达式 3.2 赋值运算和赋值表达式 3.3 自增自减运算 3.4 优先级和类型转换 3.5 使用数学库函数 3.6 顺序结构程序设计 5 3.1 算术运算和算术表达式 3.1.1 整数算术运算 3.1.2 实数算术运算 3.1.3 混合算术运算 3.1.4 算术表达式 3.1.5 算术表达式的计算规则 6 C语语言中的操作算术术运算符 加法运算+ 减法运算- 乘法运算* 除法运算/ 取模运算(求余数)% 表3-1 算术运算符 注意 加号(+)除了可以表示两个数相加外,还表示正号,例如,+5; 减号(-)除了可以表示两个数相减外,还表示负号,例如-12。 C语言中使用的特殊符号,星号(*)表示乘号, 斜杠(/)表示除号,百分号(%)表示求余数。 另外 7 3.1.1 整数算术运算 如果参与运算的操作数都是整数,运算的结果一定是整数。 例如,3+5,5-7,4*3,6/4,7%4, 3/5, 3%5 %运算符只能用于整数运算。 思考:1+1/2的运算结果是多少? 8, -2, 12, 1, 3, 0, 3 注意 C语言规定 8 3.1.2 实数算术运算 例如,3.4+5.7,5.1-7.3,4.7*3.2,6.5/4.6 思考: 1.0+1.0/2.0的运算结果是多少? C语言规定 如果参与运算的操作数都是实数,运算的结果一定是实数。 9.1, -2.2, 15.04, 1.41 注意实数不能使用运算符%。 9 如果参与运算的操作数一个是整数,另一个是实数, 运算的结果一定是实数。 3.1.3 混合算术运算 例如,3+5.7,5.1-7,4.7*3,6/4.6 C语言规定 8.7 , -1.9 , 12.7 , 1.3 注意混合运算情况下也不能使用运算符%。 10 3.1.4 算术表达式 由参与算术运算的操作数(可以是常量、变量、函数等)、 算术运算符和圆括号组成的符合C语言语法规则的式子。 概念 注意 C语言中的算数表达式书写形式和代数中的算术表达式类似 ,但C语言中的算术表达式必须写成一行的形式。 例如,代数中的 ,在C语言中必须写成3/5的形式。 代数表达式C语语言表达式 举例 是常数, 不可以写成 符号 (x1+x2+x3+x4)/5 b*b-4*a*c (a+b)/(c-d) 3.1415926*r*r a/x+b*y 11 3.1.5 算术表达式的计算规则 如果没有括号,算术表达式按照运算符的优先规则从左到右计算。 如果有括号,括号中的表达式优先级别是最高的,要先计算括号中的表达式。 高级:* / % 低级:+ - 8-13/5+4*8-7+6%3 优先规则 举例1 8-2+32-7+233 举例2 (8-13)/5+4)*8-(7+6%3) 0 7-5 -1 3 24 17 12 3.2 赋值运算和赋值表达式 3.2.1 赋值运算符 3.2.2 赋值运算的类型转换问题 3.2.3 复合的赋值运算符 3.2.4 赋值表达式 C语言将赋值操作作为一种运算。 13 3.2.1 赋值运算符 一般表达形式 其中,表达式可以是常量、变量、函数等。 例如: 赋值运算过程 a=3b=sum/30 先计算赋值运算符(=)右边的表达式的值,然后将计 算结果赋给赋值运算符(=)左边的变量。 例如,sum=3000时,执行b=sum/30, 先计算sum/30的值,结果为100, 然后将100赋值给变量b,结果是变量b的值为100。 赋值运算符= 变量 = 表达式 14 3.2.2 赋值运算的类型转换问题 我们经常会遇到赋值运算符两侧的数据类型不一致的情况, 这时在执行赋值运算时就要进行类型转换。 转换时,以赋值运算符左侧的变量的类型为准进行。 例如:有定义 int a; float x; 执行 a=45.78时,a的取值是45。 执行x=623时,x的取值是623.000000。 类型转换准则 15 C语言允许将形式为: 变量 = 变量 算术运算符 表达式 的表达式简洁地写成: 变量 算术运算符= 表达式 3.2.3 复合的赋值运算符 C语言中的操作复合赋值运算符 加赋值运算+= 减赋值运算-= 乘赋值运算*= 除赋值运算/= 取余赋值运算%= 16 例如: 要求掌握的复合赋值运算符: ,*, a+=1 x-=y+1 a*=b x/=n+1 x%=10 a=a+1 x=x-(y+1) a=a*b x=x/(n+1) x=x%10 以下程序的输出结果是_。 void main() int a=3; printf(“%dn“,(a+=a-=a*a); A)-6 B)12 C)0 D)-12 D 举例 17 3.2.4 赋值表达式 由赋值运算符将一个变量和一个表达式连接起来的式子。 例如: “x5+6*a”是一个赋值表达式 。如果a=10,则C语言规定,表达式 5+6*a的值为65,变量x赋值后的值为65,表达式x5+6*a的值也为65。 例如: x=(y=15) 其中赋值运算符右侧的表达式,可以是算术表达式,也可以是 一个赋值表达式。 赋值运算符按照“自右而左”的结合顺序,因此, x=(y=15)和 x=y=15等价。 赋值表达式 赋值表达式的值 被赋变量的值 注意 18 例1 float a; int b; a=1.2; b=a*3; ? b b=3 例2 a+=3; x*=y+8 ; a=a+3; x=x*(y+8) ; 例3 a=b=5; a=7+(b=8) ; ? a,b a=5 ;b=5 a=15;b=8 自右而左 的结合性 例4 a=10; a+=a*=a ; ? a a=200 例5 y=23; printf(“%d“,x=y); ?x 输出 x=23 23 在一个语句中可以 完成赋值和输出 两种操作功能 19 3.3 自增自减运算 自增、自减 运算符 作用:自增运算符()使单个变量的值增1; 自减运算符()使单个变量的值减1。 i=i+1 i=i-1 格式: 前置:+i , -i (在使用i之前,使i的值加(减)1) 后置:i+ , i- (在使用i之后,使i的值加(减)1) 几点 说明 (1)自增自减运算符只对单个变量进行操作,称为单目运算符或一 元运算符。不能用于常量和表达式。 例如,5+、-(a+b)等都是非法的。 (2)常用于循环语句中使循环控制变量自动加或减1,也用于指针 变量,使指针指向上一个或下一个地址。 (3) 对于+n和n+,单独使用时意义相同,都是使变量n的值加1。 (4)如果用在赋值语句中,意义有所不同。 int n=4,x,y; x=+n; /y=n+;? x,y x=5 / y=4 20 例3.1 #include “stdio.h“ int main( ) int n,x,y; n=4; x=+n; printf(“n=%dtx=%dn“,n,x); n=4; y=n+; printf(“n=%dty=%dn“,n,y); return 0; 运行结果: n=5 x=5 n=5 y=4 自增运算符的前置、后置对比。 21 例3.2 #include “stdio.h“ int main( ) int n,x,y; n=4; x=-n; printf(“n=%dtx=%dn“,n,x); n=4; y=n-; printf(“n=%dty=%dn“,n,y); return 0; 运行结果: n=3 x=3 n=3 y=4 自减运算符的前置与后置对比。 22 #include “stdio.h“ int main( ) int n; n=4; printf(“%dt“,n); printf(“%dt“,+n); printf(“%dnn“,n); n=4; printf(“%dt“,n); printf(“%dt“,n+); printf(“%dnn“,n); n=4; printf(“%dt“,n); printf(“%dt“,-n); printf(“%dnn“,n); n=4; printf(“%dt“,n); printf(“%dt“,n-); printf(“%dnn“,n); return 0; 运行结果: 4 5 5 4 4 5 4 3 3 4 4 3 例3.3 自增自减运算符在输出语句中。 23 3.4 优先级和类型转换 3.4.1 优先级 3.4.2 类型转换 3.4.2.1 自动类型转换 3.4.2.2 强制类型转换 24 3.4.1 优先级 优先级 结合性 如果一个表达式中有多个运算符,那么用来规定运 算先后顺序的规则称为优先级法则。 当表达式中参与运算的多个运算符具有相同优先级 时,用来规定运算的先后顺序。 已经介 绍运算 符的优 先级和 结合性 优优先级级结结合性 算数运算符() +,-,+,- (单单目) *,/,% +,- 由左向右 由右向左 由左向右 由左向右 赋值赋值 运算符= 复合赋值赋值 运算符 由右向左 25 3.4.2类型转换 3.4.2.1自动类型转换 不同类型数据参与运算时,将一种类型的数据转换为 另一种兼容的类型。 double x;, x=45; /x取值为45.0,整型数据45自动转换为double类型数据。 int a; a=123.756; /a取值123,小数部分被截去。 类型转换 类型转换分类 自动转换(隐式转换):转换隐藏在操作中 强制转换(显示转换):使用强制转换运算符 自动转换举例 2+4.5 /整型数据2转换为double类型数2.0, 再与4.5进行加法运算,是自动转 换过程。 先转换、后运算 实型整型: 采取截去小数部分的策略, 而不是四舍五入。 26 转换规则 doublefloat long unsigned intchar,short 高 低 1、纵向向上的箭头表示不同类型的 转换方向(由低类型转化为高类 型),不表示转换所经的步骤。 2、横向向左的箭头表示必须的转换。 自动类型转换规则 说明: 必定的转换 运算对象类型 不同时转换 27 3.4.2.2 强制类型转换 一般形式 (要转换成的数据类型)(被转换的表达式) 注:当被转换的表达式是一个简单表达 式时,外面的一对圆括号可以缺省。 举例 float x,y; x=2.3 ; y=4.5; (int)(x+y) (int)x+y 说明 强制转换得到的是所需类型的中间变量, 原变量或表达式的类型不变。 / 6 (int) / 6.5 (double) 28 #include “stdio.h“ int main( ) int x,y; float ave; x=12 ;y=25 ; ave=(x+y)/2; printf(“ave=%fn“,ave); return 0; 运行结果: ave=18.000000 其中表达式(x+y)/2按 照整数除法的规则进 行,结果截去了小数 部分的值。 例3.4自动转换效果举例。 29 在程序中加入强制类型转换运算符 #include “stdio.h“ int main( ) int x,y; float ave; x=12 ;y=25 ; ave=(float)(x+y)/2; printf(“ave=%fn“,ave); return 0; 运行结果: ave=18.500000 其中表达式(float)(x+y)/2 将(x+y)强制转换为float 类型,再按照混合除法 运算的规则进行,结果 保留了小数部分的值。 例3.5使用强制类型转换示例。 30 思考:以下程序的运行结果。 #include “stdio.h“ int main( ) double sum; sum=1+1/2+1/3+1/4+1/5; printf(“sum=%fn“,sum); return 0; 运行结果: sum=1.000000 31 运用强制类型转换,程序改为: #include “stdio.h“ int main( ) double sum; sum=1+1/(double)2+1/(double)3+1/(double)4+1/(double)5; printf(“sum=%fn“,sum); return 0; 运行结果: sum=2.283333 32 3.5 使用数学库函数 ANCI C规定,所有函数在使用之前都必须被声明。 该函数已编写好并已编译。在链接时,与用户写的 程序连接在一起形成可执行的程序。 库函数 标准C函数按照不同的类别,将声明信息放在不同的头文 件中,例如: 标准输入输出函数printf( )、scanf( )等,其声明信息放 在头文件“stdio.h”中,需要时使用如下文件包含命令: #include “stdio.h“ 用来完成一些常用数学计算的标准数学函数,如sqrt()、 sin()等,其声明信息放在头文件“math.h”中,需要时使 用如下文件包含命令: #include “math.h“ 33 调用函数通常是按如下顺序书写的: 函数名(参数或用逗号分隔的参数列表) 例如, 计算x的平方根:sqrt(x), 计算ex的函数:exp(x), 计算xy的函数:pow(x,y), 计算|x|的函数:fabs(x), 计算弧度值x的三角函数:sin(x)、cos(x)、tan(x)等 34 举例 数学表达式C语语言表达式 注意 1、使用数学表达式时一定要符合C语言表达式的书写规范。 2、数学库函数中没有提供余切函数,可以利用正弦函数和余弦函数 进行计算。假设要计算的角度x是以角度为单位的,还需要将它转换 为弧度。x的余切计算公式: sin(x*3.14/180)/cos(x*3.14/180) 或者利用正切函数 1/tan(x*3.14/180) (x+2)*exp(2*x) (-b+sqrt(b*b-4*a*c)/(2*a) money * pow(1 + rate), year) 35 3.6 顺序结构程序设计 3.6.1 C语句概述 3.6.2 简单语句 3.6.3 顺序结构程序设计 36 C语句 控制语句 函数调用 语句 由一次函数调用加 一个分号构成一个 语句。 表达式语句 空语句 ? 1、出现在函数体的 执行部分。 2、作用是向计算机 系统发出操作指令。 复合语句 if () else for () while () do while() continue break switch goto return if (xy) z=x; else z=y; printf(“Hello!”); 由表达式加一个分 号构成一个语句。 a=3; ; 由 将一些语句 括起来。 t=a; a=b; b=t; ? 3.6.1 C语句概述 简单语句 37 3.6.2 简单语句 简单语句主要包括表达式语句、函数调用语句等。 表达式语句表达式; 例如, n+; x1 = (-b+sqrt(b*b-4*a*c)/(2*a); x2 = (-b-sqrt(b*b-4*a*c)/(2*a); z = x+a%3*(int)(x+y)%2/4; w = (float)(a+b)/2+(int)x%(int)y; p = money * pow(1 + rate), year); 38 函数调用语句 函数调用; 例如, printf(“Hello!“); printf(“sum=%fn“,sum); scanf(“%d%d“, putchar(ch1); 两者结合构成的赋值语句 ch1=getchar( ); 39 3.6.3 顺序结构程序设计 通常程序编写的步骤是: 1. 分析实际问题 2. 写出算法、画出流程图 3. 根据流程图写出相应的C语句程序 变量声明 输入已知变量值 计算或处理操作 输出结果 在顺序结构程序中,各语句(或命令)是按照位置 的先后次序,顺序执行的,且每条语句都会被执行到。 40 编写程序,实现两个变量值的交换功能。例3.1 借助于第三变 量 #include “stdio.h“ int main( ) float a,b,t; printf(“请输入a,b的初始值 :“); scanf(“%f%f“, printf(“交换之前a,b的值n“); printf(“a=%ftb=%fn“,a,b); t=a; a=b; b=t; printf(“交换之后a,b的值n“); printf(“a=%ftb=%fn“,a,b); return 0; 运行情况: 请输入a,b的初始值:10 25 交换之前a,b的值 a=10.000000 b=25.000000 交换之后a,b的值 a=25.000000 b=10.000000 41 编写程序,实现从键盘输入三角形的三边长, 求三角形面积的功能。 例3.2 #include “stdio.h“ #include “math.h“ int main( ) double a,b,c,s,area; printf(“请输入三角形的三边长值:“); scanf(“%lf%lf%lf“, printf(“输入的三角形三边长值“); printf(“a=%.2f b=%.2f c=%.2fn“, a, b, c); s=(a+b+c)/2.0; area=sqrt(s*(s-a)*(s-b)*(s-c); printf(“三角形面积值n“); printf(“area=%.2fn“, area); return 0; 请输入三角形的三边长值:3 4 5 输入的三角形三边长值a=3.00

温馨提示

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

最新文档

评论

0/150

提交评论