c语言学习,c语言课件第06章_第1页
c语言学习,c语言课件第06章_第2页
c语言学习,c语言课件第06章_第3页
c语言学习,c语言课件第06章_第4页
c语言学习,c语言课件第06章_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

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

文档简介

1、第6章 数 组本章学习意图本章学习意图熟悉数组元素在内存中的存储方式熟悉数组元素在内存中的存储方式把握一维数组的定义、初始化和引用把握一维数组的定义、初始化和引用把握二维数组的定义、初始化和引用把握二维数组的定义、初始化和引用把握字符数组的定义、特点及初始化方式把握字符数组的定义、特点及初始化方式熟悉字符串操作库函数的应用熟悉字符串操作库函数的应用把握数组在程序设计中的应用本领把握数组在程序设计中的应用本领Return6.1 一维数组的定义和引用一维数组的定义和引用6.2 二维数组的定义和引用二维数组的定义和引用6.3 字符数组与字符串字符数组与字符串6.4 数组应用举例数组应用举例 在操纵统

2、计机解决现实咨询题时,常常需要操作大量的具有一样性质的信息,似一批商品的价钞票,一个企业的职工工资,一个班级的学生成绩等.操作这类信息时使用单个的根基类型的变量去描述明显是不公道的,所以,C语言提供了数组以描述这类信息. 概述一维数组是只有一维数组是只有1 1个下标的数组个下标的数组. . 1 1一维数组的定义形式一维数组的定义形式: : 信息类型信息类型 数组名数组名11常量表达式常量表达式1, 1, 数组名数组名22常量表达式常量表达式22 ; 例似: int a10 ;定义了一个数组,数组名为a,有10个元素,这10个元素分不是:a0、a1、a2、a3、a4、.、a8、a9.每个元素的类

3、型均为int. 2 2讲明讲明: :(1 1)“信息类型信息类型”是指数组元素的信息类型是指数组元素的信息类型. .即每一个数组元素即每一个数组元素的信息类型的信息类型, , 包罗整数型、浮点型、字符型、指针型以及结构体包罗整数型、浮点型、字符型、指针型以及结构体形和联合体形形和联合体形. .例似例似: : int a10 int a10; * *定义整型数组定义整型数组a,a,共有共有1010个元素个元素* * float b20 float b20; * *定义单精度实型数组定义单精度实型数组b,b,共有共有2020个元素个元素* * char c5 char c5; * *定义字符型数组

4、定义字符型数组c,c,共有共有5 5个元素个元素* *6.1 一维数组的定义和引用(2)数组名与变量名一样,必须遵循标识符命名法那么.(3)“常量表达式”必须用方括号括起来,示意数组的元素个数(又称数组长度),它是一个整型值,其中能够见谅常数和符号常量,但不能见谅变量.(4)数组元素的下标,是元素相对数组起始地址的偏移量,从0最先次序编号.(5)数组名中存放的是一个地址常量,它代表整个数组的首地址.同一数组中的全部元素,按其下标的次序占用一段接连地址的存储单元. 注重注重:C语言不许可对数组的大小做动态定义语言不许可对数组的大小做动态定义,似下面做法是似下面做法是错误的错误的:int n;sc

