幻灯片-C语言程序设计视频教程-徐红波-第7章

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

C程序设计讲师:徐红波Email:x_h_b@tom.com第7章数组前几章使用的都是属于基本类型(整型、字符型、实型)的数据,C语言还提供了构造类型的数据,它们有数组类型、结构体类型和共用体类型。构造类型数据是由基本类型数据按一定规则组成的,因此它们又被称为“导出类型”。数组是有序数据的集合。数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来惟一地确定数组中的元素。7.1一维数组的定义和引用7.1.1一维数组的定义一维数组的定义方式为类型说明符数组名[常量表达式];例如:inta[10];说明:(1)数组名的命名规则和变量名相同,遵循标识符命名规则。(2)在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。(3)常量表达式中可以包括常量和符号常量,不能包含变量。C语言不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。7.1.2一维数组元素的引用数组必须先定义,然后使用。C语言规定只能逐个引用数组元素而不能一次引用整个数组。数组元素的表示形式为数组名[下标]下标可以是整型常量或整型表达式。[例7.1]数组元素的引用#includestdio.hvoidmain(){inti,a[10];for(i=0;i=9;i++)a[i]=i;for(i=9;i=0;i--)printf(“%d”,a[i]);printf(“\n”);}7.1.3一维数组的初始化对数组元素的初始化可以用以下方式实现(1)在定义数组时对数组元素赋予初值。(2)可以只给一部分元素赋值。(3)如果想使一个数组中全部元素值为0,可以写成:inta[2]={0,0}或inta[2]={0};。(4)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。7.1.4一维数组程序举例[例7.2]用数组来处理求Fibonacci数列问题#includestdio.hvoidmain(){inti;intf[20]={1,1};for(i=2;i20;i++)f[i]=f[i-2]+f[i-1];for(i=0;i20;i++){if(i%5==0)printf(“\n”);printf(“%12d”,f[i]);}}[例7.3]用起泡法对10个数排序(由小到大)起泡法的思路:将相邻两个数比较,将小的调到前头7.2二维数组的定义和引用7.2.1二维数组的定义二维数组定义的形式为类型说明符数组名[常量表达式][常量表达式];例如:floata[3][4],b[5][10];二维数组可被看作是一种特殊的一维数组:它的元素又是一个一维数组。二维数组中元素排列的顺序是按行存放的。即在内存中先顺序存放第一行的元素,再存放第二行的元素。C语言允许使用多维数组。7.2.2二维数组的引用二维数组元素的表示形式为数组名[下标][下标]例如a[2][3]。下标可以是整型表达式,如a[2-1][2*2-1]。数组元素可以出现在表达式中,也可以被赋值。例如:b[1][2]=a[2][3]/2下标值应在已定义的数组大小的范围内。常出现的错误是:inta[3][4];……a[3][4]=3;7.2.3二维数组的初始化可以用下面的方法对二维数组初始化(1)分行给二维数组赋初值。(2)可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。(3)可以对部分元素赋初值。(4)如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。7.2.4二维数组程序举例[例7.4]将一个二维数组行和列的元素互换,存到另一个二维数组中。例如:a=456123b=456123[例7.5]有一个3×4的矩阵,要求编程求出其中值最大的那个元素的值,以及其所在的行号和列号进行9-j次比较fori=0to2max=a[0][0]a[i][j]max真假forj=0to3max=a[i][j]row=icolumn=j输出max和row、column7.3字符数组用来存放字符数据的数组是字符数组。字符数组中的一个元素存放一个字符。7.3.1字符数组的定义字符数组定义的一般形式为char数组名[常量表达式][常量表达式]……由于字符型与整型是相互通用的,因此也可以定义一个整型数组,用它存放字符数据。intc[10];c[0]=‘a’;7.3.2字符数组的初始化对字符数组初始化,最容易理解的方式是逐个字符赋给数组中各元素。如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。如果花括号中提供的初值个数大于数组长度,则按语法错误处理。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符(即’\0’)。如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。7.3.3字符数组的引用可以引用字符数组中的一个元素,得到一个字符。[例7.6]输出一个字符串#includestdio.hvoidmain(){charc[10]={‘I’,‘a’,‘m’,‘‘,‘a’,‘‘,‘b’,‘o’,‘y’};inti;for(i=0;i10;i++)printf(“%c”,c[i]);printf(“\n”);}[例7.7]输出一个菱形图#includestdio.hvoidmain(){chardiamond[][5]={{‘‘,’‘,’*’},{‘‘,’*’,’‘,’*’},{‘*’,’‘,’‘,’‘,’*’},{‘‘,’*’,’‘,’*’},{‘‘,’‘,’*’}};inti,j;for(i=0;i5;i++){for(j=0;j5;j++)printf(“%c”,diamond[i][j]);printf(“\n”);}}7.3.4字符串和字符串结束标志在C语言中,是将字符串作为字符数组来处理的。字符串中的字符是逐个存放到数组元素中的。在实际工作中,人们关心的往往是字符串的有效长度而不是字符数组的长度。为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符’\0’作为标志。系统对字符串常量也自动加一个’\0’作为结束符。字符串作为一维数组存放在内存中。对C语言处理字符串的方法有以上的了解后,再对字符数组初始化的方法补充一种方法,即用字符串常量来使字符数组初始化。7.3.5字符数组的输入输出字符数组的输入输出可以有两种方法:(1)逐个字符输入输出。用格式符“%c”输入或输出一个字符。(2)将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串的输入输出。注意:(1)输出字符不包括结束符’\0’。(2)用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。(3)如果数组长度大于字符串的实际长度,也只输出到遇’\0’结束。(4)如果一个字符数组中包含一个以上’\0’,则遇第一个’\0’时输出就结束。(5)可以用scanf函数输入一个字符串。(6)按字符数组名找到其数组起始地址,然后逐个输出其中的字符,直到遇’\0’为止。7.3.6字符串处理函数在C函数库中提供了一些用来处理字符串的函数,使用方便。几乎所有版本的C语言编辑系统都提供这些函数。1、puts函数函数原型:intputs(char*str);功能:把str指向的字符串输出到标准输出设备,将’\0’转换为换行符’\n’返回值:若执行成功,返回非负值,否则,返回EOF2、gets函数函数原型:char*gets(char*str);功能:从终端输入一个字符串到字符数组str返回值:若执行成功,返回字符数组的起始地址,否则,返回NULL3、strcat函数函数原型:char*strcat(char*str1,char*str2);功能:把字符串str2接到str1后面,str1最后面的’\0’被取消返回值:str14、strcpy函数原型:char*strcpy(char*str1,char*str2);功能:把str2指向的字符串复制到str1中去返回值:str15、strcmp函数函数原型:intstrcmp(char*str1,char*str2);功能:比较两个字符串str1、str2返回值:str1str2,返回负数;str1=str2,返回0;str1str2,返回正数6、strlen函数函数原型:unsignedintstrlen(char*str);功能:统计字符串str中字符的个数(不包括终止符’\0’)返回值:返回字符个数7、strlwr函数函数原型:char*strlwr(char*str);功能:将字符串str中大写字符换成小写字母返回值:str8、strupr函数函数原型:char*strupr(char*str);功能:将字符串str中小写字符换成大写字母返回值:str7.3.7字符数组应用举例[例7.8]输入一行字符,统计其中有多少个单词,单词之间用空格分隔开[例7.9]有3个字符串,要求找出其中最大者#includestdio.h#includestring.hvoidmain(){charstring[20];charstr[3][20];inti;for(i=0;i3;i++)gets(str[i]);if(strcmp(str[0],str[1])0)strcpy(string,str[0]);elsestrcpy(string,str[1]);if(strcmp(str[2],string)0)strcpy(string,str[2]);printf(“\nthelargeststringis:\n%s\n”,string);}习题7.3求一个3×3的整型矩阵对角线元素之和。7.4已有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。7.5将一个数组中的值按逆序重新存放。例如,原来顺序为8,6,5,4,1。要求改为1,4,5,6,8。7.6输出以下的杨辉三角形(要求输出10行)11112113311464115101051……………....7.11输出以下图案:*************************7.13编一程序,将两个字符串连接起来,不要用strcat函数。7.14编一个程序,将两个字符串s1和s2比较,若s1s2,输出一个正数;若s1=s2,输出0;若s1s2,输出一个负数。不要用strcpy函数。两个字符串用gets函数读入。输出的正数或负数的绝对值应是相比较的两个字符串相应字符的ASCII码的差值。7.15编写一个程序,将字符数组s2中的全部字符复制到字符数组s1中。不用strcpy函数。复制时,’\0’也要复制过去。’\0’后面的字符不复制。

1 / 36
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功