chap3分支结构
chap3_分支结构

#include <stdio.h> void main( ) { int choice, i; float price;
用if语句实现的程序
for( i = 1; i <= 5; i++) { printf("[1] Crisps \n"); printf("[2] Popcorn \n"); printf("[3] Chocolate \n"); printf("[4] Cola \n"); printf("[0] Exit \n\n"); printf(“Enter choice: ”); scanf(“%d”, &choice);
P61:习题3-3
输入三条边a,b,c,如能构成一个三角形,输出 面积s donot correspond to a valid triangle”。
• 计算并输出面积、周长的条件:
if( a+b>c && a+c>b && b+c>a)
复杂的语句…
实现分支结构的语句
• if 语句 • switch语句 Chapter 3
实现循环结构的语句
• for循环语句
Chapter 4
• while循环语句
• do-while循环语句
Chap 3
分支结构
内容提要
3.1 输入一批字符,统计各类字符的数量
3.2 使用switch语句统计字符
}
#include <stdio.h> void main( ) { int choice, i; float price; for( i = 1; i <= 5; i++) { printf("[1] Crisps \n"); printf("[2] Popcorn \n"); printf("[3] Chocolate \n"); printf("[4] Cola \n"); printf("[0] Exit \n\n"); printf("Enter choice: "); scanf("%d", &choice); if(choice == 0) break; switch (choice) { case 1: price=3.0; break; 多分支语句 case 2: price=2.5; break; case 3: price=4.0; break; switch case 4: price=3.5; break; default: price=0.0; } printf("price = %0.1f \n", price); } }
chap3-数据结构

• 算法是一个过程,这个过程由一套明确的规则组成, 这些规则指定了一个操作的顺序,以便用有限的步骤 提供特定类型问题的解答。
三.算法的表示
• 自然语言 – 用自然语言描述算法通俗易懂,但它存在着难以克 服的缺陷:
• 易产生歧义性。自然语言往往要根据上下文才能判别其含 义,不太严格。 • 语句比较繁琐冗长,并且很难清楚地表达算法的逻辑流程。 如果算法中包含判断、循环处理,尤其是这些处理的嵌套 层数增多,自然语言描述其流程既不直观又很难表达清楚。 • 当今的计算机尚不能处理用自然语言表示的算法。
f ( x) 0 f1 ( x) f 2 ( x) f 2' ( x) f1' ( x) 1
x3 x 1 0 x 3 x 1 1 1 3 3 ( x 1) 2
常用算法(续)
• 递归法
– 递归是构造计算机算法的一种基本方法。如果一个过程直接或间接地
调用它自身,则称该过程是递归的, 递归过程必须有一个递归终止条 件,即存在“递归出口”。无条件的递归是毫无意义的。 – 递归与递推是既有区别又有联系的两个概念。递推是从已知的初始条 件出发,逐次递推出最后所求的值。递归则是从需求的函数本身出发, 逐次上溯调用其本身求解过程,直到递归的出口,然后再从里向外倒 推回来,得到最终的值。一般说来,一个递推算法总可以转换为一个 递归算法。递归算法往往比非递归算法要付出更多的执行时间,尽管 如此,由于递归算法编程序非常容易,各程序设计语言随计算机速度 提高都设有递归语言机制。此外,用递归过程来描述算法不仅非常自 然,而且证明算法的正确性也比相应的非递归形式容易很多,因此, 递归是算法设计的基本技术。
备
注
在本行内有效 不区分大小写
算术运算符 关系运算符 逻辑运算符 赋值语句 复合语句 输入语句 输出语句 错误显示语句 变量声明语句
Chap3ARM7体系结构

