C语言程序 数组

  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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值