维数组示例二 计算机程序设计基础 使用冒泡法对5个整数按从大到小的顺序排列 7 2、1620 112121216.20个16 12 1 16162012 12 161616 20 20202020 1 1 一趟二趟三趟四趟 利用冒泡法进行排序,5个数分别位于不同层。要使大数在顶层 小数在底层,小数应下降,大数应上升。最大数上升到顶层最 多需要“冒泡”4次,其中每一次称为一趟。而在每一趟中,最 小数不断下降,因为每次只交换相邻两个层面的数据,所以每 趟内的执行次数不大于4次,并会随着趟数的增加不断减少 清华大学计算中心 http://learn.tsinghua.edu.cn
清华大学计算中心 http://learn.tsinghua.edu.cn 7 计 算 机 程 序 设 计 基 础 一维数组示例二 • 使用冒泡法对5个整数按从大到小的顺序排列 利用冒泡法进行排序,5个数分别位于不同层。要使大数在顶层 小数在底层,小数应下降,大数应上升。最大数上升到顶层最 多需要“冒泡”4次,其中每一次称为一趟。而在每一趟中,最 小数不断下降,因为每次只交换相邻两个层面的数据,所以每 一趟内的执行次数不大于4次,并会随着趟数的增加不断减少。 1 7 12 16 20 7 1 12 16 20 7 12 1 16 20 7 12 16 1 20 7 12 16 20 1 12 16 20 7 1 16 20 12 7 1 20 16 12 7 1 一 趟 二 趟 三 趟 四 趟
计 算 维数组示例二 机 序·使用冒泡法对5个整数按从大到小的顺序排列 设 include <stdio.h> 计 int main0 基 础inti,j,temp static int a[5]={1,712,16,20} for(i=0;i<4;i++) for(=0;j<4-i+){ if(al<a+1)∥若后面数据比前面大则交换 temp=alil; alil=alj+1l; alj+1]=temp for(j=0; j<5; j++)printf("al%od=%dn",j, aljD return 0: 清华大学计算中心 http://learn.tsinghua.edu.cn
清华大学计算中心 http://learn.tsinghua.edu.cn 8 计 算 机 程 序 设 计 基 础 一维数组示例二 • 使用冒泡法对5个整数按从大到小的顺序排列 #include <stdio.h> int main() { int i, j, temp; static int a[5] = {1, 7, 12, 16, 20}; for(i = 0; i < 4; i++) for(j = 0; j < 4 – i; j++){ if(a[j] < a[j+1]) // 若后面数据比前面大则交换 { temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } for(j = 0; j < 5; j++) printf(“a[%d] = %d\n“, j, a[j]); return 0; }
多维教组的定义与格式 计算机程序设计基础 多维数组的定义:相同类型的一系列数据 数据类型数组名[常量表达式1常量表达式2] 例:inta[2I[8] a[o[o]a[o1a[OJ2]a[03]a[0[4]a[05]a[oJ6]a[07 I[o]a[l[]a[1l[2]a[1[B3]a[[4]a[1[5]a[1[6]a[1[7 关于多维数组定义的几点说明 数据顺序存放,先存第一行,再存第二行 只能引用元素,不能引用整体数组,如不能整体赋值 系统不检查数组下标,注意数组下标是否超出定义范围 清华大学计算中心 http://learn.tsinghua.edu.cn
清华大学计算中心 http://learn.tsinghua.edu.cn 9 计 算 机 程 序 设 计 基 础 多维数组的定义与格式 • 多维数组的定义:相同类型的一系列数据 – 数据类型 数组名[常量表达式1][常量表达式2]…; – 例:int a[2][8]; • 关于多维数组定义的几点说明 – 数据顺序存放,先存第一行,再存第二行 – 只能引用元素,不能引用整体数组,如不能整体赋值 – 系统不检查数组下标,注意数组下标是否超出定义范围! a[1][0] a[1][1] a[1][2] a[1][3] a[1][4] a[1][5] a[1][6] a[1][7] a[0][0] a[0][1] a[0][2] a[0][3] a[0][4] a[0][5] a[0][6] a[0][7]
计 算 多维数组的初始化 机 序·按数据元素的存放顺序依次初始化每个元素 设 例:inta[2[8]={0,12,34.567,89,10,1112,131415} 计 基 础 按其维度分别初始化:相当于降维处理 例:inta[2[8]={0,1,2345,6,78,9,10,1112,13,14,15 a[o[o]a[o1]a[0J[2]a[0[3]a[o][4]a[o0J5]a[o[6]a[0[7] 2 3 4 6 7 8 9 10 11 12 13 14 15 [lI0]a[l[]a[1][2]a[1][3]a[14]al[5]al6]a[1[7] 清华大学计算中心 http://learn.tsinghua.edu.cn 10
清华大学计算中心 http://learn.tsinghua.edu.cn 10 计 算 机 程 序 设 计 基 础 多维数组的初始化 • 按数据元素的存放顺序依次初始化每个元素 – 例:int a[2][8] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; • 按其维度分别初始化:相当于降维处理 – 例:int a[2][8] = {{0,1,2,3,4,5,6,7},{8,9,10,11,12,13,14,15}}; 8 9 10 11 12 13 14 15 a[1][0] a[1][1] a[1][2] a[1][3] a[1][4] a[1][5] a[1][6] a[1][7] 0 1 2 3 4 5 6 7 a[0][0] a[0][1] a[0][2] a[0][3] a[0][4] a[0][5] a[0][6] a[0][7]
计 算 多维数组示例 机 序·用户输入一个4×4的整数矩阵,编写程序求其两对 设 角线上元素的和 计 基# Include< stdio.h> 础ntmi0 int matrix[41[4l, i, j, result1=0, result2=0; for(i=0i<4;i++) printf("Line %/ od: ,i); for(=0;j<4+ scnf(°od,& cmatrixlil[) if(i=j result1+=matrirlilljl; if(i+j==3) result2+=matrixlilljl printf(Results: %od, %od\",result, result2 ); return 0: 清华大学计算中心 http://learn.tsinghua.edu.cn 11
清华大学计算中心 http://learn.tsinghua.edu.cn 11 计 算 机 程 序 设 计 基 础 多维数组示例 • 用户输入一个4×4的整数矩阵,编写程序求其两对 角线上元素的和 #include <stdio.h> int main() { int matrix[4][4], i, j, result1 = 0, result2 = 0; for(i = 0; i < 4; i++){ printf(“Line %d: “, i); for(j = 0; j < 4; j++){ scanf(“%d“, &matrix[i][j]); if(i == j) result1 += matrix[i][j]; if( i + j == 3 ) result2 += matrix[i][j]; } } printf(“Results: %d, %d\n“, result1, result2); return 0; }