5、anf(%d,&n);int an; *为错误定义数组为错误定义数组,因为定义数组的常量表达因为定义数组的常量表达式中见谅了变量式中见谅了变量*3 3数组元素的引用形式数组元素的引用形式: :数组名数组名 下标表达式下标表达式 例似例似:a0 = a5 + a7 - a2:a0 = a5 + a7 - a2* *33;讲明讲明: :(1 1)“下标表达式下标表达式”能够是任何非负整型信息的常量能够是任何非负整型信息的常量, ,也能够也能够是任何结论为非负整型信息的表达式是任何结论为非负整型信息的表达式, ,其取值范畴是其取值范畴是 “ “0-0-(元素总个数(元素总个数-1-1)”.

6、.注重:在运行C语言程序的环节中,系统同时不自动检验数组元素的下标是否越界.所以在编写程序时,保证数组下标不越界黑白常重要的.(2)1个数组元素,本色上便是1个变量,它具有和一样类型单个变量一样的属性,能够对它履行赋值和介入各种运算.(3)在C语言中,数组做为1个整体,不能介入信息运算,只能对单个的数组元素履行操作,也便是讲不能引用整个数组,而只能追个引用数组元素.【例【例6-16-1】给数组元素】给数组元素a0a0a9a9赋值为赋值为0 09,9,接着逆序输出接着逆序输出. . * *exam6_1exam6_1* *int main(void)int main(void) int i,a1

7、0; int i,a10; for (i=0;i=9;i+ +) for (i=0;i=0; i- -) for(i=9;i=0; i- -) printf(“%d ”,ai); printf(“%d ”,ai); return 0; return 0; 注重数组下标是从注重数组下标是从0到到9,a10同时同时非该数组元素非该数组元素.演示9 8 7 6 5 4 3 2 1 0 运行结论为: 对数组元素追个赋值对数组元素追个输出4.4.一维数组的初始化一维数组的初始化数组初始化是指在定义数组时指定数组元素的初始值数组初始化是指在定义数组时指定数组元素的初始值. .一维数组初始化的一样标准一维数

8、组初始化的一样标准: :信息类型信息类型 数组名数组名 常量表达式常量表达式=初值表初值表 ;可按以下方式履行数组的初始化可按以下方式履行数组的初始化. .(1 1)一样初始化)一样初始化, ,似似: : int arr10=0,1,2,3,4,5,6,7,8,9 int arr10=0,1,2,3,4,5,6,7,8,9;(2 2)部分元素初始化)部分元素初始化, ,似似: : int a10=0,1,2,3,4 int a10=0,1,2,3,4;* *仅给前仅给前5 5个元素赋初值个元素赋初值, ,后后5 5个元个元素未指定初始值素未指定初始值* *(3 3)全部元素均初始化为)全部元素

9、均初始化为0 0时时, ,不许可简写不许可简写. .似似:int a10=0,0,0,0,0,0,0,0,0,0;:int a10=0,0,0,0,0,0,0,0,0,0;不能简写为不能简写为: :int a10=0int a10=0* *10;10;(4)似果全部元素均指定初值,那么数组定义标准中的方括号内能够省略元素的个数,似:int a5=1,2,3,4,5;能够写为:int a=1,2,3,4,5;讲明:(1)似果对数组的全部元素赋以初值,定义时能够不指定数组长度(系统依照初值个数自动确定).似果被定义数组的长度,与初值个数差别,那么数组长度不能省略.(2)“初值表”中的初值个数,能够

10、少于元素总个数,即许可只给部分元素赋初值,但毫不可多于元素总个数,否那么便表现语法错误. 注重:当程序不给数组指定初始值时,编译器自动把数组的各元素初始化为0.【例【例6-26-2】从键盘输入某课程的平常、实训、期中测验和期末成】从键盘输入某课程的平常、实训、期中测验和期末成绩绩, ,求该课程的总评成绩求该课程的总评成绩. .(总评成绩按平常、实训、期中测验和(总评成绩按平常、实训、期中测验和期末考试分不占期末考试分不占1010、2020、3030、4040来统计)来统计). . 【思路导航】采纳从键盘上循环输入某课程学生的平常、实训、期【思路导航】采纳从键盘上循环输入某课程学生的平常、实训、

11、期中测验和期末考试的成绩中测验和期末考试的成绩, ,接着按各占接着按各占1010,20,20,30,30,40,40的比例的比例统计总评成绩(结论保留一位小数)统计总评成绩(结论保留一位小数), ,同时在屏幕上表现出来同时在屏幕上表现出来. .当需当需要接着统计学生的总评成绩时要接着统计学生的总评成绩时, ,按空格键接着循环按空格键接着循环, ,否那么按其他键否那么按其他键终止循环终止循环. . 信息描述:“i”示意参予统计总评成绩的学生的序号;“key”示意按键的符号;数组score示意学生的各项成绩,其中数组score的第一到第四的元素(score0、score1、score2、score

12、3)分不示意每位学生该课程的平常、实训、期中测验和期末考试的成绩,第五个元素(score4)示意学生该课程的总评成绩;数组ratio示意学生的各项成绩的统计系数,共四个元素,分不为10(0.1)、20(0.2)、30(0.3)、40(0.4). * *exam6_2exam6_2* *#include “stdio.h”#include “stdio.h”int main(void)int main(void) int i=1,j; int i=1,j; char key=x20; char key=x20; * * x20 x20 为空格键的为空格键的ASCIIASCII码码* * floa

