c语言第五天

day05

[1]数组大小

[2]清零函数

bzero

#include <strings.h>

void bzero(void *s, size_t n);

功能:数组清零

参数:s:数组首地址 n:字节大小

返回值:无

memset

#include <string.h>

void *memset(void *s, int c, size_t n);

功能:数组清零

参数:s:数组首地址 c:要设置的值 n:字节大小

返回值:数组首地址

memset按字节赋值 int==4字节=32位 1字节==8位 0000 00010000 00010000 00010000 0001

char a[6]={'h','e','l','l','o'};

"hello";

[3] 字符数组

用来存储字符串

字符串" " (字符串被“”包裹) 以'\0'结束,定义数组元素个数时,要把'\0'考虑上

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

char a2[6]="hello";

char a3[33]="hello";

char a4[]="hello";

printf("%d\n",sizeof(a1)); //6

printf("%d\n",sizeof(a2)); //6

printf("%d\n",sizeof(a3)); //33

printf("%d\n",sizeof(a4)); //6

练习:6 5 40

程序运行后的输出结果是()? (3C科技)

#include <stdio.h>

void main ()

{

char str1[]="hello";

char str2[5]= {'H','e','l','l','o');

int a[10];

printf("1: %d,2: %d,3:%d",sizeof(str1), sizeof(str2),sizeof(a));

}

3.1 输入输出

1、for

char a1[6]={};

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

{

scanf("%c",&a1[i]);

}

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

{

printf("%c",a1[i]);

}

2、 %s

char a1[6]={};

scanf("%s",a1);

printf("%s\n",a1);

例:

char a1[33]={};

// scanf("%s",a1);

//scanf默认遇到空格或换行会认为赋值结束,如果想支持空格可以用下边的代码:

scanf("%[^\n]",a1); //遇到换行才结束

printf("%s\n",a1);

3、 gets puts

gets (输入)

char *gets(char *s);

功能:终端输入字符串

参数:字符数组首地址

返回值:字符数组首地址

puts (输出)

int puts(const char *s);

功能:终端输出字符串

参数:字符数组首地址

返回值:输出字符的个数

支持空格;puts自带换行功能

char a[19]={};

gets(a);

puts(a);

练习:

char s[10]={}; 判断以下赋值是否正确

1) s[10]="hello"; //×

2) s="hello"; //×

3) strcpy(s,"hello"); //√

字符串逆序输出 "hello"--->"olleh"

5:实际元素个数

3.2 字符串实际元素个数

3.2.1 for

3.2.2 strlen

#include <string.h>

size_t strlen(const char *s);

功能:计算字符串的实际元素个数

参数:字符数组的首地址

返回值:字符串实际元素个数

char a[33]="helloqwert";

int num=strlen(a);

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

sizeof和strlen区别:

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

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

3. sizeof的计算包含'\0';strlen的计算不包含'\0'

[4]冒泡排序

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

n个数比较n-1轮

第一轮:5个数

32456

34256

34526

34562

第二轮:4个数

43562

45362

45632

第三轮:3个数

54632

56432

第四轮:2个数

65432

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

for(int i=0;i<5-1;i++) //轮数

{

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

{

if(a[j]<a[j+1])

{

t=a[j];

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

a[j+1]=t;

}

}

}

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

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

[5]选择排序

假设第一个元素最小 暂存索引,分别和后边的每一个元素比较;比较过程中如果遇到更小的值,索引进行存储;一轮比较完后,再和最左边元素的值进行交换

int a[5]={2,5,4,3,12},min=0,t; //min暂存最小元素索引

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

{

min=i; //假设最左边元素最小

for(int j=i+1;j<5;j++) //获取剩下的几个元素

{

if(a[min]>a[j]) //出现更小值时,索引更新

min=j;

} //循环结束,min是本轮循环的最小元素索引

//a[min] a[i] //要交换的是 最小元素 和 最左边位置

if(min!=i) //排除最左边要交换的位置=本轮最小元素的位置

{

t=a[min];

a[min]=a[i];

a[i]=t;

}

}

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

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

return 0;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值