c语言(6)—数组(2)

C语言数组排序与二维、一维数组详解

一、数组排序

1.冒泡排序(两两比较,升序)

给出一个数组,第一轮第一个数与第二个数作比较,如果前者大于后者,则两者数据做交换,否则不交换,以此类推,第一轮交换后的最后一个数就为数组中的最大值,固定在此,第二轮比较剩下的数,直到经过数组元素数-1轮得出最终的升序排序。

编程实现:首先初始化一个数组和一些变量,利用双层for循环,外层for循环从j=0开始,当j<len-1时进行内层循环,每次循环j自增;内层for循环从i=0开始,当i<len-1-j时,进行一次内层循环,每次循环i自增。外层循环一次,内层循环一遍,这样就能实现每一轮的比较,最终输出升序的一组数。

2.选择排序(选择出最小的放在最前面)

给出一个数组,第一轮让第一个数与每一个数比较,如果小于第一个数,这个数为最小的数放在数组最前面固定,然后剩下的数作比较,以此类推,得出升序排列的一组数。

编程实现:首先初始化一个数组和一些变量,利用双层for循环外层for循环从j=0开始,当j<len-1时进行内层循环,每次循环j自增;每次外层循环min = i;内层for循环从i=j+1开始,当i<len时,行一次内层循环(如果a[min]>a[i],min = i),每次循环i自增;内层循环每循环一遍,如果min!=j,则进行a[min]与a[j]的交换。最终输出升序排列的一组数。

二、二维整型数组

1.形式:数据类型 数组名[行数][列数]

2.元素访问

int a[2][3];

a[0][0] a[0][1] a[0][2]

a[1][0] a[1][1] a[1][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, 3, 4};     int a[2][3] = {{1, 2}, {3}};

int a[2][3] = {0};                 int a[2][3] = {{0}};

(3)默认初始化

int a[][3] = {1, 2, 3, 4};       int a[][3] = {{1, 2}, {3}}

注:行能省略,列不能省略

4.存储:

(1)连续性、有序性

(2)二维数组本质是由一维数组构成的一维数组

N维数组可以看成是由N-1维数组构成的一维数组

5.接收数据

for (j = 0; j < 2; j++)

{

        for (i = 0; i < 3; i++)

        {

                scanf("%d", &a[j][i]);

        }

}

三、一维字符型数组

1.形式:char str[元素个数];

元素个数必须为常量,元素个数必须能够存放的下字符串(包括'/0')

2.元素访问

数组名[元素下标];

注:元素下标范围: 0 - 元素个数-1

元素下标可以是常量、变量、表达式

数组只能对单个元素操作,不能对整体操作,想对整体操作需要使用库函数

3.字符串打印

printf    %s:打印从数组开头到\0中间的内容

puts 打印从数组开头到\0中间的内容(多打印一个\n)

注:字符串操作函数接口操作字符串时,字符串末尾没有\0,可能导致内存越界

4.字符数组的初始化

(1)全部初始化

char str[6] = {'h', 'e', 'l', 'l', 'o', '\0'};

char str[6] = {"hello"};

char str[6] = "hello";

(2) 局部初始化

char str[6] = {'h', 'e', 'l', '\0'};

char str[6] = {"hel"};

char str[6] = {0};

注:没有给定初值的元素,默认初始化为0值(整数0、字符\0)

(3)默认初始化

char str[] = {'h', 'e', 'l', 'l', 'o', '\0'};

char str[] = {"hello"};

char str[] = "hello"

5.存储:连续性、有序性

6.字符串的接收

scanf("%s", str);

gets(str);

注:gets可以接收带有' '的字符串,scanf("%s")只能接收不含' '的字符串

7.统计字符串的长度

 strlen:获得字符串的长度(与数组大小无关)

sizeof:获得数组所占字节空间大小(与数组中存放的字符串无关)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值