C语言-同济4-第四章 数组
时间:2025-04-04
时间:2025-04-04
C语言-同济
第四章 数组4.1 一维数组 4.2 二维数组 4.3 字符串 4.4 指针和数组 4.5 程序举例
C语言-同济
4.1 一维数组4.1.1 引例:个学生的平均成绩, 【例4.1】求N个学生的平均成绩,并统计高于平均分的人数 . 】 个学生的平均成绩
用以前所学知识实现: 用以前所学知识实现: int k=0;float s,ave,sum=0; for(int i=0;i<100;i++) { cin>>s; sum=sum+s; } ave=sum/100; for(i=0;i<100;i++) { cin>>s; if(s>ave) k++; }
用数组来实现: 用数组来实现: int k=0;float s[100],ave,sum=0; for(i=0;i<100;i++) { cin>>s[i]; sum=sum+s[i]; } ave=sum/100; for(i=0;i<100;i++) if(s[i]>ave)k++;
数组:一组数据类型相同的元素按一定顺序存放,构成的数据集合. 数组:一组数据类型相同的元素按一定顺序存放,构成的数据集合.
C语言-同济
4.1.2一维数组的定义,存储和初始化 一维数组的定义,1. 定义形式 数组名[整型常量表达式 整型常量表达式]; 数据类型 数组名 整型常量表达式 如: int s[5]; ;
s s[0]
s[1]
s[2]
s[3]
s[4]
下标从0开始 下标从 开始 数组名是常量,表示数组在内存中的首地址. 数组名是常量,表示数组在内存中的首地址. 数组长度应该为整型常量表达式,不能是变量.如: 数组长度应该为整型常量表达式,不能是变量.正确: 正确: const int s=10; int a[s]; float f[5]; 错误: 错误: × int s=10; int a[s]; × float b[3.4]
C语言-同济
2. 数组的初始化 1) 给所有元素赋初值. 给所有元素赋初值. 如:int a[5]={0,2,4,6,8}; 或 int a[ ]={0,2,4,6,8}; 2) 给部分元素赋初值.如: 给部分元素赋初值. int a[10]={1,3,5,7,9};
花括号
花括号内列出的值赋给了前面的若干个元素,其余元素系统自动赋 花括号内列出的值赋给了前面的若干个元素,其余元素系统自动赋0 .
错误: 错误 × int a[10]; a={1,3,5,7,9}; //数组名是个地址常量,不能被赋值. 数组名是个地址常量, 数组名是个地址常量 不能被赋值. × int a[10]; a[10]={1,3,5,7,9};//a[10]不是数组中的元素,不能用花括号为一个元素赋多个值. 不是数组中的元素,不能用花括号为一个元素赋多个值. 不是数组中的元素
× int c[3]={1,2, 3,4};
//常量个数超过数组定义的长度. 常量个数超过数组定义的长度. 常量个数超过数组定义的长度
C语言-同济
4.1.3 数组元素的引用和基本操作 1.数组元素的引用 . 形式:数组名[下标 下标] 形式:数组名 下标相当于一个普通变量 如有: int 如有: a[10]={1,2,3,4,5,6,7,8,9,10},b[10],i(2); a[10]={1,2,3,4,5,6,7,8,9,10},b[10],i(2);
则: a[3]=a[0]+a[i]; a[3]=a[0]+a[i]; cout<<a[2+i]; cout<<a[2+i]; cout<<a[a[3]]; cout<<a[a[3]];
× × ×
cout<<a[10]; cout<<a; b=a;
//数组下标越界 数组下标越界 //对数组一般不能作为一个整体进行操作 对数组一般不能作为一个整体进行操作
C语言-同济
2.基本操作 .假设有定义: 是已定义过的符号常量. 假设有定义:int a[N]; N是已定义过的符号
常量. 是已定义过的符号常量 (1) 数组元素的输入 for(j=0; j<N; j++) cin>>a[j]; (2)通过随机函数 通过随机函数rand()产生0~100的N个数据 产生0 100的 通过随机函数 产生 for ( i = 0; i<N;i++) //rand()函数产生 ~32727之间的整数 函数产生0~ 函数产生 之间的整数 int(rand()/32728 32728. 101) a[i] = int(rand()/32728.* 101); (3) 数组元素的求和 sum=0; for(j=0; j<N; j++) sum+=a[j];
(4) 求数组中的最大元素max=a[0]; //假设第一个元素值最大 假设第一个元素值最大 for(j=1; j<N; j++) if(a[j]>max)max=a[j];
C语言-同济
(5) 求最大元素下标 imax=0; //imax代表最大元素下标 imax代表最大元素下标 imax for (j=1;j<N;j++) if(a[j]>a[imax])imax=j; (6) 将最大元素放于某一特定位置 如放在最前头 将最大元素放于某一特定位置(如放在最前头 如放在最前头) imax=0; for(j=1;j<N;j++) if(a[j]>a[imax])imax=j; if(imax!=0) {t=a[0];a[0]=a[imax];a[imax]=t;}
C语言-同济
4.1.4 数组排序排序是将一组数按递增或递减的次序排列,如按学生的成绩, 排序是将一组数按递增或递减的次序排列,如按学生的成绩, 球赛积分等排序.常用的算法有: 球赛积分等排序.常用的算法有:
选择法 (√) 冒泡法 (√) 插入法 快速排序法 …...
C语言-同济
1. 选择法排序基本思想: 基本思想(1) 从n个数的序列中选出最小的数 递增 ,与第 个数交换位置; 个数的序列中选出最小的数(递增 个数交换位置; 个数的序列中选出最小的数 递增),与第1个数交换位置 (2) 除第 个数外,其余 个数再按 的方法选出次小的数,与第 除第1个数外 其余n-1个数再按 的方法选出次小的数,与第2 个数外, 个数再按(1)的方法选出次小的数 个数交换位置; 个数交换位置 (3) 重复 重复(1)n-1遍,最后构成递增序列. 遍 最后构成递增序列. 【例4.2】对存放在数组中的 个数,用选择法按递增排序. 例4.2 对存放在数组中的 个数,用选择法按递增排序. 对存放在数组中的6个数 下标 0 1 2 3 4 1~5 2~5 3~5 4~5 5 for( i= 0;i<5;i++) { min= i; for(j=i+1;j<6;j++) if(a[j]<a[min])min= j; if(i!=min) { temp=a[i]; a[i]= a[min]; a[min]=temp; } }
C语言-同济
2. 冒泡法排序基本思想: 基本思想: (1)从第一个元素开始,对数组中两两相邻的元素比较,将值 从第一个元素开始,对数组中两两相邻的元素比较, 较小的元素放在前面,值较 …… 此处隐藏:3255字,全部文档内容请下载后查看。喜欢就下载吧 ……
下一篇:2013车展活动策划方案新