C语言第六章
合集下载
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语言 第六章 数组

2.
6
6.1 排序问题
3. 初始化
类型名 数组名[数组长度]={初值表}; 初值表中依次放着数组元素的初值。例如: int a[10]={1,2,3,4,5,6,7,8,9,10}; 静态存储的数组如果没有初始化,系统自动给所有的数组元素赋0。 即 static int b[5]; 等价于 static int b[5]={0,0,0,0,0}; 初始化也可以只针对部分元素,如 static int b[5]={1,2,3}; 只对数组b的前3个元素赋初值,其余元素的初值为0。又如 int f[20]={0,1}; 对数组f的前两个元素赋初值,其余元素的值 不确定。
18
6.2 矩阵中最大值的位置
4. 使用二维数组编程
例7:定义一个3*2的二维数组a,数组元素的值由下式给 出,按矩阵的形式输出a。a[i][j]=i+j(0≤i ≤2, 0≤j ≤1), 见文件p131ex7-6.cpp
i
j
第1次 第2次 第3次 第4次 第5次
第6次
0 0 1 1 2
2
0 1 0 1 0
9
6.1 排序问题
4. 使用一维数组编程
例4:输入一个正整数n(1<n≤10), 再输入n个整数,将它们存入 数组a中。 ① 输出最小值和它所对应的下标。 ② 将最小值与第一个数交换,输 出交换后的n个数。 数组的长度在定义时必须确定, 如果无法确定需要处理的数据 数量,至少也要估计其上限, 并将该上限值作为数组长度。 因为n ≤10,数组长度就取上 限10。此外,如果用变量 index记录最小值对应的下标, 则最小值就是a[index]。 见p124ex7-4.cpp
8
6.1 排序问题
4. 使用一维数组编程
6
6.1 排序问题
3. 初始化
类型名 数组名[数组长度]={初值表}; 初值表中依次放着数组元素的初值。例如: int a[10]={1,2,3,4,5,6,7,8,9,10}; 静态存储的数组如果没有初始化,系统自动给所有的数组元素赋0。 即 static int b[5]; 等价于 static int b[5]={0,0,0,0,0}; 初始化也可以只针对部分元素,如 static int b[5]={1,2,3}; 只对数组b的前3个元素赋初值,其余元素的初值为0。又如 int f[20]={0,1}; 对数组f的前两个元素赋初值,其余元素的值 不确定。
18
6.2 矩阵中最大值的位置
4. 使用二维数组编程
例7:定义一个3*2的二维数组a,数组元素的值由下式给 出,按矩阵的形式输出a。a[i][j]=i+j(0≤i ≤2, 0≤j ≤1), 见文件p131ex7-6.cpp
i
j
第1次 第2次 第3次 第4次 第5次
第6次
0 0 1 1 2
2
0 1 0 1 0
9
6.1 排序问题
4. 使用一维数组编程
例4:输入一个正整数n(1<n≤10), 再输入n个整数,将它们存入 数组a中。 ① 输出最小值和它所对应的下标。 ② 将最小值与第一个数交换,输 出交换后的n个数。 数组的长度在定义时必须确定, 如果无法确定需要处理的数据 数量,至少也要估计其上限, 并将该上限值作为数组长度。 因为n ≤10,数组长度就取上 限10。此外,如果用变量 index记录最小值对应的下标, 则最小值就是a[index]。 见p124ex7-4.cpp
8
6.1 排序问题
4. 使用一维数组编程
C语言第6章

4
(2)访问地址运算符 访问地址的运算符有两个,“*”和“[]”,它们的使用形 式不同,但功能等价,都用来访问指定地址中的数据。
① []运算符
[]是一个二元运算符,其使用格式为: add[exp] 其中,add和exp作为[]的两个运算量:add是一个地址量,exp 是整型表达式,表示从add开始的偏移量。 add[exp]的功能是从地址add开始,向高地址方向偏移exp 个数据单元后,取该地址中的值。 思考:x 是一个简单变量,&x是它的地址,(&x)[0]表示什么?
19
【例】用指针进行两个变量值的交换。
#include <stdio.h> void main() { int a,b,t,*pa=&a,*pb=&b; scanf("%d%d",pa,pb); // 相当于scanf("%d%d",&a,&b); t=*pa; /* 等价于t=a;或t=pa[0]; */ *pa=*pb; /* 等价于a=b;或pa[0]=pb[0]; */ *pb=t; /* 等价于b=t;或pb[0]=t; */ printf("%d %d\n",*pa,*pb); printf("%d %d\n",a,b); } 思考:如果将程序中的*pa=*pb改为pa=pb,程序的运行结果将会 发生什么变化?如果将变量t定义为指针变量*t,应如何修改程序, 才能正确实现变量交换?
char c= 'A',*pc=&c; float a=3.0,*pa=&a;
10
指针变量指向变量示意图
pa FF74 FF70 FF71 FF72 FF73 FF74 a 3.0 FF75 FF76 FF77 FF78 pc FF7C FF79 FF7A FF7B c A FF7C
C语言程序设计课件第6章 类与对象