13、t score5,ratio4=0.1,0.2,0.3,0.4; float score5,ratio4=0.1,0.2,0.3,0.4; while(key=x20) while(key=x20) clrscr(); clrscr(); * *清屏幕清屏幕* * printf(enter the scores of No.%2d student: n, i+); printf(enter the scores of No.%2d student: n, i+); printf(usual pratice midterm finaln); printf(usual pratice midter

14、m finaln); score4=0; score4=0; * *统计每位学生总评成绩前统计每位学生总评成绩前,score4,score4先清零先清零* * for(j=0; j4; j+) for(j=0; j4; j+) scanf(%f,&scorej); scanf(%f,&scorej); score4+=scorej score4+=scorej* *ratioj; ratioj; * *统计课程的总评成绩统计课程的总评成绩* * printf(The result score is %6.1fn, score4); printf(The result score

15、 is %6.1fn, score4); printf( space key to continue,other key to stop.); printf( space key to continue,other key to stop.); key=getch(); key=getch(); * *使程序停息运行使程序停息运行, ,守侯从键盘上输入一个字符守侯从键盘上输入一个字符* * return 0; return 0; 定义成绩和比例系数数组演示【例【例6-36-3】输入】输入1010个数个数, ,用用“冒泡法冒泡法”将将1010个数按由小到大的个数按由小到大的次序布列次序布列. .

16、 【思路导航】冒泡法的根基理念是【思路导航】冒泡法的根基理念是: :通过相邻两个数之间的对比通过相邻两个数之间的对比和交流和交流, ,使排序码(数值)较小的数追渐从底部移向顶部使排序码(数值)较小的数追渐从底部移向顶部, ,排序排序码较大的数追渐从顶部移向底部码较大的数追渐从顶部移向底部. .便像水底的气泡一样追渐向上便像水底的气泡一样追渐向上冒冒, ,故而得名故而得名. .由由A1AnA1An组成的组成的n n个信息个信息, ,履行冒泡排序的环节能够描述为履行冒泡排序的环节能够描述为: :(1 1)第一步将相邻的)第一步将相邻的A1A1与与A2A2履行对比履行对比, ,似果似果A1A1的值大

17、于的值大于A2A2的值的值, ,那么交流两者的位置那么交流两者的位置, ,使较小的上浮使较小的上浮, ,较大的下沉;接较大的下沉;接着对比着对比A2A2与与A3,A3,同样使小的上浮同样使小的上浮, ,大的下沉大的下沉. .依此类推依此类推, ,直到直到对比完对比完An-1An-1和和AnAn后后,An,An为具有最大排序码(数值)的元素为具有最大排序码(数值)的元素, ,称第一趟排序结束称第一趟排序结束. .(2 2)接着在)接着在A1An-1A1An-1区间内区间内, ,履行第二趟排序履行第二趟排序, ,使剩余元素使剩余元素中排序码最大的元素下沉到中排序码最大的元素下沉到An-1An-1;

18、重复履行;重复履行n-1n-1趟后趟后, ,整个排整个排序环节结束序环节结束. .第1趟对比第2趟对比9 8 8 8 8 88 5 5 5 5 8 9 5 5 5 55 8 4 4 45 5 9 4 4 44 4 8 2 24 4 4 9 2 22 2 2 8 02 2 2 2 9 00 0 0 0 80 0 0 0 0 99 9 9 9 9第1次 第2次 第3次 第4次 第5次 结论第1次 第2次 第3次 第4次 结论第3趟、第4趟、第5趟对比环节同理(略). 下面以六个数9、8、5、4、2、0为例对比“冒泡法”排序的环节: 本题因需排序的数有10个,故定义数组a,其大小为11,使用a1a1

