版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数组操作及排序1.了解一维数组定义,初始化2.学会冒泡排序,选择排序基本排序。3.了解二维数组4.字符串,字符串函数。5.练习。一维数组的定义形式:数据类型数组名[常量表达式]合法标识符数组元素个数,数组长度数组元素的类型2004a[0]a[1]
a[2]
a[9]20002008内存2036例inta[10];一批相同类型的变量使用同一个数组名,用下标来相互区分。一维数组的定义一维数组定义举例
数组名遵循标识符的命名规则。注意使用[]数据类型可以是任何类型,如int,float,char常量表达式说明数组元素个数定义后不允许改变。正确的定义方式
intb[2+3];
intc[10];错误的定义方式
intx=10,a[x];
inta(10);
inta[1.0];(1)对全部数组元素赋初始值
inta[5]={1,2,3,4,5};a12345a[0]a[1]a[2]a[3]a[4](2)对部分数组元素赋初始值
inta[5]={1,2,3};(3)可以省略数组长度,系统自动计算。
inta[]={1,2,3,4,5};//长度就是5
a12300a[0]a[1]a[2]
a[3]a[4]inta[5]={1,2,3,4,5};问题2,例如inta[5];
printf(“%d”,a[5]);会输出什么?问题3,例如inta[100];
怎么把他的元素全部初始化为0问题1,
printf(“%d”,a[0]);会输出什么?冒泡法排序过程
排序过程:(1)比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第n个数比较为止——第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上。(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置。(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束。
3
4
4a[0]a[1]a[2]a[3]
第一趟排序
1
3
2
1
3
2
4
4
第二趟排序
2
1
3
4
第三趟排序
1
2
3
4结果用选择法排序排序过程:(1)首先通过n-1次比较,从n个数中找出最小的,将它与第一个数交换。
第一趟选择排序,结果最小的数被安置在第一个元素位置上。(2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,将它与第二个数交换。
第二趟选择排序,结果第二小的数被安置在第一个元素位置上。(3)重复上述过程,共经过n-1趟排序后,排序结束。例初始:[49386597761327]ji=11349一趟:13[386597764927]i=22738二趟:1327[6597764938]三趟:132738[97764965]四趟:13273849[769765]五趟:1327384965[9776]六趟:132738496576[97]kkjjjjjjjjjj多维数组的空间想象二维数组:一个表格或一个平面矩阵一维数组:一列长表或一个向量三维数组:三维空间的一个方阵1二维数组的定义
定义方式:类型名数组名[行长度][列长度]
例如:inta[2][3];
inta[3][4];floatb[5][2];intc[2][3][4];
inta[3,4];()01201
内存地址
2000
2004
2008
2012
2016
2020
a[0][1]a[1][0]a[1][1]a[1][2]a[0][0]a[0][2]a[0]a[1]a[0]a[1]每个元素a[i]又是一个包含3个元素的一维数组a由2个元素组成a[0],a[1]是行名,每行首地址1二维数组的定义存储方式:按行存储inta[2][3];2.二维数组的定义inta[2][3]1、二维数组可按行分段赋值,也可按行连续赋值。{{1,2},{0}}是按行分段赋值。2.{1,2,3,4,5,6}是按行连续赋值。
3、如对全部元素赋初值,则第一维的长度可以不给出。4.可以只对部分元素赋初值,对于int型数组,未赋初值的元素自动取0值。
3二维数组的初始化
全部元素赋值1.分行赋值
inta[2][3]={{1,2,3},{4,5,6}};2.按元素顺序赋值
inta[2][3]={1,2,3,4,5,6};3.允许省略第一维长度
inta[][3]={1,2,3,4,5,6};
第一维长度为21234561234561234564二维数组的输入和输出inta[2][3],i,j;输出方法:输出第i行第j列元素:printf(“%d”,a[i][j]);输出整个数组元素:for(i=0;i<2;i++)for(j=0;j<3;j++)
printf(“%d”,a[i][j]);输入方法:输入第i行第j列元素:scanf(“%d”,&a[i][j]);输入整个数组元素:for(i=0;i<2;i++)for(j=0;j<3;j++)scanf(“%d”,&a[i][j]);inta[N][N];N是正整数数组元素a[i][j],i和j的取值范围[0,N-1]用二维数组a表示N*N方阵时,对应关系:a[0][0]a[0][1]a[0][2]a[1][0]a[1][1]a[1][2]a[2][0]a[2][1]a[2][2]主对角线i==j上三角i<=j下三角i>=j例charc[10],ch[3][4];1字符数组的定义2字符数组的初始化逐个字符赋值用字符串常量
例charch[5]={‘H’,’e’,’l’,’l’,’o’};ch[0]Helloch[1]ch[2]ch[3]ch[4]
例charch[6]={“Hello”};charch[6]=“Hello”;charch[]=“Hello”;ch[0]Helloch[1]ch[2]ch[3]ch[4]\0ch[5]字符数组的定义字符串:用一对双引号括起来的字符序列C中无字符串变量,用字符数组处理字符串字符串结束标志:‘\0’“hello”共5个字符,在内存占6个字节,字符串长度5
hello\01041011081081110内存存放字符ASCII码字符数组与字符串字符串的输入输出逐个字符I/O:%c整个字符串I/O:%s例用%cmain(){charstr[5];inti;for(i=0;i<5;i++)scanf(“%c”,&str[i]);for(i=0;i<5;i++)printf(“%c”,str[i]);}例用%smain(){charstr[5];
scanf(“%s”,str);
printf(“%s”,str);}用字符数组名,不要加&输入串长度不要越界遇空格或回车结束输入自动加‘\0’用字符数组名,遇’\0’结束输出字符数组和字符串—字符串main(){chara[]={'h','e','l','\0','l','o','\0'};
printf("%s",a);}输出:hel
h
e
l
\0l
o\0数组中有多个‘\0’时,遇第一个结束注意’\0’(字符串结束标志)
How\0
are\0
you?\0
#include<stdio.h>main(){chara[15],b[5],c[5];scanf("%s%s%s",a,b,c);printf("a=%s\nb=%s\nc=%s\n",a,b,c);scanf("%s",a);printf("a=%s\n",a);}scanf中%s输入时,遇空格或回车结束输入:Howareyou?输出:a=Howb=arec=you?输入:Howareyou?输出:a=Howscanf()函数结束标志scanf(“%s”,)的优缺点scanf遇空白符或者回车终止优点:我们可以通过回车一下给多个字符数组赋值scanf(“%s%s%s”,a,b,c);缺点:我们想接收空格在字符串里。若准备将字符串“Thisisastring.”记录下来,应该怎样输入??字符串输出函数puts格式:puts(字符数组)功能:向显示器输出字符串(输出完,换行)说明:字符数组必须以‘\0’结束字符串输入函数gets格式:gets(字符数组)功能:从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’说明:输入串长度应小于字符数组长度
常用字符串函数一般包含在string.h头文件字符串拷贝函数strcpy格式:strcpy(字符数组1,字符串2)功能:将字符串2,拷贝到字符数组1中去返值:返回字符数组1的首地址说明:字符数组1必须足够大拷贝时‘\0’一同拷贝不能使用赋值语句为一个字符数组赋值字符串连接函数strcat格式:strcat(字符数组1,字符数组2)功能:把字符数组2连到字符数组1后面返值:返回字符数组1的首地址说明:字符数组1必须足够大连接前,两串均以‘\0’结束;连接后,串1‘\0’取消,新串最后加‘\0’字符串长度函数strlen格式:strlen(字符数组)功能:计算字符串长度返值:返回字符串实际长度,不包括‘\0’在内字符串比较函数strcmp格式:strcmp(字符串1,字符串2)功能:比较两个字符串比较规则:对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或‘\0’为止返值:返回int型整数,a.若字符串1<字符串2,返回负整数
b.若字符串1>字符串2,返回正整数
c.若字符串1==字符串2,返回零说明:字符串比较不能用“==”,必须用strcmp例对于以下字符串,strlen(s)的值为:(1)chars[10]={‘A’,‘\0’,‘B’,‘C’,‘\0’,‘D’};(2)chars[]=“\t\v\\\0will\n”;(3)chars[]=“\x69\082\n”;实验练习1.演示数组越界问题的危险性2.gets函数strcpy函数都有没有越界检查自己实现一个有越界检查的my_gets(char*str,intnum)my_copy(char*str,char*str2
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《社会心理因素》课件
- 《电信业风云》课件
- 寒假自习课 25春初中道德与法治八年级下册教学课件 第二单元 第2课时 公民基本义务
- 《沙盘规则介绍》课件
- 《定价的基本策略》课件
- 班干部工作总结3篇
- 2023年学校志愿者心得体会字万能-学校志愿者工作总结(5篇)
- 2023-2024年项目部安全培训考试题附答案(典型题)
- 毕业销售实习报告模板汇编八篇
- 2023年项目部安全管理人员安全培训考试题及参考答案(模拟题)
- 偏身舞蹈症的护理查房
- 抑郁障碍患者的沟通技巧课件
- 技术成果转移案例分析报告
- 护理人才梯队建设规划方案
- 睡眠区布局设计打造舒适宜人的睡眠环境
- 建筑设计行业项目商业计划书
- 慢性病防治健康教育知识讲座
- 骶尾部藏毛疾病诊治中国专家共识(2023版)
- 【高新技术企业所得税税务筹划探析案例:以科大讯飞为例13000字(论文)】
- 幽门螺旋杆菌
- 智慧农业利用技术提高农业可持续发展的方案
评论
0/150
提交评论