(4)构造函数可以重载,即一个类中可以定 义多个参数个数或参数类型不同的构造函数。
2021/7/13
18
【例6.5】 使用构造函数替代例6.3中SetTime() 成员函数,并在主函数中,使用构造函数设置 时间为15时19分56秒并显示该时间。 构造函数也可以重载。关于重载的概念将在第 7章详细介绍,这里先看一个例子。 【例6.6】 构造函数重载定义示例。
【2021例/7/163 .8】 构造函数的调用。
21
6.3.2 析构函数 1.析构函数的特点 当对象创建时,会自动调用构造函数进行初始 化。当对象撤消时,也会自动调用析构函数进 行一些清理工作,如释放分配给对象的内存空 间等。与构造函数类似的是:析构函数也与类 同名,但在名字前有一个“~”符号,析构函数 也具有公有属性,也没有返回类型和返回值, 但析构函数不带参数,不能重载,所以析构函 数只有一个。 【例6.9】 析构函数程序举例。
26
6.4 对象数组与对象指针 6.4.1 对象数组 对象数组是指数组的每一个元素都是相同类型对象的 数组,也就是说,若一个类有若干个对象,把这一系 列的对象用一个数组来表示。对象数组的元素是对象, 不仅具有数据成员,而且还有成员函数。
对象数组的定义和普通数组的定义类似,一般格式如 下: 类名 数组名[第一维大小][第二维数组大小] 其中,类名是指该数组元素属于该类的对象,方括号 内的数组大小给出了某一维元素的个数。一维对象数 组只有一对方括号,二维对象数组要有两个方括号对, 等等。
25
普通构造函数在建立对象时被调用,而复制构造函数
在用已有对象初始化一个新对象时被调用。复制构造
函数被调用通常发生在以下3种情况:
(1)程序中需要新建一个对象并用一个类的对象
2021/7/13
18
【例6.5】 使用构造函数替代例6.3中SetTime() 成员函数,并在主函数中,使用构造函数设置 时间为15时19分56秒并显示该时间。 构造函数也可以重载。关于重载的概念将在第 7章详细介绍,这里先看一个例子。 【例6.6】 构造函数重载定义示例。
【2021例/7/163 .8】 构造函数的调用。
21
6.3.2 析构函数 1.析构函数的特点 当对象创建时,会自动调用构造函数进行初始 化。当对象撤消时,也会自动调用析构函数进 行一些清理工作,如释放分配给对象的内存空 间等。与构造函数类似的是:析构函数也与类 同名,但在名字前有一个“~”符号,析构函数 也具有公有属性,也没有返回类型和返回值, 但析构函数不带参数,不能重载,所以析构函 数只有一个。 【例6.9】 析构函数程序举例。
26
6.4 对象数组与对象指针 6.4.1 对象数组 对象数组是指数组的每一个元素都是相同类型对象的 数组,也就是说,若一个类有若干个对象,把这一系 列的对象用一个数组来表示。对象数组的元素是对象, 不仅具有数据成员,而且还有成员函数。
对象数组的定义和普通数组的定义类似,一般格式如 下: 类名 数组名[第一维大小][第二维数组大小] 其中,类名是指该数组元素属于该类的对象,方括号 内的数组大小给出了某一维元素的个数。一维对象数 组只有一对方括号,二维对象数组要有两个方括号对, 等等。
25
普通构造函数在建立对象时被调用,而复制构造函数
在用已有对象初始化一个新对象时被调用。复制构造
函数被调用通常发生在以下3种情况:
(1)程序中需要新建一个对象并用一个类的对象
C语言(第06章)