19、0存放10个数,a0不用.程序中采纳双重循环嵌套,变量i,j作循环变量,t作两两对比、交流信息的临时变量. * *exam6_3exam6_3* *int main(void)int main(void) int a11; int a11; * * 只用只用a1a1a10,a0a10,a0临时不用临时不用 * * int i,j,t; int i,j,t; * * i,j i,j作循环变量作循环变量,t,t作两数对比的临时变量作两数对比的临时变量 * * printf(input 10 numbers:n); printf(input 10 numbers:n); for(i=1;i11;i+

20、) for(i=1;i11;i+) scanf(%d,&ai); scanf(%d,&ai); * * 输入输入1010个整数个整数 * * for(j=1;j=9;j+) for(j=1;j=9;j+) * *第第j j趟对比趟对比* * for(i=1;i=10-j; i+) for(i=1;iai+1) if(aiai+1) * *交流大小交流大小* * t=ai; ai=ai+1; ai+1=t; t=ai; ai=ai+1; ai+1=t; printf(the sorted numbers:n); printf(the sorted numbers:n); for(

21、i=1;i11;i+) for(i=1;i=0i=0且且i2i=0j=0且且j3j3;当二维数组各元素赋值后当二维数组各元素赋值后, ,再用一个双重循环来输出二维数组各再用一个双重循环来输出二维数组各元素的值元素的值. .为了示意方便为了示意方便, ,定义了符号常量定义了符号常量RowRow和和ColCol分不示意分不示意2 2和和3. 3. * *exam6_4exam6_4* *#define Row 2#define Row 2#define Col 3#define Col 3#include stdio.h #include stdio.h ( (续下续下) )(续上)int mai

22、n(void) int i, j, arrRowCol; *定义1个2行3列的二维数组arr* for(i=0; iRow; i+) *外循环:操纵二维数组的行* for(j=0; jCol; j+) *内循环:操纵二维数组的列* printf(please input arr%d%d:,i,j); scanf(%d,&arrij); *从键盘输入aij的值* printf(二维数组arr各元素的值为:n); *用以下循环输出二维数组arr各元素的值* for(i=0;iRow;i+) for(j=0;jCol;j+) printf(%dt,arrij); *将aij的值表此刻屏幕上*

23、 printf(n); getch(); *停息程序运行* return 0; 演示“&”不能少3. 3. 二维数组的初始化二维数组的初始化有以下两种方式来实现二维数组的初始化有以下两种方式来实现二维数组的初始化. .(1 1)按行次序赋初值)按行次序赋初值一样标准一样标准: :信息类型信息类型 数组名数组名 行常量表达式行常量表达式列常量表达式列常量表达式 第第0 0行初值表行初值表,第第1 1行初值表行初值表,末了末了1 1行初值表行初值表; 赋值法那么赋值法那么: :将将“第第0 0行初值表行初值表”中的信息中的信息, ,依次赋给第依次赋给第0 0行中各元行中各元素;将素;将“第

24、第1 1行初值表行初值表”中的信息中的信息, ,依次赋给第依次赋给第1 1行各元素;以此行各元素;以此类推类推. .似似: :int p23=1, -3, 0, 56, 77, -4; int p23=1, -3, 0, 56, 77, -4; int q24=22, -1, 15, 3, 1, 0, -10, -5; int q24=22, -1, 15, 3, 1, 0, -10, -5; 似果对部分元素赋值似果对部分元素赋值, ,似似:int a34 = 1,5,9:int a34 = 1,5,9;仅对数组元素仅对数组元素a00a00、a10a10、a20a20赋值赋值, ,其余元素未赋

25、其余元素未赋值(对静态数组值(对静态数组, ,似果初值表中的信息个数比数组元素少似果初值表中的信息个数比数组元素少, ,那么编那么编译器自动为未赋值元素指定初值译器自动为未赋值元素指定初值0 0;对动态数组;对动态数组, ,未赋值元素的初未赋值元素的初值是随机的)值是随机的). . (2)按二维数组在内存中的布列次序给各元素赋初值一样标准:信息类型 数组名行常量表达式列常量表达式初值表;赋值法那么:按二维数组在内存中的布列次序,将初值表中的信息,依次赋值给各元素.似果对全部数组元素赋初值,那么第一维的长度能够不指定,但必须指定第二维的长度,全部信息写在一个大括号内.似:int a 4=1,2,

