数组和字符串3.ppt_第1页
数组和字符串3.ppt_第2页
数组和字符串3.ppt_第3页
数组和字符串3.ppt_第4页
数组和字符串3.ppt_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章数组和字符串 1 第4章 数组和字符串 n4.1 数组的概念 n4.2 一维数组 n4.3 二维数组 n4.4 字符串与字符函数 2 4.1 数组的概念 n问题的提出: n第一个问题:输入100个学生的“C程序设计 ”课程的成绩,将这100个分数从小到大输 出。 n第二个问题:输入100个学生的“C程序设计 ”课程的期中和期末成绩,算出总评成绩, 总评成绩为“30%期中成绩+70%期末 成绩”,计算总评成绩的分数段情况。 3 1.数组的定义 n按序排列的同类数据元素的集合就称为数组。 n从概念上来说,数组是一组变量,这组变量应该满 足下列条件: n具有有相同的名字 n 具有相同的数据类型 n 在存储器中连续存放。 n按数组元素类型的不同,数组又可分为 n数值型数组 n字符型数组 n指针型数组 n结构体型数组 4 2.数组的数据类型 n数组的数据类型可以是各种基本数据类型 n如int、float、double、char、long等 。 n还可以是: n指针型 n结构体型 n共用体型 n枚举型 (以上类型后续章节介绍) n同一数组中的所有元素必须是相同类型的。 5 3.数组的维数 n一维数组 n元素有一个下标,如a1 n二维数组 n元素有两个下标,如a11 n三维数组 n三个下标,如a111 nC语言的数组可以是多维的,但一般常用的是一维数 组和二维数组。 6 4.2一维数组 n4.2.1一维数组的定义 n4.2.2一维数组的初始化 n4.2.3一维数组的引用 7 4.2.1一维数组的定义 n一维数组定义的语法格式如下: 类型说明符 数组名 数组长度; n其中: (1)“类型说明符”可以是任何一种基本数据类型或构造 数据类型。例如: int data5; /*整型数组data,有5个元素。*/ char string20; /*字符型数组string,有20个元素 */ (2)“数组名” 命名规则和变量命名规则相同。 (3)数组名后的“数组长度”表示数组中数据元素 的个数,数组长度只能是一个整型常量。 8 (4)一个数组定义语句中可以只定义一个 数组,也可以定义多个数组,还可以同时 定义数组和变量。例如: float b10,c20,f; 定义了: 单精度浮点型数组b,有10个元素; 单精度浮点型数组c,有20个元素; 浮点型变量f。 9 程序段一: #define Size 5 main() int aSize,bSize+10; /*正确 */ 程序段二: main() int n=5; int datan; /*错误 */ 例如: 10 一组red整数 11 16位 数组数组redred有有1313个元素,下标为个元素,下标为0 01212 注意:没有red13。 定义整型数组red 12 4.2.2一维数组的初始化 n初始化是指在数组定义时给数组元素赋予初值。 n格式: 类型说明符 数组名常量表达式=数据值1, 数据值2,数据值n; n注意: n数组初始化是在编译阶段进行的,由可执行语句完成 的,因此不能将初始化的“=”与赋值号混淆。 n规定: n可以只给部分元素赋初值。没有赋初值的元素:对于 数值型数组,自动赋初值为0;对字符型数组,自动赋 初值为空字符。 例如: 13 int red13=1,2,3,4; n则red4red12的初值都为0。 n只能给元素逐个赋值,不能给数组整体赋值。 n例如:给数组red中的13个元素全部赋值“2”只能用以下形式来表 示: int red13=2,2,2,2,2,2,2,2,2,2,2,2,2; n而不能为了方便写成如下的形式: int red13=2; n初始化数组时,允许省略数组的长度。 n例如: int red13=1,2,3,4,5,6,7,8,9,10,11,12,13; 可写为: int red =1,2,3,4,5,6,7,8,9,10,11,12,13; 14 4.2.3一维数组的引用 n格式: 数组名下标表达式 n其中: n数组下标可以是整型变量或整型表达式, n任何一个数组元素的引用都可以看成是一个变量的使用。 n下标从0开始,不能大于数组长度-1 n例如: data4、datai+j、datai+ 都是合法的引用方式。 15 【例4.1】数组m8存储其下标值,反向输出m的值。 #include main() int i,m8; for(i=0;i=0;i-) printf(“%d “,mi); 程序的运行结果如下: 7 6 5 4 3 2 1 0 16 允许用表达式表示下标。 【例4.2】在数组m8中存储偶数并输出。 #include main() int i,m8; for(i=0;iai+1) t=ai;ai=ai+1; ai+1=t; printf(“the sorted numbers:n”); for(i=1;iai+1 FT aiai+1 输出a1an 27 9 8 5 4 2 0 0 8 5 4 2 9 0 2 5 4 8 9 0 2 4 5 8 9 交换过程 结 果 第 5 步 第 4 步 第 3 步 第 2 步 第 1 步 0 2 4 5 8 9 0 2 4 5 8 9 2、用选择法对10个数进行升序排序。 算法:每次将最小的数放到正确的位置。 思路:思路: 设有设有mm个数,排序过程分为个数,排序过程分为m-1m-1 个步骤:个步骤: 第第1 1步、在步、在mm个数中找出最小数,个数中找出最小数, 然后和第一个数交换,前然后和第一个数交换,前1 1个数已个数已 经排好序。经排好序。 第第2 2步、在步、在m-1m-1个数中找出最小数个数中找出最小数 ,然后和第,然后和第2 2个数交换,前个数交换,前2 2个数个数 已经排好序。已经排好序。 第第k k步、在步、在m-k+1m-k+1个数中找出最小个数中找出最小 数,然后和第数,然后和第k k个数交换,前个数交换,前k k个个 数已经排好序。数已经排好序。 这样一直到第这样一直到第m-1m-1步结束。步结束。 28 main() int a10, i,j,t,k; for(i=0;i main() int m34,n43,i,j; printf(“Please enter the number of m34:n“); for(i=0;i main() int i,j; int x,y; int m34=12,1,2,4,2,3,4,5,5,6,7,8; int min=m00; for(i=0;imij) min=mij; x=i; y=j; printf(“The min of m34 is %d.n“,min); printf(“The row of min is %d and the colum of min is %d.“,x,y); The min of m34 is 1. The row of min is 0 and the colum of min is 1. 51 练一练:判断下面程序的运行结果: #include “stdio.h“ void main() int i,j,a32; for (i=0;i=0 n else n 54 nprintf(“n007Error data! Please input two scores a student again:“); n n temp=.3*scorei0+.7*scorei1; /*计算总评成绩 */ n scorei2=(int)temp; n i+; n n for (i=0;i main () static char diamond 5= , ,*, ,*, ,*,*, , , ,*, ,*, ,*, , ,*; /*第二维大小不能省略*/ int i,j; for (i=0;i=0;i-) n /*从最后一个字符开始逆向输出 */ n putchar(ci); n 62 4.4.2字符串与字符数组 n1.字符串初始化赋值 n2.用二维数组存放多个字符串 n3.字符数组的输入/输出 n4.字符串大小的比较 63 1.字符串初始化赋值 n语言允许用字符串的方式对数组作初始化赋值。具体 有两种方式: (1)按单个字符的方式赋初值,其中必须有一个字符是 字符串的结束标记。例如: char s=1, 2,3,0; (2)直接在初值表中用双引号写一个字符串常量。例如 : char s=“123”; /*相当于char s4=“123”; */ 其中的“”可以省略,如: char s=“123“; s0的值为1,s1的值为2,s2的值为3,s3的值为0 。字符数组s中存放的是一个字符串。 64 2.用二维数组存放多个字符串 n当需要处理多个字符串时,可以采用二维数组,此 时二维数组的列值取最大字符串的长度。 n例如:存放三个字符串”123”、”ab”、”A”可采用如 下的形式: char s34=“123“,“ab“,“A“; n表示: 1230 ab0 A0 65 3.字符数组的输入/输出 n关于字符数组的输入/输出,有如下规定: (1)逐个字符输入/输出。用格式符“%c“输入/输出 一个字符。 (2)将整个字符串一次性输入/输出。用格式符 “%s“对整个字符串进行一次性输入/输出。 n注意:使用“%s“格式从键盘上向字符数组中输入 字符串时,回车换行符或空格符号均作为字符串 的结束标记。 66 #include main() char c5=H,e,l,l,o; int i; for(i=0;i main() char c =“Hello“; printf(“%sn“,c); 67 【例4.11】请输入一个长度小于20的字符串,并 将该字符串输出。 #include main() char m20; printf(“input string:n“); scanf(“%s“,m); printf(“%sn“,m); 程序运行情况为: input string: hello human hello 空格以后的字符都未能输出( 字符串以空格或回车作为串 的结束符)。 为了避免这种情况,可多设几 个字符数组分段存放含空格 的串。 68 n程序可改写成如下形式: #iclude main() char m16,m26; printf(“input string:n“); scanf(“%s%s“,m1,m2); printf(“%s %s n“,m1,m2); 修改后的程序运行情况为: input string: abcd efghi abcd efghi 69 4.字符串大小的比较 n字符串可以进行大小比较,比较时按照从前向后的 顺序逐个字符比大小。 字符大的对应字符串就大。 例如:“abcd“小于“bcde“。 如果全部字符均相同,则字符串相等。 例如:“abcd“等于“abcd“。 如果字符串长度不等,而前面字符均相同,则长度 大的字符串为大。 例如:“abcd“大于“abc“。 70 4.4.3字符串处理函数 n1.字符串输出函数puts n2.字符串输入函数gets n3.测试字符串长度函数strlen n4.字符串连接函数strcat n5.字符串比较函数strcmp n6.字符串拷贝函数strcpy n7.小写变大写函数strupr n8.大写变小写函数strlwr 71 1.字符串输出函数puts n调用形式: puts(字符数组); n功能:把字符数组中的字符串输出到显示器,即在屏 幕上显示该字符串的内容。其中,字符串的结束标记 将转换成回车换行符。 72 【例4.12】puts函数的应用举例。 #include“stdio.h“ main() char c=“HellonHuman“; puts(c); 程序运行后,将在显示器上输出: Hello human 73 #include “stdio.h“ void main() char str=“Hello“; printf(“%s“,str); printf(“%s“,str); 运行结果 ? #include “stdio.h“ void main() char str=“Hello“; puts(str); puts(str); 运行结果: ? 读程序: 74 2.字符串输入函数gets n调用形式: gets(字符数组); n功能:从键盘上输入一个字符串,并存入到指定的字符数组中。 【例4.13】gets函数的应用举例。 #include“stdio.h“ main() char m20; printf(“input string:n“); gets(m); puts(m); 程序的运行情况为: Input string: hello human hello human 75 n可以看出当输入的字符串中含有空格时,输出仍为全 部字符串。这说明gets函数并不以空格作为字符串输 入结束的标志,而只以回车作为输入结束的标志。 注意:gets函数和使用“%s“格式的scanf函数都可以 从键盘接受字符串,但在输入时有所区别: (1)对于scanf函数,“回车“或“空格“都看成字符串结 束标记; (2)对于gets函数,只有“回车”才作为字符串结束 标记,“空格”看成字符串的一部分。 u说明:puts函数和gets函数只能输入/输出一个字符 串。例如: puts(str1,str2); 和gets(str1,str2,str3);都是错 误的。 76 3.测试字符串长度函数strlen n功能:测试指定字符串的实际长度(不含字符串结 束标志0),并返回字符串的长度。 n调用形式: strlen(字符数组); n其中 n函数的参数可以是字符型数组名或字符串常数 n函数的返回值是字符串长度。 77 【例4.14】strlen函数的应用举例。 #include #include main() int n; static char m=“Hello Human“; n=strlen(m); printf(“The lenth of the string is %dn“,n); 程序的运行结果如下: The lenth of the string is 11 78 4.字符串连接函数strcat n调用格式: strcat(字符数组1,字符数组2); n功能: n把字符数组2中的字符串连接到字符数组1 中字符串的后面 ,同时删去字符串1中的串标志0,组成新的字符串。 n该函数返回值是字符数组1的首地址。 79 【例4.15】strcat函数的应用举例。 #include #include main() static char m130=“My name is “; char m210; printf(“input your name:n“); gets(m2); strcat(m1,m2); puts(m1); 程序的运行情况如下: input your name: human My name is human 80 5.字符串比较函数strcmp nstrcmp函数用来对两个字符串进行比较,其调用格式为 strcmp(字符串1,字符串2); n其中,字符串1和字符串2可以是字符型数组名或字符串常数 。 n功能: n按照ASCII码顺序比较两个数组中的字符串,并由函数返回值返回如 下所示的比较结果: 字符串1等于字符串2时,返回值为:0。 字符串1大于字符串2时,返回值为:字符串1-字符串2的值,大于0。 字符串1小于字符串2时,返回值为:字符串1-字符串2的值,小于0 。 81 【例4.16】strcmp函数的应用举例。 #include #include main() int n; static char m115,m2=“hello human“; printf(“input a string:n“); gets(m1); n=strcmp(m1,m2); if(n=0) printf(“m1 equale m2n“); if(n0) printf(“m1m2n“); if(n #include main() char str80; puts(“please input a string:“); gets(str); strupr(str); puts(str); 程序的运行情况为: please input a string: welcome WELCOME 86 8.大写变小写函数strlwr n调用格式为 strlwr(字符串); n功能:strlwr函数用来将字符串中的大写字母转换成 小写字母,其他字符(包括小写字母和非字母)不转 换。 n其中,函数的参数可以是字符型数组名或字符串常数 ,函数的返回值是转换后的字符串。lwr表示 lowercase。 87 【例4.19】将输入的大写字母字符串转换成小写字母 字符串,并输出。 #include #include main() char st80; puts(“please input a string:“); gets(st); strlwr(st); puts(st); 程序运行情况为: please input a string: WELCOME welcome 88 4.4.4字符串函数应用举例 【例4.21】 统计输入的文字有多少个单词。 #include “stdio.h“ main () char st80; int i,num=0,word=0; char c; puts(“Please input a string:n“); gets(st); /* 输入一段文字到一维

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论