![[计算机软件及应用]C语言之数组.ppt_第1页](http://file.renrendoc.com/FileRoot1/2018-12/23/07d2920b-9c02-4d13-a3ef-e79aa75030d3/07d2920b-9c02-4d13-a3ef-e79aa75030d31.gif)
![[计算机软件及应用]C语言之数组.ppt_第2页](http://file.renrendoc.com/FileRoot1/2018-12/23/07d2920b-9c02-4d13-a3ef-e79aa75030d3/07d2920b-9c02-4d13-a3ef-e79aa75030d32.gif)
![[计算机软件及应用]C语言之数组.ppt_第3页](http://file.renrendoc.com/FileRoot1/2018-12/23/07d2920b-9c02-4d13-a3ef-e79aa75030d3/07d2920b-9c02-4d13-a3ef-e79aa75030d33.gif)
![[计算机软件及应用]C语言之数组.ppt_第4页](http://file.renrendoc.com/FileRoot1/2018-12/23/07d2920b-9c02-4d13-a3ef-e79aa75030d3/07d2920b-9c02-4d13-a3ef-e79aa75030d34.gif)
![[计算机软件及应用]C语言之数组.ppt_第5页](http://file.renrendoc.com/FileRoot1/2018-12/23/07d2920b-9c02-4d13-a3ef-e79aa75030d3/07d2920b-9c02-4d13-a3ef-e79aa75030d35.gif)
已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
无求,自然不争。不争,自然无嗔。无嗔,自然少怨。少怨,自然多福。,2,例如:int a100; 功能:一次定义了100个整型变量: a0, a1, a99 例如: float x44; 功能:一次定义了4416个float型变量: x00,x01, , x33,数组:数组是一组类型相同的有序数据的集合 用数组名和下标来唯一确定数组中的元素,第六章 利用数组处理批量数据,3,说明:1.类型说明符可以是int、char、float等 2.数组名可以是任意合法的标识符 3.数组大小由常量表达式确定 4.常量表达式不允许包含变量 5.数组元素的下标从0开始,6.1 怎样定义和引用一维数组,一维数组的定义 类型说明符 数组名常量表达式,例如:int a10; 功能:定义了长度为10的整型数组a: a0,a1,.,a8,a9,4,一维数组元素的引用 数组必须先定义,然后再使用 数组元素的表示形式: 数组名下标 下标可以是整型变量或整型表达式 不能一次引用整个数组,只能逐个引用数组元素 数组的使用(赋值和引用)需要与循环语句相结合 数组的每一个元素相当于一个变量,且类型相同,相互独立,5,例6.1 对10个数组元素依次赋值为09,然后逆序输出,#include int main() int i,a10; /*定义数组*/ for(i=0;i=0;i-) printf(“%d ”,ai); /*逆序输出*/ return 0; ,算法思想:1.初始化:a00, a11, a99 2.逆序输出数组元素:a9, a8, a0,6,一维数组的初始化 定义数组时对数组元素赋初值(一般初始化) 例:int a3=0,1,2 只给数组中的部分元素赋初值 例:int a5=0,1,2 将数组元素统一赋初值0 例:int a5=0 对全部数组元素赋初值时,可以不指定数组长度 例:int a =0,1,2,7,例6.2 用数组来处理Fibonicci数列的前20项。,#include int main ( ) int i; long int f20 = 1,1; /*部分赋初值*/ for(i=2; i20; i+) fi=fi-1+fi-2; /*计算数组元素*/ for(i=0; i20; i+) /*输出数组元素*/ if (i%5=0)printf(“n”); printf(“%12ld”,fi); return 0; ,思想:1.计算f 0=f1=1;f2=f1+f0;f19=f18+f17 2.输出数列元素,8,算法思想: 1.输入10个数到a0,a1,a9中 2.10个元素,相邻两两比较,将最大的存到a9中 3.9个元素,相邻两两比较,将最大的存到a8中 10.2个元素,相邻两两比较,将最大的存到a1中 11.顺序输出数组a中的10个数a0,a1,a9,例6.3 用起泡法对10个数排序(由小到大)。,10个元素的起泡算法需要进行9趟比较,每次将最大的元素放到最后 第i趟比较需要进行n-i次两两比较,9,#include int main( ) int a10; int i,j,t; for(i=0;iai+1) /*相邻两数比较,交换*/ t=ai;ai=ai+1;ai+1=t; printf(“The sorted numbers:n”); for(i=0;i10;i+)printf(“%d ”,ai); /*输出*/ printf(“n”); return 0; ,10,要习惯于改变自己,只有你变了,你的世界才会跟着变。鱼儿的世界在水中,鸟儿的世界在天空,你的世界在你力所能及的地方。,12,6.2 怎样定义和引用二维数组,二维数组的定义 类型说明符 数组名常量表达式常量表达式 二维数组可以看做是一维数组的推广,例:float a34;b510; 功能:a为3行4列共12个float型元素的数组;b为5行10列共50个float型元素的数组。,分析:二维数组a可以看作是一个长度为3的特殊一维数组,具有三个元素为a0,a1,a2,而每个元素又是4个元素的数组名,即:元素a0又有元素a00、a01 、a02 、a03;,13,float a34中定义的二维数组,相当于定义了12个同种类型的元素(或变量): a00、a01 、a02 、a03 a10、a11 、a12 、a13 a20、a21 、a22 、a23 在内存中排列顺序为:按行存放。先存放第一行元素,再存放第二行元素,,例:float a234; 定义234的三维数组a,有24个元素,分别为: a000、 a001、 a002、 a003、a010、 a011、 a012、 a013、 、a123、,14,例:float x1020,y456;,二维数组的引用 数组名下标下标 每一个元素都是一个独立的变量 每一个下标都是从0开始,不能超出定义的数组大小,数组float x1020中无元素x1020,引用元素 xij时,i值只能是0,9; j值只能是0,19 引用元素 yijk时,i值只能是0,3; j值只能是0,4; k值只能是0,5,15,例:int a34=1,2,3,4,5,6,7,8,9,10,11,12; int b34= 1,5,6,9; 把第1个大括号内的数值赋给第1行元素,把第2个内的数值赋给第2行元素 没有初始化数值对应的元素自动初始化为0,二维数组的初始化 分行给二维数组赋初值 可以将所有数据写在一个大括号内,按数组元素排列顺序对元素赋初值,16,例:int a 4=1, ,7,8,9; 等价于: int a34=1, ,7,8,9;,如果对全部元素赋初值,则第一维的长度可以不指定,但必须指定第二维的长度,例:int a34=1,2,3,4,5,6,7,8,9,10,11,12; 等价于: int a 4=1,2,3,4,5,6,7,8,9,10,11,12;,分行赋初值时也可以省略第一维的长度,问:int a243=1,2,3,4,5,6,7,8,9,10,11,12; 中的哪一个元素的值初始化为9?哪一个元素的值初始化为12?,17,#include int main() int a23=1,2,3,4,5,6, b32, i, j; for(i=0;i2;i+) for(j=0;j3;j+) bji= aij; for(i=0;i3;i+) printf(“n”); for(j=0;j2;j+) printf(“%5d”,bij); return 0; ,例6.4 将矩阵a转置后存到矩阵b中,其中,二维数组程序举例,算法:把aij赋值给bji,其中i=0,1; j=0,1,2。,18,例6.5 有一个34的矩阵a,要求编程序求出其中值最大的那个元素的值及其所在的行号和列号,其中,19,算法思想: 把第一个元素a00作为临时最大值max,并记录它所在的行和列的下标 把临时最大值max与每一个元素aij进行比较,若aijmax,把aij作为新的临时最大值,并记录它所在的行和列的下标;否则,继续比较 当全部元素比较完后,max是整个矩阵全部元素的最大值,20,算法: 1、maxa00;row=0;colum=0; 2、对所有的i=0,1,2和j=0,1,2,3重复执行: 如果aijmax,则max=aij,row=i,colum=j 3、输出max ,row,colum,算法结束,21,#include int main ( ) int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;/*定义矩阵*/ int i,j,row,colum,max; max=a00;row=colum=0; for(i=0; i max ) max = aij;row=i; colum= j; /*记录*/ printf(“max=%d, row=%d, colum=%dn”,max,row,colum); /*按要求格式输出*/ return 0; ,运行结果:max=10,row=2,colum=1 表示最大值是10,它所在元素的下标为2和1,22,练习 6.3 求一个33矩阵对角线元素之和。,#include int main() int a33,sum=0; int i,j; printf(“enter data:n”); for(i=0;i3;i+) for(j=0;j3;j+)scanf(“%d”, ,23,练习6.6 输出杨辉三角(要求输出10行)。,#include #define N 11 int main( ) int i,j,aNN; for(i=1;iN;i+)ai1=1;aii=1; for(i=3;iN;i+) for(j=2;j=i-1;j+)aij=ai-1j-1+ai-1j; for(i=1;iN;i+) for(j=1;j=i;j+)printf(“%6d”,aij); printf(“n”); printf(“n”); return 0; ,24,25,26,筛选法求素数的算法思想: 1. 挖去1 2. 用下一个未被挖去的数p去除p后面各数,把p的 倍数挖掉 3. 检查p是否小于n,如果是,则返回(2)继续执行, 否则算法结束 4. 剩下的数就是素数,练习6.1 用筛选法求100之内的素数。,27,算法思想: 1.输入10个数到a0,a1,a9中; 2.把a0,a1,a9中最小的数交换到a0中; 3.把a1,a2,a9中最小的数交换到a1中; 10.把a8, a9中最小的数交换到a8中; 11.顺序输出数组a中的10个数a0,a1,a9。,以上的第210步可以归纳为: 对于i0,1,8执行: “把ai,ai1,a9中最小的数交换到ai中”,练习6.2 用选择法对10个数排序(由小到大)。,28,#include int main() /*选择法排序*/ int a10,t; int i,j; for(i=0;iaj) t=ai;ai=aj;aj=t; for(i=0;i10;i+) printf(“%d ”,ai); /*输出*/ return 0; ,29,思考题 1.将数组a10的每一个元素依次循环向后移动k位。 如:1 5 6 7 循环向后移动1位得: 7 1 5 6 如:1 5 6 7 循环向后移动2位得: 6 7 1 5 2.使用循环结构方法判断一个长整型数有几位数。 3.输入一个三位以内整数,求由它的各位数字组成的最大数。 如:输入123,输出321;输入192,输出921,30,思考: 如何计算两个矩阵之和? 例如,输入6个整数到23矩阵a;输入6个整数到23矩阵b;计算cab;输出矩阵a、b、c。 如何计算两个矩阵之积? 例如,输入6个整数到32矩阵a;输入6个整数到23矩阵b;计算ab 得到33的矩阵c;输出矩阵a、b、c。,31,32,例1 char c10; c0=I;c1=;c2=a;c3=m;c4=; c5=h; c6=a; c7=p; c8=p; c9=y;,数组状态,字符数组是用来存放字符数据的数组每个元素相当于一个char型变量,存放一个字符数据,占用一个字节的空间 字符数组的定义,6.3 字符数组,33,例 char c10 = I,a,m,h,a,p,p,y;,字符数组的初始化 逐个元素初始化 数据少于数组长度,多余元素自动赋值0 指定初值时,未指定数组长度,则长度等于初值个数,34,例 char c10 = O,K;,字符数组的初始化 逐个元素初始化 数据少于数组长度,多余元素自动赋值0 指定初值时,未指定数组长度,则长度等于初值个数,35,例6.6 输出一个已知字符串。 #include int main ( ) char c10=I, ,a,m, ,a, ,b,o,y; int i; printf(“n”); for(i=0;i10;i+)printf(“%c”,ci); return 0; ,字符数组的引用 可以引用一个元素,得到一个字符,输出结果: I am a boy,36,例 “Good”的存储形式为:,例 char c=“I am happy”; char c=“I am happy”; 都可以表示如下(数组长度为11):,字符串和字符串结束标志 在C语言中,用字符数组来对字符串进行操作处理,即,把字符串看做一个个的字符进行处理 注意“字符串结束符”的位置,37,注意:1、在有结束符0的情况下,只要知道数组名,就可以计算出保存的字符串的长度; 2、有时为了方便、统一起见,在使用字符数组时一般常常人为增加字符结束符0。,38,例6.8 输入一行字符,统计其中有多少个单词。单词之间用空格分隔开。,字符数组应用举例,基本算法: 输入一行字符到字符数组; 统计该字符串包含的单词数Count; 输出单词数Count。,39,例6.8 输入一行字符,统计其中有多少个单词。单词之间用空格分隔开。,开始字符满足条件: 本身是字符,不是空格;它的前一字符是空格或者它是串的第1个字符。,考虑单词开始字符具有的特点是什么?,扫描字符串的字符,遇到开始字符就把Count加1,如何统计字符串(以0结束)中含有多少个单词?,观察字符串:“ you are a student ”,40,算法、程序如下:,#include int main( ) int k,Count; char s80; gets(s); fo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京戏曲艺术职业学院单招《英语》题库及答案详解(夺冠)
- 2024自考专业(公共关系)过关检测试卷含完整答案详解【典优】
- 2025经济适用房转让合同样本
- 2025劳动合同范例
- 2024年公务员(国考)复习提分资料含完整答案详解(名校卷)
- 初一上册语文期末试卷及答案
- 计算机三级题库检测试题打印附完整答案详解(易错题)
- 2025临时工劳动合同范本AA
- 2025计算机一级综合提升测试卷附完整答案详解【各地真题】
- 2025债务转让股权合同书
- GB/T 34875-2017离心泵和转子泵用轴封系统
- GB/T 21063.4-2007政务信息资源目录体系第4部分:政务信息资源分类
- GA/T 1081-2020安全防范系统维护保养规范
- 02药物不良反应adr课件
- 施工项目成本管理课件
- 文物建筑保护修缮专项方案
- 营销与2008欧锦赛ktv渠道方案
- 故障录波器课件
- DB32-T 2665-2014机动车维修费用结算规范-(高清现行)
- 《区域经济学》讲义(1)课件
- 《现代分析测试》17 电子光学基础
评论
0/150
提交评论