26、3,4,5,6,7,8,9,10,11,12;等价于:int a34=1,2,3,4,5,6,7,8,9,10,11,12;该语句将1,2,3,4,5,6,7,8,9,10,11,12分不赋值给a00、a01、a02、a03、a10、a11、a12、a13、a20、a21、a22、a23. 注重:“初值表”中的数值个数不能多于数组元素的总个数【例【例6-56-5】 将一个二维数组行和列交流将一个二维数组行和列交流, ,存到另一个二维数组中存到另一个二维数组中. .例似例似: : 【思路导航】将一个二维数组a的行和列交流,猎取一个新的二维数组b,那么数组b与数组a各元素间的关系为:bji = a

27、ij.操纵循环再一次赋值即可. * *exam6_5exam6_5* *int main(void)int main(void) int a23 = 1,2,3,4,5,6; int a23 = 1,2,3,4,5,6;int b32, i,j;int b32, i,j;printf(array a:n);printf(array a:n);for(i=0;i=1;i+) for(i=0;i=1;i+) * *操纵二维数组操纵二维数组a a的行的行* * for(j=0;j=2;j+) for(j=0;j=2;j+) * *操纵二维数组操纵二维数组a a的列的列* * printf(%5d,a

28、ij); printf(%5d,aij); bji = aij; bji = aij; * *实现二维数组实现二维数组a a的行、列交流的行、列交流* * printf(n); printf(n); * *输出完一行元素后换行输出完一行元素后换行* * (续下)(续下) (续上) printf(array b:n); for(i=0;i=2;i+) for(j=0;jmax,aijmax,把把aijaij做为新的临时最大值做为新的临时最大值, ,同时记录下其下标同时记录下其下标i i和和j.j.当全部元素当全部元素对比完后对比完后,max,max是整个矩阵全部元素的最大值是整个矩阵全部元素的最

29、大值, ,下标下标i i和和j j即为所求最即为所求最大值大值maxmax所在的行号和列号所在的行号和列号. . * *exam6_6exam6_6* *int main(void)int main(void) int i,j,row=0,colum=0,max; int i,j,row=0,colum=0,max; int a34=1,2,3,4,9,8,7,6,-10,10,-5,2; int a34=1,2,3,4,9,8,7,6,-10,10,-5,2; * *给数组给数组a a中的元素赋初值中的元素赋初值* * max=a00; max=a00; for(i=0; i=2; i+)

30、for(i=0; i=2; i+) * *用双重循环对比全部元素用双重循环对比全部元素* * for(j=0; j=3; j+) for(j=0; j max ) if(aij max ) max=aij; max=aij; row=i; row=i; colum=j; colum=j; printf(max=%d, row=%d, colum=%dn,max,row,colum); printf(max=%d, row=%d, colum=%dn,max,row,colum); return 0; return 0; max=10, row=2, colum=1 演示运行结论为: 6.3 字

31、符数组与字符串 1. 1. 字符数组的定义字符数组的定义字符数组是存放字符信息的数组字符数组是存放字符信息的数组, ,字符数组中的每一个元素存字符数组中的每一个元素存放一个字符放一个字符. .常见的字符数组有一维字符数组和二维字符数组常见的字符数组有一维字符数组和二维字符数组. .其其中中: :一维字符数组常用于存储和操作一维字符数组常用于存储和操作1 1个字符串个字符串, ,其定义标准与一其定义标准与一维数值数组一样维数值数组一样. .二维字符数组常用于同时存储和操作多个字符串二维字符数组常用于同时存储和操作多个字符串, ,其定义标准其定义标准与二维数值数组一样与二维数值数组一样. .例似例

32、似: :char c10; char c10; * *定义定义c c为字符数组为字符数组, ,见谅见谅1010个元素个元素* *c0=I; c1= ; c2=a; c3=m; c4= ; c0=I; c1= ; c2=a; c3=m; c4= ; * *给字符数组的前给字符数组的前5 5个元素赋初值个元素赋初值* *c5=h;c6=a;c7=p;c8=p;c9=y;c5=h;c6=a;c7=p;c8=p;c9=y;* *给字符数组的后给字符数组的后5 5个元素赋初值个元素赋初值* * 注重注重: :字符型与整型能够通用字符型与整型能够通用, ,但各自在内存中所占存储单元但各自在内存中所占存储单

33、元的字节数有区不的字节数有区不. .例似例似: :char ch15; char ch15; * *在内存中占在内存中占5 5字节字节* *int ch25; int ch25; * *在内存中占在内存中占1010字节字节* * 2. 2. 字符数组的初始化字符数组的初始化我们能够通过为每个数组元素指定初值字符来实现字符数组的初我们能够通过为每个数组元素指定初值字符来实现字符数组的初始化始化. .方式有方式有: :(1 1)追个元素初始化)追个元素初始化. .似似: :char c10=I, ,a,m, ,h,a,p,p,ychar c10=I, ,a,m, ,h,a,p,p,y(2 2)初始