ARM9E是针对微控制器、DSP和Java的单处理器解决方案; ARM Jazelle 技术提供 8倍的 Java 加速性能 (ARM926EJ-S) ; 5-级整数流水线; 在0.13µm工艺下最高性能可达到300MIPS(Dhrystone 2.1测试 标准);
可选择的 向量浮点单元VFP9 协处理器指令优秀海浮点性能, 对于3D图形加速和实时控制可达到 215MFLOPS。 高性能的AHB总线,带MMU 可在0.18µm, 0.15µm, 0.13µm工艺的硅芯片上实现。
哈佛
ARM11
8
335
0.4 (+cache)
1.2
哈佛
Chap3ARM7体系结构
3.1 ARM简介
ARM系列 ARM7
微处理器核
ARM7TDMI:整数处理核ARM7TDMI 处理 器的可综合版本;
ARM720T:带MMU的处理器核心,支持操 作系统;
ARM7EJ-S:带有DSP和Jazelle TM 技术,能 够实现Java加速功能
• ARM处理器的应用
• 当前主要应用于消费类电子领域; • 到目前为止,基于ARM技术的微处理器应用约占据了32位嵌入式微处理
器75%以上的市场份额 • 全球80%的GSM/3G手机、99%的CDMA手机以及绝大多数PDA产品均
采用ARM体系的嵌入式处理器, • “掌上计算”相关的所有领域皆为其所主宰。 • ARM技术正在逐步渗入到我们生活的各个方面。
3.ARM7TDMI的模块和内部框图 11.存储器及存储器映射I/O
4.体系结构直接支持的数据类型
ARM公司简介
ARM是Advanced RISC Machines的缩写 ,它是一家微处理器行业的知名企业,该企 业设计了大量高性能、廉价、耗能低的RISC (精简指令集)处理器。
浙大版C语言电子教案.讲义

