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;