(六)数组

一、数组
概念:由同种数据类型的若干个数据组成的集合;
1、数据类型相同
2、内存连续
定义:存储类型 数据类型 数组名[元素个数];

存储类型:auto register extern static
数据类型:数组元素的数据类型
元素个数:必须是确定的数
eg: int a[10];
注: 数组名不能和变量名重名;
数组元素:数组名[下标];下标从0开始;
数组名是数组的首地址,是地址常量,不能作为左值

数组的初始化
注:数组如果是局部变量,没有被初始化,其元素的值为随机值
数组如果是全局变量,没有被初始化,其元素的值为0
数组如果是被static修饰局部变量,没有被初始化,其元素的值为0
(1)满数初始化
int a[5]={1,2,3,4,5};
满数初始化时,元素个数可以省略
(2)部分赋值
int a[5]={1,3,3};
a[0]=1 , a[1]=2 , a[2]=3 , a[3]=0 , a[4]=0;
部分赋值时,其他没有被初始化的元素的值都为0,元素个数不能省略
(3)赋值为0
int a[5] = {0};
memset(a , 0 , sizeof(a))
bzero(a , sizeof(a))

字符数组的初始化
(1)满数初始化
char a[5] = {'a' , 'b' , 'c' , 'd' , '\0' };
char a[5] = "abcd";
(2)部分赋值
char a[5] = { 'a' , ' b' };
char a[5] = "ab";

数组的赋值
int a [10];
a = {1,2,3,4,5,6,7,8,9,0}; //error a是数组的首地址,是地址常量
a[10] = {1,2,3,4,5,6,7,8,9,0}; //error 数组a的下标是从0~9,a[10]不存在,并且a[10]是数组元素
打印地址:%p

求数组元素的个数:sizeof(数组名)/sizeof(数据类型)

或者sizeof(数组名)/sizeof(a[0])

二、冒泡排序
100 28 78 0 12
第一趟:
第一次:28 100
第二次: 78 100
第三次: 0 100
第四次: 12 100
28 78 0 12 100
第二趟:
第一次:28 78
第二次: 0 78
第三次: 12 78
28 0 12 78 100
第三趟:
第一次:0 28
第二次: 12 28
0 12 28 78 100
第四趟:
第一次:0 12
最终结果:0 12 28 78 100

#include<stdio.h>
#include<stdbool.h>
int main()
{
	int num[10]={8,9,7,6,0,2,4,1,45,34};
	int i,j,temp;
	bool flag = true;
	for(i=0;i<9;i++)
	{
		for(j=0;j<9-i;j++)
		{
			if(num[j]>num[j+1])
			{
				flag = false;
				temp = num[j];
				num[j] = num[j+1];
				num[j+1] = temp;
			}
			
		}
		if(true == flag)
		{
			break;
		}
	}
	for(i=0;i<10;i++)
	{
		printf("%5d",num[i]);
	}
	printf("\n");
	return 0;
}
选择排序

#include<stdio.h>
int main()
{
	int num[10];
	printf("input 10 numbers\n");
	int i,j,min,temp;
	for(i=0;i<10;i++)
	{
		scanf("%d",&num[i]);
	}
	for(i=0;i<9;i++)
	{
		min = i;
		for(j=i+1;j<10;j++)
		{
			if(num[j]<num[min])
			{
				min = j;
			}
		}
		if(min!=i)
		{
			temp = num[min];
			num[min] = num[i];
			num[i] = temp;
		}
	}
	for(i=0;i<10;i++)
	{
		printf("%5d",num[i]);
	}
	printf("\n");
	return 0;
}


三、二维数组
定义:存储类型 数据类型 数组名[行][列];
int a[2][3];
二维数组在内存中是一维的,并且是按行存储的;
二维数组的初始化:
1、满数初始化
int a [ 2 ][ 3 ] = { {1,2,3} , {4,5,6}};
int a [ 2 ][ 3 ] = {1,2,3,4,5,6};
满数初始化时,行号可以省略,但是列号不能省略
2、部分初始化
int a[ 2 ][ 3 ] = { {1,2 } , { 4 } };
字符二维数组
char a[ 2 ][ 10 ] = { {'a','b','c','d','\0'},{'e','f','g','h','\0'}};
char a[ 2 ][ 5 ] = {"abcd","efgh"};


四、字符串函数
1、strlen:功能:求字符串长度,不包含’\0‘
原型:size_t strlen(const char *s);
其中:参数s为所求字符串的首地址
返回值:字符串s的长度
2、strcat(字符数组1,字符串2);
功能:把字符串2连接到字符串1后面,字符串1的'\0'没有了
strncat(字符数组1,字符串2,n);
功能:把字符串2的前几个字符连接到字符串1后面
3、strcpy(字符数组1,字符串2);
功能:把字符串2拷贝到字符数组1当中去
注意:在拷贝时,连同 '\0' 一同拷贝,属于完全拷贝
strncpy(字符数组1,字符串2,n);
功能:把字符串2的前n个字符拷贝到字符数组1当中去,字符数组1的其他字符保持不变
不管strcat还是strcpy 要注意:字符数组1要足够大
4、strcmp:字符串比较函数
比较规则:对两个字符串从左至右,逐个字符进行比较(ASCLL),直到遇到不同的字符或者'\0'为止
int strcmp(字符串1,字符串2);
返回值:比较结果
a、>0 字符串1>字符串2
b、==0 字符串1=字符串2
c、<0 字符串<字符串2
int strncmp(字符串1,字符串2, n);
比较规则:对两个字符串从左至右,逐个字符进行比较(ASCLL),直到遇到不同的字符或者'\0'为止
返回值:比较结果
a、>0 字符串1>字符串2
b、==0 字符串1=字符串2
c、<0 字符串<字符串2

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值