计算机程序设计基础(C语言)北京石油化工学院信息技术教学与实验中心2008年8月20日C语言程序设计⏹教学要求☐掌握程序设计语言的基本知识☐常用算法☐初步的程序设计能力⏹学习方法☐自主学习☐重视上机实践如何尽快学会用C语言进行程序设计⏹了解程序设计语言(C语言)⏹模仿、改写、编写⏹通过不断的编程实践,逐步领会和掌握程序设计的基本思想和方法。
教材和参考书⏹C语言程序设计,何钦铭、颜晖主编,高等教育出版社,2008⏹C语言编程(第3版),[美]Stephen, G.Kochan,张小潘译,电子工业出版社,2006⏹C语言教程(第4版),[美]Al Kelley, Ira Pohl,徐波译,机械工业出版社,2007⏹标准C语言基础教程(第4版),[美]Gary J.Bronson,单先余等译,电子工业出版社,2006 ⏹C程序设计语言,[美]Brian W. Kernighan,Dennis M. Ritchie,徐宝文等译,机械工业出版社,2006目录⏹Chap 1 引言⏹Chap 2 用C语言编写程序⏹Chap 3 分支结构⏹Chap4 循环结构⏹Chap 5 函数⏹Chap 6 数据类型和表达式目录⏹Chap 7 数组⏹Chap 8 指针⏹Chap 9 结构⏹Chap 10 函数与程序结构⏹Chap 11 指针进阶⏹Chap 12 文件Chap 1 引言⏹一个C语言程序⏹程序与程序设计语言⏹C语言的发展历史与特点⏹实现问题求解的过程本章要点⏹什么是程序?程序设计语言包含哪些功能?⏹程序设计语言在语法上包含哪些内容?⏹结构化程序设计有哪些基本的控制结构?⏹C语言有哪些特点?⏹C语言程序的基本框架如何?⏹形成一个可运行的C语言程序需要经过哪些步骤?⏹如何用流程图描述简单的算法?1.1 一个C 语言程序例1-1求阶乘问题。
输入一个正整数n ,输出n!。
#include <stdio.h> /* 编译预处理命令 */ int main (void) /* 主函数 */ {int n; /*变量定义 */ int factorial (int n); /* 函数声明 */ scanf ("%d", &n); /* 输入一个整数 */ printf (“%d \n”, factorial(n)); /* 调用函数计算阶乘 */ return 0;}int factorial (int n) /* 定义计算 n! 的函数 */ {int i, fact = 1;for(i = 1; i <= n; i++) /* 循环 */ fact = fact * i;return fact;} 输入 4 输出 24 C 程序由函数组成 有且只有一个主函数main1.2 程序与程序设计语言⏹程序☐人们为解决某种问题用计算机可以识别的代码编排的一系列加工步骤。
数据结构(C语言版CHAP3

S.top
n+1 n n-1 i-1 i-2
0
e an ai ai-1 a1
STA作图示
S.top
S.top n n-1 i-1 i-2 S.base 0
an ai ai-1
n+1 n n-1 i-1 i-2
e an
ai ai-1 a1
STACK_INIT_SIZE
3.1 栈
二 栈的基本操作 1) 初始化操作InitStack((&S) 功能:构造一个空栈S; 2) 销毁栈操作DestroyStack(&S) 功能:销毁一个已存在的栈; 3) 置空栈操作ClearStack(&S) 功能:将栈S置为空栈; 4) 取栈顶元素操作GetTop(S, &e) 功能:取栈顶元素,并用e 返回; 5)进栈操作Push(&S, e) 功能:元素e进栈; 6)退栈操作Pop(&S, &e) 功能:栈顶元素退栈,并用e返回; 7)判空操作StackEmpty(S) 功能:若栈S为空,则返回True,否则返回False; 第 9 页
S.top
n n-1
an
i-1 i-2
1 0
ai ai-1
a2 a1
STACK_INIT_SIZE
S.base
S.stacksize
第 13 页
3.1 栈
当栈用顺序结构存储时, 栈的基本操作如建空栈、 进栈、出栈等操作如何实现?
第 14 页
3.1 栈
二 顺序栈基本操作的算法 1)初始化操作InitStack_Sq((SqStack &S)
a1
STACK_INIT_SIZE
S.base S.stacksize
数据结构chap3 栈和队列

教学内容
3.1 栈的类型定义 3.2 栈类型的实现 3.3 栈的应用 3.4 队列的类型定义 3.5 队列类型的实现
第3章 栈和队列
教学目标
1. 掌握栈和队列的特点,并能在相应的应用问 题中正确选用
2. 熟练掌握栈的两种存储结构的基本操作实现 算法,特别应注意栈满和栈空的条件
3. 熟练掌握循环队列和链队列的基本操作实现 算法,特别注意队满和队空的条件
data next 栈顶
∧ 栈底
链栈的初始化
S
∧
void InitStack(LinkStack &S ) {
S=NULL; }
链栈进栈
p
S
Status Push(LinkStack &S , SElemType e)
{
∧
p= (LinkStack) malloc (sizeof (StackNode));
链栈的表示
运算是受限的单链表,只能在链表头部进行操作,故 没有必要附加头结点。栈顶指针就是链表的头指针
typedef struct StackNode { S SElemType data; struct StackNode *next;
} StackNode, *LinkStack; LinkStack S;
(3)设置栈大小
stacksize top
base
顺序栈初始化
Status InitStack( SqStack &S ) {
S.base = (ElemType*)malloc(STACK_INIT_SIZE*
sizeof(ElemType));
if( !S.base ) exit (OVERFLOW); S.top = S.base; S.stackSize = STACK_INIT_SIZE; return OK; }
chap 3 软件测试技术-白盒测试技术(含其他)

• 3.条件覆盖
• •
在设计程序中,一个判定语句是由多 个条件组合而成的复合判定。 条件覆盖的含义是:构造一组测试用 例,使得每一判定语句中每个逻辑条件 的可能值至少满足一次。
• 4.条件判定组合覆盖
•
条件判定组合覆盖的含义是:设计足够 的测试用例,使得判定中每个条件的所有 可能(真/假)至少出现一次,并且每个判 定本身的判定结果(真/假)也至少出现一 次。
X= X /A
I: A=3, B=0,X=1: sacbd
5 T 6
X=X+1
II: A=2, B=1,X=1: sabed
F 3
d
e
满足判 定覆盖
7
满足判定覆盖的测试用例一定 满足语句覆盖: 满足语句覆盖:判定覆盖比语 句覆盖强。 句覆盖强。但仍是弱的逻辑覆 盖。
边覆盖 Edge Coverage
– 3.2.3 程序插桩
•
在软件动态测试中,程序插桩是一种 基本的测试手段,有着广泛的应用。
• 1.方法简介
•
程序插桩方法是借助往被测程序中插 入操作,来实现测试目的的方法。
• 设计插桩程序时需要考虑的问题包括: • ① 探测哪些信息; • ② 在程序的什么部位设置探测点; • ③ 需要设置多少个探测点。 的含义是:设计足够的测试用例,使得 每个判定中条件的各种可能组合都至少 出现一次。显然满足多条件覆盖的测试 用例是一定满足判定覆盖、条件覆盖和 条件判定组合覆盖的。
• 6.修正条件判定覆盖
•
它要求满足两个条件:首先,每一个 程序模块的入口和出口点都要考虑至少 被调用一次,每个程序的判定到所有可 能的结果值要至少转换一次;其次,程 序的判定被分解为通过逻辑操作符(and、 or)连接的bool条件,每个条件对于判定 的结果值是独立的。
Chap3+程序的流程控制

}
分支结构的测试
• 要说明程序的正确性有二种方法:
1)证明 2)以实例测试
• 测试是在编译、链接没有错误后进行的。
• 测试的目的:
– 找出程序中的逻辑错误(语义错误)(非语法错 误,)。
• 测试数据要进行精心设计,以便提高程序测试 的有效性。
测试
• 测试数据要包括:输入数据和程序执行后的预 期结果数据,以便观察程序是否出错。 • 程序测试是程序开发的重要组成部分,所花费 的代价并不小于程循环控制变量,循环控制变量的值 在每次循环中要改变。
标记值控制的循环
• 执行循环前不能确定循环的次数——不定数循环 (infinite repetition)。 •如
1. sum = 1+2+3+……+n, 使sum不超过32767 。 (n?) 2. 求一组数的平均值(数的个数不确定)
chap3Order structure(1)

