
程序设计基础(上) 张立红 13405330459(88028) QQ:2653453357 9#501
程序设计基础(上) 张立红 13405330459(88028) QQ:2653453357 9#501

第8章 数组
第 8 章 数 组

本章知识点 8.1一维数组的定义、引用与初始化 “数组名+一维下标”表示数据 8.2一维数组的应用 8.3二维数组 “数组名+二维下标”表示数据 8.4数组与函数
本章知识点 8.1 一维数组的定义、引用与初始化 “数组名+一维下标”-表示数据 8.2 一维数组的应用 8.3 二维数组 “数组名+二维下标”-表示数据 8.4 数组与函数

8.2一维数组的应用 8.2.4查找问题 实际应用中经常要从批量数据中去查询某个值,如果 存在-找到其在数组中的位置,这是常用工具软件都具备的 最基本的数据管理功能-查找操作。 【例8.9】顺序查找:在数组里存放着N个各不相同的整数。 要求:多组输入。 每次输入一个整数x,查找x在数组里是否存在,如果 存在返回其在数组的下标,如果不存在返回值为1。 分析: ①将被查数据与数组里的每一个元素逐个比较顺序查找。 ②因为要多次查找一定义一个函数完成查找过程。 ③ 在主函数中调用该自定义函数
实际应用中经常要从批量数据中去查询某个值,如果 存在-找到其在数组中的位置,这是常用工具软件都具备的 最基本的数据管理功能-查找操作。 8.2.4 查找问题 8.2 一维数组的应用 【例8.9】顺序查找:在数组里存放着N个各不相同的整数。 要求:多组输入。 每次输入一个整数x,查找x在数组里是否存在,如果 存在返回其在数组的下标,如果不存在返回值为-1。 分析: ① 将被查数据与数组里的每一个元素逐个比较-顺序查找。 ② 因为要多次查找-定义一个函数完成查找过程。 ③ 在主函数中调用该自定义函数

① includeW顺序查找 思考: ② #define N 10 ①找几个? ③ int search(int a[],int n,int x) ② 数组中有多个x怎么办? ④ int i; ⑤ for (i=0;i<n;i++) ① 多次查找 ⑥ if (a[i]==x)return i; ② while (scanf("%d",&x)!=EOF) ⑦ return -1; ③ f ⑧ k=search(b,N,x); ⑤ if(k==-1) ⑨ int main() ⑥ printf("Not Found!\n"); ⑩{ ⑦ else ① int i,k,x,b[N]; ⑧ printf("%d小n",k); ② for(i=0;i<=N-1;i++) ⑨ 02030405060788090100 scanf("%d",&b[i]); ⑩ ret 80 5000 Not Found! 恩 5/115
① #include //顺序查找 ② #define N 10 ③ int search(int a[ ],int n,int x) ④ { int i; ⑤ for (i=0;i<n;i++) ⑥ if (a[i]==x) return i; ⑦ return -1; ⑧ } ⑨ int main() ⑩ { ⑪ int i,k,x,b[N]; ⑫ for(i=0;i<=N-1;i++) ⑬ scanf("%d",&b[i]); 5/115 ① //多次查找 ② while (scanf("%d",&x)!=EOF) ③ { ④ k=search(b,N,x); ⑤ if ( k==-1) ⑥ printf("Not Found!\n"); ⑦ else ⑧ printf("%d\n",k); ⑨ } ⑩ return 0; ⑪ } 思考: ① 找几个? ② 数组中有多个x怎么办?

