




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
0102036.1一维数组6.2二维数组6.3字符数组和字符串
数组04056.4知识点强化与应用6.5本章小结【学习要点】1.一维数组、二维数组的定义,元素引用及初始化方法2.字符数组的定义与初始化3.字符串输入、输出方法及常用的字符串处理函数的使用4.简单的算法设计(排序,查找等算法)本章主要介绍一维和二维数组的定义与使用,字符数组的概念和使用,并培养使用数组对数据进行存储的思想。完成10个学生信息的输入(学号,性别,英语、高等数学、计算机考试成绩),求出每个同学的考试平均分,并将所有同学信息按照格式输出。【导入案例:大量数据的存储及处理】
若使用一般变量对案例中的数据进行处理,将需要定义10个变量存储性别,10个变量存储学号,10个变量存储英语成绩,10个变量存储数学成绩,10个变量存储计算机成绩,10个变量存储总分,总共至少包含60个变量,很显然用常规的思路处理是不太合适的,该如何完成这些大量的有一定关联的数据存储呢?分析
在前面的章节中,当处理的数据个数很少时,会想到定义几个变量来存储这些数据。但当需要处理的数据很多(几十、上百甚至上万个数据)时,不可能一一去定义那么多变量来处理。例如,若需要将100个同学的计算机考试成绩保存下来,此时去定义100个变量来存储这些数据是不明智的,。【解决方案】对于存储大量的、相同意义的数据使用数组(Array)最为合适。分析6.1一维数组6.1.1一维数组的定义6.1.2一维数组元素的引用6.1.3一维数组元素的初始化6.1.1一维数组的定义方法:数组类型数组名[数组长度]如:inta[5];floatscore[66];charstr[100];1.数组类型:可以是前面介绍的所有的数据类型,也可以是后面将介绍的组合类型;2.数组名:命名规则同于前面介绍的变量的命名规则;3.数组长度:表示数组内元素个数,必须是整形常量或表达式,不能是变量。6.1.2一维数组元素的引用方法:数组名[元素下标]如:a[3],score[5],str[10];1.该数组必须已经在前面定义过;2.元素下标可以是常量或表达式,也可以是变量,但是必须为整型;3.下标的范围为:[0,数组长度-1],否则将发生访问越界;6.1.3一维数组元素的初始化方法:数据类型数组名[常量表达式]={初始化数据}主要包含以下情形:1、定义数组时,对全部元素赋值:inta[5]={1,2,3,4,5};2、对部分元素赋值:intb[5]={1,2};b[0]=1,b[1]=2;其余元素为?6.1.3一维数组元素的初始化(续)3、
若所有元素赋值为0,可使用如下方法:
intc[5]={0,0,0,0,0};也可以使用:intc[5]={0};4、若要对数组的全部元素初始化,则可省略数组说明中的大小。intd[]={1,2,3,4,5};例1:从键盘动态输入10个整数,然后将10个数据顺序输出;分析:1.先定义正确类型的、合适长度的数组;2.结合for循环(推荐)使用循环变量控制数组下标,来逐个引用数组元素;3.使用前面学习过的函数完成数据的输入输出。参考代码段:inta[10],i;
for(i=0;i<10;i++) scanf(“%d”,&a[i]);
for(i=0;i<10;i++)
printf("%2d",a[i]);例2:从键盘动态输入10个整数,然后将10个数据前后交换存放;分析:1.先正确的完成数据的输入与输出;2.a[0]与a[9]交换,a[1]和a[8]交换,a[2]和a[7]交换,进而推理出a[
i]和a[9-i]交换;3.注意控制i的变化范围。参考代码段:for(i=0;i<10/2;i++)
{t=a[i];a[i]=a[9-i];a[9-i]=t; }若数据个数为n个,该如何实现呢?6.2二维数组6.2.1二维数组的定义6.2.2二维数组元素的引用6.2.3二维数组元素的初始化6.2.1二维数组的定义当存储全班5个同学的总分时,可以定义intsum[5]来存放,那么现在若需要存储5个同学4门考试的分数时,可以考虑使用二维数组intscores[5][4]来存放。该二维数组可以理解成由5个一维数组构成,其中每个一维数组包含有4个元素,在内存中,二维数组以行为顺序进行存放,即先存放第一行的第一个元素,再一行的第二个元素,以此类推……6.2.1二维数组的定义(续)方法:数组类型数组名[常量表达式一][常量表达式二]如:inta[5][3];floatscore[5][4];charstr[3][100];1.数组类型、数组名的命名规则与一维数组的定义相同;2.常量表达式一和常量表达式二分别表示所定义的数组的行数和列数,与一维数组中数组长度的定义规则相同;6.2.2一维数组元素的引用方法:数组名[行标][列标]如:a[3][0],score[2][3],str[2][10];1.该数组必须是在前面已经定义过的数组;2.行标、列标表示所访问元素的具体行位置和所在的列的位置,其可以是常量或表达式,也可以是变量,但是必须为整型;3.行标、列标的范围为:[0,行数-1]、[0,列数-1]。6.2.3二维数组元素的初始化方法:分行进行初始化数据类型数组名[常量表达式一][常量表达式二]={{},{},{}};主要包含以下情形:1、定义数组时,对全部元素赋值分行赋值
inta[3][4]={{1,2,3,4},{5,6,7,8},{2,3,4,5}};也可以:inta[3][4]={1,2,3,4,5,6,7,8,2,3,4,5};6.2.3二维数组元素的初始化(续)2、对部分元素初始化:
inta[3][4]={{1,4},{0,5}};3、在不产生歧异的情况下,可以省略第一维长度的说明
inta[][4]={{1,2,3,4},{5,6,7,8},{2,3,4,5}};数组a所有元素的值分别为多少?例3:定义一个3行4列的整型数组,数据从键盘动态输入,最后按照行列的格式将该数组元素输出;分析:1.先定义正确类型的、合适长度的数组;2.使用for循环嵌套(二维数组一般都需要)分别控制行标和列标,来逐个引用数组元素;参考代码段:inta[3][4],i,j;
for(i=0;i<3;i++)
for(j=0;j<4;j++) scanf("%d",&a[i][j]);6.3字符数组和字符串6.3.1字符数组的定义6.3.2字符数组的初始化6.3.3字符数组元素的引用6.3.4字符串的存储6.3.5字符数组的输入输出6.3.6常用字符串处理函数6.3.1字符数组的定义方法:一维:char数组名[数组长度]二维:char数组名[行数][列数]6.3.2字符数组的初始化方法:
char数组名[数组长度]={初始化的一个一个字符}如:charstr[10]={‘b’,’o’,’y’};6.3.3字符数组元素的引用方法:一维:数组名[下标]二维:数组名[行数][列数]字符数组就是类型为char型的数组,之前介绍的一维、二维数组的定义、初始化和元素引用都可以直接使用。6.3.4字符串的存储字符串是由“”扩起来的以\0结束的零个或多个字符序列,如“welcome”在内存的存放为:welcome\0C语言没有提供专门的字符串类型,对字符串采用的思想是将字符串作为字符数组来处理,因此可以用如下方式对字符数组初始化:charstr[10]=“welcome”;6.3.5字符数组的输入输出输入可以有以下方法:
1、用循环结合%c使用;
2、scanf函数结合%s使用;
3、调用gets函数。输出可以有以下方法:
1、用循环结合%c使用;
2、printf函数结合%s使用;
3、调用puts函数。6.3.5字符数组的输入输出(续)charstr[100],ch; inti;
for(i=0;(ch=getchar())!='\n';i++)
s[i]=ch;s[i]='\0';//方法1输入
for(i=0;str[i]!=‘\0’;i++)
printf(“%c”,str[i]);//方法1输出 scanf("%s",str);
//方法2输入 printf(“%s”,str);
//方法2输出
gets(str);//方法3输入 puts(str);//方法3输出6.3.5字符数组的输入输出(续)1.方法1是将其完全当作一般的数组来处理,这种处理方法不常见;2.方法2处理时,格式控制符需用%s,而不能用%c;输入表列中的参数,需直接给出字符数组的名称,而不能用&str或&str[i]的形式;3.第2种方法在输入过程中如检测到空格则输入结束,因此,当输入的有效字符中间包含字符,一般采用第3种方法。6.3.6常用的字符串处理函数1、strcat(str1,str2)//字符串连接函数功能:把字符串str2接到字符串str1的后面,结果较长的新的串放在字符串1中。
说明:
(1)字符数组1必须足够长,以便容纳连接后的新字符串,否则就会因长度不够出错;
(2)在连接前,两个字符串的后面都有一个‘\0’,连接后将字符串1后面的‘\0’取消,只在新串最后保留一个‘\0’;
(3)字符数组2可以使一个字符串常量;6.3.6常用的字符串处理函数(续)2、
strcpy(str1,str2)//字符串复制函数功能:将字符串2拷贝到字符数组1中去。说明:
(1)str1必须定义得足够长,以便容纳被拷贝的字符串。str1的长度不应小于str12的长度;
(2)str1必须写成数组名形式,str2可以是字符数组名,也可以是一个字符串常量。如strcpy(str1,“China”);6.3.6常用的字符串处理函数(续)3、
strlen(str)//求字符串长度功能:求字符串str有效字符的个数。说明:
(1)函数的值为字符串中第一个‘\0’之前字符的个数,不包括‘\0’在内。如:charstr[10]={"China"};printf("%d",strlen(str));
输出结果不是10,也不是6,而是5。
(2)也可以直接求字符串常量的长度,strlen(“China”)。6.3.6常用的字符串处理函数(续)4、strcmp(str1,str2)//字符串大小比较函数功能:比较字符串1和字符串2的大小。说明:字符串比较的规则为:对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到‘\0’为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准,比较的结果由函数值带回。①如果字符串1=字符串2,函数值为0。②如果字符串1>字符串2,函数值为一正整数。③如果字符串1<字符串2,函数值为一负整数。例4:自己编写程序实现函数strcat的功能;分析:1.先理解strcat函数的功能;2.使用循环将字符串2‘\0’之前的字符逐个拷贝到字符串1;3.在字符串1后加上\0作为字符串的结束标志。参考代码段:charstr1[100],str2[50]; inti,j; i=j=0; gets(str2);puts(str2); while(str2[j])str1[i++]=str2[j++];
str1[i]='\0'; puts(str1); puts(str2);6.4知识点强化与应用例5:输入10个整数,求出最大值并将其输出;分析:1.先定义合适大小,合适类型的数组,再通过循环为元素赋值;2.再假设第1个元素a[0]为最大,将其赋予变量max,然后将剩下的9个元素依次和max变量比较;若a[i]>max,则用a[i]更新max,即max=a[i];接着继续与下一个元素进行比较,直到与数组中的所有元素比较完毕。此时,变量max中存放的就是这10个数中的最大值。6.4知识点强化与应用例6:从键盘输入10个整数,用冒泡法对其排序后按照从小到大输出输出;冒泡法思想:将相邻位置上的两个数比较,将小的调到前头。假设数组元素初始序列为:985420第一趟比较
经过第一趟(共5次比较)后,最大的数9已“沉底”
,然后进行对余下的前面5个数进行第二趟比较。
经过第二趟(共4次比较)后,得到次大的数8,接下来对剩下的4个数进行第三趟比较,依次类推……。第二趟比较如此进行下去,可以推知6个数要比较5趟。在第一趟中要进行两两比较5次,在第二趟中比4次,……第5趟比1次。如果有n个数,则要进行n一1趟比较。在第j趟比较中要进行n一j次两两比较,流程图可以表示为:参考程序:{
inti,j,m,a[11];for(i=1;i<=10;i++)scanf(“%d”,&a[i]);//输入N个整数for(j=1;j<=10;j++)//N-1轮排序处理for(i=1;i<=10-j;i++)//N-j次相邻数据比较if(a[i]>a[i+1]){m=a[i];//交换数据a[i]=a[i+1];
a[i+1]=m;
}
}6.4知识点强化与应用例7:从键盘输入10个整数,在其中查找某一指定的元素是否存在,若存在,输出其位置,若不存在,输出提示结果。(假设10个数据不重复)分析:1.先定义合适大小,合适类型的数组,再通过循环为元素赋值;2.定义一个标志位flag以最后判定查找的数据是否存在于数组中,初始假定不存在,flag=0;3.从数组第一个元素开始逐一判断其值是否与待查找的数值相等,若不相等则继续判断下一个,直到所有元素判断完毕,若相等则记下当前元素的下标并更改flag为1,并强制退出循环;4.最后根据flag的值判定元素是否存在于数组中,并将结果输出。6.4知识点强化与应用例8:有一个3×4的矩阵,编程求出每行中的最大元素及其所在的行号和列号。分析:对于一个二维数组,可以理解为由多个一维数组组成。对于3×4数组,可理解为由3个一维数组构成,每个一维数组有4个元素。求每行的最大值即为求每个一维数组的最大值,用循环逐行求出该行中最大的元素及其所在的位置并将结果输出,每行处理结束以后再跳转到下一行。6.4知识点强化与应用例9:找出3个字符串中最大的那个字符串。分析:1.定义一个二维字符数组str[3][100]存放这三个字符串,调用gets函
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 参与考试的2025年网络规划设计师试题及答案
- 辅导班调查面试题及答案
- 2025年铁路运输服务项目规划申请报告
- 项目管理考试攻略分享试题及答案
- 人体解剖学与组织胚胎学练习试题附答案
- 多媒体设计师的影响力提升试题及答案
- 项目文档管理重点解析试题及答案
- 疾控心理测试题及答案解析
- 日语试题及答案下载
- 社会工作者考试各科目重点及试题及答案
- 2025年继续教育公需课必修课考试题库附含参考答案
- 公共知识法律试题及答案
- 2025中国广电山东网络有限公司市县公司招聘145人笔试参考题库附带答案详解
- 天津市公安局为留置看护总队招聘警务辅助人员笔试真题2024
- 2025-2030中国光稳定剂行业市场现状供需分析及投资评估规划分析研究报告
- 浙江省强基联盟2024-2025学年高一下学期5月月考地理试题(含答案)
- 职业技术学校2025年国际交流计划
- 2025年土木工程专业知识测试试卷及答案
- (高清版)DG∕TJ 08-15-2020 绿地设计标准 附条文说明
- 《肥胖症诊疗指南(2024年版)》权威解读
- 合肥市2025届高三年级5月教学质量检测(合肥三模)物理试题+答案
评论
0/150
提交评论