生物医学工程学院
24/
C语言程序设计
3.2.5 浮点型数据
浮点型数据是用来表示具有小数点的实数。
float型(单精度浮点型)
编译系统为float型变量分配4个字节。
6 位有效数字。
double型(双精度浮点型)
编译系统为double型变量分配8个字节。
15位有效数字。
long double(长双精度)型
生物医学工程学院 6/
C语言程序设计
3.1 顺序程序设计举例 例2: 计算存款利息。有1000元,想存一年。 有三种方法可选: (1)活期,年利率为r1
(2)一年期定期,年利率为r2
(3)存两次半年定期,年利率为r3
请分别计算出一年后按三种方法所得到的本 息和。
生物医学工程学院 7/
C语言程序设计
生物医学工程学院 26/
C语言程序设计
3.2.7 运算符和表达式 1.基本的算术运算符:
+ :正号运算符(单目运算符)
- :负号运算符(单目运算符)
* :乘法运算符
/ :除法运算符
% :求余运算符
+ :加法运算符
- :减法运算符
生物医学工程学院 27/
C语言程序设计
3.2.7 运算符和表达式
说明:
C99把字符型数据作为整数类型的一种
字符型数据ቤተ መጻሕፍቲ ባይዱ使用上有自己的特点
生物医学工程学院
21/
C语言程序设计
3.2.4 字符型数据 1.字符与字符代码 大多数系统采用ASCII字符集
字母:A ~Z,a ~z 数字:0~9 专门符号:29个:! ” # & ‘ ( ) *等 空格符:空格、水平制表符、换行等 不能显示的字符:空(null)字符(以‘\0’表 示)、警告(以‘\a’表示)、退格(以‘\b’表示 )、回车(以‘\r’表示)等
c语言chap3控制结构

