第六章数组学习总结
第六周学习了一维数组和二维数组.
什么是数组:数组是存放数据长度固定的容器,并且其数据类型也是一致的。
1.一维数组
(1)创建一个数组
int a[10]; //[]内必须是常量
(2)数组的初始化
int a[3]={0,1 2}; char a[3]={'a',98,'c'}; //因为是字符型,所以98就是b
(3)数组的便利
#include<stdio.h> int main() { int a[10] = {0}; for (int i = 0; i < 10; i++) //下标从0开始 { a[i] = i; } return 0; }
2.二维数组
(1)创建和初始化
int a[2][2]={0};
(2)便利
#include<stdio.h> int main() { int a[3][3] = { 0 }; for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { scanf("%d",&a[i][j]); } } }
3.数组的使用
这周我们学习了用数组解决问题。
列如:运用数组对一串无序的数字进行排序。
(1)选择法排序
思路:1.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
2.再从剩余未排序元素中继续寻找最小(大)元素,然后放到未排序序列的起始位置。
3.重复第二步,直到所有元素均排序完毕。
代码实现:
#include<stdio.h> int min( int a[], int len); int main() { int n,a[10],minid; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } for(int i=n-1;i>0;i--){ minid=min(a,i+1); int t=a[minid]; a[minid]=a[i]; a[i]=t; } for(int i=0;i<n;i++){ if(i!=n-1) printf("%d ",a[i]); else printf("%d",a[i]); } return 0; } int min( int a[], int len) { int minid=0; for(int i=0;i<len;i++){ if(a[i]<a[minid]) minid=i; } return minid; }
(2)冒泡排序
思路:1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.每趟从第一对相邻元素开始,对每一对相邻元素作同样的工作,直到最后一对。
3.针对所有的元素重复以上的步骤,除了已排序过的元素(每趟排序后的最后一个元素),直到没有任何一对数字需要比较。
代码实现:
#include<stdio.h> int main() { int a[10],N; int t, i, j; scanf("%d",&N); for( i = 0; i < N; i++){ scanf("%d",&a[i]); } for (i = 0; i < N-1; i++) //进行N-1次比较 for (j = 0; j < N - i - 1; j++) //在每次中进行10-i-1次比较 if (a[j] > a[j + 1]) //按升序排序,降序用< { t = a[j + 1]; //交换相邻的两个元素 a[j + 1] = a[j]; a[j] = t; } //输出排序后的结果 for (i = 0; i < N; i++) printf("%d ", a[i]); return 0; }

浙公网安备 33010602011771号