版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第7章 数组,前面所用到的数据均为基本类型(整、实、字符),为了丰富数据类型 ,须提供强有力的数据表达方式。C语言提供了一种构造类型数据由基本类型按某一规则组合在一起。 其中数组:同一种(基本)类型按一定顺序组合在一起的数据类型。,第六章 数组,构造数据类型之一 数组:有序数据的集合,用数组名标识 元素:属同一数据类型,用数组名和下标确定 6.1 一维数组 一维数组的定义 定义方式: 数据类型 数组名常量表达式;,合法标识符,表示元素个数 下标从0开始, :数组运算符 单目运算符 优先级(1) 左结合 不能用( ),例 int a6;,编译时分配连续内存 内存字节数=数组维数* sizeof(
2、元素数据类型),数组名表示内存首地址, 是地址常量,一维数组的引用 数组必须先定义,后使用 只能逐个引用数组元素,不能一次引用整个数组 数组元素表示形式: 数组名下标 其中:下标可以是常量或整型表达式,例 int i=15; int datai; (不能用变量定义数组维数),例 int a10; printf(“%d”,a); () 必须 for(j=0;j10;j+) printf(“%dt”,aj); (),例 int data5; data5=10; /C语言对数组不作越界检查,使用时要 注意,一维数组的初始化 初始化方式,在定义数组时,为数组元素赋初值 (在编译阶段使之得到初值),in
3、t a5=1,2,3,4,5; 等价于:a0=1; a1=2; a2=3; a3=4; a4=5;,说明: 数组不初始化,其元素值为随机数 对static数组元素不赋初值,系统会自动赋以0值,当全部数组元素赋初值时,可不指定数组长度,如 int a5=6,2,3; 等价于: a0=6; a1=2;a2=3; a3=0; a4=0; 如 int a3=6,2,3,5,1; (),static int a5; 等价于:a0=0; a1=0; a2=0; a3=0; a4=0;,只给部分数组元素赋初值,int a=1,2,3,4,5,6; 编译系统根据初值个数确定数组维数,#define N 6 m
4、ain() int aN,bB-60,c=1,2,3,4,5,6,i; for(i=0;iN;i+) scanf(“%d%d”, ,数组定义:必须用常量表达式,数组元素引用,Ch6_01.c,程序举例,程序举例,步骤: 1. 输入:for循环输入10个整数 2. 处理: (a) 先令max=min=x0 (b) 依次用xi和max,min比较(循环) 若maxxi,令min=xi 3. 输出:max和min,#include #define SIZE 10 main() int xSIZE,i,max,min; printf(Enter 10 integers:n); for(i=0;ixi)
5、 min=xi; printf(Maximum value is %dn,max); printf(Minimum value is %dn,min); ,#include main() int i; int f20=1,1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i20;i+) if(i%5=0) printf(n); printf(%12d,fi); ,程序举例,例6_04 求Fibonacci数列:1,1,2,3,5,8,的前40个数。,Ch6_04.c,main() long f1,f2; int i; f1=1; f2=1; for (i=1;i
6、=20;i+) printf(%12ld %12ld,f1,f2) ; if(i%2 =0) printf(n); f1=f1+f2; f2=f2+f1; ,例6_05 用冒泡法对10个数排序。,排序过程: (1)比较第一个数与第二个数,若为逆序a0a1,则交换;然 后比较第二个数与第三个数;依次类推,直至第n-1个数和第 n个数比较为止第一趟冒泡排序,结果最大的数被安置在 最后一个元素位置上 (2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在 第n-1个元素位置 (3)重复上述过程,共经过n-1趟冒泡排序后,排序结束,例,38 49 65 76 13 27 30 97,第一趟,3
7、8 49 65 13 27 30 76,第二趟,38 49 13 27 30 65,第三趟,38 13 27 30 49,第四趟,13 27 30 38,第五趟,13 27 30,第六趟,49 38 65 97 76 13 27 30,初始关键字,n=8,13,76,76,76,27,30,13,65,27,65,30,65,13,13,49,49,30,49,27,38,27,38,30,38,13 27,第七趟,38,49,76,97,97,97,97,27,13,27,30,#include main() int a11,i,j,t; printf(Input 10 numbers:n)
8、; for(i=1;iai+1) t=ai; ai=ai+1; ai+1=t; printf(The sorted numbers:n); for(i=1;i11;i+) printf(%d ,ai); ,Ch6_05.c,例6_06 用简单选择法对10个数排序,排序过程: (1)首先通过n-1次比较,从n个数中找出最小的, 将它 与第一个数交换第一趟选择排序,结果最小的数被安置 在第一个元素位置上 (2)再通过n-2次比较,从剩余的n-1个数中找出关键字 次小的记录,将它与第二个数交换第二趟选择排序 (3)重复上述过程,共经过n-1趟排序后,排序结束,例,初始: 49 38 65 97 76
9、 13 27 ,i=1,13,49,一趟: 13 38 65 97 76 49 27 ,i=2,27,38,六趟: 13 27 38 49 65 76 97 ,Ch6_06.c,#include main() int a10,i,j,k,x; printf(Input 10 numbers:n); for(i=0;i10;i+) scanf(%d, ,例,i=1,初始: 49 38 97 13 65 76 27 ,13,49,i=2,一趟: 13 38 97 49 65 76 27 ,27,38,38,97,三趟: 13 27 38 49 65 76 97 ,改进的选择法,main() int
10、 a11,i,j,k,x; printf(Input 10 numbers:n); for(i=0;i10;i+) scanf(%d, ,改进的选择法,增加标识语句,对不需排序就退出循环的执行。,Ch6_06_1.c,从以上例子可以看到: 用到两种循环, 第一种冒泡法循环找第i大的元素;第二 种选择法循环对其后的元素的一一比较, 找最小的数。,流程图:,Ex01 在C语言中,引用数组元素时,其数组下 标的数据类型允许是。 整型常量 B) 整型表达式 C) 整型常量或整型表达式 D) 任何类型的表达式,学生练习,Ex02 若有说明:int a10; 则对a数组元素的正确 引用是。 A) a10
11、B) a3.5 C) a-5 D) a10-10,学生练习,Ex03 在C语言中,一维数组的定义方式为: 类型说明符 数组名; A) 常量表达式 B) 整型表达式 C) 数值型表达式 D) 任意类型表达式,学生练习,Ex04 下面程序以每行4个数据的形式输出a数组, 请填空。 #define N 20 main() int aN,i; for (i=0;iN; i+) scanf(%d, 【1】); for (i=0;iN;i+) if (【2】) 【3】 printf(%3d,ai); printf(n); ,学生练习,Ex05 以下程序的功能是求数组num中小于零的 数据之和。请填空。 m
12、ain() int num20= 10,20,1,-20,203,-21,2,-2,-2,11,-21,22,12,-2,-234,-90,22,90,-45,20; int sum=0,i; for (i=0;i=19;i+) if(【1】) sum=【2】; printf(sum=%6d,sum); ,学生练习,Ex06 已知某课程的平时、实习、测验和期末成绩,求该课程的总评成绩。其中平时、实习、测验和期末分别占10、20、20、50。/*功能:从键盘上循环输入某课程的平时、实习、测验和期末成绩,按10,20,20,50的比例计算总评成绩,并在屏幕上显示出来。按空格键继续循环,其他键终止循
13、环。*/,学生练习,#include“stdio.h”main()inti =1,j; char con_key=x20; /* x20 空格键的ASCII码*/ float score5,ratio4=0.1,0.2,0.2,0.5; /*定义成绩、比例系数数组*/ while(con_key=x20) clrscr(); printf(输入第%2d个学生的成绩n, i+); printf(平时 实习 测验 期末成绩n); score4=0;/* score4:存储总评成绩*/,for(j=0; j4; j+) scanf(%f, /*getch()函数等待从键盘上输入一个字符*/ ,ex0
14、6.c,6.2 二维数组及多维数组 二维数组的定义 定义方式: 数据类型数组名常量表达式常量表达式;,数组元素的存放顺序 原因:内存是一维的 二维数组:按行序优先 多维数组:最右下标变化最快,例 int a34; float b25; int c234; int a3,4; (),行数,列数,元素个数=行数*列数,二维数组理解,每个元素ai由包含4个元素 的一维数组组成,二维数组a是由3个元素组成,二维数组元素的引用 形式: 数组名下标下标 二维数组元素的初始化 分行初始化:,按元素排列顺序初始化,Ch6_100,例6_07 给一个2*3的2维数组各元素赋值,并输出全部元素的值。,/*功能:从
15、键盘上给2*3数组赋值,并在屏幕上显示出来。*/,main() int i, j, arrayRowCol; /*定义1个2行3列的2维数组array*/ for(i=0; iRow; i+) /*外循环:控制2维数组的行*/ for(j=0; jCol; j+) /*内循环:控制2维数组的列*/ printf(please input array%2d%2d:,i,j); scanf(%d,/*输出2维数组array*/ for(i=0;iRow;i+) for(j=0;jCol;j+) printf(%dt,arrayij); /*将aij的值显示在屏幕上*/ printf(n); ,程序
16、举例,程序举例,例6_08 将二维数组行列元素互换,存到另一个数组中。,程序举例,例6_09 求二维数组行列中对角线的元素的和。,main() int i,j,s=0; static int a33=1,2,3,9,8,7, -10,10,-5; clrscr(); for (i=0;i=2; i+) for (j=0; j=2; j+) printf( %4d , aij); if (i=j) s+=aij; printf(n); ,printf(%d,s); ,例6_10 求二维数组中最大元素值及其行列号。,#include main() int a34=1,2,3,4, 9,8,7,6,
17、 -10,10,-5,2; int i,j,row=0,colum=0,max; max=a00; for(i=0;imax) max=aij; row=i; colum=j; printf(max=%d,row=%d, colum=%dn,max,row,colum); ,程序举例,例6_11 读入下表中值到数组,分别求各行、各列及表中所有数之和。,#include main() int x54,i,j; for(i=0;i4;i+) for(j=0;j3;j+) scanf(%d, ,for(i=0;i5;i+) for(j=0;j4;j+) printf(%5dt,xij); print
18、f(n); ,程序举例,学生练习,Ex07 请打印出右边图形。,Ex 07.c,6.3 字符数组和字符串 字符数组 定义,字符数组的初始化 逐个字符赋值 用字符串常量 字符数组的引用,例 char c10, ch34;,例6_12 输出一个字符串。,#include main() char c10=I, ,a,m, ,a, ,b,o,y; int i; for(i=0;i10;i+) printf(%c,ci); printf(n); ,字符串 字符串及其结束标志 无字符串变量,用字符数组处理字符串 字符串结束标志:0,字符串的输入输出 逐个字符I/O: %c 整个字符串I/O: %s,例6_
19、13 用%c main() char str5; int i; for(i=0;i5;i+) scanf(“%c”, ,例6_14 用%s main() char str5; scanf(“%s”, str); printf(“%s”, str); ,用字符数组名,不要加 printf(“%s”,a); ,例 main( ) char a =“Hello”; printf(“%s”,a); ,结果:Hello#-=*,结果:Hello,用“%s”输出时,遇0结束,比较两种输出的区别,main() char a=h,e,l,0,l,o,0; printf(%s,a); ,例6_16,输出:hel
20、,数组中有多个0时, 遇第一个结束,main() int i; char a5; scanf(%s,a); for(i=0;i5;i+) printf(%d,ai); ,运行情况: (1)若输入 hel , 正常 (2)若输入 hell , 正常 (3)若输入 hello , 用%s 输出时,会出现问题,输入字符串长度数组维数,例 字符串输入举例,#include main() char a15,b5,c5; scanf(%s%s%s,a,b,c); printf(a=%snb=%snc=%sn,a,b,c); scanf(%s,a); printf(a=%sn,a); ,运行情况: 输入:H
21、ow are you? 输出:a=How b=are c=you? 输入:How are you? 输出:a=How,scanf中%s输入时,遇空格或回车结束,运行情况: 输入:How are you?,例 若准备将字符串“This is a string.”记录下来, 错误的输入语句为: (A)scanf(“%20s”,s); (B)for(k=0;k17;k+) sk=getchar(); (C)while(c=getchar()!=n) sk+=c;,常用的字符串处理函数 包含在头文件 string.h,字符串输出函数puts 格式:puts(字符数组) 功能:向显示器输出字符串(输出完
22、,换行) 说明:字符数组必须以0结束,字符串输入函数gets 格式:gets(字符数组) 功能:从键盘输入一以回车结束的字符串放入字符数组中, 并自动加0 说明:输入串长度应小于字符数组维数,例 #include main( ) char string80; printf(“Input a string:”); gets(string); puts(string); 输入: How are you? 输出: How are you ?,字符串连接函数strcat 格式:strcat(字符数组1,字符数组2) 功能:把字符数组2连到字符数组1后面 返值:返回字符数组1的首地址 说明:字符数组1必
23、须足够大 连接前,两串均以0结束;连接后,串1的0取消, 新串最后加0,字符串拷贝函数strcpy 格式:strcpy(字符数组1,字符串2) 功能:将字符串2,拷贝到字符数组1中去 返值:返回字符数组1的首地址 说明:字符数组1必须足够大 拷贝时0一同拷贝 不能使用赋值语句为一个字符数组赋值,例 char str120,str220; str1=“Hello!”; str2=str1;,(),(),例 strcpy与strcat举例,#include #include void main() char destination25; char blank = , c= C+, turbo =
24、Turbo; strcpy(destination, turbo); strcat(destination, blank); strcat(destination, c); printf(%sn, destination); ,Turbo C+,字符串比较函数strcmp 格式:strcmp(字符串1,字符串2) 功能:比较两个字符串 比较规则:对两串从左向右逐个字符比较(ASCII码), 直到遇到不同字符或0为止 返值:返回int型整数,a. 若字符串1 字符串2, 返回正整数 c. 若字符串1= 字符串2, 返回零 说明:字符串比较不能用“=”,必须用strcmp,字符串长度函数strlen 格式:strlen(字符数组) 功能:计算字符串长度 返值:返回字符串实际长度,不包括0在内,例 对于以下字符串,strlen(s)的值为: (1)char s10=A,0,B,C,0,D; (
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026贵州铜仁市人民医院招聘合同制人员17人笔试参考题库及答案详解
- 成都中医药大学第三附属医院2026年部分岗位招聘考试模拟试题及答案解析
- 2026年博尔塔拉蒙古市粮食和物资储备系统事业单位人员招聘考试备考试题及答案详解
- 2026年毕节市城管协管人员招聘考试备考试题及答案详解
- 融资租赁公司的资产管理岗位职责
- 2026江苏无锡市住房置业融资担保有限公司招聘1人考试备考试题及答案解析
- 2026江苏南京大学YJ20260522法学院特任助理研究员招聘1人考试备考试题及答案解析
- 2026年大连市广播电视台(融媒体中心)人员招聘考试备考试题及答案详解
- 2026广东警官学院总务部招聘合同制工作人员1人考试备考试题及答案解析
- 2026广西医科大学附属口腔医院招聘医学影像科技师3人考试备考题库及答案解析
- 第二类精神药品临床应用管理规范
- 破产管理人培训
- 第四单元第13课羊字头(课件)书法北师大版四年级上册
- 分数加减法-基于教学评一体化的大单元整体教学设计
- 污水排放承诺书
- 2026年生态环境保护法专业知识测试题
- 吞噬星空介绍
- 2026年深圳中考数学基础夯实专项试卷(附答案可下载)
- 市场环境下销售电价建模与实证:理论、影响与优化策略
- 虚开专票课件
- GB/T 12228-2025通用阀门碳素钢锻件技术规范
评论
0/150
提交评论