实例
例:#include "stdio.h" void main() { char a,b,c; a = 'B'; b = 'O'; c = 'Y'; putchar(a); putchar(b); putchar(c); }
程序输出:BOY 注:若要输出小写的boy,程序怎样修改? 若没有#include “stdio.h” 会怎样?
c = getchar(); putchar(c); }
OR putchar(getchar());
输出(如在键盘上输入“a”): a↙ a
Chap3 控制结构
3.1.4 格式输入与输出
1. 格式输出函数printf() 作用:按指定的格式输出指定数据 一、 printf()的一般格式 printf("格式控制",输出列表); 例: int i = 3;
int x,y=4;
定义整形变量x、y,并初始化变量y
extern int x,y; int max(int ,int );
说明整形变量x、y是已被定义的全局变量 声明函数max
Chap3 控制结构
3.1.1 C语句概述
2. 控制语句,完成程序流程控制
if( )~else~
选择结构语句
for() ~
常用于需要一个语句但不需要任何操作的情况。
Chap3 控制结构
3.1.1 C语句概述
5.复合语句(语句块)
由大括号{ }括起来的语句序列,在语法上复合语 句被看作一条语句。 例:
{ int x , y; z = x + y; t = z / 100; printf("%f",t);
chap3数据通信PPT资料61页

时钟
NRZ
04.01.2020
11
位同步
Ⅱ. 内同步法 从自含时钟编码的发送数据中提取同步时钟的方 法。
0100 1100 011
时钟
Manchester
差分 Manchester
04.01.2020
12
字符同步
(2) 字符同步 (character synchronous)
04.01.2020
9
同步技术
(1)位同步(bit synchronous) 接收端根据发送端发送数据的时钟频率 与比特流的起始时刻,来校正自己的时钟 频率与接收数据的起始时刻。
Ⅰ. 外同步法 Ⅱ. 内同步法
04.01.2020
10
位同步
Ⅰ. 外同步法 发送端发送一路数据信号的同时,另外 发送一路同步时钟信号。
第3章 数据通信
04.01.2020
1
第 3 章 数据通信
3.1 数据通信的基本概念 3.2 频带传输技术 3.3 基带传输技术 3.4 多路复用技术
04.01.2020
2
3.1 数据通信的概念
1. 信息、数据与信号 (1)信息 通信的目的是交换信息, 信息的载体可以 是数字、文字、语音、图形或图像。 将这些数字、文字、语音、图形或图像放到 计算机中进行处理时,需要将这些信息数字化。 我们早已了解数字、文字、语音、图形或图 像等信息在计算机表示的方式。以这样的思路, 我们可以想象数据通信的内容是什么。
同步字符
1个字符
1个字符
1组字符
图3- 3 同步传输
04.01.2020
14
字符同步
Ⅱ. 异步式 异步通信
chap3C#程序设计基础

布尔类型 : bool(存储真假值的)
字符类型 : char(存储一个字符) 字符串类型 : string(存储字符串)
Your site here
Company Logo
Chap3 C#程序设计基础
变 量
是计算机内存中被命名的数据存储单元,其中存储 的值是可以改变的。在程序中我们通过变量名来引 用存储的信息。实际上就是通过变量名来找到相应 的内存地址,再从中读取数据或存入数据。
Chap3 C#程序设计基础
C#编码书写规范
良好的缩进书写习惯
括号必须成对出现,且括号对对齐的位置
适当的位置使用空格、换行 有意义的单词命名 养成良好的注释习惯 严格区分字母大小写 总之写出实用且美观的代码
Your site here
Company Logo
Chap3 C#程序设计基础
2. C#基本语法 2.1 C#数据类型
Your site here Company Logo
Chap3 C#程序设计基础
if分支语句
3) else块中嵌套if语句的多条件测试 if ( 布尔表达式1 ) { 布尔表达式1为真时执行的语句序列 } else if ( 布尔表达式2) { 布尔表达式2为真时执行的语句序列 } else if ( 布尔表达式3) { 布尔表达式3为真时执行的语句序列 } else { 所有条件均为假时执行的语句序列 }
2.2 变量、常量
2.3 值类型之间的数据转换
2.4 C#运算符、表达式
2.5 C#流程控制语句
Your site here
Company Logo
Chap3 C#程序设计基础
C#常用数据类型
整数类型 : long, int,short, byte, ulong, uint, ushort, sbyte(存储整数) 浮点类型 : float , double(存储小数的) Decimal型: decimal (存储财务,货币中的小数)
chap3数据通信PPT课件

