




免费预览已结束,剩余32页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章 利用数组处理批量数据,复习:循环(iteration),循环体现了计算机的工作能力 。 计算机能够循环,才具有处理大量数据的能力。 因为处理大量数据往往是重复的操作。,例,c语言考试结束后,输入全班同学的成绩,然后找出最高分、计算平均分、并排序。,如何声明大量的数据? 逐个声明变量是不可取的。,分析:数据具有相同性质 思路:用一个变量统一命名,右下角加数字来表示第几个学生,例:给出10个儿童的体重,要求计算平均体重并打印出低于平均体重的数值。用简单变量来解决问题:,main() int w1, w2, w3, w4, w5, w6, w7, w8, w9, w10; int aver; scanf( “%d%d%d%d%d%d%d%d%d%d“,用数组来解决问题: main() int w10; /* 定义 1 个整型数组存放体重 */ int t, i; for( i=0; i10; i+ ) scanf( “%d“, ,数组及其相关概念,每个数组都有一个名字,称为数组名(例如a)。 为标识数组中的每个元素,需要对它们进行编号,这种编号称之为数组元素的下标(例如:a0、a1.) 注意:c语言规定下标从0开始。,下标使元素在数组中的位置(或排列顺序)唯一地确定下来。用数组名加上下标可以准确地访问数组中的某个元素。 如:w0代表数组w中的第一个元素 w9代表数组w中的第十个元素,数组名代表数组的起始地址。 数组元素在内存中是连续存储的。,数组与变量一样,使用之前必须首先声明。 声明数组就是一次性声明大量的数据。,6.1 怎样定义和引用一维数组,一、定义一维数组,例如:int a10; /*定义的整型数组a含10个元素*/ float b20; /*定义的实型数组b含20个元素*/,声明之后,谁代表整个数组? int a10? a10? a?,数组中元素有哪些? a1到 a10? a0到 a9?,元素在数组中的位置,称为下标。数组的下标从0开始。,数组小结,声明数组 指明长度、数据类型和数组名 数组名代表整个数组 数组的下标从0开始,二、一维数组的初始化,说明:,定义一维数组时给出了全部元素的初值,数组的下标允许省略。 如: int a = 2 , 4 , 6 , 8 , 10 ; int a ; ,初始化的数据个数少于数组长度时,未初始化部分将被编译系统自动用 0 赋值,但不能多于数组的长度。 如:int a5= 2 , 4 ; 相当于: a0=2, a1=4, a2=0, a3=0, a4=0 int a5=1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 ; ,2 .使用其它方法初始化,三、一维数组的引用,数组元素类似单个变量,可自由存取。与一般变量相比:, 数组元素通过数组名加该元素在数组中的位置来访问的。 表示形式:数组名下标 例如: a3, 数组元素的下标是从0开始的。, 数组元素的赋值是逐个元素进行的,不允许把一个数组作为一个整体赋给另一个数组。除了数组初始化外,也不允许用在花括号中列表的方式对数组整体赋值。, 数组名a代表的是数组a在内存中的首地址,因此,可以用数组名a来代表数组元素a0的地址。,四、一维数组应用举例,例1:从键盘上输入10个实型数存入数组,然 后按输入顺序的逆序输出这10个数。,main() float a10; int i; for(i=0 ; i=0 ; i-) printf(“%f”,ai); ,main() int a10, i , j , t ; printf(“input 10 numbers : n”); for(i=0 ; iai+1) t=ai; ai=ai+1; ai+1=t; for(i=1 ; i=10 ; i+) printf(“%d“,ai); ,例2:用冒泡法对10个数排序(由小到大),一.定义二维数组,6.2 怎样定义和引用二维数组,格式:类型说明符 数组名常量表达式1常量表达式2; 例如: int a34;,说明:,二维数组除了维数比一维数组多一维外, 其它性质全部类似。,下面写法是否正确?,二、二维数组的初始化,介绍定义时初始化(两种方法),其它方法和一维数组类似。,例如:int a23=1 , 2 , 3 , 4 , 5 , 6 ;,按行赋值: 分别赋给第0行的三个数组元素:即:a00=1 a01=2 a02=3,即按数组元素在内存中排列的顺序赋初值。 例如:int a23=1 , 2 , 3 , 4 , 5 , 6 ;,按顺序分别赋给各数组元素:即: a00=1 a01=2 a02=3 a10=4 a11=5 a12=6,按行赋值: 分别赋给第1行的三个数组元素:即:a10=1 a11=2 a12=3,说明:, 初始化时,可以只对部分数组元素初始化,未被初始化的数组元素将自动赋 0 。,初始化时对全部元素都赋初值,或分行赋初值,可以省略第一维数组长度。,三、二维数组的引用,说明:数组名a代表的是数组a在内存中的首地址, 因此,可以用数组名a来代表数组元 素 a00的地址。,行下标和列下标是整型常量、整型变量或整型表达式。其编号是从0开始的。 例如:若有 int a1012, i=15; 则使用 a3*30, a1i-5都是合法的。,例1:通过键盘给 2*3的二维数组输入数据,第一行赋1、3、5,第二行赋2、4、6。然后按行输出此二维数组。,main() int a23,i,j,k=1; for(i=0;i2;i+) for(j=0;j3;j+) if(i=0) aij=2*k-1;k=k+1; else aij=2*(k-3);k=k+1; for(i=0;i2;i+) for(j=0;j3;j+) printf(“%d”,aij); pirntf(“n”);,main() int a23=1,2,3,4,5,6; int b32 ,i,j; for (i=0;i=1;i+) for(j=0;j=2;j+) printf(“%5d”,aij); bji= aij ; printf(“n”); for (i=0;i=2;i+) for(j=0;j=1;j+) printf(“%5d”,bij); printf(“n”);,例2:矩阵的转置,main() int a23=1,2,3,4,5,6; int i,j; for (j=0;j3;j+) for(i=0;i2;i+) printf(“%d”,aij); printf(“n”);,例3:求5*5方阵的对角线之和。,main() int a55, n=1,i,j,s,s1=0,s2=0; for(i=0;i0;j-) if(i!=j) s2=s2+aij; break; s=s1+s2; printf(“%d”,s); ,1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25,6.3 字符数组,定义、初始化和元素引用与一般的数组相同。 例如: main() char ch5=c, h , i , n , a; for(i=0; i5; i+) printf(“%c”,chi); ,说明:,类型说明符char, 如: char c10; 或int c10;,初始化字符个数允许少于字符数组长度,但不能多于字符数组的长度。,如:int c8=h,e,l,l,o; 则:c0=h, c1= e, c2= l, c3= l, 4= ,o c5=0, c6=0, c7=0,二、字符串与字符数组,是用双引号括起来的一串字符,由系统自动加上一个字符串结束标志0。 0占内存,但不记入字符串长度。 如:“china” 占内存6个字节,但字符串长度是5,用字符数组处理字符串,每个元素存放一个字符数据。 字符型数组初始化 如:char c6=h,e,l,l,o 字符数组中共5个值 或 char c6=“hello”; 字符数组中共6个值 或 char c=“hello”; 字符数组中共6个值,说明:字符数组不要求它最后一个元素一定是0, 例如:char ch2=a, b;是合法的。 用字符串常量赋初值时,最后一个元素值为0。为使处理方法一致,常常人为地加上一个值为0的元素。 如:char c=h, e, l, l, o, 0;,三、字符数组的输入输出,例如:main() char c6; scanf(“%s”,c); printf(“%s”, c) ;,main() char c5; int i; for(i=0;i5;i+) scanf(“%c”,输出字符数组时,遇到第一个0 ,输出就结束。,用“%s”格式符输入字符串时,scanf函数的输入项 是字符数组名(数组名代表该数组的起始地址)。,用“%s”格式符输入字符串时,scanf函数的输入项是字符数组名时,从键盘输入的字符串应短于已定义的字符数组的长度。系统自动在后面加 个0结束符。,利用scanf函数输入多个字符串时,是以空格、回车、跳格分隔。因此不要用scanf函数从键盘输入 how are you? 赋给一个字符串。,例如:char c10; scanf(“%s”,c); 用户输入字符串时最多为9个。,例如:char a15; scanf(“%s”,a); 用户从键盘输入how are you? ,实际上只有how赋给了数组a。,例1:把输入的字符串逆序排列,并显示。,#include “string.h” main() char str80; int c,i,j; scanf(“%s“,str); j=strlen(str); for(i=0;ij;i+) c=stri;stri=strj;strj=c; j-; printf(“nreversed string:n%sn“,str);,例2:从键盘输入一个字符串(长度不超过20,其中不含空格),将其复制一份,复制时将小写字母都转换成为大写字母)。,main() char a20,b20; int i; printf(“enter a string:n“); scanf(“%s“,a); i=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 猫咪线描课件
- 安全教育校本培训总结课件
- 工程部冲刺方案(3篇)
- 农业品牌化趋势下2025年特色农产品市场推广策略解析
- 农业企业数字化种植案例研究:农业智能化种植技术人才培养分析报告
- 系统与软件工程信息化项目造价评估
- 粮食库面试题库及答案
- 安全教育培训重点课件
- 安全教育培训运营商课件
- 安全教育培训课稿模板课件
- 古代服饰复原与租赁服务创新创业项目商业计划书
- 机械设计部绩效考核制度
- 电线电缆检验工职业技能模拟试卷含答案
- 糖尿病饮食指导健康宣教
- 小儿腹泻患者的健康宣教
- 健康企业创建培训
- 企业有限空间培训课件
- Unit 3 Same or Different Section A 1a-1e课件(内嵌音频)人教版英语八年级上册
- 铝土矿生产建设项目可行性研究报告
- 舆情信息培训课件模板
- 培训赋能文案
评论
0/150
提交评论