数组
特点:
内存连续
数据类型相同
分类:
一维数组
格式:存储类型 数据类型 数组名[元素个数]
int arr[5];
例:int a[5]={2,3,5,8,9};
a[0]------2
a[1]------3
a[2]------5
a[4]------9
访问时,索引从0开始
char a[5]={'q','w','e'};
数组名
也是数组首地址
字节大小
int a[5];
4*5=20
printf("%d",sizeof(a));
初始化
完全初始化
int a[5]={2,3,5,8,9};
部分初始化
int a[5]={9}; 未初始化部分值为
int arr[66]={};
未初始化
int b[33]; 值为随机值
b[0]=9;
循环遍历
int a[5]={};
for(int j=0;j<5;j++)
scanf("%d",&a[j]);
for(int i=0;i<5;i++)
{
printf("%d\n",a[i]);
}
练习:求输入的十个数的平均值
练习:求输入的十个数的平均值,除去一个最大值和一个最小值
清零函数
bzero
#include <strings.h>
void bzero(void *s, size_t n);
功能:清空数组
参数:数组首地址,n:清空的字节大小
返回值:
int a[5]={2,3,4,5,6};
bzero(a,20); // bzero(a,sizeof(a));
memset
#include <string.h>
void *memset(void *s, int c, size_t n);
功能:清空数组
参数:数组首地址,c替换的数据,n:清空的字节大小
返回值:数组首地址
int a[5]={2,5,6,4,3};
memset(a,0,sizeof(a));
for(int i=0;i<5;i++)
printf("%d\n",a[i]);
字符数组
字符数组存放字符串
hello ---
char c[6]={'h','e','l','l','o'};
字符串结束标志'\0'
char a[6]={"hello"}; //sizeof(a) 6
char b[6]="hello"; // 6
char c[]="hello"; //6
char d[33]="hello"; //33
char a1[]={'a','b','c'}; //数据类型是字符型,sizeof(a1)==3
char a2[]={"abc"}; //数据类型是字符串,sizeof(a2)==4 '\0'
输入输出
char a[6]={"hello"};
for(int i=0;i<6;i++)
printf("%c ",a[i]);
char a[]={"hello world"};
printf("%s\n",a);
int puts(const char *s);
- 功能:向终端输出字符串
- 参数:字符串首地址
- 返回值:输出字符个数
char *gets(char *s);
功能:从终端输入字符串
参数:目标字符串的首地址
返回值:目标字符串的首地址
char a[33];
gets(a);
puts(a);
char a[6];
for(int i=0;i<6;i++)
scanf("%c",&a[i]);
char a[33];
scanf("%s",a);//不支持空格
scanf遇到空格或回车时会认为输入结束,如果想支持空格的写法,可以用:scanf("%[^\n]",a);
练习:输入一串字符,计算其中空格个数
#include <stdio.h>
int main(int argc, char const *argv[])
{
char a[500];
printf("请输入一串字符:");
scanf("%[^\n]", a);
// printf("%s\n",a);
int j = sizeof(a);
int k = 0;
for (int i = 0;i<j;i++)
{
if(a[i]==' ')
k++;
}
printf("%d\n",k);
return 0;
}
例题:判断对错
char s[10]={};
1)s[10]="hello"; ×
2)s="hello"; ×
3)strcpy(s,"string")
字符串"hello",倒序输出:olleh
计算字符串实际元素个数
int i;
for(i=0;a[i]!='\0';i++);
printf("%d\n",i);
string.h strlen
#include <string.h>
size_t strlen(const char *s);
功能:计算字符串实际元素个数
参数:字符串首地址
返回值:实际元素个数
char a[33];
scanf("%[^\n]",a);
int res=strlen(a);
printf("%d\n",res);
sizeof和strlen的区别:
- sizeof是关键字,strlen是函数
- sizeof计算实际开辟的空间大小,strlen计算字符串实际元素个数
- sizeof计算包括'\0',strlen不包括
练习:实现字符串的大小写转换
#include <stdio.h>
#include <string.h>
int main(int argc, char const *argv[])
{
//实现字符串的大小写转换
char a[33] = {};
scanf("%[^\n]", a);
for (int i = 0; i < strlen(a); i++)
{
if (a[i] >= 'a' && a[i] <= 'z')
{
a[i] = a[i] - 32;
}
else if (a[i] >= 'A' && a[i] <= 'Z')
{
a[i] = a[i] + 32;
}
}
puts(a);
return 0;
}