2021/2/10
3
3.1 数据通信的概念
(2) 数据 数字、文字、语音、图形或图像等信息 在计算机表示的方式就是数据。
从计算机到计算机的数据传输实际上就 是传输二进制比特序列。
2021/2/10
4
(2)信号
信号是数据在传输过程中电信号的表示形式; 模拟信号(analog signal)的信号电平是连续变化的; 数字信号(digital signal)是用两种不同的电平去表 示0、1比特序列的电压脉冲信号表示;
调制解调器的作用是: 在数据的发送端将计算机中的数字信号转换 成能在电话线上传输的模拟信号; 在接收端将从电话线路上接收到的模拟信号 还原成数字信号。
2021/2/10
20
调制解调器的基本工作原理
2021/2/10
21
3. 模拟数据编码方法
为了利用模拟语音通信的电话交换网实现计算 机的数字数据信号的传输,必须首先将数字信号 转换成模拟信号。
7
3.数据通信方式
通信双方信息的交互方式: 单向通信、半双工或全双工通信
发送
单向通道
接收
(a)
发送 接收
双向通道
接收 发送
(b)
发送 接收
双向通道
接收 发送
(c)
2021/2/10
8
4. 同步技术
所谓同步,就是要求通信的收发双方 在时间基准上保持一致。
数据通信的同步可分为:位同步、字 符同步。
2021/2/10
Ⅰ. 同步式
同步通信
发送端连续发送一串字符(或数据块),一个 字符紧接在另一个字符之后,字符间没有间隙。
每一个数据块用一个同步字符SYN开始。
2021/2/10
chap3控制网络

