数组(1)

数组定义:

类型说明符 数组名[常量表达式]

    (1)             (2)              (3)

数组特点:
   1.单一性  //数组中元素的类型都是一样的 
   2.连续性  //数组开辟的是一块连续的内存空间 
   3.有序性  //元素间是按照顺序存储的

(1)类型说明符:

说明存储的是哪种数据

(2)数组名:

类似变量名,通过数组名代表数组

1. 数组名代表的数据类型 -- 整个数组-数组也是一种数据类型

sizeof(a) //a代表的是 整个数组类型 

2.数组名代表的值-表示的是数组首元素的地址 也是整个数组的起始地址,数组的地址分配是连续的一块内存空间

(3)常量表达式:--[ ]

 常量表达式 --数组长度:指相同类型的数据的个数

定义时[ ]表示此时定义的是一个数组

判断数据类型的通用方式:

去掉变量名(标识符) 剩下的就是数据类型

数组的大小:

数组大小=sizeof(数据类型)*数组长度 

→数组长度=sizeof(数组名)/sizeof(单个数据类型)

数组的初始化和赋值:

初始化:

//全部初始化 
int a[10] = {1,2,3,4,5,6,7,8,9,10}; //{} 表示 初始化 
//部分初始化 
int a[10] = {1,2,3,4,5}; //这些值依次给到前面的元素,后边未初始化的元素,默认是0
//未初始化 
int a[10];  //此时数组中放的是 随机值(垃圾值)

//初始化全0数组:

1.int a[ ]={};

2.int a[ ]={0};

赋值:

 1.可以通过计算出一些值,赋值到数组中
  for (i = 0; i < len; ++i)
  {
    a[i] = 表达式;
  }
  
 2.通过键盘输入 (动态定义)
 
  for (i = 0; i < len; ++i)
  {
    scanf("%d",&a[i]);
  }

特别的:动态定义数组长度

int i;

scanf(“%d”,&i);

int a[i];

此时i的定义与scanf语句必须在定义数组a之前,否则编译器无法分配空间,导致报错

数组元素引用:

方法:数组名[下标]

注:

1.下标可能越界,但编译不会报错(未出现语法错误),需要程序员自己小心

2.下标取值范围---[0,数组长度-1]

3.数组长度必须是个整型

4.定义时,数组长度可以省略,但是实际长度取决于初始化元素个数

int[]={1,2}   //使用该方式定义必须初始化,不然编译器无法分配空间,导致报错

5.数组不能整体赋值,只能操作到具体元素(单个操作)

选择排序:

#include <stdio.h>

int main(void)
{
	int n;
	printf("Input a num:");
	scanf("%d",&n);
	int a[n];

	int i = 0;
	for (i = 0; i < n; ++i)
	{
		scanf("%d",&a[i]);
	}
	
	for (i = 0;i < n; ++i)
	{
		printf("%d ",a[i]);
	}
	putchar('\n');

	int j = 0;
	for (i = 0; i < n-1; ++i) //控制位置 
	{
		for(j=i+1; j < n; ++j)//控制选择合适的数 
		{
			if (a[i] > a[j])
			{
				int temp = a[i];
				a[i] = a[j];
				a[j] = temp;
			}
		}
	}

	for (i = 0;i < n; ++i)
	{
		printf("%d ",a[i]);
	}
	putchar('\n');

	return 0;
}

将每个元素与它后面全部元素比较,如果后面存在元素小于它,则换位,每轮小循环都会输出当前轮次最小元素,可实现从低到高排序

冒泡排序:

  1 #include <stdio.h>
  2 int main()
  3 {
  4     int a[5]={2,3,5,8,4};
  5     int i,j,tmp;
  6     int len=sizeof(a)/sizeof(a[0]);
  7     for(i=0;i<len-1;i++)
  8     {
  9         for(j=0;j<len-1-i;j++)                                                                           
 10         {
 11             if(a[j]>a[j+1])
 12             {
 13                 tmp=a[j];
 14                 a[j]=a[j+1];
 15                 a[j+1]=tmp;
 16             }
 17         }
 18     }
 19     for(i=0;i<len;i++)
 20     {
 21         printf("%d ",a[i]);
 22     }
 23 }

当后一元素大于前一元素时,交换,这样每轮循环的开始元素都是那一轮循环的最小值,从而实现将数组从小到大输出。

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值