第5章_程序设计

合集下载

C语言 第五章-循环结构程序设计

C语言 第五章-循环结构程序设计

执行过程如图所示。其中i为外循环的控制变 量,j为内循环的控制变量。
i =0 当 i <=10
j=0 当 j<=10
printf(“%d ”, i*j ) j++ i++
例4 编程打印“九九乘法表”。
分析:九九乘法表 1×1=1 1×2=2 1×3=3 … 2×1=2 2×2=4 2×3=6 … 3×1=3 3×2=6 3×3=9 … …… 9×1=9 9×2=18 9×3=27 …
i ++ ; } while ( i <= 100 ) ; printf ( " %d " , sum ) ; }
结果相同
同样是下列程序,但如果while后面的表达式结果一开始就是 假时,两种循环结果会不一样。
main ( ) /*程序1*/
{ int i , sum = 0 ; i = 101 ;
所以程序需要设计成二重循环。由于题目只 要求找到一组解,所以在循环过程中只要找到一组 满足条件的x, y, z就可以跳出循环。
跳出循环的方法可以采用break语句,但是, 因为是二重循环,所以要考虑使用break是否方便。
程序 百钱买百鸡问题。 void main ( ) { int x , y , z ;
打印第2行 ( i = 2 ) for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/
…… 打印第9行 ( i = 9 )
for (j=1;j<=9;j++) printf(“%5d”,i*j) ; printf ( “ \n ” ) ; /*换行打印*/

大学计算机基础第5章

大学计算机基础第5章

时期 阶段
任务
文档
需求分析 系统的目标及应完成的工作 需求规格说明书
开发
总体设计 软件设计
详细设计 软件编码 编写程序代码
总体设计说明书 详细设计说明书 程序、数据注释
黑盒测试、白盒测试、单元 测试后的软件、
软件测试 测试、集成测试、确认测试、大纲、方案与结
系统测试

运行 软件维护 运行和维护
维护后的软件
1)软件生命周期模型:是描述软件开发过程 中各种活动如何执行的模型。 2)常见的软件生命周期模型有:瀑布模型、 增量模型、螺旋模型、喷泉模型、变换模型及 基于知识的模型等。
上图是软件生存周期的瀑布模型。
5、软件工具与软件开发环境
软件工具:就是帮助开发软件的软件。 软件开发环境(或称软件工程环境):是全面支 持软件开发全过程的软件工具的集合,这些软 件工具按照一定的方法和模式组合起来,共同 支持软件生命周期内的各个阶段和各项任务的 完成。
结构化方法的软件开发过程
软件计划后 结构化分析
结构化设计
编码并测试 结构化程序设计
面向对象方法的软件开发过程
软件计划后 面向对象分析
面向对象设计
软件测试 面向对象编程
1、结构化分析方法
1)结构化分析(简称SA)方法是面向数据流 进行需求分析的方法。该方法使用简单易读 的符号,运用抽象的概念模型,根据软件内 部数据传递、变换的关系,自顶向下逐层分 解,描绘出满足功能要求的软件模型
DFD图的数据流可分为两种类型:变换流和事务流 变换流:信息沿着输入通路进入系统,同时将信息的外
部形式转换成内部形式,通过变换中心处理之 后,再沿着输出通路转换成外部形式输出 事务流:信息沿着输入通路到达一个事务中心,事务中 心根据输入信息的类型在若干个动作序列中选 择一个来执行,这种信息流称为事务流

高树芳C语言程序设计--第五章

高树芳C语言程序设计--第五章