比特流
1
ቤተ መጻሕፍቲ ባይዱ
0
0
00
1
0
11
1
1
(a)二进制编码
(b)曼彻斯特编码
(c)差分曼彻斯特编码
图3.25 不同形式的位编码
2019/9/7
信息学院自动化所
27
5、IEEE802.11物理层协议
802.11协议主要工作在ISO协议的最低两层上,并在物理层上进行了 一些改动,加入了高速数字传输的特性和连接的稳定性。 802.11b"High Rate"协议,用来对802.11协议进行补充,在802.11的 1Mbps和2Mbps速率下又增加了5.5Mbps和11Mbps两个新的网络吞吐 速率。 利用802.11b,移动用户能够获得同Ethernet一样的性能、网络吞吐 率、可用性。
2019/9/7
信息学院自动化所
4
3、控制网络的特点
(1) 系统的开放性。 (2) 互可操作性与互用性。 (3) 系统结构的高度分散性。 (4) 对现场环境的适应性。 (5) 一对N结构。 (6) 可控状态。 (7) 互换性。 (8) 综合功能。 (9) 统一组态。
2019/9/7
信息学院自动化所
图3.34 CAN总线仲裁波形示意图
2019/9/7
信息学院自动化所
38
3、ISO11898 MAC子层协议
图3.35 CAN总线仲裁实际波形
2019/9/7
信息学院自动化所
39
4、CC-LINK MAC子层协议
主 节 点
支线长 电源适配器
终端电阻
干线长 (不包括支线长)
T-分支间隔
远程I/O节点 远程I/O节点 远程I/O节点
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
§3分支结构一、引入:1、输入两个时间,每个时间分别输入小时和分钟的值,然后输出两个时间之间的差,也用几小时几分表示。
(提示:转化为分钟,做整数除法和取余运算)int hour1,minute1;int hour2,minute2;scanf(“%d%d”,&hour1,&minute1);scanf(“%d%d”,&hour2,&minute2);int t1=hour1*60+minute1;int t2=hour2*60+minute1;int t=t2-t1;printf(“时间差是%d小时%d分钟”,t/60,t%60);如果不转化为分钟,而用直接减的算法,出现借位怎么办?——条件判断int hour1,minute1;int hour2,minute2;scanf(“%d%d”,&hour1,&minute1);scanf(“%d%d”,&hour2,&minute2);int ih=hour2-hour1;int im=minute2-minute1;if(im<0)//出现了借位的情况{im=60+im;ih--;}printf(“时间差是%d小时%d分钟\n”,ih,im);(dev c++调试,if(im<0)设断点查看运行机制)2、输入两个实数,按由小到大的顺序输出这两个数。
#include <stdio.h>int main(){float a,b,t;scanf("%f,%f",&a,&b);if(a>b){ //将a和b的值互换t=a;a=b;b=t;}printf("%5.2f,%5.2f\n",a,b);return 0;}二、判断的条件——关系运算,计算两个值之间的关系•用关系运算符将两个数值或数值表达式连接起来的式子,称为关系表达式。
•关系表达式的值是一个逻辑值,即“真”或“假”。
•在C的逻辑运算中,以“1”代表“真”,以“0”代表“假”。
六种关系运算符:<(小于)<= (小于等于)> (大于)>= (大于等于)== (等于)!= (不等于)•前4种关系运算符的优先级别相同,判断是否相等的==和!=比其他的低!•关系运算符的优先级低于算术运算符。
•关系运算符的优先级高于赋值运算符。
•连续的关系运算是从左到右进行的!例:printf(“%d\n”,5==3);printf(“%d\n”,5>3);printf(“%d\n”,5<=3);printf(“%d\n”,7>=3+4);int r=a>0;三、if语句的一般形式if (表达式) 语句1[ else 语句2 ]说明:“表达式”可以是关系表达式、逻辑表达式,甚至是数值表达式;方括号内的部分(即else子句)为可选的,既可以有,也可以没有语句1和语句2可以是一个简单的语句,也可以是一个复合语句,还可以是另一个if语句1、形式1 没有else子句部分if(表达式) 语句1;例:完善第一章中的找零计算器,票面不够怎么办?自行画出流程图。
int amout;int price=0,change;printf(“请输入商品金额(元):”);//输入提示scanf(“%d“,&price);printf(“请输入收款票面(元):”);//输入提示scanf(“%d“,&amount);if (amount >=price){change=amount-price;1printf(“找您%d元\n”,change);}2、形式2 有else子句部分if (表达式)语句1 ;else语句2;a、上例中,票面不够怎么办?if (amount >=price){change=amount-price;printf(“找您%d元\n”,change);}else{printf(“你的钱不够!!!”);}b、改正程序:比较两个数的大小printf(“请输入两个整数”);scanf(“%d%d”,&a,&b );int max=0;if (a>b){max=a;}printf(“大的那个是%d\n”,max);c、对比程序,哪个逻辑性更强?max =b; int max=0;if(a>b) if (a>b){max=a; {max=a;} }else{max=b;}d、思考:若if()语句后不加{},其后有多句语句,在执行的时候,执行哪一句?e、思考:若写成if(条件);{语句;},则在条件为真时花括号内的语句还能执行吗?f、补全程序:每周工作标准时间为40小时,每小时工资为22.50元,超过40小时之外的时间按1.5倍工资支付。
现在通过键盘输入工作时间,程序计算应支付的周薪水。
#include <stdio.h>int main(){double rate=22.5;//小时工资常量int standard=40;//定义周标准时间 pay=0;//声明周薪水变量int hours;print(“请输入你的周工作时间”);scanf(“%”,&hours);if (hours>standard){pay= ;}elsepay=hours*rate;printf(“应支付的周工资为%f\n”,pay);return 0;}g、输出三个整数中的最大者,分析if else的配对关系。
int a,b,c;scanf(“%d %d %d”,&a,&b,&c);int max=0;if (a>b){if (a>c){max=a;}else{max=c;}}else{if (b>c){max=b;}else{max=c;}}printf(“The max is %d\n”,max);●一般情况下,else总是和最近的那个if匹配,但是有时候会受{}的影响,结论有不同。
●缩进格式不能暗示else的匹配。
h、如果a的值是7,b的值是6,则程序的输出是?int a=7,b=6;if ( a == 6 )if ( b == 7 )printf("A");elseprintf("B");答案:若程序修改为:2int a=7,b=6;if ( a == 6 ){if ( b == 7 )printf("A");}elseprintf("B");答案:3、形式3else部分又嵌套了多层的if语句(级联)if(表达式1) 语句1;else if(表达式2) 语句2;else if(表达式3) 语句3;else if(表达式m) 语句m;else 语句m+1;例1、分段函数f(x)=-1;(x<0)0;(x=0)2x;(x>0)if (x<0){f=-1;}else if(x==0){f=0;}else{f=2*x;}例2、利用级联if-else自行书写闰年判断的程序int year;int leap=0;//是否为闰年的逻辑变量指示scanf(“%d”,&year);例3、依据考试成绩划分等级,输入一个成绩,若大于90分,输出优秀;大于80分,输出良好;大于70分,输出中等;大于60分,输出及格;小于60分,输出不及格。
int score;scanf(“%d”,&score);if (score <60) if (score>=90) printf(“不及格!”);printf(“优秀”);else if ( ) else if ( )例4、分段函数#include <stdio.h>#include <math.h>int main(){float x,y;scanf(“%f”,&x);if (x>4.6)y=1;else if (fabs(x-4.6)<1e-6)y=0;elsey=-1;printf(“x=%f,y=%f”,x,y);return 0;}注意:1)判断两个实数是否相等的条件是|a-b|<10-62)fabs为求实数的绝对值函数,abs为求整数的绝对值函数,记得加上math.h的头文件。
4、if-else的常见错误:●没有{}●if()后面多了;●==错用为=;例、对于下面的代码:int a=5,b=6;3if ( a=b );printf("%d\n", a);运行的输出是:提示:if只要求()里面表达式的值是零或非零!四、逻辑表达式1、用逻辑运算符将关系表达式或其他逻辑量连接起来的式子就是逻辑表达式。
•“&&”和“‖”是双目运算符,要求有两个运算对象(操作数);“!”是单目运算符,只要有一个运算对象•优先次序:!(非)→&&(与)→‖(或),即“!”为三者中最高的;逻辑运算符中的“&&”和“‖”低于关系运算符,“!”高于算术运算符逻辑运算结果不是0就是1,不可能是其他数值。
而在逻辑表达式中作为参加逻辑运算的运算对象可以是0(“假”)或任何非0的数值(按“真”对待)2、a && b && c,只有a为真(非0)时,才需要判别b的值。
只有当a和b都为真时才需要判别c的值。
3、a ‖ b ‖ c。
只要a为真(非0),就不必判断b和c。
只有a为假,才判别b。
a和b都为假才判别c。
例1、判别用year表示的某一年是否闰年,可以用一个逻辑表达式来表示。
闰年的条件是符合下面二者之一: ①能被4整除,但不能被100整除,如2008。
②能被400整除,如2000。
故判断闰年的条件可以用如下一句语句:if((year % 4 == 0 && year % 100 != 0) ‖ year % 400 ==0)例2、写出输出结果:#include <stdio.h>int main(){int i=1,j=2,k=3;if(i++==1&&(++j==3||k++==3))printf("i=%d,j=%d,k=%d\n",i,j,k);return 0;}若条件改为,if(i++==2&&(++j==3||k++==3)),情况怎样?继续改为if(i++==1&&(++j==2||k++==3))呢?说明:1)a && b && c。