西工大C语言课件第六章
合集下载
C语言程序设计第六章课件

6.3嵌套循环
使用嵌套循环的注意事项 使用复合语句,以保证逻辑上的正确性 – 即用一对花括号将各层循环体语句括起来 内层和外层循环控制变量不能同名,以免造 成混乱 采用右缩进格式书写,以保证层次的清晰性
2017/9/7
27/62
选择三种循环的一般原则
如果循环次数已知,计数控制的循环 – 用for
1!, 2!, 3!, … , n!
2017/9/7
24/62
【例6.4】输入n值,计算并输出
1! + 2! + 3! + … + n!
利用前项 计算后项
2017/9/7
25/62
【例6.4】输入n值,计算并输出
1! + 2! + 3! + … + n!
每次单独计算 累加项
2017/9/7
26/62
counter<6 true input n sum ← sum + n counter++ output sum
n
2 3 5 6 4
counter-controlled 计数器每次增1
使用了3个变量
2017/9/7
end
6/62
6.2计数控制的循环
counter ← initial value
test counter true
2017/9/7
end
条件控制的循环
当 型 循 环
假 假 真 假
条 件P
A
条 件P
真
A
直 到 型 循 环
2017/9/7
10/62
while循环语句
C语言程序设计第六章PPT课件

char str[20]; scanf(“%s”,str); /*str是地址 */ 2. printf的s格式串可以实现字符串的输出,例: printf(“%s”,str); /*str是地址 */ 3. gets从终端输入字符串行 形式:gets(str); str是存放字符串的起始地址。可以是字符数组名、字符数组
第3页/共16页
6.2 二维和多维数组
6.2.2 二维数组的引用
引用二维数组元素时必须带有两个下标,形式如下: 数组名[下标1][下标2]
6.2.3 二维数组存储
二维数组在内存中占据一系列连续的存储单元,数组元素按 行顺序存放,先放行下标是0的元素,再放行下标是1的元 素 , . . . a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
第11页/共16页
6.3 字符数组和字符串
6.3.4.1字符串输入输出 --包含头文件stdio.h 4.puts向终端输出字符串 形式:puts(str); str是输出字符串的起始地址,从这一地址开始,依次输出存
储单元中的字符,直到遇到第一个‘\0’为止。并自动输出 一个换行符。 str是存放字符串的起始地址。可以是字符数组名、字符数组 元素地址或下一章将要介绍的字符指针。 6.3.4.2字符串处理函数 -- 包含头文件string.h 1.字符串复制函数strcpy。调用形式如下:
第7页/共16页
6.3 字符数组和字符串
6.3.2 字符串
C语言中没有字符串变量,通过字符数组可以实现相关的功能, 字符串是字符数组最普通的具体应用。
当要用字符数组存储(可能变化的)字符串时,应考虑: (1)定义变量时,考虑可能存储的最长字符串的长度。 (2)在字符数组中顺序存放字符串的每一个字符,最后加上
第3页/共16页
6.2 二维和多维数组
6.2.2 二维数组的引用
引用二维数组元素时必须带有两个下标,形式如下: 数组名[下标1][下标2]
6.2.3 二维数组存储
二维数组在内存中占据一系列连续的存储单元,数组元素按 行顺序存放,先放行下标是0的元素,再放行下标是1的元 素 , . . . a[0][0] a[0][1] a[0][2] a[0][3] a[1][0] a[1][1] a[1][2] a[1][3] a[2][0] a[2][1] a[2][2] a[2][3]
第11页/共16页
6.3 字符数组和字符串
6.3.4.1字符串输入输出 --包含头文件stdio.h 4.puts向终端输出字符串 形式:puts(str); str是输出字符串的起始地址,从这一地址开始,依次输出存
储单元中的字符,直到遇到第一个‘\0’为止。并自动输出 一个换行符。 str是存放字符串的起始地址。可以是字符数组名、字符数组 元素地址或下一章将要介绍的字符指针。 6.3.4.2字符串处理函数 -- 包含头文件string.h 1.字符串复制函数strcpy。调用形式如下:
第7页/共16页
6.3 字符数组和字符串
6.3.2 字符串
C语言中没有字符串变量,通过字符数组可以实现相关的功能, 字符串是字符数组最普通的具体应用。
当要用字符数组存储(可能变化的)字符串时,应考虑: (1)定义变量时,考虑可能存储的最长字符串的长度。 (2)在字符数组中顺序存放字符串的每一个字符,最后加上
西北工业大学 C语言 循环PPT课件