34、化信息少于数组长度)初始化信息少于数组长度, ,多余元素自动为多余元素自动为“空空”(即(即0,0,其值为二进制其值为二进制0,0,为字符串数组的终止符)为字符串数组的终止符). .似似: :char c10=c, ,p,r,o,g,r,a,m;char c10=c, ,p,r,o,g,r,a,m;(3 3)指定初值时)指定初值时, ,如果未指定数组长度如果未指定数组长度, ,那么数组长度等于所赋初那么数组长度等于所赋初值个数值个数. .似似: :char c = I, ,a,m, ,h,a,p,p,y; char c = I, ,a,m, ,h,a,p,p,y; 注重注重:字符串数组不能用字

35、符串数组不能用“=”直截了当赋值直截了当赋值, 似似:Char s20;s=“Good News!”; 是错误的是错误的.但在初始化时能够直截了当把字符串常量赋给字符数组但在初始化时能够直截了当把字符串常量赋给字符数组.似似:char s20=“chaina”; 是精确的是精确的.3. 3. 字符数组的引用字符数组的引用 字符数组的引用本色上便是追个字符引用字符数组的引用本色上便是追个字符引用, ,与引用数值数组元素与引用数值数组元素类似类似, ,即即: :引用一个元素引用一个元素, ,猎取一个字符猎取一个字符. . 【例【例6-76-7】 输出一个字符串输出一个字符串. . * *exam6

36、_7exam6_7* *int main(void)int main(void) char c15=I, ,l, o, v,e, ,c,h,i,n,a; char c15=I, ,l, o, v,e, ,c,h,i,n,a; int i; int i; for(i=0;i15;i+) for(i=0;i15;i+) printf(%c,ci);printf(n); printf(%c,ci);printf(n); return 0; return 0; 演示(1)字符数组的输入除了能够通过初始化使字符数组各元素猎取初值外,也能够使用getchar()或scanf()函数输入字符.例似例似:ch

37、ar str10:char str10; for(i=0; i10; i+) for(i=0; i10; i+) scanf(%c, &stri) scanf(%c, &stri); (2)字符数组的输出字符数组的输出,能够用putchar()或printf()函数.printf()函数,不仅能够追个输出字符数组元素,还能够整体输出存放在字符数组中的字符串.具体实现有两种方式: 方式一方式一:用用“%c”标准符追个输入输出标准符追个输入输出.例似例似:char c6; for(i=0; i6; i+) scanf(%c,&ci ); printf(%c,ci ); “&

38、amp;”不能少方式二:用“%s”标准符按字符串输入输出.例似:char c6;scanf(%s,c);printf(%s,c);之前不用“&”,遇回车键结束,但只把遇到第一个空格之前的字符赋给字符串变量,即不能用于输入见谅空格的字符串.遇到第一个0时结束例似:char str13;scanf(%s,str);输入:How are you?结论:仅“How”被输入数组str演示char str15,str25,str35;scanf(%s%s%s,str1,str2,str3);输入信息:How are you?str1、str2、str3获得的信息似图6-4所示:(“口”示意“空”)

