Chap7数组7.1投票情况统计7.2找出矩阵中最大值所在的位置7.3判断回文
Chap 7 数 组 7.1 投票情况统计 7.2 找出矩阵中最大值所在的位置 7.3 判断回文
本章要点什么是数组?为什么要使用数组?如何定义数组?如何引用数组元素?二维数组的元素在内存中按什么方式存放?什么是字符串?字符串结束符的作用是什么?如何实现字符串的存储和操作,包括字符串的输入和输出?怎样理解C语言将字符串作为一个特殊的一维字符数组?
本章要点 ◼ 什么是数组? 为什么要使用数组? 如何定义数组? ◼ 如何引用数组元素? ◼ 二维数组的元素在内存中按什么方式存放? ◼ 什么是字符串? 字符串结束符的作用是什么? ◼ 如何实现字符串的存储和操作,包括字符串的输 入和输出? ◼ 怎样理解C语言将字符串作为一个特殊的一维字符 数组?
7.1投票情况统计例7-1:调查电视节目欢迎程度。某电视台要进行一次对该台8个栏目(设相应栏目编号为1~8)的受欢迎情况,共调查了1000位观众,现要求编写程序,输入每一位观众的投票,每位观众只能选择一个最喜欢的栏目投票,统计输出各栏目的得票情况。7.1.1程序解析7.1.2 一维数组的定义和引用7.1.3一维数组的初始化7.1.4 使用一维数组编程
例7-1:调查电视节目欢迎程度。某电视台要进行一 次对该台8个栏目(设相应栏目编号为1~8)的受 欢迎情况,共调查了1000位观众,现要求编写程 序,输入每一位观众的投票,每位观众只能选择 一个最喜欢的栏目投票,统计输出各栏目的得票 情况。 7.1.1 程序解析 7.1.2 一维数组的定义和引用 7.1.3 一维数组的初始化 7.1.4 使用一维数组编程 7.1 投票情况统计
#include7.1.1程序解析一排序int main(void )5int count[9];*设立数input your response: 3int i,response;input your response: 6for(i= 1;i<= 8;i++)/*各inputyourresponse:9count[i] = O;for(i = 1;i<= 1000;i++) (/*thisis a bad response: 9printf("input your respg inputyour response: 8scanf("%d",&response)if(response< 1 Il respolprintf("this is a bad r result:aelsecount[response]++;福7printf("result:In");for(i=1;i<=8;i++)printf("%4d%4din",i,count[i]);ireturn O;7
7.1.1 程序解析-排序 # include int main( void ) { int count[9]; /* 设立数组,栏目编号对应数组下标 */ int i,response; for(i = 1;i 8) /* 检查投票是否有效*/ printf("this is a bad response: %d\n",response); else count[response]++; /* 对应栏目得票加1 */ } printf("result:\n"); /* 输出各栏目得票情况 */ for(i = 1;i <= 8;i++) printf("%4d%4d\n",i,count[i]); return 0; } input your response: 3 input your response: 6 input your response: 9 this is a bad response: 9 input your response: 8 . result: 1 2 2 0 3 4
例7-1中为何不使用for(i = 1数组count[o]?print[i];356024782count4201010count[8]count[o] count[1]数组:相同类型数据的有序集合,在内存中连续存放。口由数组名和下标惟一地确定每个数组元素口每个元素都属于同一类型一批相同类型的变量使用同一个数组变量名,用下标来相互区分。口优点:表述简洁,可读性高;便于使用循环结构
0 1 2 3 4 5 6 7 8 2 0 4 1 2 1 0 0 for(i = 1;i <= 8;i++) printf("%4d%4d\n",i,count[i]); count count[0] count[1] count[8] 例7-1中为何不使用 count[0]? 数组 ◼ 数组:相同类型数据的有序集合,在内存中 连续存放。 由数组名和下标惟一地确定每个数组元素 每个元素都属于同一类型 ◼ 一批相同类型的变量使用同一个数组变量名, 用下标来相互区分。 优点:表述简洁,可读性高;便于使用循环结构
7.1.2一维数组的定义和引用1、定义类型名数组名[数组长度]数组长度为常量类型名:数组元素的类型数组名:数组(变量)的名称,标识符数组长度:常量表达式,给定数组的大小int a[10];定义一个含有10个整型元素的数组achar c[200];定义一个含有200个字符元素的数组cfloat f[5];定义一个含有5个浮点型元素的数组f
7.1.2 一维数组的定义和引用 1、定义 类型名 数组名[数组长度] 类型名:数组元素的类型 数组名:数组(变量)的名称,标识符 数组长度:常量表达式,给定数组的大小 int a[10]; 定义一个含有10个整型元素的数组 a char c[200]; 定义一个含有200个字符元素的数组 c float f[5]; 定义一个含有5个浮点型元素的数组 f 数组长度为常量
2、数组的内存结构值下标内存地址94028int a[10];84026假设系统规定int类型占用2个74024字节,则对于数组a,其内存64022分配形式5402044018只要知道了数组第一个元素的34016地址以及每个元素所需的字节24014数,其余各个元素的存储地址14012均可计算得到。0a4010数组名是一个地址常量,存放数组内存空间的首地址。不允许被修改
2、数组的内存结构 内存地址 下标 值 4028 9 4026 8 4024 7 4022 6 4020 5 4018 4 4016 3 4014 2 4012 1 a 4010 0 int a[10]; 假设系统规定int类型占用2个 字节,则对于数组a,其内存 分配形式 只要知道了数组第一个元素的 地址以及每个元素所需的字节 数,其余各个元素的存储地址 均可计算得到。 数组名是一个地址常量,存放 数组内存空间的首地址。不允许被修改
3、引用■先定义,后使用■只能引用单个的数组元素,不能一次引用整个数组数组名[下标]下标:整型表达式取值范围:[0,数组长度-1]下标不要越界int a[10];不能使用a[10]10个元素a[0]、a[1]、...a[9]■数组元素的使用方法与同类型的变量相同scanf("%d", &a[i]);count[i]++;temp = a[index]; a[index]= a[k]; a[k] = temp;printf("%d ", a[i]);
3、引用 ◼ 先定义,后使用 ◼ 只能引用单个的数组元素,不能一次引用整个数组 数组名[下标] 下标:整型表达式 取值范围:[0,数组长度-1] int a[10]; 10个元素:a[0]、a[1]、. a[9] ◼ 数组元素的使用方法与同类型的变量相同 scanf("%d", &a[i]); count[i]++; temp = a[index]; a[index]= a[k]; a[k] = temp; printf("%d ", a[i]); 下标不要越界 不能使用a[10]
区分数组的定义和数组元素的引用定义数组类型名数组名[数组长度]引用数组元素数组长度为常量数组名[下标]下标不要越界int a[10];a[0] = a[9] = 0;a[k] = temp;
定义数组 类型名 数组名[数组长度] 引用数组元素 数组名[下标] int a[10]; a[0] = a[9] = 0; a[k] = temp; 区分数组的定义和数组元素的引用 下标不要越界 数组长度为常量
7.1.3一维数组的初始化■定义数组时,对数组元素赋初值类型名数组名[数组长度]=【初值表}int a[10] = [1,2,3,4,5,6,7,8,9,10];a[0]=1, a[1]=2,... a[9]=10静态数组、动态数组的初始化staticint b[5] = {1, 2, 3, 4, 5];静态存储的数组如果没有初始化,所有元素自动赋0static int b[5];动态存储的数组如果没有初始化,所有元素的值不确定auto int c[5];等价与 int c[5];
7.1.3 一维数组的初始化 ◼ 定义数组时,对数组元素赋初值 类型名 数组名[数组长度] = {初值表}; int a[10] = {1,2,3,4,5,6,7,8,9,10}; a[0]=1, a[1]=2,. a[9]=10 ◼ 静态数组、动态数组的初始化 static int b[5] = {1, 2, 3, 4, 5}; 静态存储的数组如果没有初始化,所有元素自动赋0 static int b[5]; 动态存储的数组如果没有初始化,所有元素的值不确定 auto int c[5]; 等价与 int c[5];