第
循环体语句;
三
章
结
构 循环变量赋初值
化 程 序 设 计
循环变量增值
C 语
for语句的执行流程:
言
程 序
for
设
计
表达式1
表达式2
假(0)
第
真(非0)
三
章
循环体
结
构
化
表达式3
程
序
设
计
步骤:
1、先计算表达式1的值。
2、再计算表达式2的值, 若其值为真,则执行 循环体一次;否则跳 转第5步。
3、然后计算表达式3的 值。
循环初值 i=1;
while(i<=10)
第
三
{ sum=sum+i;
章
循环变量增值
结
i++;
构
}
化 程
printf("%d",sum);
序 设
}
计
循环条件
循环终值 循环体
C 语
例 用while循环求
言
100
n
n 1
程
序
#include <stdio.h>
设
计
main()
{ int i,sum=0;
循环初值 i=1;
while(i<=100)
第
三
{ sum=sum+i;
章
循环变量增值
结
i++;
构
}
化 程
printf("%d",sum);
序 设
}
计
循环条件
循环终值 循环体
大学C语言程序设计 第六章

2.函数表达式: 2.函数表达式: 函数表达式
功能:将函数作为表达式的一部分。 功能:将函数作为表达式的一部分。 如: c=2*max(a,b); 要点:要求函数带回一个确定的值,以参加表达式的运算。 要点:要求函数带回一个确定的值,以参加表达式的运算。
3.一个函数作为另一个函数的参数: 3.一个函数作为另一个函数的参数: 一个函数作为另一个函数的参数
若不需要函数带回任何值,可使用: 若不需要函数带回任何值,可使用:
void printstar(){ …} } void print_message(){…} print_message(){ }
例exp6_5:函数返回值的类型与其定义的 exp6_5:函数返回值的类型与其定义的 类型不符的情况。 类型不符的情况。
一函数的定义重点二函数的调用重点1函数的一般调用2函数的嵌套调用3函数的递归调用三数组作为函数的参数难点四局部变量与全局变量难点五变量的存储类别难点六内部函数与外部函数1概述2函数定义的方法重点3函数的参数难点4函数的返回值难点1c程序的基本结构回顾2什么是函数
第六章
[教学要求] 教学要求]
函
数
1.理解函数的功能。 理解函数的功能。 2.掌握函数定义的一般形式(重点)。 掌握函数定义的一般形式(重点)。 掌握函数的形参与实参的对应关系、 3.掌握函数的形参与实参的对应关系、参数传递方法及函数返回值 的概念(难点) 的概念(难点) 。 掌握函数调用的基本方法(重点) 4.掌握函数调用的基本方法(重点) 。 掌握函数嵌套调用的一般过程(重点) 5.掌握函数嵌套调用的一般过程(重点) 。 了解函数递归调用的几种形式。 6.了解函数递归调用的几种形式。 掌握数组名作为函数的参数的一些特点(难点) 7.掌握数组名作为函数的参数的一些特点(难点) 。 8.掌握局部变量与全局变量的概念及它们的使用特点(难点) 。 掌握局部变量与全局变量的概念及它们的使用特点(难点) 掌握动态存储变量与静态存储变量的含义,会正确识别和使用。 9.掌握动态存储变量与静态存储变量的含义,会正确识别和使用。 10.了解内部函数与外部函数的含义。 10.了解内部函数与外部函数的含义。
C语言程序设计(第二版)课件第6章

