资源预览内容
第1页 / 共70页
第2页 / 共70页
第3页 / 共70页
第4页 / 共70页
第5页 / 共70页
第6页 / 共70页
第7页 / 共70页
第8页 / 共70页
第9页 / 共70页
第10页 / 共70页
亲,该文档总共70页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
程程序序设设计计基基础础主讲教师:崔莉莉主讲教师:崔莉莉基本类型基本类型数数据据类类型型构造类型构造类型整型整型 int字符型字符型 char实型(浮点型)实型(浮点型)数组类型数组类型结构体类型结构体类型单精度单精度float双精度双精度double指针类型指针类型空类型空类型 void构造类型构造类型数据是由基本类型数据按一定规则组成,它们的具体数据是由基本类型数据按一定规则组成,它们的具体组成要由编程者按实际需要决定。组成要由编程者按实际需要决定。第第第第7 7 7 7章章章章 用类型批量数据组织的编程与调试用类型批量数据组织的编程与调试用类型批量数据组织的编程与调试用类型批量数据组织的编程与调试学习目标:学习目标:q理解数组的基本概念理解数组的基本概念q熟练掌握一维数组的基本使用熟练掌握一维数组的基本使用q掌握二维数组的基本使用掌握二维数组的基本使用章节:章节:7.1一维数组一维数组7.2二维数组二维数组7.3字符数组和字符串字符数组和字符串7.4应用举例应用举例n构造数据类型之一构造数据类型之一n数数组组: :是是一一些些具具有有相相同同数数据据类类型型且且按按一一定定的的次次序序排排列列的的变量集合,即有序数据的集合变量集合,即有序数据的集合, ,用数组名标识。用数组名标识。n元元素素: :属属同同一一数数据据类类型型, ,用用数数组组名名和和下下标标确确定定。每每个个数数组组元元素素都都具具有有相相同同的的变变量量名名,但但具具有有不不同同的的序序号号(下下标)。标)。n只只有有一一个个下下标标的的数数组组称称为为一一维维数数组组,有有两两个个下下标标的的数数组组称称为为二二维维数数组组。以以此此类类推推,C C语语言言允允许许使使用用任任意意维维数数的数组。的数组。n数数组组元元素素可可以以是是基基本本数数据据类类型型(intint、floatfloat、charchar等等),也也可可以以是是构构造造数数据据类类型型,但但最最低低一一级级必必须须是是基基本本类类型。型。 一维数组的定义一维数组的定义v定义方式:定义方式: 数据类型数据类型 数组名数组名 常量常量表达式表达式 ; 合法标识符合法标识符unsignedint类型的正整数,类型的正整数,元素个数下标从元素个数下标从0开始开始:数组运算符数组运算符单目运算符单目运算符优先级优先级(1)左结合左结合不能用不能用()例例 inta6;a00145a1a2a3a4a523a数组名是数组名是地址常量地址常量,表示表示数组元素在数组元素在内存内存中的起始中的起始地址地址a0。7.17.1一维数组一维数组一维数组一维数组例如:例如:floatsalary100;/存放存放100个职工的工资(以实数形式存放)个职工的工资(以实数形式存放)数组名,命名方法和变量名相同数组名,命名方法和变量名相同采用方括号,而不是圆括号,不能写成采用方括号,而不是圆括号,不能写成floatsalary(100);其其中中100表示数组长度,即元素的个数。表示数组长度,即元素的个数。应为应为intn;cinn;intan;#definen10;/或或constintn=10;intan;错误提示错误提示:expectedconstantexpressioncannotallocateanarrayofconstantsize0a:unknownsize一个数组被定义后,系统将在内存中为它分配一块含一个数组被定义后,系统将在内存中为它分配一块含有有n个(个(n为数组长度)存储单元的存储空间,每个存储单为数组长度)存储单元的存储空间,每个存储单元包含的字节数等于元素类型的长度。如对于一个含有元包含的字节数等于元素类型的长度。如对于一个含有6个个int型元素的数组,它将对应型元素的数组,它将对应6*4=24个字节的存储空间。个字节的存储空间。注意:常量表达式中可以包括常量和符号常量,不能注意:常量表达式中可以包括常量和符号常量,不能包含变量。包含变量。inta10;或或一维数组的引用一维数组的引用v数组必须数组必须先定义先定义,后使用后使用v只能逐个引用数组元素,不能一次引用整个数组只能逐个引用数组元素,不能一次引用整个数组v数组元素表示形式:数组元素表示形式:数组名数组名下标下标其中:其中:下标可以为常量,也可以为变量或表达式,下标可以为常量,也可以为变量或表达式,但其值必须是整数,否则将产生编译错误但其值必须是整数,否则将产生编译错误与数组的定义格式相同,但出现的位置是不与数组的定义格式相同,但出现的位置是不同的,当出现在变量定义语句时则为数组定义,同的,当出现在变量定义语句时则为数组定义,而当出现在表达式中时则为一个元素。而当出现在表达式中时则为一个元素。例例intnum-5;( 表示数组长度的常量表达式必须是正的整型常量表达式,表示数组长度的常量表达式必须是正的整型常量表达式,通常是一个大于或等于通常是一个大于或等于1的整型常量的整型常量)例例inta10;couta;( )必须必须for(j=0;j10;j+)coutajt;( )例例intdata5;data5=10;/C语言对数组不作越界检查,使用时要语言对数组不作越界检查,使用时要注意注意假定假定n为一常量为一常量对对于于一一个个含含有有n个个元元素素的的数数组组(intan;),C语语言言规规定定:它它 的的 下下 标标 依依 次次 为为 0,1,2,.,n-1, 因因 此此 全全 部部 n个个 元元 素素 依依 次次 为为a0,a1,a2,.,an-1,其中假定其中假定a为数组名。为数组名。例例如如:假假定定an为为一一个个已已定定义义的的数数组组,则则下下面面都都是是访访问问该该数数组组的下标变量的合法格式:的下标变量的合法格式:a5/下标为一个常数下标为一个常数ai/下标为一个变量下标为一个变量aj+/下标为后增下标为后增1表达式表达式a2*x+1/下标为一般表达式下标为一般表达式初始化方式初始化方式v在程序运行时初始化在程序运行时初始化可以用赋值语句或输入语句在程序执行时实现初始化。可以用赋值语句或输入语句在程序执行时实现初始化。v在定义数组时初始化在定义数组时初始化数据类型数组名数据类型数组名N=值值1,值值2,值值3,值值N,;说明:说明:l数组不初始化,其元素值为随机数数组不初始化,其元素值为随机数l对对static数组元素不赋初值,系统会自动赋以数组元素不赋初值,系统会自动赋以0值值一维数组的初始化一维数组的初始化引用数组元素之前,必须保证引用数组元素之前,必须保证数组的元素已经被赋予确定的值数组的元素已经被赋予确定的值inta5=1,2,3,4,5;等价于:等价于:a0=1;a1=2;a2=3;a3=4;a4=5;l当全部数组元素赋初值时,可不指定数组长度当全部数组元素赋初值时,可不指定数组长度如如inta5=6,2,3;等价于:等价于:a0=6;a1=2;a2=3;a3=0;a4=0;staticinta5;等价于:等价于:a0=0;a1=0;a2=0;a3=0;a4=0;l只给部分数组元素赋初值只给部分数组元素赋初值inta=1,2,3,4,5,6;编译系统根据初值个数确定数组维数编译系统根据初值个数确定数组维数intmain()inta10,i;for(i=0;i10;i+)ai=i;intmain()inta10,i;for(i=0;iai;如如果果声声明明数数组组时时,在在方方括括号号中中指指定定了了元元素素个个数数,那那么么初初始始化时的数据个数就不能超过所指定的元素个数。化时的数据个数就不能超过所指定的元素个数。inta5=1,2,3,4,5,6;(错误)错误)初初始始化化时时,数数据据个个数数可可以以少少于于声声明明数数组组时时在在方方括括号号中中指指定定的元素个数,但不能一个也没有。的元素个数,但不能一个也没有。intb5=;(错误)错误)如如果果声声明明数数组组时时,在在方方括括号号中中不不指指定定元元素素个个数数,那那么么必必须须紧接着进行初始化。紧接着进行初始化。intc;(错误)错误)声声明明一一个个能能存存放放5个个整整数数的的数数组组s,批批量量读读入入一一组组数数,批批量量写写入一组数。入一组数。#includeusingnamespacestd;voidmain()ints5;/声明存放声明存放5个整数的数组个整数的数组sfor (int i=0; isi;for(i=0;i=4;i+)/读出数组元素读出数组元素s0,s1,s2,s3,s4的值,输出到屏幕的值,输出到屏幕上上coutsit;coutendl;程序举例程序举例程序举例程序举例例例读读10个整数存入数组,找出其中最大值和最小值个整数存入数组,找出其中最大值和最小值步骤步骤:1.输入输入:for循环输入循环输入10个整数个整数2.处理处理:(a)先令先令max=min=a0(b)依次用依次用ai和和max,min比较比较(循环循环)若若maxai,令令min=ai3.输出输出:max和和min#includeusingnamespacestd;#defineN10intmain()intaN,i,max,min;coutEnter10integers:endl;for(i=0;iN;i+)couti+1ai;max=min=a0;for(i=1;iN;i+)if(maxai)min=ai;coutMaximumvalueismaxendl;coutMinimumvalueisminendl;return0;运行结果:运行结果:Enter10integers:1:22:33:14:55:96:87:48:129:3010:23Maximumvalueis30Minimumvalueis1f0f1f2f3f4f5f19.11f1901452319例例用数组求用数组求Fibonacci数列前数列前20个数个数235#include#includeusingnamespacestd;intmain()inti;intf20=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;couta1,则交换;然则交换;然 后比较第二个数与第三个数;依次类推,直至第后比较第二个数与第三个数;依次类推,直至第n-1个数和第个数和第 n个数比较为止个数比较为止第一趟冒泡排序第一趟冒泡排序,结果结果最大最大的数被安置在的数被安置在 最后一个元素位置上最后一个元素位置上(2)对前)对前n-1个数进行第二趟冒泡排序,结果使个数进行第二趟冒泡排序,结果使次大次大的数被安置在的数被安置在 第第n-1个元素位置个元素位置(3)重复上述过程,共经过)重复上述过程,共经过n-1趟冒泡排序后,排序结束趟冒泡排序后,排序结束例例38496513273076第第二二趟趟384913273065第第三三趟趟3813273049第第四四趟趟13273038第第五五趟趟132730第第六六趟趟3849657613273097第第一一趟趟4938659776132730初初始始关关键键字字n=8384976971397279730971376767627301365276530651313494930492738273830381327第第七七趟趟输入输入n个数给个数给a1到到anforj=1ton-1fori=1ton-jaiai+1真真假假aiai+1输出输出a1到到an#includeusingnamespacestd;intmain()inta11,i,j,t;coutInput10numbers:endl;for(i=1;iai;coutendl;for(j=1;j=9;j+)for(i=1;iai+1)t=ai;ai=ai+1;ai+1=t;coutThesortednumbers:endl;for(i=1;i11;i+)coutai;return0;例例用简单选择法对用简单选择法对10个数排序个数排序排序过程:排序过程:(1)首先通过)首先通过n-1次比较,从次比较,从n个数中找出最小的,个数中找出最小的,将它与第一个数将它与第一个数 交换交换第一趟选择排序第一趟选择排序,结果,结果最小最小的数被安置在第一个元素位置上的数被安置在第一个元素位置上(2)再通过)再通过n-2次比较,从剩余的次比较,从剩余的n-1个数中找出关键字个数中找出关键字次小次小的记录,的记录, 将它与第二个数交换将它与第二个数交换第二趟选择排序第二趟选择排序(3)重复上述过程,共经过)重复上述过程,共经过n-1趟排序后,排序结束趟排序后,排序结束二趟:二趟:13276597764938例例初始:初始:49386597761327ji=11349一趟:一趟:13386597764927i=22738三趟:三趟:13273897764965四趟:四趟:13273849769765五趟:五趟:13273849659776六趟:六趟:13273849657697kkkkjjjjjjjjjjk输入输入n个数给个数给a1到到anfori=1ton-1forj=i+1tonajak真真假假min=ajk=j输出输出a1到到anmin=aik=iai=minak=ai#include using namespace std;int main() int a11,i,j,k,min; coutInput 10 numbers:endl; for(i=1;iai; coutendl; for(i=1;i10;i+) min=ai; 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; coutendl; for(i=0;iN;i+) ci=ai+bN-i-1; for(i=0;iN;i+) coutsetw(6)ci; coutendl; return 0; 数组定义:必须用常量表达式数组定义:必须用常量表达式数组元素引用数组元素引用二维数组的定义二维数组的定义v定义方式:定义方式:数据类型数组名数据类型数组名常量表达式常量表达式常量表达式常量表达式;v数组元素的存放顺序数组元素的存放顺序l原因原因:内存是一维的内存是一维的l二维数组:按行序优先二维数组:按行序优先l多维数组:最右下标变化最快多维数组:最右下标变化最快例例inta34;floatb25;intc234;inta3,4;( )行数行数列数列数元素个数元素个数=行数行数*列数列数inta32a01a10a11a20a21014523a00a00a01a10a11a20a217.27.2二维数组二维数组二维数组二维数组二维数组理解二维数组理解二维数组理解二维数组理解例例inta34;a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23a0a1a2行名行名aa01a02a03a10a11a00a13a20a21a22a23a1201452367101189a0a1a2a aa a是一个二维数组,具有是一个二维数组,具有3 3行行4 4列,共定义了列,共定义了1212个个intint型变量;第一维下标型变量;第一维下标变化范围为变化范围为0202,第二维下标变化范围为,第二维下标变化范围为0303。数数组组各各元元素素在在内内存存中中连连续续存存放放,按按行行排排列列(因因内内存存是是一一维维存存储储空空间间)。a a是数组名且表示数组在内存中的首址。是数组名且表示数组在内存中的首址。 二维数组二维数组a是由是由3个元素组成个元素组成每个元素每个元素ai由包含由包含4个元个元素素的一维数组组成的一维数组组成例例inta3=1,4,5;a00a01a02a10a11a12100450第一维第一维长度省略初始化长度省略初始化l按元素排列顺序初始化按元素排列顺序初始化例例inta23=1,2,3,4,5,6;a00a01a02a10a11a12123456全部初始化全部初始化例例inta23=1,2,4;a00a01a02a10a11a12120400部分初始化部分初始化例例inta23=1,2,3,4,5,6;a00a01a02a10a11a12123456全部初始化全部初始化例例inta23=1,2,4;a00a01a02a10a11a12124000部分初始化部分初始化例例inta3=1,2,3,4,5;a00a01a02a10a11a12123450第一维第一维长度省略初始化长度省略初始化二维数组元素的引用二维数组元素的引用形式:形式:数组名数组名下标下标下标下标二维数组元素的初始化二维数组元素的初始化l分行初始化:分行初始化:程序举例程序举例例例将二维数组行列元素互换,存到另一个数组中将二维数组行列元素互换,存到另一个数组中(23矩阵转置)矩阵转置)a=123456b=142536#include#includeusingnamespacestd;intmain()inta23=1,2,3,4,5,6;intb32,i,j;coutarraya:endl;for(i=0;i=1;i+)for(j=0;j=2;j+)coutsetw(5)aij;bji=aij;coutendl;coutarrayb:endl;for(i=0;i=2;i+)for(j=0;j=1;j+)coutsetw(5)bij;coutmax真真假假max=aijrow=icolum=j输出输出:max和和row,colum#includeusingnamespacestd;intmain()inta34=1,2,3,4,9,8,7,6,-10,10,-5,2;inti,j,row=0,column=0,max;max=a00;for(i=0;i=2;i+)for(j=0;jmax)max=aij;row=i;column=j;coutmax=max,row=row,column=columnendl;return0;例例读入下表中值到数组,分别求各行、各列及表中所有数之和读入下表中值到数组,分别求各行、各列及表中所有数之和1246157982332517124622157931823334251724373935111#include#includeusingnamespacestd;intmain()intx54,i,j;for(i=0;i4;i+)for(j=0;jxij;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+)for(j=0;j4;j+)coutsetw(5)xij;coutendl;return0;例例charch5=H,e,l,l,o;ch0Hello逐个字符赋值逐个字符赋值ch1ch2ch3ch4有问题有问题!例例charch5=H,e,l,l,o;ch0Hello逐个字符赋值逐个字符赋值ch1ch2ch3ch4例例charch5=B,o,y;ch0Boy00逐个字符赋值逐个字符赋值ch1ch2ch3ch4例例charch5=“Boy”;ch0Boy00用字符串常量用字符串常量ch1ch2ch3ch4例例charch6=“Hello”;charch6=“Hello”;charch=“Hello”;用字符串常量用字符串常量ch0Helloch1ch2ch3ch40ch5逐个字符赋值初始化会在程序处理变量逐个字符赋值初始化会在程序处理变量ch时发生错误,时发生错误,因为因为C不知道其中的字符串到哪个元素为止。此外,如不知道其中的字符串到哪个元素为止。此外,如果花括号中提供的字符个数小于数组长度,将只为数组果花括号中提供的字符个数小于数组长度,将只为数组的前几个元素赋初值,其余的元素自动被赋予空字符。的前几个元素赋初值,其余的元素自动被赋予空字符。如果初值个数大于数组长度,则认为是语法错误。如果初值个数大于数组长度,则认为是语法错误。正确的做法是在初始化时加上结束符,即正确的做法是在初始化时加上结束符,即charch6=H,e,l,l,o,0;用字符串常量初始化会自动地在最后一个字符后面用字符串常量初始化会自动地在最后一个字符后面加上一个加上一个0,作为字符串的结束符。由于字符串的长度,作为字符串的结束符。由于字符串的长度在程序的运行过程中允许发生变化,所以在程序的运行过程中允许发生变化,所以C+要依靠结束要依靠结束符来判断字符串的结束,声明数组时必须留出这个位置,符来判断字符串的结束,声明数组时必须留出这个位置,换句话说,方括号中指定的元素个数必须大于将来存放字换句话说,方括号中指定的元素个数必须大于将来存放字符串的最大长度。符串的最大长度。与整型实型数组的初始化不同,声明数组时在方括号与整型实型数组的初始化不同,声明数组时在方括号中指定了元素个数后,初始化的字符串可以是没有字符的中指定了元素个数后,初始化的字符串可以是没有字符的空串,即空串,即”。字符数组字符数组v定义定义v字符数组的初始化字符数组的初始化l逐个字符赋值逐个字符赋值l用字符串常量用字符串常量v字符数组的引字符数组的引例例charc10,ch34;4.34.3字符数组和字符串字符数组和字符串字符数组和字符串字符数组和字符串例例chardiamond5=.,.,*,.,*,.,*,*,.,.,.,*,.,*,.,*,.,.,*;二维字符数组初始化二维字符数组初始化.*00.*.*0*.*.*.*0.*00diamond0diamond1diamond2diamond3diamond4例例charfruit7=“Apple”,”Orange”,”Grape”,”Pear”,”Peach”;二维字符数组初始化二维字符数组初始化fruit0fruit1fruit2fruit3fruit4Apple00Orange0Grape00Pear000Peach00例例 输出一个字符串输出一个字符串#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;Iamaboy0123456789例例 计算给定字符串的长度,不包括结束符计算给定字符串的长度,不包括结束符0。#include using namespace std;int main() char str=Happy; int i;i=0; while(stri!=0)i+; coutThe length of string is iendl; return 0;字符串字符串v字符串及其结束标志字符串及其结束标志l无字符串变量,用字符数组处理字符串无字符串变量,用字符数组处理字符串l字符串结束标志字符串结束标志:0例例 “hello”共共5个字符,在内存占个字符,在内存占6个字节个字节 字符串长度字符串长度5 h e l l o 0104 101 108 108 111 0内存存放字符内存存放字符ASCII码码结果:结果:Thelengthofstringis5字符串的输入输出字符串的输入输出字符串的输入输出字符串的输入输出 输出输出1)屏幕输出)屏幕输出#include using namespace std;int main() char a=China; couta;/a为数组名,将字符串输出至屏幕。 字符串的输入输出字符串的输入输出字符串的输入输出字符串的输入输出 输出输出2)字符串输出和整数、实数、字符输出的区别)字符串输出和整数、实数、字符输出的区别&对于整数、实数和字符,对于整数、实数和字符,cout每次只能输出一个。每次只能输出一个。&对于字符串既可一次输出,也可按字符多次输出。对于字符串既可一次输出,也可按字符多次输出。当当字字符符串串一一次次输输出出时时,系系统统根根据据0找找到到字字符符串串尾尾。若按字符一个个输出,若按字符一个个输出,cout根据字符串中字符个数输出。根据字符串中字符个数输出。for(i=0;i字符串中字符个数字符串中字符个数;i+)couta;/*a为数组名,从键盘输入多个字符,以回车作为结束,系统自动在读入的字符串未尾添加0。*/ 字符串的输入输出字符串的输入输出字符串的输入输出字符串的输入输出 输入输入2)字符串输入和整数、实数、字符输入的区别)字符串输入和整数、实数、字符输入的区别&对于整数、实数和字符,对于整数、实数和字符,cin每次只能输入一个。每次只能输入一个。&对于字符串既可一次输入,也可按字符多次输入。对于字符串既可一次输入,也可按字符多次输入。当当字字符符串串一一次次输输入入时时,系系统统自自动动在在尾尾部部添添加加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+;couta;(2)couta;是允许的,即允许在提取或插入操作符后面使用一个字符数是允许的,即允许在提取或插入操作符后面使用一个字符数组名实现向数组输入字符串或输出数组中保存的字符串的目组名实现向数组输入字符串或输出数组中保存的字符串的目的。的。计算机执行上述第一条语句时,要求用户从键盘上输入计算机执行上述第一条语句时,要求用户从键盘上输入一个不含空格的字符串,用空格或回车键作为字符串输入的一个不含空格的字符串,用空格或回车键作为字符串输入的结束符,系统就把该字符串存入到字符数组结束符,系统就把该字符串存入到字符数组a中,当然在存入中,当然在存入的整个字符串的后面将自动存入一个结束符的整个字符串的后面将自动存入一个结束符0。字符串的输入输出字符串的输入输出字符串的输入输出字符串的输入输出 例如:字符数组长度为例如:字符数组长度为10v输入字符串输入字符串string,结果为结果为stringv输入字符串输入字符串string,结果为结果为strv输入字符串输入字符串stringandchar,结果报错。结果报错。v输入字符串输入字符串“string”,结果为结果为“string”注意:输入的字符串的长度要小于数组注意:输入的字符串的长度要小于数组a的长度,这样才能够的长度,这样才能够把输入的字符串有效地存储起来,否则是程序设计的一个逻把输入的字符串有效地存储起来,否则是程序设计的一个逻辑错误,可能导致程序运行出错。另外,输入的字符串不需辑错误,可能导致程序运行出错。另外,输入的字符串不需要另加双引号定界符,只要输入字符串本身即可,假如输入要另加双引号定界符,只要输入字符串本身即可,假如输入了双引号则被视为一般字符。了双引号则被视为一般字符。例例题题:编编写写程程序序,实实现现功功能能:输输入入一一字字符符串串,计计算并输出该字符串的长度。算并输出该字符串的长度。确定算法:确定算法:用用字字符符数数组组str256保保存存字字符符串串,用用整整型型变变量量strlen记记录录长长度,初值为度,初值为0。1.显示输入提示信息显示输入提示信息2.输入字符串到输入字符串到str3.循环变量循环变量i取初值取初值04.如果如果stri的值是的值是0转到转到65.strlen加加1,i加加1,转回到,转回到46.输出输出strlen的值的值#includeusingnamespacestd;intmain()charstr256=;intstrlen=0;coutstr;inti=0;while(stri!=0)strlen+;i+;cout字符串的长度字符串的长度strlenn;return0;例例题题:编编写写程程序序,实实现现功功能能:输输入入一一字字符符串串,计计算并输出其中字母算并输出其中字母e(大小写不论)的个数。大小写不论)的个数。确定算法:确定算法:用用字字符符数数组组str256保保存存字字符符串串,用用整整型型变变量量count记记录录字字母母e的个数,初值为的个数,初值为0。1.显示输入提示信息显示输入提示信息2.输入字符串到输入字符串到str3.循环变量循环变量i取初值取初值04.如果如果stri的值是的值是0,转到,转到75.如果如果stri的值是字符的值是字符e或或E,count加加16.i加加1,转回到,转回到47.输出输出count的值的值#includeusingnamespacestd;intmain()charstr256=;intcount=0;coutstr;inti=0;while(stri!=0)if(stri=e|stri=E)count+;i+;cout字符串中字符串中e或或E的个数的个数countstr1;/abcinstr2;/cdei=0;while(str1i!=0)i+;/i=2j=0;while(str2j!=0)str1i=str2j;i+;j+;str1i=0;cout拼接后字符串拼接后字符串:str1str1;cinstr2;i=0;while(str1i!=0)i+;j=0;while(str2j!=0)str1i+=str2j+;/i+;/j+;str1i=0;cout拼接后字符串拼接后字符串:str1str1;cinstr2;i=0;while(str1i!=0)i+;j=0;while(str1i+=str2j+)!=0);cout拼接后字符串拼接后字符串:str1str;i=0;for(i=0;i=a)&(si=A)&(si=Z)j=si-A;countj+;i+;for(i=0;i26;i+)coutcounti;例例题题:编编写写程程序序,实实现现功功能能:键键盘盘选选择择币币种种,输输入入金金额额,然然后后折折算算成成人人民民币币金金额额输输出出。假假定定每每一一百百单单位外币折合人民币如下:位外币折合人民币如下:英镑英镑港币港币美元美元1221.25106.125827.75确定算法:确定算法:用用实实型型数数组组list4存存放放汇汇率率,从从下下标标1开开始始使使用用,在在声声明明时时初初始始化化;用用整整型型变变量量choice存存放放键键盘盘输输入入的的选选择择,用用实实型型变变量量money存存放放键键盘输入的金额,用实型变量盘输入的金额,用实型变量rmb存放计算结果。存放计算结果。1.显示选择的提示信息显示选择的提示信息2.从键盘输入选择到从键盘输入选择到choice3.如如果果choice等等于于0,转转到到4;如如果果choice等等于于1或或2或或3,转转到到5;如如果果choice为其他,值转到为其他,值转到94.结束运行结束运行5.显示输入金额的提示信息显示输入金额的提示信息6.从键盘输入金额到从键盘输入金额到money7.计算并输出计算并输出8.转到转到109.显示错误信息显示错误信息10.转回到转回到1#include#includeusingnamespacestd;intmain()floatlist4=0,1221.25,106.125,827.75;intchoice;floatmoney,rmb;while(1)coutchoice;switch(choice)case0:exit(0);case1:case2:case3:coutmoney;rmb=money*listchoice/100;cout折算人民币金额折算人民币金额rmbendl;break;default:cout19,转到,转到53、numbersi=numbersi-2+numbersi-14、i加加1,转回到,转回到25、跳跳出出本本次次循循环环,执执行行下下一一条条语语句句,进进入入另另一一个个新新循循环环,循循环变量环变量i取初值取初值16、如果、如果i19,转到,转到97、输出、输出numbersi8、i加加1,转回到,转回到69、结束运行、结束运行#includeusingnamespacestd;intmain()intnumbers21=0,1;/其余各位为零其余各位为零inti;for(i=2;i=19;i+)numbersi=numbersi-2+numbersi-1;for(i=0;i=19;i+)coutnumbersit;cout19,转到,转到64、numbersi=k+i5、i加加1,转回到,转回到36、跳出本次循环,执行下一条语句,进入新循环,、跳出本次循环,执行下一条语句,进入新循环,i取初值取初值17、如果、如果i19,转到,转到138、输出、输出numbersi9、count加加110、如果、如果count=5,继续执行继续执行11,否则转到,否则转到12(控制每行输出控制每行输出5个数个数)11、输出换行、输出换行count的值恢复为的值恢复为012、i加加1,转回到,转回到713、结束运行、结束运行#includeusingnamespacestd;intmain()intnumbers20;inti,k,count=0;coutk;for(i=0;i=19;i+)numbersi=k+i;for(i=0;i=19;i+)cout numbersi t;count+;if(count=5)coutendl;count=0;coutendl;return0;例例题题:编编写写程程序序,实实现现功功能能:从从键键盘盘输输入入一一个个学学生生成成绩绩,然然后后将将其其插插入入到到一一个个降降序序排排列列的的成成绩绩表表中中,插插入入后的成绩表仍然保持降序,最后输出结果。后的成绩表仍然保持降序,最后输出结果。假假定定成成绩绩表表存存放放在在数数组组scores中中,输输入入的的成成绩绩是是x,首首先先要要在在成成绩绩表表中中从从头头开开始始找找到到第第一一个个比比x小小的的成成绩绩,x就就应应该该插插在在这这个个成成绩绩之之前前,为为了了空空出出x的的存存放放位位置置,从从这这个个成成绩绩开开始始,直直到到最最后后一一个个成成绩绩,都要向后移动一个位置。都要向后移动一个位置。确定算法:确定算法:假假定定成成绩绩表表中中原原有有N个个成成绩绩,用用实实型型数数组组scoresN+2存存放放N个个成成绩绩,从从下下标标1开开始始,在在声声明明时时初初始始化化,多多余余一一个个位位置置准准备备插插入入新新的的成成绩绩;用实型变量用实型变量x存放键盘输入的成绩。存放键盘输入的成绩。1、输出原来的成绩表,输入、输出原来的成绩表,输入x2、准备用变量准备用变量p对准插入位置,对准插入位置,p的初值为的初值为13、只要、只要p不大于不大于N,并且并且x的值小于的值小于scoresp的值,就反复把的值,就反复把p加加14、循环变量、循环变量i的初值为的初值为N5、如果如果i小于小于p,转到转到86、把、把scoresi的值复制到的值复制到scoresi+17、i减减1,转回到,转回到58、把、把x的值复制到的值复制到scoresp9、输出新的成绩表输出新的成绩表#includeusingnamespacestd;#defineN5intmain()floatscoresN+2=0,92,88,72,59,32;floatx;intp,i;cout原成绩表:原成绩表:;for(i=1;i=N;i+)coutscoresi;coutx;p=1;while (p = N) & (x p;i-)scoresi+1=scoresi;scoresp=x;cout新成绩表:新成绩表:;for(i=1;i=N+1;i+)coutscoresi;coutn;return0;例例题题:编编写写程程序序,实实现现功功能能:对对一一个个包包含含10个个成成绩绩的的无无序序成成绩绩表表进进行行排排序序,其其成成为为降降序序排排列列的的成成绩绩表表,最最后输出结果。后输出结果。首首先先,成成绩绩表表的的第第1个个位位置置应应当当放放整整个个成成绩绩表表中中的的最最高高成成绩绩。在在整整个个成成绩绩表表中中寻寻找找一个最高成绩,然后把它换到第一个最高成绩,然后把它换到第1个位置。个位置。其其次次,排排除除已已经经处处理理妥妥当当的的第第1个个位位置置,在在其其余余位位置置上上寻寻找找一一个个最最大大的的,然然后后把把它它换到第换到第2个位置。个位置。再再,排排除除已已经经处处理理妥妥当当的的前前2个个位位置置,在在其其余余位位置置上上寻寻找找一一个个最最大大的的,然然后后把把它它换换到第到第3个位置。个位置。依依此此类类推推,等等到到倒倒数数第第2个个位位置置处处理理妥妥当当,整个成绩表就是降序排列的成绩表。整个成绩表就是降序排列的成绩表。如无序成绩表:如无序成绩表:67,34,90,88,55,74,95,82,43,92924382957455889034673443556774828890929592438267745588903495344355677482889092953443826774558890929534435567748288909295寻找最高成绩的程序,其核心片段如下寻找最高成绩的程序,其核心片段如下max=scores1;max_index=1;for(i=2;imax)max=scoresi;max_index=i;成成绩绩表表存存放放在在数数组组scores11中中,从从下下标标1的的位位置置开开始始存存放放。用用变变量量max保保存存当当前前的的最最大大值值,用用变变量量max_index保保存存当当前前的的最最大大值值所所在在的的位位置置。外外循循环环变变量量j表表示示处处理理第第几几个个位位置置,内内循循环变量环变量i控制寻找当前循环中的最大值。控制寻找当前循环中的最大值。max_index=1、scoresmax_index=671)i=2 scores2=34scoresmax_index=67max_index=33)i=4 scores4=88scoresmax_index=90max_index=3不变不变4)i=5 scores5=55scoresmax_index=90max_index=3不变不变5)i=6 scores6=74scoresmax_index=90max_index=77)i=8 scores8=82scoresmax_index=95max_index=7不变不变8)i=9 scores9=43scoresmax_index=95max_index=7不变不变9)i=10 scores10=92=10,循环结束转到循环结束转到103、用变量、用变量max保存保存scoresj的值,的值,max_index的初值取的初值取j4、循环变量循环变量i的初值取的初值取j+15、如果如果i10,转到转到86、如如果果scoresimax,用用scoresi的的值值刷刷新新max的的值值,让让max_index记下记下i的值的值7、循环变量、循环变量i加加1,转回到,转回到58、交换、交换scoresmax_index和和scoresj的值的值9、循环变量、循环变量j加加1,转回到,转回到210、输出、输出scores中的中的10个成绩数据个成绩数据#includeusingnamespacestd;intmain()intscores11=0,67,34,90,88,55,74,95,82,43,92;intmax,max_index,i,j;for(j=1;j10;j+)max=scoresj;max_index=j;for(i=j+1;imax)max=scoresi;max_index=i;scoresmax_index=scoresj;scoresj=max;cout排序结果排序结果;for(j=1;j=10;j+)coutscoresj;coutendl;return0;最最简简单单的的一一种种加加密密方方法法:约约定定一一个个字字符符变变换换表表,把把字字符串中的每个字符都按变换表转换成另一个字符。符串中的每个字符都按变换表转换成另一个字符。例例题题:编编写写程程序序,实实现现功功能能:从从键键盘盘输输入入一一个个完完全全由由小小写写字字母母组组成成的的字字符符串串,用用上上述述的的简简单单方方法法加加密密。输输出加密后的字符串。出加密后的字符串。确定算法:确定算法:先先用用一一个个字字符符型型数数组组list依依次次保保存存abcdxyz这这26个个小小写写字字母母的的转转换换结结果果字字符符。显显然然这这个个数数组组中中的的26个个字字符符不不能能有有重重复复,否否则则将将导导致致两两个个不不同同的的原原始始字字母母都都转转换换成成同同一一个个字字符符,以以后后无无法法正正确确解密。解密。1、输入原始字符串到、输入原始字符串到str2、循环变量循环变量i取初值取初值03、如果、如果stri的值是的值是0,转到,转到74、stri的的值值减减去去97,得得到到这这个个字字母母在在小小写写字字母母表表中中的的序序号号,用变量用变量j保存这个序号保存这个序号5、以以j的的值值作作为为下下标标,在在list中中得得到到这这个个字字母母的的转转换换结结果果,保保存存到到stri取代原始字母取代原始字母6、i加加1,转回到,转回到3,进行下一个字母的加密转换,进行下一个字母的加密转换7、输出转换后的、输出转换后的str,结束运行结束运行#includeusingnamespacestd;intmain()charlist27=kczuytmxsejdlribnhvawofpgq;charstr80;inti,j;coutstr;i=0;while(stri!=0)j=stri-97;stri=listj;i+;cout加密成为:加密成为:strn;return0;u字符串连接函数字符串连接函数strcat格式:格式:strcat(字符数组字符数组1,字符数组字符数组2)功能:把字符数组功能:把字符数组2连到字符数组连到字符数组1后面后面返值:返回字符数组返值:返回字符数组1的首地址的首地址说明:说明:字符数组字符数组1必须足够大必须足够大连接前连接前,两串均以两串均以0结束结束;连接后连接后,串串1的的0取消取消,新串最后加新串最后加0u字符串拷贝函数字符串拷贝函数strcpy格式:格式:strcpy(字符数组字符数组1,字符串字符串2)功能:将字符串功能:将字符串2,拷贝到字符数组,拷贝到字符数组1中去中去返值:返回字符数组返值:返回字符数组1的首地址的首地址说明:说明:字符数组字符数组1必须足够大必须足够大拷贝时拷贝时0一同拷贝一同拷贝不能使用赋值语句为一个字符数组赋值不能使用赋值语句为一个字符数组赋值例例charstr120,str220;str1=“Hello!”;( )str2=str1;( )v常用的字符串处理函数包含在头文件常用的字符串处理函数包含在头文件#include例例strcpy与与strcat举例举例#include #include using namespace std;int main() char destination25; char blank = , c= C+, visual = Visual; strcpy(destination, visual); strcat(destination, blank); strcat(destination, c); coutdestinationendl; return 0;Visual C+VsuaC+0123456789i024.l10Vsua0123456789i024.l10Vsua00123456789i24.l10u字符串比较函数字符串比较函数strcmp格式:格式:strcmp(字符串字符串1,字符串字符串2)功能:比较两个字符串功能:比较两个字符串比较规则:对两串从左向右逐个字符比较(比较规则:对两串从左向右逐个字符比较(ASCII码),码),直到遇到不同字符或直到遇到不同字符或0为止为止返值:返回返值:返回int型整数,型整数,a.若字符串若字符串1字符串字符串2,返回返回正整数正整数c.若字符串若字符串1=字符串字符串2,返回返回零零说明:说明:字符串比较不能用字符串比较不能用“=”,必须用必须用strcmpu字符串长度函数strlen格式:strlen(字符数组)功能:计算字符串长度返值:返回字符串实际长度,不包括0在内例例对于以下字符串,对于以下字符串,strlen(s)的值为:的值为:(1)chars10=A,0,B,C,0,D;(2)chars=tv0willn;(3)chars=x69082n;答案:答案:131#include #include void main() char str1 = Hello!, str2 = How are you?,str20; int len1,len2,len3; len1=strlen(str1); len2=strlen(str2); if(strcmp(str1, str2)0) strcpy(str,str1); strcat(str,str2); else if (strcmp(str1, str2)0) strcpy(str,str2); strcat(str,str1); else strcpy(str,str1); len3=strlen(str); coutstrendl; coutLen1=len1,Len2=len2,Len3=len3endl;例例strcmp与与strlen举例举例How are you?Hello!Len1=6,Len2=12,Len3=18例例比较比较inta23=5,6,7,8;与与inta23=5,6,7,8;5 6 07 8 05 6 78 0 0例例inta10;floatf2=1.2,2.2;例例inta5;a=2,4,6,8,10;例例inta10;floati=3;ai=10;例例charname0;floatweight10.3;intarray-100;例例charstr=“Hello”;charstr=H,e,l,l,o;h e l l oh e l l o02314h e l l o 0h e l l o 0023145练习练习练习练习教学与实验辅导(第教学与实验辅导(第3版)实验版)实验6
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号