- 1、本文档共91页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 数 组;1 数组引入
2 数组定义、引用和初始化
3 向函数传递一维数组
4 向函数传递二维数组
5 字符数组
6 小结;7.2 数组的定义;7.2.1 一维数组的定义、初始化及引用;数组说明中其他常见的错误:
① float a[0]; /* 数组大小为0没有意义 */
② int b(2); /* 不能使用圆括号 */; 一维数组在内存中的存放;定义:int a[3];
则有3个整型变量:a[0]、a[1]、a[2], 数组的下标都是从0开始.
引用数组元素时下标可为任意表达式,动态决定访问哪个元素
for (i=0; iSIZE; i++) a[i++] = 2 * i;
下标越界是大忌!
定义:int a[10]; 那么数组元素为a[0] ~a[9]
使用大于最大下标的下标,将访问数组以外的空间。那里的数据是未知的,系统不做下标越界检查,但可能带来严重后果
sizeof可以用来获得数组大小;3、一维数组的初始化;4)使一个数组中全部元素值为0
int a[10]={0,0,0,0,0,0,0,0,0,0};
或 int a[10]={0};
不能写成:int a[10]={0*10};
或 int a[10]={ };
5)建议:
数组大小使用宏常量,以适应未来可能的变化
#define SIZE 10 int a[SIZE];;只能逐个对数组元素进行操作(字符串数组例外);1、 int n;
scanf(%d″,n);
int a[n];;例1:从键盘输入10个学生的成绩存放到数组score中,统计最高分数学生人数,并输出对应的下标
分析:
1、定义float score[10], 最高分max=0,最高分人数count=0;
2、循环:输入第i位学生的成绩score[i];并与max比较,如果大于max,则max=score[i];
3、循环:把每个学生成绩score[i]与max比较,若相等则count++,并输出下标i;7.2 数组的定义;1、二维数组的定义
当数组中每个元素带有两个下标时,称这样的数组为二维数组。在逻辑上可以把二维数组看成是一个具有行和列的表格或一个矩阵
如 int a[4][5],二维数组a[4][5]的逻辑结构见下表
;按行存放
——即先顺序存放第一行的元素,再存放第二行的元素…… ;7.2.2 二维数组元素的引用;2 二维数组的初始化;④ 对部分元素赋初值:
例如: int a[3][4]={{1},{5},{9}}; ;地址 值 数组元素;例题;二维数组的输入输出;例1:设计一个程序输出下面的矩阵;二维数组的应用举例;例3:
编写程序计算两个3*4矩阵相加,并打印结果
分析:
从屏幕上分别输入3*4矩阵a和b的值
定义矩阵c;
利用双重循环,c[i][j]=a[i][j]+b[i][j];
输出c[i][j];;1 数组引入
2 数组定义、引用和初始化
3 向函数传递一维数组
4 向函数传递二维数组
5 字符数组
6 小结;一维数组操作;(1)选择排序——简单选择排序法;54 71 58 29 31
54 71 58 29 31
54 71 58 29 31
54 71 58 29 31
;k=1;29 31 58 54 71;选择法(递增)
基本思想:
(1) 从n个数的序列中选出最小的数,与第1个数交换位置;
(2) 除第1个数外,其余n-1个数再按(1)的方法选出次小的数,与第2个数交换位置;
(3) 重复(1)n-1遍,最后构成递增序列。
实现方法:采用双重循环(循环的嵌套)
外循环为i:控制排序趟数
内循环为j:第i趟排序过程中的下标变量;“选择”排序法的结构形式:;#include stdio.h
#includestdlib.h
void main()
{
const int N = 10;
int i,j,k,t,a[N];
for(i = 0;i N;i++)
{ a[i]=rand()%61;
printf(%d,,a[i]);}
printf(\n);
for(i = 0; i N-1;i++)
{ k = i;
for(j = i + 1;j N;j++) if(a[k
文档评论(0)