C语言程序 数组

来源:互联网 发布:java自学什么书比较好 编辑:程序博客网 时间:2024/06/05 18:56

  1. ------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
基本概念

在程序设计中,为了方便处理,把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称之为数组。

在C语言中,数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。

数组的几个名词:

1)数组:一组具有相同数据类型的有序的集合

2)数组元素:构成数组的数据。数组中的每一个数组元素具有相同的名称,不同的下标,可以做单个变量使用,也可以称为下标变量。

3)数组的下标:是数组元素的位置的一个索引或指示。

4)数组的维数:数组元素下标的个数,根据数组的维数可以将数组分为一维、二维、多维数组。

数组的分类

按数组元素类型的不同,可以分为:

整形数组:用来存储数值的

字符数组:用来存储字符(即字符串)

指针数组:用来存放指针(即地址)的

结构数组:用来存储一个结构体类型的数据

数组的定义

使用格式:类型  数组名[元素个数]={对应元素}

例如:int arr [5] ={1,2,3,4,5};

数组定义的注意点:数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。第一个数组元素的地址是数组所占内存块的首地址。

命名规范:驼峰标示、起一个有意义的名字。

数组元素的下标从0开始计算。

不能在方括号中用变量来表示元素的个数(c99).

数组的初始化

数组初始化是指在数组定义时给数组元素赋值。

初始化分为:定义的同时初始化或先定义再初始化。

使用变量定义的数组不可以定义数组的同时对数组进行初始化

遍历数组:

#include <stdio.h>int main(int argc, const char *argv[]){int arr[6]={1,2,3,4,5,6};for(int i= 0;i<6;i++){printf("%d",arr[i]);}return 0;}

计算数组元素:

当数组长度不确定时,使用sizeof

sizeof运算符可以计算出指定类型的变量所占用的字节数。

一维数组的地址:

数组名代表了数组的首地址,也是数组的第一个元素的地址

数组名是一个常量,存储的就是数组的首地址

每个数组元素的地址,例

char ch[]={'a','b','c','d'};

数组的越界问题,定义的数组长度小于使用的长度,造成数组越界,会导致数据丢失

数组元素作为函数参数:
数组元素作为函数参数有两种形式:
1)把数组元素作为实参使用,这是与普通变量没有区别,是值传递。
2)把数组名作为函数参数使用,要求形参和对应的实参都是与数组同类型的数据,此时传递的是地址,即引用传递。
二维数组
二维数组使用格式:
类型说明符 数组名[ 常量表达式1][常量表达式2]
二维数组的遍历:
#include <stdio.h>int main(int argc, const char *argv[]){int arr[3][4]={1,2,3,4,5,6,7,8,9,11,12,13};for(int i=0;i<3;i++){for(int j=0;j<4;j++){printf("%d,",arr[i][j]);}}return 0;}

二维数组的存储方式:
1)计算机会给二维数组分配一块连续的存储空间
2)数组名代表数组的首地址
3)每个元素占用相同的字节数
4)每个元素之间的地址相隔一个该类型所占字节数

冒泡排序

冒泡排序是一种简单的排序方法,它重复的走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把它们交换过来,走访数列的工作时重复的进行直到没有再需要交换,也就是说数列已经排序完成。

如:
#include <stdio.h>int main(int argc, const char *argv[]){int a[]={2,4,90,98,63,12,50,38,47,26}void maopao(int arr[],int len);maopao(a,10);for(int i=0;i<10;i++){printf("%d\n",a[i]);}return 0;}void maopao(int arr[],int len){for(int i=0;i<len-1;i++){for(int j=0;j<len-i-1;j++){if(arr[j]>arr[j+1]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}}

选择排序
选择排序是每步从待排序的记录中选出排序码最小的记录,按顺序存放在已排序的记录序列后面,直到全部排完。
如:
#include <stdio.h>int main(int argc,const char *argv[]){int a[]={2,4,98,90,73,21,56,92};void xuanze(int arr[],int len);xuanze(a,8);for(int i=0;i<8;i++){printf("%d",a[i]);}return 0;}void xuanze(int arr[],int len){for(int i=0;i<len-1;i++){for(int j=i+1;j<len;j++){if(arr[i]>arr[j]){int temp=arr[i];arr[i]=arr[j];arr[j]=temp;}}}}


   
0 0