1、冒泡排序
思想:从左向右两两依次比较,如果前一个数比后一个数大的话就交换位置,否则不变
2、字符数组
字符数组的本质:其实就是字符串,以'\0'作为结束符
存储类型 数据类型 数组名[元素个数];
char str[6] = {'h','e','1','o','\0'};//最多存储五个元素,必须留一个位置给'\0'
char str[6] = "hello";
char str[6] = {"hello"};
字符数组清零:char str[6] = {'\0'};
2.1 字符串输出函数
puts(数组名);
功能:字符串打印到终端,并自动添加换行;
注意;遇到'/0'结束
2.2 字符串的输入函数
gets(数组名);
功能:将键盘输入的字符串存放到数组中,并在末尾自动添加'\0';
注意:gets是个危险的函数,不会进行越界检查,所以输入的时候注意不要越界;
gets在scanf后面使用,会直接读取scanf遗留在缓冲区里面的内容
总结
(1)scanf和gets的区别
scanf是以空格、回车、Tab键作为变量的输入结束;而gets是以回车作为变量的输入结束;
缓冲区:
gets:当完成字符串的输入时,会自动清空缓冲区;
scanf:当完成字符串的输入时,缓冲区会遗留回车、空格、Tab键;
注意:gets先会查看缓冲区中是否由残留的内容,如果有,直接拿过来使用,否则需要键盘输入;
scanf是标准输入函数,每一次的输入只能通过键盘输入的方式获取值。
(2)printf和puts有什么区别
puts会自动添加换行,而pritf不会自动添加换行
3、字符串的处理函数
strlen,strcpy,strcat,strcmp
都需要头文件:
#include <string.h>
3.1 strlen
strlen(数组名/字符串);//传入数组名和字符串都可以
功能:求字符串的长度
返回值:字符串的实际长度,不包含'\0'
strlen和sizeof的区别:
1、strlen是函数,sizeof是运算符
2、strlen是函数,只能以char * (字符串)作为参数
sizeof是运算符,可以使用类型、字符串、变量等等
3、strlen的结果是字符串的实际长度,不包含'\0',而sizeof求得的是整个空间的大小
案例
求字符串的实际长度,不使用库函数
3.2 strcpy
strcpy(数组1,数组2/字符串2);
功能:将数组2或者字符串2的值拷贝到数组1中,包含'\0',相当于完全拷贝
注意:数组1的容量大于数组2
strncpy(数组1,数组2/字符串2,n);
功能:将数组2或者字符串2的前n个字符拷贝到数组1中
注意:拷贝的字符串不包含'\0';
3.3 strcat
strcat(数组1,数组2/字符串2);
功能:将数组2或者字符串2连接到数组1中,数组1中的'\0'会被覆盖
注意:数组1的容量大于数组2的容量
strncat(数组1,数组2/字符串2,n);
功能:将数组2或者字符串2的前n个字符连接到数组1中
连接的是字符‘2’,‘3’,不是数字2,3
3.4 strcmp
strcmp(数组1/字符串1,数组2/字符串2);
功能:比较字符串1和字符串2的大小
返回值:
大于0:字符串1 > 字符串2
等于0:字符串1 == 字符串2
小于0:字符串1 < 字符串2
比较规则:从左至右依次对字符串的ASCII码值进行比较,直到遇到不同的ASCII码或者遇到'\0'结束
大于0:字符串1 > 字符串2
等于0:字符串1 == 字符串2
小于0:字符串1 < 字符串2
案例
实现字符串的拷贝,不使用库函数
#include <stdio.h>
int main(void)
{
int i = 0;
char str[30]={"hello"};
char atr[30]={"yyds"};
while(atr[i] != '\0')
{
str[i]=atr[i];
i++;
}
str[i]='\0';
puts(str);
return 0;
}
作业
1、以下程序的输出结果是 (x=8)
#include <stdio.h>
int main()
{
int i,j,x=0;
for(i=0;i<2;i++)
{
x++;
for(j=0;j<3;j++)
{
if(j%2==1)
continue;
x++;
}
x++;
}
printf("i=%d\n",i);
printf("j=%d\n",j);
printf("x=%d\n",x);
}//x=2,y=3,x=8
i=0,j=0,x=0
i=0,j=0,x=1
i=0,j=0,x=2
i=0,j=1,x=2
i=0,j=2,x=3
i=0,j=3,x=4
i=1,j=0,x=5
i=1,j=0,x=6
i=1,j=2,x=7
i=1,j=3,x=7
i=1,j=3,x=8
i=2,j=3,x=8
2、设x和y均为int型变量,则执行以下的循环后,y值为 (6)
for(y=1,x=1;y<=50;y++)
{
if(x==10)
break;
if (x%2==1)
{
x+=5;
continue;
}
x-=3;
}//x=10,y=6
y=1,x=1
y=2,x=6
y=3,x=3
y=4,x=8
y=5,x=5
y=6,x=10
3、实现字符串的连接,不使用库函数
#include <stdio.h>
#include <string.h>
int main(void)
{
char str[30]="hello";
char atr[30]="232cc";
int i,j=0;
for(i=strlen(str);i<strlen(str)+strlen(atr);i++)
{
str[i]=atr[j];
j++;
}
printf("str:%s\n",str);
return 0;
}