39、str1:str2:str3:图6-4 5.5.常用的字符串操作函数常用的字符串操作函数 在C的函数库中,提供了部分字符串操作函数.字符串规格函数的原型在头文件string.h中.使用时必须用#include 或#include string.h语句见谅头文件. (1)输入字符串gets()函数标准标准:gets(:gets(字符数组字符数组) )似似:char str12;:char str12; gets(str); gets(str);功能功能: :从规格输入设备(似从规格输入设备(似: :键盘)上键盘)上, ,输入输入1 1个字符串(能够个字符串(能够见谅空格)到字符数组中去见谅空格)

40、到字符数组中去. .讲明讲明: : gets() gets()读取的字符串读取的字符串, ,其长度没有限制其长度没有限制, ,编程者要保证字编程者要保证字符数组有足够大的空间符数组有足够大的空间, ,存放输入的字符串存放输入的字符串. . 该函数输入的字符串中许可见谅空格该函数输入的字符串中许可见谅空格, ,而而scanf()scanf()函数函数不许可不许可. . 演示(2)输出字符串puts()函数 标准标准:puts(:puts(字符数组字符数组) )似似: : char c6=China; char c6=China; * * 定义字符数组定义字符数组c,c,同时给它赋初值同时给它赋初

41、值* *printf(“%sn”,c); printf(“%sn”,c); * * printf printf需要标准操纵符需要标准操纵符 %s %s * *puts(c); puts(c); * * puts puts不需要标准操纵符不需要标准操纵符, ,且自动换行且自动换行* *功能功能: :把字符数组中所存放的字符串把字符数组中所存放的字符串, ,输出到规格输出设备中去输出到规格输出设备中去, ,同时用同时用nn取代字符串的结束标记取代字符串的结束标记0.0.所以用所以用puts()puts()函数函数输出字符串时输出字符串时, ,不要求另加换行符不要求另加换行符. .讲明讲明: : 字

42、符串中许可见谅转义字符字符串中许可见谅转义字符, ,输出时产生一个操纵操纵输出时产生一个操纵操纵. . 该函数一次只能输出一个字符串该函数一次只能输出一个字符串, ,而而printf()printf()函数也能用来函数也能用来输出字符串输出字符串, ,且一次能输出多个且一次能输出多个. . 演示(3)字符串对比strcmp()函数 标准标准:strcmp(:strcmp(字符串字符串1 ,1 ,字符串字符串2)2)其中其中“字符串字符串1”1”和和“字符串字符串2”2”能够是字符串常量能够是字符串常量, ,也能够是一也能够是一维字符数组维字符数组. .似似: :strcmp(str1,str2

43、);strcmp(str1,str2);strcmp(China, Korea);strcmp(China, Korea);strcmp(str1, Beijing);strcmp(str1, Beijing);功能功能: :对比两个字符串的大小对比两个字符串的大小. .对比法那么对比法那么: :追个字符对比其追个字符对比其ASCIIASCII码码, ,直到遇到差别字符或直到遇到差别字符或0.0.字符串字符串1 1与字符串与字符串2 2相等相等, ,那么函数返回值等于那么函数返回值等于0 0;字符串字符串1 1小于字符串小于字符串2,2,那么函数返回值负整数;那么函数返回值负整数;字符串字符串

44、1 1大于字符串大于字符串2,2,那么函数返回值正整数那么函数返回值正整数. .注重:字符串只能用strcmp函数履行对比,不能用关系运算符 “=”履行对比. (4)拷贝字符串strcpy()函数 标准标准:strcpy(:strcpy(字符数组字符数组, , 字符串字符串) )其中其中“字符串字符串”能够是串常量能够是串常量, ,也能够是字符数组也能够是字符数组. .似似:char s30;:char s30; strcpy(s, Good News!); strcpy(s, Good News!); * *给数组赋字符串给数组赋字符串* *功能功能: :将将“字符串字符串”完整地复制到完整

