程序设计基础第6章.ppt
《程序设计基础第6章.ppt》由会员分享,可在线阅读,更多相关《程序设计基础第6章.ppt(70页珍藏版)》请在三一办公上搜索。
1、程 序 设 计 基 础,主讲教师:崔莉莉,基本类型,数据类型,构造类型,整型 int字符型 char实型(浮点型),数组类型结构体类型,单精度 float双精度 double,指针类型,空类型 void,构造类型数据是由基本类型数据按一定规则组成,它们的具体组成要由编程者按实际需要决定。,第7章 用类型批量数据组织的编程与调试,学习目标:理解数组的基本概念 熟练掌握一维数组的基本使用 掌握二维数组的基本使用,章节:7.1一维数组7.2二维数组7.3字符数组和字符串7.4应用举例,构造数据类型之一数组:是一些具有相同数据类型且按一定的次序排列的变量集合,即有序数据的集合,用数组名标识。元素:属同
2、一数据类型,用数组名和下标确定。每个数组元素都具有相同的变量名,但具有不同的序号(下标)。只有一个下标的数组称为一维数组,有两个下标的数组称为二维数组。以此类推,C语言允许使用任意维数的数组。数组元素可以是基本数据类型(int、float、char等),也可以是构造数据类型,但最低一级必须是基本类型。,一维数组的定义定义方式:数据类型 数组名常量表达式;,合法标识符,unsigned int类型的正整数,元素个数下标从0开始,:数组运算符单目运算符优先级(1)左结合不能用(),例 int a6;,数组名是地址常量,表示数组元素在内存中的起始地址a0。,7.1 一维数组,例如:float sal
3、ary100;/存放100个职工的工资(以实数形式存放),数组名,命名方法和变量名相同,采用方括号,而不是圆括号,不能写成float salary(100);其中100表示数组长度,即元素的个数。,应为,int n;cinn;int an;,#define n 10;/或const int n=10;int an;,错误提示:expected constant expression cannot allocate an array of constant size 0 a:unknown size,一个数组被定义后,系统将在内存中为它分配一块含有n个(n为数组长度)存储单元的存储空间,每个存储
4、单元包含的字节数等于元素类型的长度。如对于一个含有6个int型元素的数组,它将对应6*4=24个字节的存储空间。注意:常量表达式中可以包括常量和符号常量,不能包含变量。,int a10;,或,一维数组的引用数组必须先定义,后使用只能逐个引用数组元素,不能一次引用整个数组数组元素表示形式:数组名下标其中:下标可以为常量,也可以为变量或表达式,但其值必须是整数,否则将产生编译错误与数组的定义格式相同,但出现的位置是不同的,当出现在变量定义语句时则为数组定义,而当出现在表达式中时则为一个元素。,例 int num-5;(表示数组长度的常量表达式必须是正的整型常量表达式,通常是一个大于或等于1的整型常
5、量),例 int a10;couta;()必须 for(j=0;j10;j+)coutajt;(),例 int data5;data5=10;/C语言对数组不作越界检查,使用时要 注意,假定n为一常量对于一个含有n个元素的数组(int an;),C语言规定:它的下标依次为0,1,2,.,n-1,因此全部n个元素依次为a0,a1,a2,.,an-1,其中假定a为数组名。例如:假定an为一个已定义的数组,则下面都是访问该数组的下标变量的合法格式:a5/下标为一个常数 ai/下标为一个变量 aj+/下标为后增1表达式 a2*x+1/下标为一般表达式,初始化方式在程序运行时初始化可以用赋值语句或输入语
6、句在程序执行时实现初始化。,在定义数组时初始化数据类型数组名N=值1,值2,值3,值N,;,说明:数组不初始化,其元素值为随机数对static数组元素不赋初值,系统会自动赋以0值,一维数组的初始化,引用数组元素之前,必须保证数组的元素已经被赋予确定的值,int a5=1,2,3,4,5;等价于:a0=1;a1=2;a2=3;a3=4;a4=5;,当全部数组元素赋初值时,可不指定数组长度,如 int a5=6,2,3;等价于:a0=6;a1=2;a2=3;a3=0;a4=0;,static int a5;等价于:a0=0;a1=0;a2=0;a3=0;a4=0;,只给部分数组元素赋初值,int
7、a=1,2,3,4,5,6;编译系统根据初值个数确定数组维数,int main()int a10,i;for(i=0;i10;i+)ai=i;,int main()int a10,i;for(i=0;i ai;,如果声明数组时,在方括号中指定了元素个数,那么初始化时的数据个数就不能超过所指定的元素个数。int a 5=1,2,3,4,5,6;(错误)初始化时,数据个数可以少于声明数组时在方括号中指定的元素个数,但不能一个也没有。int b5=;(错误)如果声明数组时,在方括号中不指定元素个数,那么必须紧接着进行初始化。int c;(错误),声明一个能存放5个整数的数组s,批量读入一组数,批量写
8、入一组数。,#include using namespace std;void main()int s5;/声明存放5个整数的数组sfor(int i=0;i si;for(i=0;i=4;i+)/读出数组元素s0,s1,s2,s3,s4的值,输出到屏幕上cout si t;cout endl;,程序举例,程序举例,例 读10个整数存入数组,找出其中最大值和最小值,步骤:1.输入:for循环输入10个整数2.处理:(a)先令max=min=a0(b)依次用ai和max,min比较(循环)若maxai,令min=ai3.输出:max和min,#include using namespace st
9、d;#define N 10int main()int aN,i,max,min;coutai;max=min=a0;for(i=1;iai)min=ai;coutMaximum value is maxendl;coutMinimum value is minendl;return 0;,运行结果:Enter 10 integers:1:22:33:14:55:96:87:48:129:3010:23Maximum value is 30Minimum value is 1,例 用数组求Fibonacci数列前20个数,#include#include using namespace std
10、;int main()int i;int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)coutn;coutsetw(6)fi;coutendl;return 0;,例 用冒泡法对10个数排序,排序过程:(1)比较第一个数与第二个数,若为逆序a0a1,则交换;然 后比较第二个数与第三个数;依次类推,直至第n-1个数和第 n个数比较为止第一趟冒泡排序,结果最大的数被安置在 最后一个元素位置上(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在 第n-1个元素位置(3)重复上述过程,共经过n-1趟冒泡排序后,排序结
11、束,例,38,49,76,97,13,97,27,97,30,97,13,76,76,76,27,30,13,65,27,65,30,65,13,13,49,49,30,49,27,38,27,38,30,38,#include using namespace std;int main()int a11,i,j,t;coutai;coutai+1)t=ai;ai=ai+1;ai+1=t;coutThe sorted numbers:endl;for(i=1;i11;i+)coutai;return 0;,例 用简单选择法对10个数排序,排序过程:(1)首先通过n-1次比较,从n个数中找出最小的
12、,将它与第一个数 交换第一趟选择排序,结果最小的数被安置在第一个元素位置上(2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,将它与第二个数交换第二趟选择排序(3)重复上述过程,共经过n-1趟排序后,排序结束,例,初始:49 38 65 97 76 13 27,i=1,13,49,一趟:13 38 65 97 76 49 27,i=2,27,38,六趟:13 27 38 49 65 76 97,#include using namespace std;int main()int a11,i,j,k,min;coutai;coutendl;for(i=1;i10;i+)min=a
13、i;k=i;for(j=i+1;j=10;j+)if(ajak)min=aj;k=j;ak=ai;ai=min;coutThe sorted numbers:endl;for(i=1;i11;i+)coutai;return 0;,#include iostream#include iomanip“using namespace std;#define N 6int main()int aN,bB-60,c=1,2,3,4,5,6,i;for(i=0;iaibi;for(i=0;iN;i+)coutsetw(6)ai;coutendl;for(i=0;iN;i+)coutsetw(6)bi;c
14、outendl;for(i=0;iN;i+)ci=ai+bN-i-1;for(i=0;iN;i+)coutsetw(6)ci;coutendl;return 0;,数组定义:必须用常量表达式,数组元素引用,二维数组的定义定义方式:数据类型数组名常量表达式常量表达式;,数组元素的存放顺序原因:内存是一维的二维数组:按行序优先多维数组:最右下标变化最快,例 int a34;float b25;int c234;int a3,4;(),行数,列数,元素个数=行数*列数,7.2 二维数组,二维数组理解,a是一个二维数组,具有3行4列,共定义了12个int型变量;第一维下标变化范围为02,第二维下标变化
15、范围为03。数组各元素在内存中连续存放,按行排列(因内存是一维存储空间)。a是数组名且表示数组在内存中的首址。,二维数组a是由3个元素组成,每个元素ai由包含4个元素的一维数组组成,按元素排列顺序初始化,二维数组元素的引用形式:数组名下标下标二维数组元素的初始化分行初始化:,程序举例,例 将二维数组行列元素互换,存到另一个数组中(23矩阵转置),例 求二维数组中最大元素值及其行列号,#include using namespace std;int main()int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;int i,j,row=0,column=0,max;max=a
16、00;for(i=0;imax)max=aij;row=i;column=j;coutmax=max,row=row,column=columnendl;return 0;,例 读入下表中值到数组,分别求各行、各列及表中所有数之和,#include#include using namespace std;int main()int x54,i,j;for(i=0;ixij;for(i=0;i3;i+)x4i=0;for(j=0;j5;j+)xj3=0;for(i=0;i4;i+)for(j=0;j3;j+)xi3+=xij;x4j+=xij;x43+=xij;,for(i=0;i5;i+)fo
17、r(j=0;j4;j+)coutsetw(5)xij;coutendl;return 0;,逐个字符赋值初始化会在程序处理变量ch时发生错误,因为C不知道其中的字符串到哪个元素为止。此外,如果花括号中提供的字符个数小于数组长度,将只为数组的前几个元素赋初值,其余的元素自动被赋予空字符。如果初值个数大于数组长度,则认为是语法错误。正确的做法是在初始化时加上结束符,即 char ch6=H,e,l,l,o,0;,用字符串常量初始化会自动地在最后一个字符后面加上一个0,作为字符串的结束符。由于字符串的长度在程序的运行过程中允许发生变化,所以C+要依靠结束符来判断字符串的结束,声明数组时必须留出这个位
18、置,换句话说,方括号中指定的元素个数必须大于将来存放字符串的最大长度。,与整型实型数组的初始化不同,声明数组时在方括号中指定了元素个数后,初始化的字符串可以是没有字符的空串,即”。,字符数组定义,字符数组的初始化逐个字符赋值用字符串常量字符数组的引,例 char c10,ch34;,4.3 字符数组和字符串,例 输出一个字符串,#include using namespace std;int main()char c10=I,a,m,a,b,o,y;int i;for(i=0;i10;i+)coutci;coutendl;return 0;,例 计算给定字符串的长度,不包括结束符0。#incl
19、ude using namespace std;int main()char str=Happy;int i;i=0;while(stri!=0)i+;coutThe length of string is iendl;return 0;,字符串字符串及其结束标志无字符串变量,用字符数组处理字符串字符串结束标志:0,结果:The length of string is 5,字符串的输入输出,输出1)屏幕输出,#include using namespace std;int main()char a=China;couta;/a为数组名,将字符串输出至屏幕。,字符串的输入输出,输出2)字符串输出
20、和整数、实数、字符输出的区别,对于整数、实数和字符,cout每次只能输出一个。对于字符串既可一次输出,也可按字符多次输出。当字符串一次输出时,系统根据0找到字符串尾。若按字符一个个输出,cout根据字符串中字符个数输出。,for(i=0;i字符串中字符个数;i+)coutai;,字符串的输入输出,输入1)键盘输入,#include iostream.hvoid main()char a100;cina;/*a为数组名,从键盘输入多个字符,以回车作为结束,系统自动在读入的字符串未尾添加0。*/,字符串的输入输出,输入2)字符串输入和整数、实数、字符输入的区别,对于整数、实数和字符,cin每次只能
21、输入一个。对于字符串既可一次输入,也可按字符多次输入。当字符串一次输入时,系统自动在尾部添加0。若按字符一个个输入,必须已知字符个数,并且应由用户程序在其末尾添加0。,#include using namespace std;int main()char a10;int i;for(i=0;iai;a9=0;,例从键盘读入一字符串,计算出其长度(即有效字符个数),将长度输出至屏幕。#include using namespace std;int main()char s100;cins;int i=0;while(si!=0)i+;couti;return 0;,字符串的输入输出,用于存储字符
22、串的字符数组,其元素可以通过下标运算符访问,这与一般字符数组和其他任何类型的数组是相同的。除此之外,还可以对它进行整体输入输出操作和有关的函数操作。如假定a11为一个字符数组,则:(1)cina;(2)couta;是允许的,即允许在提取或插入操作符后面使用一个字符数组名实现向数组输入字符串或输出数组中保存的字符串的目的。计算机执行上述第一条语句时,要求用户从键盘上输入一个不含空格的字符串,用空格或回车键作为字符串输入的结束符,系统就把该字符串存入到字符数组a中,当然在存入的整个字符串的后面将自动存入一个结束符0。,字符串的输入输出,例如:字符数组长度为10输入字符串string,结果为stri
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序设计 基础
链接地址:https://www.31ppt.com/p-6498083.html