6.2函数
❖ 运行结果:
main函数是主调函数,max是被调函数。其中x,y是实参,在数据传 递过程中x,y必须是确定的值。a,b是形参,用之前形参的数据类型 与实参相匹配。最后通过return语句返回a,b中较大值。
6.2函数
6.2.2 函数的声明
❖ 在本章例6.2中,如果被调函数的定义在main函数的后面,那么在 主函数main中需要对被调函数的进行声明。这种方式和变量相同, 先定义后使用。主要目的是使编译系统知道被调函数返回值类型, 以便在主调函数中对此类型的函数值作相应的处理。
❖ C程序的全部工作是由各种功能的函数完成的,C语言 称为函数式语言。采用函数模块式的结构,C语言实现 了结构化程序设计,使程序的层次结构清晰,方便程序 的编写、阅读、调试。
本章目录
6.1函数分类 6.2函数 6.3 函数调用 6.4函数和数组 6.5变量的作用域 6.6变量的存储类别 6.7内部函数和外部函数
其中第一,第二行对str函数和f函数预先作了说明。 因此在以后各 函数中无须对str和f函数再作说明就可直接调用。 ❖ 4. 对库函数的调用不需要再作说明, 但必须把该函数的头文件用 include命令包含在源文件前部。
6.2函数
❖ 6.2.3函数的参数
❖ 函数的参数分为形参和实参两种。 在本小节中,进一步介绍形参、 实参的特点和两者的关系。形参出现在函数定义中,在整个函数体 内都可使用,离开该函数不能使用。实参出现在主调函数中,进入 被调函数后,实参变量也不能使用。实参和形参之间的数据传递是 单项值传递,相当于实参的值复制到形参中,并且形参的任何变化 不影响实参。
6.1函数分类
C语言中可从不同的角度对函数分类。
❖ 1. 从函数定义的角度,函数分为库函数和用户定义函数。
C语言讲义第六章

