c基础day5

目录

[1]计算字符串实际元素个数

strlen

[2]冒泡排序

[3]选择排序

[4]二维数组

数组名

内存分配

遍历二维数组


[1]计算字符串实际元素个数

char a[33]="hello";

for (; a[i] !='\0'; i++)

strlen

size_t strlen(const char *s);

功能:计算字符串实际元素个数,不包括'\0'

参数:字符数组的首地址 返回值:字符串实际字符个数

int b=strlen(a); 或 printf("%ld\n",strlen(a));

printf("%d\n",b);

sizeof和strlen的却别

1、sizeof是关键字,strlen是函数

2、sizeof是计算元素实际开辟的空间大小,strlen计算字符串实际元素个数

sizeof计算包括'\0',strlen不包括'\0'

3、char a[]=”hello“,sizeof(a)==6 strlen(a)==5

[2]冒泡排序

int a[5]={6,5,4,3,2}; //从小大排,确保右边是最大的

int b=0;

for (int i = 0; i < 4; i++) // 轮数 五个数比较四轮

{

for (int j = 0; j < 4-i; j++) //每一轮比较的次数

{

if (a[j]>a[j+1]) //确定了最大值,或最小值,固定在最右边

{ //之后不参与比较,所以随着循环的执行

b=a[j]; //参与比较的元素越来越少,索引越带越低

a[j]=a[j+1];

a[j+1]=b;

}

}

}

for (int i = 0; i < 5; i++)

{

printf("%d\n",a[i]);

}

[3]选择排序

假设第一个元素,和后边每一个进行比较,比较过成中遇到更小值,暂存下标位置,知道一轮比较结束,再把最小值和最左边的

int a[5] = {3, 7, 5, 9, 4};

int b = 0, m=0;

for (int i = 0; i < 4; i++) //i的值分别取0,1,2,3执行四次循环

{

m = i; //m:每次循环结束之后从新赋值,暂存下标

for (int j = i + 1; j < 5; j++)//j=i+1 每次在小循环从交换结束的下一位开始

{ //j<5 五位数循环比较的次数小于5

if (a[m] > a[j])

m = j;

}

if (m != i)

{

b = a[m];

a[m] = a[i];

a[i] = b;

}

}

for (int i = 0; i < 5; i++)

{

printf("%d ", a[i]);

}

[4]二维数组

格式:数据类型 数组名[行数][列数]

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

访问:数组名[行下标][列下标] 下标从0开始

a[0][0]

a[0][1]

a[0][2]

a[1][0]

a[1][1]

a[1][2]

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

定义二维数组时:可以省略行数,但是不能省略列数。

int a[2][]={2,3,4,5,6,7}; //错误,无法确定具体两行几列

int a[][3]={2,3,4,5,6,7};

数组名

是第一行的首地址

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

printf("%p %p\n",a,&a[0][0]); //0x7ffd6f307fa0 0x7ffd6f307fa0

printf("%p %p\n",a+1,&a[0][0]); //0x7ffd6f307fac 0x7ffd6f307fa0

数组元素个数:行数*列数

数组大小:行数*列数*数据类型大小

sizeof(数组名) printf("%d\n",sizeof(a));

初始化:

完全初始化:int a[2][3]={2,3,4,5};

int arr[2][3]={{1,1,2},{2,3,3}};//按行初始化

部分初始化:int a[2][3]={2,3};

int arr[2][3]={{1,1},{2}}; 1 1 0 2 0 0

未初始化:只为随机值 需要单独进行赋值

内存分配

a[0]:是第一行第一列的地址

a[0]+1:是第一行第二列的地址

a:第一行开头的地址

a+1:第二行开头的地址

地址

元素

a[0]

&a[0][0]

a

2

a[0][0]

a[0]+1

&a[0][1]

3

a[0][1]

a[0]+2

&a[0][2]

4

a[0][2]

a[1]

&a[1][0]

a+1

5

a[1][0]

a[1]+1

&a[1][1]

6

a[1][1]

a[1]+2

&a[1][2]

7

a[1][2]

遍历二维数组

(用循环的方式将数组中的所有数据进行浏览)

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

for(int i=0;i<2;i++)

{

for(int j=0;j<3;j++)

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

}

for(int i=0;i<2;i++)

{

for(int j=0;j<3;j++)

printf("%d\n",a[i][j]);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值