{ } …
6.3 函数声明
函数声明是对所用到的函数的特征进行必要的声明。编译 函数声明是对所用到的函数的特征进行必要的声明。编译 系统以函数声明中给出的信息为依据,对调用表达式进行 检测,以保证调用表达式与函数之间的参数正确传递。在 主调函数中,要对在本函数中将要调用的函数事先作一声 句末的分号不可少 明。 函数声明的一般形式:
函数定义的外部性: 函数定义的外部性:
/*不允许出现如下形式的定义 /*不允许出现如下形式的定义*/ 不允许出现如下形式的定义*
函数不能嵌套定义:一个函数不能定义在别的函 Func1() 数的内部。或者说,函数只能定义在别的函数的 { … 外部,它们都是平行的,互相独立的,即不允许 /*应改为如下形式的定义 应改为如下形式的定义* /*应改为如下形式的定义*/ Func2() 出现如下形式的定义: Func1() { … 一个程序如果用到多个函数,允许把它们定义在 { … } 不同的文件中,也允许一个文件中含有不同程序 } … 中的函数。即在一个文件中可以包含本程序用不 Func2() } 到的函数,它们不被本程序调用。
a b x y 3 5 … 3 5
6.5 嵌套调用和递归调用
函数的嵌套调用:
C语言的函数不允许嵌套定义(既将一个函数 语言的函数不允许嵌套定义(既将一个函数 的定义放在另一个函数的函数体中) C语言允许在一个函数的执行过程中又调用另 一个函数。这种调用称为函数的嵌套调用。 一个函数。这种调用称为函数的嵌套调用。
函数的类型: 函数的类型:
通常把函数返回值的类型称为函数的类型,即函数定义时 所指出的类型。 函数在返回前要先将表达式的值转换为所定义的类型,再 返回到主调函数中的调用表达式。即如果函数值的类型和 return 语句中表达式的值得类型不一致,则以函数定义为 准,函数类型决定返回值的类型。 int型与char型函数在定义时可以不定义类型(即不写int或 int型与char型函数在定义时可以不定义类型(即不写int或 char),系统隐含指定为int型。 char),系统隐含指定为int型。 对不需要使用函数返回值的函数,应定义为void类型。 对不需要使用函数返回值的函数,应定义为void类型。
6.3 函数声明
函数声明是对所用到的函数的特征进行必要的声明。编译 函数声明是对所用到的函数的特征进行必要的声明。编译 系统以函数声明中给出的信息为依据,对调用表达式进行 检测,以保证调用表达式与函数之间的参数正确传递。在 主调函数中,要对在本函数中将要调用的函数事先作一声 句末的分号不可少 明。 函数声明的一般形式:
函数定义的外部性: 函数定义的外部性:
/*不允许出现如下形式的定义 /*不允许出现如下形式的定义*/ 不允许出现如下形式的定义*
函数不能嵌套定义:一个函数不能定义在别的函 Func1() 数的内部。或者说,函数只能定义在别的函数的 { … 外部,它们都是平行的,互相独立的,即不允许 /*应改为如下形式的定义 应改为如下形式的定义* /*应改为如下形式的定义*/ Func2() 出现如下形式的定义: Func1() { … 一个程序如果用到多个函数,允许把它们定义在 { … } 不同的文件中,也允许一个文件中含有不同程序 } … 中的函数。即在一个文件中可以包含本程序用不 Func2() } 到的函数,它们不被本程序调用。
a b x y 3 5 … 3 5
6.5 嵌套调用和递归调用
函数的嵌套调用:
C语言的函数不允许嵌套定义(既将一个函数 语言的函数不允许嵌套定义(既将一个函数 的定义放在另一个函数的函数体中) C语言允许在一个函数的执行过程中又调用另 一个函数。这种调用称为函数的嵌套调用。 一个函数。这种调用称为函数的嵌套调用。
函数的类型: 函数的类型:
通常把函数返回值的类型称为函数的类型,即函数定义时 所指出的类型。 函数在返回前要先将表达式的值转换为所定义的类型,再 返回到主调函数中的调用表达式。即如果函数值的类型和 return 语句中表达式的值得类型不一致,则以函数定义为 准,函数类型决定返回值的类型。 int型与char型函数在定义时可以不定义类型(即不写int或 int型与char型函数在定义时可以不定义类型(即不写int或 char),系统隐含指定为int型。 char),系统隐含指定为int型。 对不需要使用函数返回值的函数,应定义为void类型。 对不需要使用函数返回值的函数,应定义为void类型。
C语言课件第6章 数组

6.2.3 一维数组元素的初始化
一维数组初始化格式为: 数据类型 数组名[常量表达式]={初值表}; (1)在定义时对数组元素赋初值。 例如:int a[5]={1,2,3,4,5}; (2)“初值表”中的初值个数,可以少于元素个数,即允许只给 部分元素赋初值。例如:int a[5]={1,2,3}; (3)如果对数组的全部元素赋以初值,定义时可以不指定数组长 度(系统根据初值个数自动确定)。 int a[5]={1,2,3,4,5};可以写成: int a[ ]={1,2,3,4,5}; (4)如果想使一个数组中全部元素值为0,可以写成: int a[5]={0,0,0,0,0}; 或写成:int a[5]={0};
3.程序代码 #include "stdio.h" void main() /*定义50个浮点型变量分别保存每位同学的成绩*/ { float score1,score2,……,score50,average; scanf("%f",&score1); /*从键盘输入成绩*/ scanf("%f",&score2); …… scanf("%f",&score50); printf("pass-fail numbers:\n"); if(score1< 60) /*输出成绩不及格学生的学号*/ printf("1"); if(score2<60) printf("2"); …… if(score50<60) printf("50"); }
score[0] score[1] score[2] score[3] score[4] score[5] …… score[49]
C语言 — 第六章 数组(大学使用教程)
21
数组常用的循环形式
法一 int i,a[100]; for(i=0;i<100;i++) a[i]=i; 法二 int i,a[100]; for(i=0;i<=99;i++) a[i]=i;
C程序中常用的是第一种方法。 程序中常用的是第一种方法。 此法中,循环变量的终值是“小于”而非“等于” 此法中,循环变量的终值是“小于”而非“等于” 数组长度!否则将导致“越界”的发生。 数组长度!否则将导致“越界”的发生。
数
组
• 数组是一组有序的同类型数据 。 • 数据称为数组的元素。 数据称为数组的元素。
6
数组的用处
保存大量同类型的相关数据 – 如矩阵运算,表格数据等 如矩阵运算,
数组的特点
快速地随机访问 一旦定义, 一旦定义,不能改变大小
7
§6.1 数组的定义与初始化
数组的定义 : 数组在使用前要进行定义: 名称、类型、维数、 数组在使用前要进行定义 名称、类型、维数、大小 定义格式: 定义格式: 类型标识符 数组名[常量表达式1][常量表达式2]…… 数组名[常量表达式1][常量表达式2] 1][常量表达式2]
如有数组 int a[5]; 其中数据为:2、4、23、6、78 其中数据为: 、 、 、 、 则存放情况如下: 则存放情况如下:
12
数组在内存 中的首地址
2000 2002
2的低位字节 的低位字节 2的高位字节 的高位字节 4的低位字节 的低位字节 4的高位字节 的高位字节
a[0] a[1] a[2] a[3] a[4]
即a=2000
2004 2006 2008
int a[5]={ 2,4, 23,6,78 };
数组常用的循环形式
法一 int i,a[100]; for(i=0;i<100;i++) a[i]=i; 法二 int i,a[100]; for(i=0;i<=99;i++) a[i]=i;
C程序中常用的是第一种方法。 程序中常用的是第一种方法。 此法中,循环变量的终值是“小于”而非“等于” 此法中,循环变量的终值是“小于”而非“等于” 数组长度!否则将导致“越界”的发生。 数组长度!否则将导致“越界”的发生。
数
组
• 数组是一组有序的同类型数据 。 • 数据称为数组的元素。 数据称为数组的元素。
6
数组的用处
保存大量同类型的相关数据 – 如矩阵运算,表格数据等 如矩阵运算,
数组的特点
快速地随机访问 一旦定义, 一旦定义,不能改变大小
7
§6.1 数组的定义与初始化
数组的定义 : 数组在使用前要进行定义: 名称、类型、维数、 数组在使用前要进行定义 名称、类型、维数、大小 定义格式: 定义格式: 类型标识符 数组名[常量表达式1][常量表达式2]…… 数组名[常量表达式1][常量表达式2] 1][常量表达式2]
如有数组 int a[5]; 其中数据为:2、4、23、6、78 其中数据为: 、 、 、 、 则存放情况如下: 则存放情况如下:
12
数组在内存 中的首地址
2000 2002
2的低位字节 的低位字节 2的高位字节 的高位字节 4的低位字节 的低位字节 4的高位字节 的高位字节
a[0] a[1] a[2] a[3] a[4]
即a=2000
2004 2006 2008
int a[5]={ 2,4, 23,6,78 };
c语言教学第6章 数组
§ 6.1 基本概念
整形、实型、字符型都属于基本类型。 其存储特点是:每个变量单独存储,亦称简单变 量。 如:char X=„a‟; int y1=0,y2; y2=X-1; 各变量之间独立存放,没有任何联系。
数组
数组是一种构造的数据类型,在计算机中分配连续 的内存空间。 数组:按序排列的具有相同类型的变量的集合。 用一符号名(数组名)来表示这一数组; 用数组名跟下标来唯一确定数组中的元素;
四、二维数组的初始化 (按行存放) 1、按存放顺序赋值 如:int x[2][3]={1,2,3,4,5,6}; 2、按行赋值 如:int x[2][3]={ {1,2,3},{4,5,6} }; 3、部分赋值 如:static int x[2][3]={1,2,4}; static int x[2][3]={ {1,2,},{4} }; 4、省略第一维长度 如: static int x[][3]={1,2,3,4,5,6,7};
课后 练习:分别定义一个一维数组和一个二维数组并 初始化,找出一维数组和二维数组中的最大元素和最小 元素以及对应的下标。
§6.4
字符数组
定义形式: char 数组名[exp]
一 、字符数组的定义 如:char c[5]; 在C语言中没有专门的字符串 c[0]=„h‟; c[1]=„a‟ 变量,而是将字符串存入字符数 c[2]=„p‟; c[3]=„p‟; 组来处理。 c[4]=„y‟; 即用一个一维数组来存放一 还可以这样定义: 个字符串,每个元素存放一个字 int c[5]; 符。
c[0]=„h‟; c[2]=„p‟; c[4]=„y‟; c[1]=„a‟ c[3]=„p‟;
二、字符数组的初始化
1、按单个元素赋值
static char c[10]={„s‟,„t‟,„o‟,„r‟,„e‟};
C语言程序设计 第6章
#include <stdio.h> #include <stdlib.h> main( ) { int a[10]; /*定义数组*/ int k,j; float ave,s; k=0;s=0.0; for(j=0;j<10;j++) /*用数组存放10个随机整数*/ a[j]=rand()%50; printf("数组中的值:"); for(j=0;j<10;j++) /*输出10个随机整数*/ printf("%6d",a[j]); printf("\n"); for(j=0;j<10;j++) { if(a[j]%2==0) /*如果数组元素的值为偶数*/ {s+=a[j];k++;} /*累加及偶数个数计数*/ } if(k!=0) {ave=s/k; printf("偶数的个数:%d\n偶数的平均植:%f\n",k,ave);} }
(2)定义一个二维数组a[N][5],数组每行存放一名 学生的数据,每行前4列存放学生4门单科成绩,第5列 存放学生的总分。 (3)输入N个学生的单科成绩,存入二维数组a中。 (4)通过变量sum累加计算每位学生的总分,然后 赋值给每行的最后一个元素。 (5)输出数组第5列上的值,即为每个学生的总分。
for(i=0;i<N;i++) { sum=0; for(j=0;j<4;j++) /*计算当前学生的总分*/ sum+=a[i][j]; a[i][4]=sum; } for(i=0;i<N;i++) /*输出每个学生的总分*/ printf("第%d个学生的总分为:%d\n",i+1,a[i][4]); }
c语言第六章
可以只对部分元素赋值
例如:static int a[10]={0,1,2,3,4}; a数组有10个元素,但花括弧内只提供5个初值,这表示只给前面5个元 素赋初值,后5个元素值为0。
6.1 一维数组的定义和引用—4/5
在对全部元素赋初值时可不指定数组长度
例如:Static int a[]={1,2,3,4,5}; 如果想使一个数组中全部元素值为0,可以写成 static int a[10]={0,0,0,0,0,0,0,0,0,0}; 不能写成 static int a[10]={0*10}; 不能给数组整体赋初值。 其实,对static数组不赋初值,系统会对所有数组元素自动赋以0值。 即 static int a[10]; a[0]~a[9]都被置初值0。
返回
6.2 二维数组的定义和引用—1/12
二维数组的定义
类型说明符 数组名[常量表达式][常量表达式] 例如 f1oat a[3][4],b[5][10]; 定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组。 注意不能写成float a[3,4],b[5,10];
二维数组的物理意义
C语言对二维数组采用这样的定义方式,使我们可以把二维数组看作是 一种特殊的一维数组:它的元素又是一个一维数组。 例如,可以把a[3][4]看作是一个一维数组,它有3个元素: a[0] a[0][0] a[0][1] a[0][2] a[0][3] a[1] a[1][0] a[1][1] a[1][2] a[1][3] a[2] a[2][0] a[2][1] a[2][2] a[2][3] a[0],a[1],a[2],每个元素又是一个包含4个元素的一维数组。可以把 a[0], a[1],a[2] 看作是三个一维数组的名字。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
有以下程序段
int n,t=1,s=0; scanf("%d",&n); do{ s=s+t; t=t-2; }while(t!=n); 为使此程序不陷入死循环,从键盘输入的数据应该是() 为使此程序不陷入死循环,从键盘输入的数据应该是() A) 任意正奇数 B) 任意负偶数 C) 任意正偶数 D) 任意负奇数
int number=5,guess; 请输入您猜测的数: 请输入您猜测的数:3 问题描述: printf ("猜一个介于 1 与 10 之间的数\n"); 太小 do 猜数游戏。要求猜一个介于1~10之间的数字, 请输入您猜测的数:5 请输入您猜测的数: { 您猜中了 printf("请输入您猜测的数:");您猜中了! 答案为 5 根据用户猜测的数与标准值进行对比,并给出提 scanf("%d",&guess); 输入数字 5 后, 示,以便下次猜测能接近标准值,直到猜中为止。 if (guess > number) do…while 循环中的条 printf("太大\n"); 件为假, 输出结果消 else if (guess < number) 息后,程序终止。 printf("太小\n"); } while (guess != number); printf("您猜中了! 答案为 %d\n",number);
循环的必要性 2-1
int result1,result2,result3; int result4,result5; result1 = 1 * 10; printf("1 × 10 = %d \n",result1); result2 = 2 * 10; printf("2 × 10 = %d \n",result2); result3 = 3 * 10; printf("3 × 10 = %d \n",result3); result4 = 4 * 10; printf("4 × 10 = %d \n",result4); result5 = 5 * 10; printf("5 × 10 = %d \n",result5);
#include <stdio.h> main() { int i,sum=0; for(i=1;i<=100;i++) sum+=i; printf("%d",sum); }
for 循环的表达式
for 循环中有三个表达式 for 语句中的各个表达式都可以省略 分号分隔符不能省略 可省略
for(<初始化循环变量> ;<循环条件> ; <修改循环变量的值>) { 不能省略 <循环体语句>; }
6.5 for语句
一般形式 for([表达式1;表达式2;表达式3) 语句;
求解表达式1
分号用于分隔 for 循环的 三个表达式
表达式2 真 语句 求解表达式3
假
执行流程
For语句的下 一语句
for语句的一般形式 语句的一般形式
for(循环变量赋初值;循环条件;循环变量增值) for(循环变量赋初值;循环条件;循环变量增值) 循环变量赋初值 { 循环体语句; 循环体语句; } 例: 用for循环求
无条件转移语句
格式:goto 语句标号; 功能:程序将调转到该标号处并执行其后的语 句;
任何合法的标识符: 任何合法的标识符: 例如:goto flag1; goto loop; goto stop;
goto语句的用途:
与if语句一起构成循环结构; 从循环体中跳到循环体外。
goto语句不 符合结构化 编程的原则, 一般不提倡 采用。
循环条件
循环终值
循环体
6.3 while语句
一般形式: 一般形式:
循环变量的赋初值; while(循环条件表达式) 循环体语句; 循环体语句可以是一条, 循环体语句可以是一条, 也可以是多条, 也可以是多条, 多条的时候应用复合语句 {}将多条语句括起来 将多条语句括起来。 {}将多条语句括起来。
重复 (上个数字 +1) × 10
循环的概念
N
在循环条件的范围内反复 执行相同的循环体 ,称循环程序设计。
条件
Y 命令序列
……
命令序列
循环结构的特点: 循环结构的特点: 循环体中的语句, 循环体中的语句,在 条件满足的情况下, 条件满足的情况下, 可反复执行
break
命令序列
循环后面下一条语句
6.2 goto语句以及用goto语句构成循环
省略表达式1
相当于省去了为循环变量赋初值,此时应在 相当于省去了为循环变量赋初值,此时应在for 语句之前给循环变量赋初值
int num=0; for(;num <= 10 ;num ++) { printf("%d\n",num*2); }
省略表达式2
即不判断循环条件,也就是认为表达式 始终为 即不判断循环条件,也就是认为表达式2始终为 这时应在循环体内设法结束循环, 真,这时应在循环体内设法结束循环,否则将成 为死循环
练习
当执行以下程序时,输入1234567890<回 车>,则其中while循环体将执行()次。
#include <stdio.h> main() { char ch; while((ch=getchar())=='0') printf("#"); }
有以下程序:
#include <stdio.h> main() { int y=10; while(y--); printf("y=%d\n",y); } A) y=0 B) y=-1 C) y=1 D)死循环 死循环
运行情况如下: 1 sum=55 再运行一次: 11 Sum=0
main( ) { int sum=0,i; scanf(“%d”,&i); do { sum=sum+i; i++; } while ( i<=10); printf(“sum=%d\n”,sum); }
运行情况如下: 1 sum=55 再运行一次: 11 Sum=11
i=1;
n
N
i<=10 Y s=s+i; i=i+1;
输出s的值
内存
#include<stdio.h> num result void main () null 11 2 1 100 10 { int num=1,result; while (num<=10) 输出: { 1 × 10 = 10 result=num*10; 2 printf("%d × 10 = %d \n",num,result); × 10 = 20 3 × 10 = 30 num++; 4 × 10 = 40 } 5 × 10 = 50 } 6 × 10 = 60
#include<stdio.h> 以下程序的功能 main() 是:将输入的正 { 整数按逆序输出。 int n,s; printf("Enter a number: "); 例如,若输入 scanf("%d",&n); printf("Output: "); 135则输出531。 do { s=n%10; printf("%d",s); } while(n!=0); printf("\n"); }
do-while 循环示例之间的数 猜一个介于 1 与 10
回顾上次课内容
for条件运算符 switch 语句
do-while同 while语句的重要区别 同 语句的重要区别 语句的重要
while 假(0) do
expr 真(非0) 循环体
循环体 真(非0) expr 假(0) while
循环控制在循环体之前 只有当while后的表达 ,只有当 后的表达 式为非0时 式为非 时,才可能执行 循环体, 循环体,循环体有可能 一次都不执行。 一次都不执行。
第6章 循环控制 章
概述 goto语句以及用goto语句构成循环 while语句 do-while语句 for语句 循环的嵌套 几种循环的比较 break语句和continue语句 程序举例
程序的基本结构: 程序的基本结构:
顺序结构 选择结构 循环结构
复习:顺序结构
START
顺序结构的特点: 顺序结构的特点: 每一条语句按顺序执行; 每一条语句按顺序执行; 每一条语句只执行一遍, 每一条语句只执行一遍, 不重复执行; 不重复执行; 也没有语句不执行。 也没有语句不执行。
1 × 10 =10
输出结果
2 × 10 =20 3 × 10 =30 4 × 10 =40 5 × 10 =50
重复语句
循环的必要性 2-2
0+1 1+1 2+1 上个数字 + 1 ...
1 × 10 = 10 2 × 10 = 20 3 × 10 = 30 4 × 10 = 40 5 × 10 = 50
例:求S=1+2+3+……+n 的值 源程序: 源程序: #include<stdio.h> void main( ) { int i , s ,n; scanf("input n:%d",&n); i=1; s=0; while ( i<=n ) { s=s+i; i=i+1;} printf("please output s=%d\n",s); }