VC程序代码
21
5.4
for循环结构
相关知识:
求解表达式1
1.for语句 见执行过程图。 2. for语句的说明 三个表达式均可省略, 但两个分号不可省略。
假 计算表达式2 真 循环体语句
求解表达式3
for语句的后续语句
22
5.2
while(当型)循环结构
[课堂训练5-4] 用for循环编程实现倒计时效果。即在屏幕上 固定位置显示10,然后清除之,再显示9,之后 是8……,至到1。
是成绩非-1等。
10
5.2
while(当型)循环结构
相关知识:
1.while语句的一般形式 2.while语句的说明 3.循环结构的构造方法 4.if语句与循环语句的区别
11
5.2
while(当型)循环结构
[课堂训练5-2] 计算s=1+1/2+1/3+1/4+„„+1/n,直到s大于或等 于3为止,输出n的值。 提示: 这是“标志”型循环。设置实型变量s并设初值为 0.0,设置整型变量i并设初值为1,循环条件是 s<=3,重复内容是s=s+1.0/i,注意要使用1.0实型 常量,或者将1或i作强制类型转换,将其转换为 实数,否则运算结果为0。
20
5.4 for循环结构 案例5-6 跳动的“O”
[案例任务]
编程实现字符“O”从屏幕的左端移动到右端。每一 秒种移动一下,形成跳动的效果。运算结果大致如 下。
[解决方案]首先显示一个O,延时片刻,然后光标
后退(用转义字符),再显示一个空格和一个O。循 环以上功能直到光标到屏幕最右端。
WIN-TC程序代码
[解决方案]该循环至少执行1次,使用do„while

第5章 汇编语言程序

第5章 汇编语言程序

Y
条件满足?
N
处理段
例5-5 设内部RAM30H,31H单元存放两个无符号数, 将大数存在31H,小数存于30H。 ORG 1000H START:CLR C MOV A,30H SUBB A,31H JC NEXT ;次序符合,返回 MOV A,30H ;交换 XCH A,31H MOV 30H,A NEXT: NOP SJMP $ END
$
5-3 分支程序
由条件转移指令构成程序判断框,形成程序分支结构。 5-3-1 单重分支程序 一个判断决策框,程序有两条出路。 两种分支结构: 例1 求R2中补码绝对值,正数不变, 影响条件 负数变补。
MOV A,R2 JNB ACC.7,NEXT;为正数? CPL A ;负数变补 INC A MOV R2,A NEXT:SJMP NEXT ;结束
五、对源程序进行交叉汇编得到机器代码; 反汇编 —— 分析现成产品的程序,要将二进制 的机器代码语言程序翻译成汇编语言源程序。
六、程序调试。
通过微计算机的串行口(或并行口)把机器代 码传送到用户样机(或在线仿真器)进行程序 的调试和运行。
5.1.3评价程序质量的标准
(1)程序的执行时间。 (2)程序所占用的内存字节数。 (3)程序的逻辑性、可读性。 (4)程序的兼容性、可扩展性。 (5)程序的可靠性。
方法二:采用除10H取余数将BCD拆开 ORG 1000H MOV A,20H; 2B 1T MOV B,#10H ; 3B 2T DIV AB ; 1B 4T ORL B,#30H ; 3B 2T MOV 22H,B ; 3B 2T ORL A,#30H; 2B 1T MOV 21H,A ; 2B 1T SJMP $ END;7条指令、16个内存字节、13个机器周期。

[工学]《C语言程序设计》第5章___数组、字符串、指针

[工学]《C语言程序设计》第5章___数组、字符串、指针

5.2.2 一维数组的初始化
1、数组声明时初始化 在编译阶段进行的。这样将减少运行时间, 提高效率。 数组初始化的一般形式为: 类型符 数组名[常量表达式]={值,值…值}; 例如: int a[10]={ 0,1,2,3,4,5,6,7,8,9 }; 相当于a[0]=0; a[1]=1;... a[9]=9;

a[9]
#include <stdio.h> 声明有10个元素 void main() 的一维数组a {int n,i; float s=0, ave, a[10]; a[0] a[1] … a[9] for(i=0;i<10;i++) a[i] { scanf("%f",&a[i]); a[i] s=s+a[i]; } ave=s/10; for(i=0;i<10;i++) a[i] a[i] if (a[i]>ave) printf("%f ",a[i]); }
说明: ① int a[10]={0,1,2,3,4};
给前5个元素赋 值,其余赋0值 不能给数组整体 赋值,改成{1} 静态存储类型, 初值为0 可以省略数组元 素个数。 初值的个数不能 超过元素个数
② int a[10]=1;
③ static int a[3]; ④ int a[ ]={1,2,3,4,5}; ⑤ int a[5]={1,2,3,4,5,1 };
代码: for(i=0; i<N-1; i<5; i++) { p=i; for(j=i+1; i<N; j<6; j++) if(a[j]<a[p]) p=j; t=a[i]; a[i]=a[p]; a[p]=t; } 5-5.c

C语言程序设计-第5章全解

