




已阅读5页,还剩69页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第 4章数组和字符串 第 4章 数组和字符串 4.1 数组的概念 4.2 一维数组 4.3 二维数组 4.4 字符串与字符函数 4.1 数组的概念 1.数组的定义 2.数组的数据类型 3.数组的维数 1.数组的定义 按序排列的同类数据元素的集合就称为数组。 在 C语言中,一个数组可以分解为多个数组元素。 按数组元素类型的不同,数组又可分为数值型数组 、字符型数组、指针型数组、结构体型数组等各种 类别。 2.数组的数据类型 数组的数据类型可以是各种基本数据类型,如 int 、 float、 double、 char、 long等 。还可以指针型 、结构体型、共用体型、枚举型(后续章节将介 绍)等。 C语言规定,同一数组中的所有元素必须是相同 类型的,不允许同一个数组中包含不同的数据类 型。 3.数组的维数 一维数组的元素有一个下标、二维数组的元素有 两个下标、三维数组有三个下标。 C语言的数组可以是多维的,但一般常用的是一 维数组和二维数组。 4.2一维数组 4.2.1一维数组的定义 4.2.2一维数组的初始化 4.2.3一维数组的引用 4.2.1一维数组的定义 一维数组定义的语法格式如下: 类型说明符 数组名 数组长度 ; 其中: ( 1) “类型说明符 ”可以是任何一种基本数据类型或构 造数据类型。例如: int m8; /*定义一个整型数组 m,有 8个元素 */ char c20; /*定义一个字符数组 c,有 20个元素 */ ( 2) “数组名 ”是用户定义的数组标识符。其命名规则 和变量命名规则相同。 ( 3)数组名后的 “数组长度 ”表示数组中数据元素的个数, 通常是一个整型常量、整型变量或整型表达式。例如在 m8中,表示数组 m有 8个元素,下标从 0开始一直到 7, 这 8个数组元素分别是: m0、 m1、 m2、 m3、 m4、 m5、 m6、 m7, 注意没有 m8。 ( 4)一个数组定义语句中可以只定义一个数组,也可以定 义多个数组,还可以同时定义数组和变量。例如: double a10,b1; /*定义了一个有 10个元素的双精度型数组 a和一个双精度型变量 b1*/ 又例如: char f8,e1; /*定义了一个有 8个元素的字符型数组 f和一个字符型变量 e1*/ 4.2.2一维数组的初始化 在定义数组的同时给数组元素赋予初值称为数组 的初始化。 初始化赋值的一般形式为: 类型说明符 数组名 常量表达式 =数据值 1, 数据值 2, ,数据值 n; 其中在 中的各数据值即为各元素的初值,各值 之间用逗号间隔。 语言对数组的初始化赋值还有以下几点规定: ( 1)可以只给部分元素赋初值。没有赋初值的元素 :对于数值型数组,自动赋初值为 0;对字符型数 组,自动赋初值为空字符。 例如: int m10=1, 2, 3, 4; 定义的数组 m有 10个元素,但大括号内只有 4个初值 ,这表示只给前面 4个元素赋初值,后 6个元素值均为 0。 ( 2)只能给元素逐个赋值,不能给数组整体赋值。 例如:给数组 m中的 10个元素全部赋值 “2”只能用以下 形式来表示: int m10=2,2,2,2,2,2,2,2,2,2; 而不能为了方便写成如下的形式: int a10=2; ( 3)如果给全部元素赋值,则在数组说明中,可以不 给出数组元素的个数。其长度等于初值表中数组元素 的个数。例如: int m5=1,2,3,4,5; 可写为: int m =1,2,3,4,5; 4.2.3一维数组的引用 数组元素引用的一般形式为: 数组名 下标表达式 C语言规定只能逐个引用数组中的元素,而不能 一次引用整个数组。 1.引用说明 ( 1)下标表达式必须放在方括号内,且只能取整型值 。下标的下限是 0,而上限不能超过该数组定义时的 长度值减 1(即:数组长度 -1)。 ( 2)数组中的下标只能为整型常量或整型表达式。 ( 3)在语言中只能单独地使用数组元素,而不能一 次引用整个数组。 ( 4)任何一个数组元素的引用都可以看成是一个变量 的使用。 例 4.1数组元素的赋值及引用举例。 #include main() int i,m8; for(i=0;i=0;i-) printf(“%d “,mi); 程序的运行结果如下: 7 6 5 4 3 2 1 0 语言允许用表达式表示下标。 例 4.2数组元素用表达式表示下标应用举例。 #include main() int i,m8; for(i=0;i main() int n,i,m,x,min,min_m,a100; printf(“Please input the value of n:“); scanf(“%d”, /* 输入要排序数的个数 n不能大于 100 */ printf(“Please input your number:n“); 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. 4.4 字符串与字符函数 4.4.1字符数组 4.4.2字符串与字符数组 4.4.3字符串处理函数 4.4.4字符串函数应用举例 4.4.1字符数组 1.字符数组的定义 2.字符数组的初始化 3.字符数组举例 1.字符数组的定义 字符数组定义格式如下: 类型名 数组名 数组元素个数 ; 其中的 “类型名 ”必须是 char。 例如: char c10; 定义了一个名为 c的字符数组,包含 10个元素。 和数值数组一样,字符数组也可以是二维或多维数 组。例如: char c89; 2.字符数组的初始化 在定义字符数组时,可以直接对字符数组进行初始化 。 给字符数组赋初值时,如果花括号中字符的个数大于 字符数组定义的数据元素的个数,则编译系统会报告 出错。 如果花括号中数据元素的个数小于字符数组定义的数 据元素的个数, C语言规定:初始化中未给出数据元 素值得对应元素被自动赋值为空字符 0。 例如: char c10=c, , p, r, o, g, r, a,m; 赋值后各元素的值如下所示: c0=c c1= c2=p c3=r c4=o c5=g c6=r c7=a c8=m c9=0 3.字符数组举例 例 4.7在计算机屏幕上显示 “Hello World”。 #include main() char str13=H, e, l, l, o, , W, o, r, l, d, !; /*定义并初始化数组 */ int i; /*用于输出字符数组中字符的个数 */ for(i=0;i main () static char diamond 5= , ,*, ,*, ,*,*, , , ,*, ,*, ,*, , ,*; /*第二维大小不能省略 */ int i,j; for (i=0;i main() char c7=C, ,H,e,l,l,o; int i; for(i=0;i main() char c =“How are you“; printf(“%sn“,c); 程序运行后的输出结果为: How are you 例 4.11请输入一个长度小于 20的字符串,并 将该字符串输出。 #include main() char m20; printf(“input string:n“); scanf(“%s“,m); printf(“%sn“,m); 注意:当用 scanf函数输入字符串时,字符串中不 能含有空格,否则将以空格作为串的结束符。 例如,当输入的字符串中含有空格时,运行情况为 : input string: hello human hello 从输出结果可以看出,空格以后的字符都未能输出 。为了避免这种情况,可多设几个字符数组分段存 放含空格的串。 程序可改写成如下形式: #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 4.字符串大小的比较 字符串可以进行大小比较,比较时按照从前向后 的顺序逐个字符比大小。 字符大的对应字符串就大。 例如: “abcd“小于 “bcde“。 如果全部字符均相同,则字符串相等。 例如: “abcd“等于 “abcd“。 如果字符串长度不等,而前面字符均相同,则长 度大的字符串为大。 例如: “abcd“大于 “abc“。 4.4.3字符串处理函数 1.字符串输出函数 puts 2.字符串输入函数 gets 3.测试字符串长度函数 strlen 4.字符串连接函数 strcat 5.字符串比较函数 strcmp 6.字符串拷贝函数 strcpy 7.小写变大写函数 strupr 8.大写变小写函数 strlwr 1.字符串输出函数 puts puts函数调用的一般形式为: puts(字符数组 ); 该函数的功能是:把字符数组中的字符串输出到 显示器,即在屏幕上显示该字符串的内容。其中 ,字符串的结束标记将转换成回车换行符。 例 4.12puts函数的应用举例。 #include“stdio.h“ main() char c=“HellonHuman“; puts(c); 程序运行后,将在显示器上输出 : Hello human 2.字符串输入函数 gets gets函数的一般调用形式为: gets(字符数组 ); 该函数的功能是:从标准输入设备 键盘上输 入一个字符串,并存入到指定的字符数组中。 例 4.13gets函数的应用举例。 #include“stdio.h“ main() char m20; printf(“input string:n“); gets(m); puts(m); 程序的运行情况为: Input string: hello human hello human 可以看出当输入的字符串中含有空格时,输出仍为全 部字符串。这说明 gets函数并不以空格作为字符串输 入结束的标志,而只以回车作为输入结束的标志。 注意: gets函数和使用 “%s“格式的 scanf函数都可以 从键盘接受字符串,但在输入时有所区别: ( 1)对于 scanf函数, “回车 “或 “空格 “都看成字符串结 束标记; ( 2)对于 gets函数,只有 “ 回车 ” 才作为字符串结束 标记, “ 空格 ” 看成字符串的一部分。 u说明: puts函数和 gets函数只能输入 /输出一个字符 串。例如: puts(str1,str2); 和 gets(str1,str2,str3);都是错误的 。 3.测试字符串长度函数 strlen strlen函数的功能是:测试指定字符串的实际长度( 不含字符串结束标志 0),并返回字符串的长度。 其一般的调用形式为: strlen(字符数组 ); 其中,函数的参数可以是字符型数组名或字符串常 数,函数的返回值是字符串长度。 例 4.14strlen函数的应用举例。 #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 4.字符串连接函数 strcat strcat函数的调用格式为: strcat(字符数组 1,字符数组 2); 该函数的功能是:把字符数组 2中的字符串连接到 字符数组 1 中字符串的后面,同时删去字符串 1中 的串标志 0,组成新的字符串。该函数返回值是 字符数组 1的首地址。 例 4.15strcat函数的应用举例。 #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 5.字符串比较函数 strcmp strcmp函数用来对两个字符串进行比较,其调用格式为 strcmp(字符串 1,字符串 2); 其中,字符串 1和字符串 2可以是字符型数组名或字符串常数 。 该函数的功能是按照 ASCII码顺序比较两个数组中的字符串, 并由函数返回值返回如下所示的比较结果: 字符串 1等于字符串 2时,返回值为: 0。 字符串 1大于字符串 2时,返回值为:字符串 1-字符串 2的值, 大于 0。 字符串 1小于字符串 2时,返回值为:字符串 1-字符串 2的值, 小于 0 。 例 4.16strcmp函数的应用举例。 #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 8.大写变小写函数 strlwr strlwr函数用来将字符串中的大写字母转换成小写 字母,其他字符(包括小写字母和非字母)不转 换。 其调用格式为 strlwr(字符串 ); 其中,函数的参数可以是字符型数组名或字符串 常数,函数的返回值是转换后的字符串。 lwr表示 lowercase。 例 4.19将输入的大写字母字符串转换成小写字母 字符串,并输出。 #include #include main() char st80; puts(“please input a string:“); gets(st); strlwr(st); puts(st); 程序运行情况为: please input a string: WELCOME welcome 4.4.4字符串函数应用举例 例 4.21 统计输入的文字有多少个单词。 #include “stdi
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年山东省商河县移动公司公开招聘工作人员试题带答案详解
- 2024年青海省乌兰县烟草公开招聘工作人员试题带答案详解
- 2024年江西省婺源县移动公司公开招聘工作人员试题带答案详解
- 2024年湖南省新田县移动公司公开招聘工作人员试题带答案详解
- 2024年福建省德化县移动公司公开招聘工作人员试题带答案详解
- 小学生作文格式课件
- 小学生作文尝试课件
- 小学生作文下棋课件
- 中国桉油行业市场调查报告
- 修建集中治丧点可行性报告
- 基础会计-中职课件
- 平安建设评估方案(3篇)
- 2025年安庆怀宁县事业单位招聘考试试题【答案】
- 2025年上海市中考招生考试数学真题试卷(真题+答案)
- 集团知识产权管理办法
- 华为品牌宣传管理办法
- 灭鼠灭蟑螂培训课件
- 2025年广东省中考英语试题卷(含答案解析)
- DB32∕T 4549-2023 绿色港口评价指标体系
- 浙江省温州市瑞安市2023-2024学年四年级下学期英语期末试卷6月(含答案)
- 高二文科考试数学试卷
评论
0/150
提交评论