c语言数组部分知识点总结

对于数组部分知识点的学习,主要需要掌握:计算平均分、最高分、成绩排序与查询等等,主要向函数传递一维数组和二维数组的方法。还学习数组类型、数组的定义和初始化,以及对数组名特殊含义的理解。
1.数组元素定义初为a[0](一个代表下标个数为1)
2.c语言中数组的下标都是从0开始的。
3.最好把幻数定义成宏常量(或const常量),当需要修改常数时,只需要修改宏定义(或const常量的定义)即可。例int score[5];改成int score[SIZE];头文件加 #define SIZE 5
4.在定义数组时不能使用变量定义数组的大小。即不能这样 int score[n];!可以为整形常量。
5.do{…}while(…)容错基质(保证正确才进行)
6.说明、定义数组时,元素个数一定为常量。
7.从数组所有第一个所有所占字节清0:memsent(a,0,sizeof(a));头文件要加#include
8.一维数组:类型 数组名[元素个数],二维数组:类型 数组名[第一维长度][第二维长度]
9.一维数组在内存中占用的字节数为:数组长度×sizeof(基类型),二维数组占用的字节数为:第一维长度×第二维长度×sizeof(基类型)。在不同的编译系统中,int型所占的字节数是不同的。用sizeof运算符来计算一个类型或者变量在内存中所占的字节数才是最准确可靠的方法,也有利于提高程序的可移植性。
10.数组第二维的长度声明永远都不能省略,因为在连续存储空间中是按行存放的。
11.若要把一个数组传递给一个函数,那么只要使用不带方括号的数组名作为函数实参调用函数即可。例:ReadScore(score,n);
aver = Average(score,n);
12.由于数组名代表数组第一个元素的地址,因此用数组名作函数实参实际上是将数组的首地址传给被调函数,
13.数组做函数形参时,数组的长度可以不出现在数组名后面的方括号内,通常用另一个整型形参来指定数组的长度。
14.当一个元素是未知,要求其所关联元素,不妨以负值作为输入结束的标记值。(标记控制的循环),这样的话,当输入值为负值,则结束输入,返回上一行。
15.三种排序:
①交换排序:借鉴了求最大值,最小值的思想,按升序排列的基本过程为:先将第一个数分别与后面的数进行比较,若后面是的数小,则交换和第一个数的位置,否则不交换:这一轮结束之后,则求除了一个最小的放在第一个位置,然后进行第二轮比较,但这种交换效率低
package cho2;
public class changeSort {
public static void main(String[] args) {
// TODO 自动生成的方法存根
//对给定的数组进行排序
int[] a={53,54,56,51};
int i;
int j;
int temp=0;
//注意不要数组越界 如果i小于4或者j小于5都会有越界的
//现象
//注意交换中不能时时刻刻用i+1代替j;
for(i=0;i<3;i++){
for(j=i+1;j<4;j++){
if(a[i]>a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}}}
for(i=0;i<4;i++){
System.out.println(a[i]);
}}}
②冒泡排序:将相邻两个数进行交换,重复的过程,一般,如果有N个数进行排序,则需进行N-1起泡
package cho2;
public class maopao {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int[] a={53,54,56,51};
int i;
int j;
int m=0;
int temp=0;
for(i=0;i<3;i++){
m=m-1;
//4+m主要为了减少运行的次数
for(j=0;j<4+m;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}}}
for(i=0;i<4;i++){
System.out.println(a[i]);
}}}
③选择排序:在交换排序的基础上,找出余下的数中的最大值再与地I+1个数进行交换,这样每一轮比较中最多只有一次交换操作,这个算法最多只有N—1次交换操作
package cho2;
public class selectSort {
public static void main(String[] args) {
// TODO 自动生成的方法存根
int[] a={53,54,56,51};
int i;
int j;
int k;
int temp=0;
for(i=0;i<3;i++){
k=i;
for(j=i+1;j<4;j++){
if(a[i]>a[j]){
k=j;
}}
if(k!=i){
temp=a[k];
a[k]=a[i];
a[i]=temp;
}}
for(i=0;i<4;i++){
System.out.println(a[i]);
}}}
16.查找
①线性查找(顺序查找)
条件:不要求数据表已经排好序。
工作原理:
一. 从线性数据表中的第一个(或最后一个)记录开始查找;
二. 依次将记录的关键字与查找关键字进行比较 ;
(当某个记录的关键字与查找关键字相等时,即查找成功 )
(反之,查完全部记录都没有与之相等的关键字,则查找失败 )
②折半查找(二分查找法)
条件:1:必须采用顺序存储结构,对于链表不适合:2:必须按照关键字大小有序排列.
具体的算法思想:对于数组进行比较的时候,比较数组大小的中间值,当发现数据大于该中心数据,就在后面的一个区间进行比较,如果小于该中心数据,就在前面一个区间进行比较,在新的区间里,再次使用之前的大小中间比较法,比较,直到最后找到该数据为止。
17.当形参为一维数组时,形参列表中数组的方括号内可以为空。为二维数组时,可以省略数组第一维的长度声明,但不能省略数组第二维的长度声明。
针对自身情况,在本章学习中对一维数组和二维数组的定义与关系需要更好地去掌握好。

猜你喜欢

转载自blog.csdn.net/qq_43471411/article/details/85224703