C语言程序设计-第5章全解
2018/10/21 华中科技大学计算机学院C语言课程组 22
函数返回的值,程序可以使用它, 也可以不使用它
while(…) { getchar(); c=getchar(); … } /* 返回值不被使用 */ /* 返回值被使用 */
2018/10/21 华中科技大学计算机学院C语言课程组 18
5.2.1
函数的定义
函数定义的一般形式为: 类型名 函数名(参数列表) { 声明部分 语句部分 }
2018/10/21 华中科技大学计算机学院C语言课程组 19


类型名说明函数返回值(即出口参数)的数据类型 (简称为函数的类型或函数值的类型),可以是除 数组以外的任何类型。当返回值类型为void,函数 将不返回任何值。 参数列表说明函数入口参数的名称、类型和个数, 它是一个用逗号分隔的变量名及其类型列表,它描 述了在调用函数时函数所接收的参数。一个函数可 能没有参数,在没有参数的情况下,参数列表说明 为void,否则必须明确地列出每一个参数的类型。
16

图5.1 C语言程序的基本结构
2018/10/21
华中科技大学计算机学院C语言课程组
17
5.2

函数的定义与函数的声明
程序中若要使用自定义函数实现所需的功能, 需要做三件事: ① 按语法规则编写完成指定任务的函数,即 定义函数; ② 有些情况下在调用函数之前要进行函数声 明; ③ 在需要使用函数时调用函数
2018/10/21
华中科技大学计算机学院C语言课程组
9



在函数的顶端用“/*……*/”格式包含的部分是函 数头部注释,包括函数名称、函数功能、函数参数、 函数返回值等内容,如有必要还可增加作者、创建 日期、修改记录(备注)等相关项目。虽然函数头 部注释在语法上不是必需的,但可以提高程序的质 量和可维护性,在程序设计时要遵从这一编程规范。 GetNum是函数名,其后的void说明函数调用时不 接收任何参数,即没有入口参数,函数执行完应该 返回所产生的随机数,即该随机数是函数的出口参 数,函数名前的int说明出口参数的类型为整型。 函数体内的rand是接口stdlib.h中的一个函数,它 返回一个非负并且不大于常量RAND_MAX的随机整 数,RAND_MAX的值取决于计算机系统。 MAX_NUMBER是用#define定义的符号常量,其 值为1000。当执行return语句时,其后表达式的值 被带回到调用函数中。

第五章_汇编语言程序设计基础

第五章_汇编语言程序设计基础
3
§5-1 汇编语言的基本概念
汇编 语言 源程 序 汇编 程序 A ss em bl er 机器 语言 目标 程序
汇编语言指令与机器指令之间有一一对应的关系,所以汇 编语言与具体的机器密切相关,是一种面向机器的语言。 不同机器(CPU)的汇编语言不同。 为方便编程,实际的汇编程序常还提供一些除机器指令以 外的命令,被称为伪指令。伪指令(Pseudo Instruction) 仅在汇编过程中指导汇编程序如何生成目的代码,自己本 身并没有对应的机器代码。 汇编语言的指令(语句)包含两类:硬指令或真指令(指 令语句)和伪指令(指示性语句) 。
12
§5-2 汇编语言的基本语言成分
6. 综合运算符(改变属性运算符):由已存在的存储器操作数 (变量/标号)生成一个段地址和位移量相同、类型不同的新 的存储器操作数(变量/标号)。 (1) 改变变量/标号的类型: 格式: 新类型 PTR 变量/标号 功能:把PTR左边的属性赋给右边的变量/标号 [例] 设变量XVAR是字节属性,现把它的两个字节内容送 到AX中起去。 MOV AX , WORD PTR XVAR (2) 定义当前存储单元的类型: 格式: THIS 类型 功能:可用于建立新类型的存储器变量,但不分配新的存 储空间,它的段地址和位移量是汇编时的当前值。 [例] WBUFFER EQU THIS WORD BUFFER DB 100 DUP(?)
17
§5-3 汇编语言源程序的结构
(3) 段的类别属性:通常使用的类别名是‘CODE’、 ‘DATA’、‘STACK’,分别指明是代码段、数据段、 堆栈段;但也允许用户自定义类别名。类别名必须用单引 号括起来。 连接程序在组织段时,将所有同类别的段集中在一起, 进行相邻分配。 2. 段寄存器说明伪指令(ASSUME): 格式: ASSUME 段寄存器:段名 [,段寄存器:段名] 功能:告诉汇编程序,段名所指的段由那一个段寄存器寻 址,即建立段与段寄存器的关系。 说明:段寄存器的实际值(CS除外)还要由数据传送令在 执行程序时赋值。