①include∥顺序查找-数组中有多个x怎么办? ②#define N10 3 void search(int a[],int n,int x) ④{ ⑤ inti,f仁-1/f=-1-没有× for(i=0;i<n;i++)∥对数组找一遍 ⑦ {if(a[0==x) ⑧ {=1;/找到了 ⑨ printf("%d ",i); ⑩ ① ② if(f仁=-1) ③ printf("Not Found!\n"); ④ ⑤int main0 ⑥( ⑦ int i,x,b[N]; ⑧ for (i=0;i<=N-1;i++)scanf("%d",&b[i]); 1⑨ while (scanf("%d",&x)!=EOF) ⑩ search(b,N,;Ib一数组名,N一数组大小,x一要找的值 21 return 0; 22)
① #include //顺序查找-数组中有多个x怎么办? ② #define N 10 ③ void search(int a[ ],int n,int x) ④ { ⑤ int i,f=-1; //f=-1-没有x ⑥ for ( i=0;i<n;i++) //对数组找一遍 ⑦ { if (a[i]==x) ⑧ { f=1; //找到了 ⑨ printf("%d ",i); ⑩ } ⑪ } ⑫ if (f==-1) ⑬ printf("Not Found!\n"); ⑭ } ⑮ int main() ⑯ { ⑰ int i,x,b[N]; ⑱ for (i=0;i<=N-1;i++) scanf("%d",&b[i]); ⑲ while (scanf("%d",&x)!=EOF) ⑳ search(b,N,x); //b—数组名,N—数组大小,x—要找的值 21 return 0; 22 }

8.2.5逆置与移位 【例8.11】数组逆置:将一个一维数组的元素按照 相反的顺序存放在原来数组中。 逆置之前 23 32 43 22 11 33 44 5566 77 a[o] a[1] a[2] a[3] a[4 a[5] a[6] a[7] a[8] a[9] 逆置之后 77 66 55 44 33 11 22 43 32 23 a[o] a[1] a2] a[3] a[4 a[5] a[6] a7☑ a[8] a[9] 恩
【例8.11】数组逆置:将一个一维数组的元素按照 相反的顺序存放在原来数组中。 逆置 之前 23 32 43 22 11 33 44 55 66 77 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 逆置 之后 77 66 55 44 33 11 22 43 32 23 a[0] a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] 8.2.5 逆置与移位

【例8.11】数组逆置-元素的变化规律 ◆逆置的过程就是元素位置互换的过程 例如:10个元素的数组a的逆置过程, 交换a[o]与a[9] a[1]与a8] a[2]与a[7] 长 a[3]与a[6] a[4]与a[5] 要实现上述逆置过程,必须明确2个问题: (1)两个互相交换的数组元素之间有什么关系? 数组有10个元素时,交换a[与a[10-1-i], 扩展-数组有n个数时,交换a[与an-1-j。 (2)要经过多少次两两交换呢? 一次交换是完成2个元素的操作,10个元素需要交换10/2=5次 -n个数的数组需要n/2次交换-循环的范围。 8/119
【例8.11】数组逆置-元素的变化规律 ◆ 逆置的过程就是元素位置互换的过程 例如:10个元素的数组a的逆置过程, 交换 a[0]与a[9] a[1]与a[8] a[2]与a[7] a[3]与a[6] a[4]与a[5] 要实现上述逆置过程,必须明确2个问题: (1)两个互相交换的数组元素之间有什么关系? 数组有10个元素时,交换a[i]与a[10-1-i], 扩展-数组有n个数时,交换a[i]与a[n-1-i]。 (2)要经过多少次两两交换呢? 一次交换是完成2个元素的操作,10个元素需要交换10/2==5次 -n个数的数组需要n/2次交换-循环的范围。 8/119 完成!!

例8.11数组逆置-方法1:一个下标i表示2个数组元素a[0、a[n-i-1] 数组有n个元素,下标是0一(n-1) ①for(i=0;ikn/2;it+) 若写为for(i=0ij时,数组元素两两交换结束 ③ { ④ t=a[i]a[i=a[]a]=t;/川对应数组元素 ⑤ +;j;/川下标改变,指向下一次要交换的两个元素 ⑥ 猖
数组有n个元素,下标是0—(n-1) ① for (i=0;ij时,数组元素两两交换结束 ③ { ④ t=a[i];a[i]=a[j];a[j]=t; // 对应数组元素 ⑤ i++; j-; // 下标改变,指向下一次要交换的两个元素 ⑥ }

下课了。 受 2D输究w多· 休息一会儿。 g9究g然gag
下课了。 休息一会儿