45、地复制到“字符数组字符数组”中中, ,字符数组中原字符数组中原有内容被覆盖有内容被覆盖. .讲明讲明: : 字符数组必须定义得足够大字符数组必须定义得足够大, ,以便容纳复制过来的字符串以便容纳复制过来的字符串. .复复制时制时, ,连同结束标记连同结束标记00共同复制共同复制. . 不能用赋值运算符不能用赋值运算符“”将一个字符串直截了当赋值给一个将一个字符串直截了当赋值给一个字符数组字符数组, ,只能用只能用strcpy()strcpy()函数来操作函数来操作. . (6)求字符串长度strlen()函数(len是length的缩写)标准:strlen(字符串)似:printf(“%d”,

46、strlen(“china”);功能:求字符串(常量或字符数组)的现实长度(不见谅结束标记).(7)将字符串中大写字母变形成小写strlwr()函数(lwr是lowercase小写的缩写).标准:strlwr(字符串)功能:将字符串中的大写字母变形成小写,其它字符(包罗小写字母和非字母字符)不变形.(8)将字符串中小写字母变形成大写strupr()函数(upr是uppercase大写的缩写)标准:strupr(字符串)功能:将字符串中小写字母变形成大写,其它字符(包罗大写字母和非字母字符)不变形.【例【例6-86-8】 从键盘输入一个字符串从键盘输入一个字符串, ,回车键结束回车键结束, ,同

47、时同时将字符串在屏幕上输出将字符串在屏幕上输出. . 【思路导航】用循环从键盘输入字符串,输入时不表现所输入的字符,而以“*”代替,仅当输入回车键时结束循环,同时用一个同时列的循环输出所输入的字符串. * *exam6_8exam6_8* *int main(void)int main(void) int i; int i; char str80; char str80; clrscr(); clrscr(); 6.4 数组应用举例 for(i=0;i80;i+) stri=getch(); printf(*); if(stri=x0d) break; printf(n); i=0; whil

48、e(stri!=x0d) printf(%c,stri+); printf(n); getch(); *程序停息* return 0; * I love china 演示 从键盘输入 “I love china”,屏幕表现运行结论为: 【例【例6-96-9】 输入一行字符输入一行字符, ,统计其中有几个单词(单词统计其中有几个单词(单词间以空格分隔)间以空格分隔). . 【思路导航】单词的数目由空格表现的次数决意(接连表现的【思路导航】单词的数目由空格表现的次数决意(接连表现的空格记为表现一个空格记为表现一个, ,一行开头的空格不算)一行开头的空格不算), ,似似: :输入输入“ I I lo

49、ve china.”love china.”有有3 3个单词个单词. .应追个探测每一个字符是否为空格应追个探测每一个字符是否为空格. . 用变量用变量numnum示意单词数(初值为示意单词数(初值为0 0);用变量);用变量word word 示意当前字示意当前字符的值符的值. .当当word=0word=0时时, ,示意前一字符为空格;当示意前一字符为空格;当word=1word=1时时, ,示意前示意前一字符不是空格一字符不是空格, ,设设wordword初值为初值为0.0.推断是否表现新单词的依据似推断是否表现新单词的依据似下下: : 似果前一字符是空格似果前一字符是空格, ,当前字符

50、也是空格当前字符也是空格, ,那么讲明未表现新那么讲明未表现新单词单词,num,num不累加不累加1,1,且且word=0word=0不变;不变; 似果前一字符是空格似果前一字符是空格, ,当前字符不是空格当前字符不是空格, ,那么讲清楚示新单那么讲清楚示新单词词,num,num加加1,1,且且word=1word=1; 似果前一字符不是空格似果前一字符不是空格, ,当前字符是空格当前字符是空格, ,那么讲明未表现新那么讲明未表现新单词单词,num,num不累加不累加1,1,且且word=0. word=0. * *exam6_9exam6_9* *#include stdio.h #incl

51、ude stdio.h * * gets() gets()函数在该头文件定义函数在该头文件定义* *int main(void)int main(void) char string81 ; char string81 ; int i, num = 0, word = 0; int i, num = 0, word = 0; char c; char c; gets(string); gets(string);* *从键盘输入字符串给字符数组从键盘输入字符串给字符数组stringstring* * for(i=0 for(i=0;(c=stringi) != 0(c=stringi) != 0;i+)i+) if(c= ) word = 0; if(c= ) word = 0; else if(word = 0) else if(word = 0) word = 1; word = 1; num+;num+; printf(There are %d words in the linen,num); printf(There are %d words in the linen,num); return 0; ret

温馨提示

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

评论

0/150

提交评论