C语言课件 第5章

C语言课件 第5章
如果x<y, max=y, min=x ③ 输出最大值max、 最小值min
第5章 选择结构程序设计
/*程序 5 - 3, 求两个数的最大值、 最小值*/ main( ) { float x, y; float max, min; printf(″请输入两个数x, y: ″); scanf(″%f, %f″, &x, &y); if (x>y) {max=x; min=y; } else {max=y; min=x; } printf(″max=%6.2f, min=%6.2f\n″, max, min); } 输入数据: 1.2, 2.54 运行结果: max= 2.54, min= 1.20
第5章 选择结构程序设计
5.1.3 多分支if语句
多分支if语句不是一条具体的语句,它通过if语句的嵌套实
现。其一般形式为: if (条件表达式1)
if (条件表达式2) 语句1
else 语句2 else if (条件表达式3) 语句3 else 语句4
第5章 选择结构程序设计
T T
条件表达式1 条件表达式2
}
第5章 选择结构程序设计
例 5 — 7 将例 5 — 5 用switch语句实现。
switch ((int)(cj/10)) { 10: 9: ch=′A′; break; /*注意选择表达式的构造*/
8: ch=′B′; break;
7: ch=′C′; break; 6: ch=′D′; break;
第5章 选择结构程序设计
例 5 –3 输入两个数, 求两个数的最大值、最小值。 数据分析:
输入量: 两个数x、 y, float

第5章 面向对象的程序设计

第5章 面向对象的程序设计

5.2.6 修饰符2-1
包中类B 本类D 包中子 类E 所有子类C 所有类A
public protected
类、变量、方法 A B+C 变量、方法
default 类、变量、方法 B private D 变量、方法 private protected 变量、方法 C
14
5.2.6 修饰符2-2
用来说明类、方法或变量的类型。
5.5.1 接口的定义
说明:
[修饰符] interface 接口名称{
[public] [static] [final] 变量名=初值; // 静态常量 (1)通常接口的名字以able或ible结尾;
[public] [abstract] [native]返回值 方法名([参数 (2)可以使用 extends 来继承接口的常量和抽象方法,
12
5.2.5 构造方法
• • • • 构造函数名称与类名称相同 构造函数没有返回类型 其任务是在创建对象时初始化其内部状态 若无定义系统默认有一个无参构造方法
class Fruit { boolean seedLess; boolean seasonal; float price; Fruit(boolean seed, boolean season, float p) { seedLess = seed; seasonal = season; price = p; } } 13
所以类在实现时,必须显示的使用public修饰符,否
则被警告缩小了接口中定义的方法的访问控制范围。
27
实例:接口的定义和实现
class InterfaceTest interface A { { public static void main(String args[ ]) double g=9.8; { void show( ); B b=new B( ); b.show( ); } } class B implements A } { public void show( ) {System.out.println(“g=“+g);} }

C++程序设计第五章

C++程序设计第五章

第五章特殊函数和成员5.1对象成员的初始化如果初始初始化列表某项的参数函数表为空,则列表相应的项可以省略对象成员构造函数的调用顺序取决于这些对象成员在类中的说明顺序。

析构函数的调用顺序与构造函数正好相反。

5.2静态成员简单成员函数是指声明函数不含const、volatile、static关键字的函数。

如果类的数据成员或成员函数使用关键字static进行修饰,这样的成员称为静态成员或静态成员函数,统称为静态成员。

静态数据成员能说明一次,如果在类中仅对静态数据成员进行声明,则必须在文件作用域的某个地方进行定义。

在进行初始化时,必须进行成员名限定。

除静态成员的初始化之外,静态成员遵循类的其他成员函数所遵循的访问限制,由于数据隐蔽的需要,静态数据成员通常被说明为私有的,通过成员限定访问静态成员,比使用对象名访问静态成员要好,因为静态成员是类的成员而不是对象的成员。

类中的任何成员都可以访问静态成员。

因为静态成员函数没有this指针,所以静态成员函数只能通过对象名(或指向对象的指针)访问该对象的非静态成员。

(1)可以不指向某个具体的对象,只与类名连用。

(2)在没有建立对象之前,静态成员就已经存在。

(3)静态成员为类的成员,不是对象的成员。

(4)静态成员为该类的所有对象共享,它们被存储于一个公用内存中。

(5)没有this指针,所有除非显式地吧指针传给它们,否则不能存取类的数据成员。

(6)静态成员函数不能被说明为虚函数。

(7)静态成员函数不能直接访问非静态函数。

关键字static声明的类的对象,但要注意它的构造函数与析构函数的调用特点。

5.3友员函数友员函数可以存取私有成员、公有成员和保护成员。

1.类本身的友元函数2.将成员函数做有元3.将一个类说明为另一个类的友元友元关系是不传递的即当说明类A是类B的友元,类B又是类C的友元时,5.4 const对象可以再使用const关键字定义数据成员和成员函数和修饰一个对象。

大一C语言教材《C语言程序设计》第5章 循环程序设计

大一C语言教材《C语言程序设计》第5章 循环程序设计


复合赋值运算符
种类:+= -= *= /= %= 《= 》= &= 含义: 变量 op= 表达式 变量 = 变量

^= |= op 表达式
x%=3 x*=y+8 a+=3
x=x%3 x=x*(y+8) a=a+3
运算符和表达式

说明:

结合方向:自右向左 左侧必须是变量,不能是常量或表达式
例 int i; 例 3=x-2*y; i=2.56; //结果 i=2; a+b=3;

赋值转换规则:使赋值号右边表达式值自动 转换成其左边变量的类型
赋值表达式的值与变量值相等,且可嵌套g a=b=c=5 a=(b=5) a=5+(c=6) a=(b=4)+(c=6) a=(b=10)/(c=2) //表达式值为5,a,b,c值为5 // b=5;a=5 //表达式值11,c=6,a=11 //表达式值10,a=10,b=4,c=6 //表达式值5,a=5,b=10,c=2
例 -i++ i=3;
-(i++) printf(“%d”,-i++);
//-3
无论是作为前缀还是作为后缀运算符,对于变量本身来 说自增1或自减1都具有相同的效果,但作为表达式来说却有 着不同的值。

j=3; k=++j; j=3; k=j++; j=3; printf(“%d”,++j); j=3; printf(“%d”,j++); a=3;b=5;c=(++a)*b; a=3;b=5;c=(a++)*b;

第5章 循环结构程序设计-答案

第5章 循环结构程序设计-答案
程序运行后的输出结果是(C)。
A)1,1B)2,2C)3,3D)4,4
15.以下程序中,printf语句的执行次数是( B )。
main()
{
int i,j;
for (i=1; i<=5;i++)
for (j=1;j<=10;j++)
printf("%d \n",i+j);
}
A、15B、50C、死循环D、0
{
for(j=2,j<=i-1;j++)
if(i%j==0) break;//利用求余运算符%,只要满足i%j==0)就退出循环
if(j==i)/i是否素数的判定条件
printf("%d\n",i);
}
}
4.编程序输出9*9乘法口诀表。
程序如下:
#include <stdio.h>
void main()
二、程序设计
1用while语句求1+2+3+…+99+100的和。
程序如下:
#include <stdio.h>
voidmain()
{
int i=1,s=0;//循环首部,循环初始条件
while(i<=100)//循环首部,包含循环条件
{
s=s+i;/*循环体,复合语句*/
i++;//改变循环控制变量
程序如下:
#include <stdio.h>
void main()
{
int iNum=0,iLet=0;
char ch;
printf("input a string:\n");

C54x第五章 程序设计

C54x第五章 程序设计

第五章程序设计本章讲C语言混合编程的一些知识。

程序的控制和转移※堆栈的使用基本运算—加法、减法、乘法数据块传送双操作数乘法长字运算除法运算浮点运算汇编与C的混合编程基本程序控制指令√条件操作循环操作比较操作基本程序控制指令主要分为:分支转移指令,子程序调用指令和子程序返回指令.分支转移指令执行周期B next4BACC src6BC next,cnd5/3(满足5,否则3)子程序调用指令执行周期CALL sub4CALA src6CC sub,cnd5/3(满足5、否则3)执行周期RET5RETE6RC cnd5/3(满足5,否则3)分分支转移指令只是通过改变PC来改变程序运行流向,无堆栈操作.子程序调用指令是首先将返回地址压入堆栈,再执行子程序,在子程序的最后执行返回指令,将返回地址出栈并加载pc,同时复原堆栈指针。

程序控制与转移基本程序控制指令条件操作√循环操作比较操作条条件分支指令或条件调用指令、条件返回指令都属于条件操作。

条件算符分为两组,每组又分为几类。

第二组A类B类A类B类C类EQ OV TC C BIO NEQ NOV NTC NC NBIO LTLEQGTGEQ第一组:组内可以对同一累加器的两类条件可以进行“与”逻辑运算。

第二组:可以对三类条件同一性质的条件进行组合,如都是位有效,或都是位无效。

只有BIO是反逻辑,其它都是1有效,0无效。

条件分支种类很多,例如:RC TC;条件返回,表示若TC=1,则子程序返回,否则继续执行。

CC sub,BNEQ ;条件调用,表示若累加器B不等于0,则调用sub子程序。

BC new,AGT,AOV ;与关系的条件分支操作,如果A›0且A溢出,则跳转到new行语句,否则顺序执行。

BC new,AGTBC new,AOV ;或关系的逻辑分支操作。

基本程序控制指令条件操作循环操作√比较操作--BANZ√由BANZ 构成的循环单指令重复块重复操作循环的嵌套--BANZBANZ指令格式:BANZ[D] pmad, Sind ;表示辅助寄存器Sind不为0就跳转到pmad行语句,否则顺序执行下面语句。

《C语言程序设计》课件 《C语言程序设计》课件 第5章-循环结构程序设计

《C语言程序设计》课件 《C语言程序设计》课件 第5章-循环结构程序设计

Page 28
参考代码
#include<stdio.h> void main() {
char ch; int char_num=0,int_num=0,other_num=0; while((ch=getchar())!=‘\n’) //回车键结束输入 {
if(ch>='A'&&ch<='Z'||ch>='a'&&ch<='z') char_num++;
printf("************\n ");
printf("************\n ");
printf("************\n ");
printf("************\n "); printf("************\n "); 等价 for(int i=1;i<=8;i++)
{ s=s+i;
i++; //表达式3移至循环体末尾
}
printf("s=%d",s);
}
<<C语言程序设计>>
Page 19
随堂练习
例 编程计算n的阶乘。
n!=1 2 3 ……〔n-1〕 n
思路:
类似于累加求和,每一次循环乘上一个数字,求和 将和初始化为0,这里应把积初始化为?
<<C语言程序设计>>
#include "stdio.h" void main( ) { int i,sum=0;

第五章-循环结构程序设计编程题(参考答案)

第五章-循环结构程序设计编程题(参考答案)

第五章循环结构程序设计1.用for循环语句编程输出1~20之间的所有整数,两数之间以空格分隔。

#include<stdio.h>void main(){int i;for(i=1;i<=20;i++)printf("%d ",i);printf("\n");}2.用for循环语句编程输出20~1之间的所有整数,两数之间以空格分隔。

#include<stdio.h>void main(){int i;for(i=20;i>=1;i--)printf("%d ",i);printf("\n");}3.用for循环语句编程输出A~Z之间的所有字符,两字母之间以空格分隔,要求一行输出8个字符。

#include<stdio.h>void main(){char c;for(c='A';c<='A'+25;c++){putchar(c);}}4.输出100~200之间所有能被3和7整除的数(每行输出4个数)。

#include<stdio.h>void main(){int i,j=0;for(i=100;i<=200;i++){if(i%21==0){ j++;printf("%12d",i);if(j%4==0) printf("\n");}}}5.输出1至1000之间所有满足用3除余2、用5除余3、用7除余2的数(要求每行只输出5个数)。

#include<stdio.h>void main(){for(i=1;i<=1000;i++){if((i%3==2)&&(i%5==3)&&(i%7==2)){ j++;printf("%12d",i);if(j%5==0) printf("\n");}}}6.先读入一个正整数n,然后计算并显示前n个偶数的和。

第05章 C程序设计

第05章 C程序设计

(1)反复执行 x%10 12345 %10 = 5 x=x/10 (2)何时结束 --->=0? 如何 12345 x= 4
scanf( “%d”, &x) ; (1) x>0 ) while ( 12345%100/10 { printf( “%d ” , x%10) ; (2) 12345/10%10 x=x/10 ; }
{ int x, sum=0;
do { scanf(“%d”, &x); sum+ = x ; } while (x>0) printf(“sum=%d”, sum); sum-x); }
while (x>0) { 1 输入一个数 sum+ = x ; 2scanf(“%d”, &x); 求和 } •重复直到0 printf(“sum=%d”, sum);
5.循环嵌套 (1)循环语句的循环体内,又包含另一个完整的循 环结构,称为循环的嵌套。循环嵌套的概念,对所有高 级语言都是一样的。 (2)for语句和while语句允许嵌套,do-while语句也 不例外。
[Return]
5.3 直到型循环do-while语句
1.一般格式 do { 循环体语句组; } while(循环继续条件); /*本行的分号不能缺省*/ 当循环体语句组仅由一条语句构成时,可以不使用复合语句形式。
程序运行情况如下: sum=5050
[案例5.2] 求n的阶乘n!(n!=1*2*……*n)。 /*案例代码文件名:AL5_2.C*/ /*程序功能:求n!*/ main() { int i, n; long fact=1; /*将累乘器fact初始化为1*/ printf(“Input n: ”); scanf(“%d”, &n); for(i=1; i<=n; i++) fact *= i;
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第5章
循环与分支程序设计
(1) h=(key & 0xFF00)>>8;
MOV AX,KEY AND AX,0FF00H MOV CL,8 SHR AX,CL ;SAR AX,CL MOV H,AX
第5章
循环与分支程序设计
(2) k=(k+’1’-0xabcd)/56;
MOV AX,K ADD AX,’1’ SUB AX,0ABCDH CWD MOV BX,56 IDIV BX MOV K,AX
第5章
循环与分支程序设计 dw dw dw dw x1,x2,x3,x4,x5,x6,x7,x8,x9,x10 y1,y2,y3,y4,y5,y6,y7,y8,y9,y10 z1,z2,z3,z4,z5,z6,z7,z8,z9,z10 00dch ;0000,0000,1101,1100
x y z logic_rule
Data segment x db -5 y db ? Data ends Code segment assume cs:code start : mov ax,data mov ds,ax
case1:
case2: exit:
cmp jge mov jmp jg mov jmp mov mov int
bx 10 bx ax
( ( 0×10)+1 )×10+2 )×10+5
exit:
jmp ……
newchar
第5章
循环与分支程序设计
例:从键盘接收十六进制数并存入 BX
…… mov newchar: mov int sub jl cmp jl sub cmp jl cmp jge add_to: mov shl mov add jmp exit: …… bx, 0 ah, 1 21h al, 30h exit al, 10 add_to al, 27h al, 0ah exit al, 10h exit cl, 4 bx, cl ah, 0 bx, ax newchar
第5章
循环与分支程序设计
……
(寄存器间接寻址)
cmp al, 0 ;AL为逻辑尺 je default lea bx, branch_table L: shr al, 1 ;逻辑右移 jnc add1 jmp word ptr[bx] ;段内间接转移 add1: add bx, type branch_table ;add bx,2 jmp L default: …… routine1: …… routine2: ……
第5章
循环与分支程序设计
编制汇编语言程序的步骤: (1) 分析题意,确定算法 (2) 根据算法画出程序框图
(3) 根据框图编写程序
(4) 上机调试程序
第5章
循环与分支程序设计
程序结构:
顺序结构 循环结构
分支结构
子程序结构

复合结构:多种程序结构的组合
第5章
循环与分支程序设计
1. 循环程序设计
P107
…… mov rotate: mov rol mov and add cmp jl add printit: mov mov int dec jnz ……
; ’0’~’9’ ASCII 30H~39H
; ’A’~’F’ ASCII 41H~46H
第5章
循环与分支程序设计
例:从键盘接收十进制数并存入 BX
初始化
初始化
N Y
控制条件
Y
循环体 控制条件
N
循环体
DO-WHILE 结构
DO-UNTIL 结构
第5章
循环与分支程序设计
初始化:设置循环的初始状态
循环体:循环的工作部分及修改部分
控制条件:计数控制
特征值控制
地址边界控制
第5章
循环与分支程序设计
例 多字节加法程序,求十位十进制BCD数c=a+b
STACK SEGMENT PARA STACK 'STACK' DB 100H DUP(?) STACK ENDS data a db b db c db data segment ;数据段定义开始伪指令 89H,67H,45H,23H,01H ;字节变量a(BCD) 89H,67H,45H,23H,01H ;字节变量b(BCD) 5 DUP (?) ;字节变量c(BCD) ends ;数据段定义结束伪指令
无条件转移指令
P92
无条件转移指令的语句格式及功能 近似C语言: goto 标号;
第5章
循环与分支程序设计
6.2 循环控制指令
P109
LOOP (loop) CXCX-1,CX≠0循环 LOOPZ/LOOPE(loop while zero ,or equal) 当为零或相等时循环 LOOPNZ/LOOPNE ( loop while nozero , or not equal) 当不为零或不相等时循环 注:①使用的是相对寻址方式,转移地址在128 ~ +127之间; ② 组指令使用CX寄存器作为计数器,以 该计数器的值作为转移的条件。
第5章
循环与分支程序设计
第5章作业
Page 119
4--10
x,0 case1 y,-1 exit case2 y,0 done y,1 ah,4ch 21h
Code ends end start
第5章
循环与分支程序设计
例:把 BX 中的二进制数以十六进制的形式显示在屏幕上
BX
1
2 3
4
第5章
循环与分支程序设计 ch, 4 cl, 4 bx, cl al, bl al, 0fh al, 30h al, 3ah printit al, 7h dl, al ah, 2 21h ch rotate
;逻辑右移
;段内间接转移
si, type branch_table L
第5章
循环与分支程序设计 …… cmp je lea mov mov L: shl jnc jmp sub1: sub loop continue: …… routine1: …… routine2: ……
(基址变址寻址)
al, 0 continue bx, branch_table si, 7 * type branch_table cx, 8 al, 1 ;逻辑左移 sub1 word ptr [bx][si] ;段内间接转移 si, type branch_table ;(si)-2 L
z1 = x1 z2 = x2 z3 = x3 z4 = x4 z5 = x5 z6 = x6 + y1 + y2 - y3 - y4 - y5 1 1 0 0
1 减法
0
加法
z7 = x7
z8 = x8 z9 = x9
- y7
- y8 + y9
z10= x10 + y10
code segment ;代码段开始伪指令 assume cs:code, ds:data, es:data ;段分配伪指令 start: mov ax,data mov ds,ax ;ds段地址初始化
第5章
循环与分支程序设计
mov si,offset a ;lea si,a mov bx,offset b mov di,offset c mov cx,5 clc again: mov al,[si] adc al,[bx] daa mov [di],al inc si inc bx inc di loop again mov ah,4ch int 21h ;返回操作系统 code ends ;代码段结束伪指令 end start ;结束汇编伪指令
1 a f 31 61 66
;键盘输入
; <0退出
; ‘a’~‘f’
; <‘a’退出 ; >’f’退出 ((0×16)+1) × 16+0a) × 16+0f
第5章
循环与分支程序设计
例5.22: 将首地址为A的字数组从小到大排序
(气泡算法,多重循环) 32,85,16,15, 8
P116

序号 地址 数
第5章
循环与分支程序设计
(3) for(s=0,i=100;i==0;i--) s+=i*2;
MOV s,0 MOV i,100 MOV AX,i ADD AX,AX ADD s,AX DEC i JNE NEXT
NEXT:
;SHL AX,1/SAL AX,1
第5章
循环与分支程序设计
P98 【例5.10】 符号函数
第5章
循环与分支程序设计
2. 分支程序设计
? ?

case 1 case 2 case n case 1 case 2 case n
CASE 结构
(1) 逻辑尺控制 (2) 条件控制
IF-THEN-ELSE 结构
(3) 地址跳跃表(值与地址有对应关系的表)
第5章
循环与分支程序设计
例:有数组 x(x1,x2,……,x10) 和 y(y1,y2,……,y10), 编程计算 z(z1,z2,……,z10)
cx, 5 cx di, cx bx, 0
;元素个数 ;比较遍数 ;比较次数
continue:
ax, A[bx] ;相邻两数 ax, A[bx+2] ; 比较 continue ax, A[bx+2] ;交换位置 A[bx], ax
add loop mov loop
bx, 2 loop2 cx, di loop1
…… mov mov mov next: mov shr jc add jmp subtract:sub result: mov add loop ……
相关文档
最新文档