CHAPTER 6: Structures
Page6-26
struct key { char *word; int count; };
sizeof(struct key)
back
CHAPTER 6: Structures
Page6-27
6.4 Pointer to Structure
type *p;
结构体是一个或多个变量的集合体
Chapter6
Structures
CHAPTER 6: Structures
Page6-1
6.1 Basics of Structures
6.2 Structures and Functions 6.3 Arrays of Structures 6.4 Pointers to Structures 6.5 Self-referential Structures
CHAPTER 6: Structures
Page6-18
/* return 1 if p in r , 0 if not*/
int ptinrect(struct point p,struct rect r) { return p.x>=r.pt1.x && p.x<r.pt2.x && p.y>=r.pt1.y && p.y<r.pt2.y;
6.6 Table Lookup
6.7 Typedef
6.8 Unions
6.9 Bits-fields
CHAPTER 6: Structures
Page6-2
A
structure is a collection of one or
C高级语言程序设计第6章PPT课件
int k1=100;
ch=&ch1;
//指针ch指向变量ch1
必须注意:不同类型的指针是不可以互相赋值的。在 指针赋值时,不存在类型自动转换的机制。
2020/11/3
北京邮电大学信息与通信工程学院
-13-
例6.1 观察以下指针赋值运算的结果。如果将注释去
掉,结果将如何?
#include <iostream> using namespace std; void main() {int va1=100,*pva1;
C++高级语言程序设计
第6章 指针和引用
2020/11/3
北京邮电大学信息与通信工程学院
1
指针(Pointer)是C++和C的一 种数据类型。很多其他高级语言 也有类似的数据类型。引用 (Reference)则是C++所特有的 一种数据类型。指针和引用在概 念上和使用上都有相似之处,但 是也有重要的差别。
2020/11/3
北京邮电大学信息与通信工程学院
-2-
第六章 指针和引用
6.1 指针的概念 6.2 指针的运算 6.3 指针访问动态内存 6.4 指向结构体的指针 6.5 引用概念 6.6 指针和引用作为函数的参数 6.7 指针和引用作为函数的返回值 6.8 指针和字符串 6.9 通过指针访问数组
其中的变量名应该是已经声明或定义的同类型变量 名。例如:
char ch1=’Y’, ch2=’A’; char *pch1=&ch1, *pch2=&ch2;
2020/11/3
北京邮电大学信息与通信工程学院
-9-
6.1.2 指针变量的声明和初始化
C语言程序设计教程第6章.ppt
C语言程序设计教程
第六章 函数与编译预处理
6.1 模块化程序设计与函数 6.2 函数的定义与调用 6.3 函数的递归调用 6.4 变量的作用域与存取方式 6.5 编译预处理
第6章 函数与编译预处理
2
6.1模块化程序设计与函数
在设计较复杂的程序时,我们一般采用 的方法是:把问题分成几个部分,每部分 又可分成更细的若干小部分,逐步细化, 直至分解成很容易求解的小问题。这样的 话,原来问题的解就可以用这些小问题来 表示。
C语言程序设计教程
第6章 函数与编译预处理
8
void main() {float a,b,c; scanf("%f,%f,%f", &a,&b,&c);/* 输入 */ sortabc(&a,&b,&c); /* 排序 */ putabc(a,b,c); /* 输出a,b,c三个数 */ }
C语言程序设计教程
C语言程序设计教程
基本概念
基本模块
模块
模块
模块
模块
模块
模块
模块
模块
模块
2019/4/5
3第6章 函数与编译预处理 Nhomakorabea4
模块与函数
C 语言程序由基本语句和函数组成, 每个函数可完成相对独立的任务, 依一定的规则调用这些函数,就组 成了解决某个特定问题的程序。
C语言程序设计教程
第6章 函数与编译预处理
C语言程序设计教程
第6章 函数与编译预处理
15
每个模块应用独立变量
模块内使用的数据,对于不需要这些数据的其它模块来说, 应该不允许使用;在一个模块内的变量的修改不会影响其 它模块的数据。即模块的私有数据只属于这个模块。C语言 的局部变量,就是满足模块独立的的需要。
第六章 函数与编译预处理
6.1 模块化程序设计与函数 6.2 函数的定义与调用 6.3 函数的递归调用 6.4 变量的作用域与存取方式 6.5 编译预处理
第6章 函数与编译预处理
2
6.1模块化程序设计与函数
在设计较复杂的程序时,我们一般采用 的方法是:把问题分成几个部分,每部分 又可分成更细的若干小部分,逐步细化, 直至分解成很容易求解的小问题。这样的 话,原来问题的解就可以用这些小问题来 表示。
C语言程序设计教程
第6章 函数与编译预处理
8
void main() {float a,b,c; scanf("%f,%f,%f", &a,&b,&c);/* 输入 */ sortabc(&a,&b,&c); /* 排序 */ putabc(a,b,c); /* 输出a,b,c三个数 */ }
C语言程序设计教程
C语言程序设计教程
基本概念
基本模块
模块
模块
模块
模块
模块
模块
模块
模块
模块
2019/4/5
3第6章 函数与编译预处理 Nhomakorabea4
模块与函数
C 语言程序由基本语句和函数组成, 每个函数可完成相对独立的任务, 依一定的规则调用这些函数,就组 成了解决某个特定问题的程序。
C语言程序设计教程
第6章 函数与编译预处理
C语言程序设计教程
第6章 函数与编译预处理
15
每个模块应用独立变量
模块内使用的数据,对于不需要这些数据的其它模块来说, 应该不允许使用;在一个模块内的变量的修改不会影响其 它模块的数据。即模块的私有数据只属于这个模块。C语言 的局部变量,就是满足模块独立的的需要。
计算机二级C语言第06章课件
6.3
函数参数和函数的值
6.3.1 形式参数和实际参数 在调用函数时,大多数情况下,主调函数和被调 用函数之间有数据传递关系。这就是前面提到的有 参函数。前面已提到:在定义函数时函数名后面括 弧中的变量名称为“形式参数”(简称“形参”), 在主调函数中调用一个函数时,函数名后面括弧中 的参数(可以是一个表达式)称为“实际参数”(简 称“实参”)。 例6.2调用函数时的数据传递。 main() { int max(int x,int y);/*
图6.3 图6.4 在调用函数时,给形参分配存储单元,并将实参对 应的值传递给形参,调用结束后,形参单元被释放, 实参单元仍保留并维持原值。因此,在执行一个被调 用函数时,形参的值如果发生改变,并不会改变主调 函数的实参的值。例如,若在执行函数过程中x和y的 值变为10和15,而a和b仍为2和3,见图6.4。
printf("* * * * * * * * * * *\n"); } void print_message(); /* print_message函数*/ { printf("How do you do!\n"); } 运行情况如下: * * * * * * * * * How do you do! * * * * * * * * *
6.2
函数定义的一般形式
1. 无参函数的定义形式
类型标识符 函数名() { 声明部分 语句 } 例6.1中的printstar和print_message函数都是无参 函数。用“类型标识符”指定函数值的类型,即函 数带回来的值的类型。无参函数一般不需要带回函 数值,因此可以不写类型标识符,例6.1就如此。
要调用一个函数”, 而现在这个函数没有起作用, 等以后扩充函数功能时补充上。 在程序设计中往往 根据需要确定若干模块, 分别由一些函数来实现。 而在第一阶段只设计最基本的模块, 其他一些次要 功能或锦上添花的功能则在以后需要时陆续补上。 在编写程序的开始阶段,可以在将来准备扩充功能 的地方写上一个空函数(函数名取将来采用的实际 函数名(如用merge()、matproduct()、 oncatenate()、shell()等,分别代表合并、矩 阵相乘、字符串连接、希尔法排序等),只是这些 函数未编好,先占一个位置,以后用一个编好的函 数代替它。这样做,程序的结构清楚,
精品课件-数据结构-C语言描述-第6章
结点,结论成立。设当i=k时结论成立,即二叉树上至多有2k–1 个 结点, 则当i=k+1时,因为每个结点最多只有两个孩子,所以,第 k+1层上至多有2*2k –1 =2k个结点,性质成立。
第6章 树 性质2 高度为h的二叉树上至多有2h -1个结点。 当h=0时,二叉树为空二叉树。当h>0时,利用性质1,高度为h 的二叉树中结点的总数最多为
(6-2)
2h 1 - 1 < n≤2h - 1
移项得 (6-3)
2h 1 < n+1≤2h
取对数 (6-4)
h - 1 < lb(n+1)≤h
第6章 树
性质6 假定对一棵有n个结点的完全二叉树中的结点,按从 上到下、从左到右的顺序,从1到n编号(见图6-7),设树中某一 个结点的序号为i,1≤i≤n,则有以下关系成立:
第6章 树
图6-1描述了欧洲部分语言的谱系关系,它是一个后裔图, 图中使用的描述树形结构数据的形式为倒置的树形表示法。在前 几章中,我们学习了多种线性数据结构,但是一般来讲,这些数 据结构不适合表示如图6-1所示的层次结构的数据。为了表示这 类层次结构的数据,我们采用树形数据结构。在本章中我们将学 习多种不同特性的树形数据结构,如一般树、二叉树、穿线二叉 树、堆和哈夫曼树等。
第6章 树
Proto Indo-European 原始印欧语
Italic 古意大利语
… Latin 拉丁语
Hellenic 古希腊语
Greek 希腊语
…
Germanic 日尔曼语
North Germanic 北日尔曼语
…
West Germanic 西日尔曼语
Spanish French Italian 西班牙语 法语 意大利语
第6章 树 性质2 高度为h的二叉树上至多有2h -1个结点。 当h=0时,二叉树为空二叉树。当h>0时,利用性质1,高度为h 的二叉树中结点的总数最多为
(6-2)
2h 1 - 1 < n≤2h - 1
移项得 (6-3)
2h 1 < n+1≤2h
取对数 (6-4)
h - 1 < lb(n+1)≤h
第6章 树
性质6 假定对一棵有n个结点的完全二叉树中的结点,按从 上到下、从左到右的顺序,从1到n编号(见图6-7),设树中某一 个结点的序号为i,1≤i≤n,则有以下关系成立:
第6章 树
图6-1描述了欧洲部分语言的谱系关系,它是一个后裔图, 图中使用的描述树形结构数据的形式为倒置的树形表示法。在前 几章中,我们学习了多种线性数据结构,但是一般来讲,这些数 据结构不适合表示如图6-1所示的层次结构的数据。为了表示这 类层次结构的数据,我们采用树形数据结构。在本章中我们将学 习多种不同特性的树形数据结构,如一般树、二叉树、穿线二叉 树、堆和哈夫曼树等。
第6章 树
Proto Indo-European 原始印欧语
Italic 古意大利语
… Latin 拉丁语
Hellenic 古希腊语
Greek 希腊语
…
Germanic 日尔曼语
North Germanic 北日尔曼语
…
West Germanic 西日尔曼语
Spanish French Italian 西班牙语 法语 意大利语
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
goto 语句后面的语句标号采用大写字母形式的标识符。一般冠以 前缀“LABEL_”,例如:goto LABEL_01 ; 。
5
第六章
6.1.2 用goto语句构成循环
6.1.2 用goto 语句构成循环
用goto 语句和if 语句可以构成第四章所描述的当型(While)循环 结构和直到(Until)循环结构。 1. 当型(While)循环结构: 标号: if (条件) { 执行A goto 标号 ; } A
⑤ for ( ;loop<=100 ;),省略了表达式1、3,此时for 语 句的功能与while语句相同。
21
第六章
句
6.4.1 for语句
4. for 语句流程图:for (表达式1 ;表达式2 ; 表达式3 ) 语
计算表达式1
计算表达式3
语句 表达式2 0 1
22
第六章
6.4.1 for语句
(2) 从终端上得到‘y’ 或 ‘Y’的判断 : for ( done=1 ;done ;) { printf(“Do you continue?(Y/N):” key = getchar() ; done = ! ( (key == „y‟) | | (key == „Y‟) ) ; }
28
第六章
第六章
6.4.1 for语句
for (;表达式2 ; ) 语句
语句
表达式2
0
1
26
第六章
6.4.1 for语句
5. Hungarian风格: (1)单语句形式: for (表达式1 ;表达式2 ; 表达式3 ) 单语句 ;
(2)复合语句形式: for (表达式1 ;表达式2 ; 表达式3 ){ 复合语句 ; }
2. 语法: for (表达式1 ;表达式2 ; 表达式3 ) 语句 ;
3. 注释:for 语句先执行表达式1(一般作为循环的初值),接着 判定表达式2的值是否为“真”(即非零),如果为“真”,则执行内 嵌语句,执行内嵌语句完成后执行表达式3(一般作为循环控制值), 并重复判定;否则结束执行for 语句。 (1)for 语句的内嵌语句可以是一条语句(分号结尾),也可以是 复合语句({}语句)。 (2)for 语句构成循环的结束条件是由表达式2决定,因而循环内 (或表达式3)应包含使表达式2为“假”的计算来终止循环。
4. do-while 语句流程图
语句
表达式
1
0
16
第六章
6.3.1 do-while语句
5. Hungarian风格: (1)单语句形式: do
单语句 ;
while (表达式);
(2)复合语句形式:
do { 复合语句 ;
} while (表达式);
17
第六章
6.3.1 do-while语句
6. 语法示例: (1) 求 1+2+……+100的值: loop = 1 ; sum = 0 ; do { sum = sum + loop ; loop++ ; } while (loop <=100 );
A
7
第六章
例6-1
6.1.2 用goto语句构成循环
用if和goto语句求
int main()
{
int i = 1 , sum = 0 ; loop :
if (i <= 100) {
sum = sum + i ; i++ ;
goto loop ;
} printf("%d\n", sum) ;
}
SX06-1
8
第六章
6.2 while语句
6.2.1 while 语句
1. 描述:根据条件判定,循环执行语句。
2. 语法: while (表达式) 语句;
3. 注释:while 语句判定表达式的值是否为“真”(即非零), 如果为“真”,则执行内嵌语句,执行内嵌语句完成后,重复前面的操 作;否则结束执行while 语句。
20
第六章
6.4.1 for语句
(3)for 语句的表达式1、2、3可以省略,但“;”不能省略,例 如: ① for ( ;loop <=100 ;loop++),省略了表达式1,因此应 在for 语句执行前确定循环的初始值。 ② for ( loop= 0 ;loop <=100 ;),省略了表达式3,因此应 在for 语句的内嵌语句中有确定循环控制的计算。 ③ for ( loop= 0 ;;loop++),省略了表达式2,相当于表达 式2恒为“真”,因此应在for 语句的内嵌语句中有判定循环结束条件 的指令。 ④ for ( ;;),省略了表达式1、2、3,因此应在for 语句的 内嵌语句中有判定循环结束条件的指令。
27
第六章
6.4.1 for语句
6. 语法示例: (1) 求 1+2+……+100的值: for ( loop=1 , sum = 0 ;loop<=100 ;loop++) sum = sum + loop ;
上面的程序还可以写成: for ( loop=1 , sum = 0 ;loop<=100 ;sum=sum+loop,loop++)
(1)do-while 语句对应第四章所描述的直到(Until)循环结构。
(2)do-while 语句的内嵌语句可以是一条语句(分号结尾),也 可以是复合语句({}语句)。
(3)do-while 语句构成循环的结束条件是由表达式决定,因而循 环内应包含使表达式为“假”的计算来终止循环。
15
第六章
6.3.1 do-while语句
由于使用goto 语句使得结构化程序的“块状”结构被打破,因而 结构化程序严格限制使用(或者不用)goto 语句。
4
第六章
6.1.1 goto语句
4. 语法示例: goto Label_01 ; goto _01 ;
goto LABEL01 ;
而 goto 123 ;
是错误的goto 语句。
5. Hungarian风格:
注意:循环初始值的设 置是由循环的算法决定 的。
上面的程序还可以写成: loop = 1 ; sum = 0 ; do sum = sum + loop ; while (loop++ , loop <=100 );
18
第六章
6.3.1 do-while语句
(2) 从终端上得到‘y’ 或 ‘Y’的判断 : int key ; do {
3
第六章
6.1 goto语句以及用goto语句构成循环
6.1.1 goto 语句 1. 描述:无条件转向指定语句标号。
2. 语法:
goto 语句标号 ;
3. 注释:goto 语句使程序无条件转向到指定语句标号的局部语句 继续运行,语句标号的语法为:
标识符号 :
局部语句是指在同一个作用域中(即同一个函数)的语句。不能用 goto 语句跳转到其它函数体内。
6.5 循环的嵌套
6.5.1 循环的嵌套使用 1. while、do-while、for循环中的内嵌语句可以是C语言的任何有 效的语句,当然也就包括循环语句(while、do-while、for之一),当 一个循环中的内嵌语句是循环语句,则称为循环的嵌套使用。
2. 循环的嵌套使用是没有任何限制的,只要符合C语言的语法即可。
灵活地应用关系表达式和逻辑表达式的 计算,可以使判断条件简化、清晰
13
第六章
程序调试技巧
如何调试带循环的程序?
例6-2 用while语句求 其中n=50时要输出计算和。
while (i <= 100) { sum = sum + i ; if (i == 50)
printf(“mid sum=%d\n”,sum) ;
i++ ; }
SX06-2
14
第六章
6.3 do-while语句
6.3.1 do-while 语句
1. 描述:执行语句,根据条件判定是否再次循环。
2. 语法: do 语句 while (表达式) ;
3. 注释:do-while 语句先执行内嵌语句,然后判定表达式的值是 否为“真”(即非零),如果为“真”,则重复前面的操作;否则结束 执行do-while 语句。
3. 将最内层的嵌套循环语句,称为“内循环”或“最深的循环”, 最外层的嵌套循环语句,称为“外循环”或“最浅的循环”。
29
第六章
6.5 循环的嵌套 4. 循环嵌套图示:
外循环块 { ...... 内外循环块 {
......
最内外循环块 { ...... } } 另一内外循环块 { ...... } }
封面
1
本章目录
循环控制
教学要求 本章小节
专题目录 6.1
6.2
goto语句以及用goto语句构成循环
while语句
6.3 6.4
do-while语句 for语句
2
本章目录
循环控制
教学要求 本章小节
专题目录 6.5
6.6 6.7 6.8
循环的嵌套
break语句和continue语句 几种循环的比较 循环程序设计
注意:应“聪明地”设 置循环的初始值。
上面的程序还可以写成: loop = 0 ; sum = 0 ; while (loop++ , loop <=100 )sum = sum + loop ;
这里用了逗号表达式