第七章 数 组
回顾 2-1 for 循环与 while 循环类似,属于先判断后执行 如果省略表达式2和表达式3需要在循环体内设法结束循环,否则会导致死循环
回顾 2-2 break 语句用在循环中时,可以直接终止循环,将控制转向循环后面的语句 continue 语句的作用是跳过循环体中剩余的语句而执行下一次循环 嵌套循环时,必须将被嵌套的循环语句完整地包含在外层循环的循环体内
目标 重点与难点 理解为什么要使用数组 理解 C 语言中数组存储机制 熟练使用一维数组 会应用二维数组解决实际问题 深入锻炼学生的编程思想 熟练使用一维数组和二维数组解决实际问题
唉,有这么多不同主题的书。在哪里才能找到有关中国音乐的书呢? 为什么要使用数组3-1 唉,有这么多不同主题的书。在哪里才能找到有关中国音乐的书呢?
为什么要使用数组3-2 文学类 中国音乐类 计算机类 西方音乐类
为什么要使用数组3-3 数组 内存 120 65 98 4 数组的元素 容器中保 存的物品 日常生活中的容器 程序中的数组
C 语言中的数组 数组是可以在内存中连续存储多个元素的结构 Rate 数组中的所有元素必须属于相同的数据类型 1.5 3.2 0.09 45.3987 3 2 1 下标 数组元素 下标标明了元素在数组中的位置 数组名 Rate[ 4 ] 数组大小
数组类型 2-1 2-D, 3-D, 4-D 89 90 77 … 1 2 1 73 90 33 45 80 87 一维数组 多维数组 示例:学员单门课程的成绩 2-D, 3-D, 4-D 89 90 77 … 示例:学员两门课程的成绩 1 2 学号 1 73 90 33 科目 45 80 87
数组类型 2-2
datatype arrayName[size]; 声明一维数组 datatype arrayName[size]; 类型说明符 int、char、float … 数组名 常量表达式: 数组大小 int num[50]; char list_of_initials[20]; double pressure_level[6]; # define LIMIT 20 . . . int emp_codes[LIMIT];
初始化一维数组 内存 emp_code[0] emp_code[1] emp_code[2] emp_code[3] emp_code[4] 其他的初始化情况: int arr[10] = {10,9,8,7,6,5,4,3,2,1,0}; //错误!越界了 int arr[10] = {9,8,7,5}; //正确,后面的6个元素未初始化 int arr[] = {9,8,7}; //正确:元素个数为 3 int arr[]={}; //错误,到底是几个元素? 1299 1499 1699 1899 2099 int emp_code[5] = {1299,1499,1699,1899,2099}; emp_code
为一维数组动态赋值 float price[4]; printf(“Enter prices of 4 books\n”); 内存 float price[4]; printf(“Enter prices of 4 books\n”); for (i = 0;i <= 3; i++) { scanf(“%f”,&price[i]); } 12.34 price[0] price[1] price[2] price[3] 1002.10 17.5 11.12 price
一维数组示例 运行演示 Item_rate i 6 # include <stdio.h> void main() { 内存 一维数组示例 Item_rate i 35.50 6 # include <stdio.h> void main() { int i; float item_rate[5],total=0; printf("\n 请输入商品价格:"); for(i=0;i<5;i++) scanf("%f",&item_rate[i]); total=total+item_rate[i]; } printf(“\n 所有商品的合计费用:%f\n ",total); 45.8 total 23 40.7 225.0 35.50 80 运行演示 循环执行 5 次 请输入商品价格:35.50 45.8 23 40.7 80 所有商品的合计费用:225.000000
datatype arrayName[rowsize][colsize]; 二维数组 3-1 内存 datatype arrayName[rowsize][colsize]; num[0][0] num[0][1] num[1][0] num[1][1] num[2][0] num[2][1] num[3][0] num[3][1] num[0][0] num[0][1] num[1][0] num[1][1] num[2][0] num[2][1] num[3][0] num[3][1] num 为了便于理解,二维数组一般理解为几行几列的矩阵 int num[4][2]; 8*sizeof(int) 字节 4 X 2 = 8 num
二维数组 3-2 int books[4][2] = {{11, 1294},{22,450}, {33,4000}, {44,79}}; int arr[ ][3] = { {1,2,3}, {4,5,6} }; int arr[2][ ] = { {1,2,3}, {4,5,6} }; 错误
二维数组 3-3 int i, j, num[4][2]; for (i = 0; i <= 3; i++) { for (j = 0; j <=1 ; j++) scanf("%d",&num[i][j]); } 第一行 第二行 第三行 第四行 第一列 第二列 (3,1) 800 (3,0) 700 (2,1) 600 (1,1) 400 (0,1) 200 (2,0) 500 (1,0) 300 (0,0) 100 行下标 列下标 num[0] [0] i j num[i][j] 100 1 200 300 400 2 500 600 3 700 800
数组应用1 #define N 10 …… for(i=0;i<N;i++) scanf("%d",&num[i]); printf("\n 请输入要查找的数:"); scanf("%d",&search); for (i=0;i<N;i++) { if (num[i]==search) break; } if(i<N) printf("\n 在数组的第 %d 个位置找到了数字 %d !\n",i+1,search); else printf("\n 没有找到!\n"); 问题描述: 输入10个数,保存在一个数组中,在数组中查找某个数,给出是否找到的信息。如果找到了,要求输出该数在数组中所处的位置;如果找不到,输出“没有找到!”。 读入10个值保存在数组中 在数组中查找,一旦找到,通过break语句跳出循环 演示示例
数组应用2 问题描述: 编写C程序实现冒泡排序算法,按照降序排列一组数。 读入5个值保存在数组中 演示示例 9 23 16 9 90 23 #define N 5 …… int grade[N],temp; for(i=0;i<N;i++) scanf("%d",&grade[i]); { for(j=0;j<N-i-1; j++) if(grade[j] < grade[j+1]) temp = grade[j+1]; grade[j+1] = grade[j]; grade[j] = temp; } 数组应用2 问题描述: 编写C程序实现冒泡排序算法,按照降序排列一组数。 读入5个值保存在数组中 9 23 16 9 90 23 23 90 16 9 25 90 16 25 90 25 16 演示示例
总结 数组是可以在内存中连续存储多个元素的结构数组中的所有元素必须属于相同的数据类型 数组必须先声明,然后才能使用。声明一个数组只是为该数组留出内存空间,并不会为其赋任何值 数组的元素通过数组下标访问 一维数组可用一个循环动态初始化,而二维数组可用嵌套循环动态初始化 二维数组可以看作是由一维数组的嵌套而构成的
练习与作业 练习: 作业: 编写程序,要求输入10个整数存放于数组中,然后对数组按小到大进行排序并输出 使用的数组的意义何在? 如何理解C中的数组?