数组:相同数据类型的成员组成的一组数据。
数组是一种构造类型,相同数据类型组成的新数据类型。
一维数组的定义:
类型说明符 数组名[常量表达式]= {值 1, 值 2....};
int a[5] = { 2, 3, 4 };
int b[5] = { 0 };
int c[]={ 2, 4, 6, 8 };
char str[] = "iPhone5";
数组元素的访问 : 数组元素在数组中的序号,从 0 开始,
下标可以是常量,也可以是变量 a[0] ,a[i];
注意区别 定义数组 和 数组元素
int a[10] ;
a[10] ;
1、定义一个具有20个元素的整型数组,每个元素的取值范围是
30-70之间,求数组元素的和。
int a[20] = {};
int sum = 0;
for (int i = 0; i<20; i++) {
int random= arc4random()%(70-30+1)+30;
a[i] = random;
sum=sum+a[i];
}
printf("sum:%d",sum);
3、生成2个数组,每个数组都有10个元素,元素取值范围20-40 之间,数组对应元素相加,放到另外⼀一个数组中。
int a[10]={0};
int b[10]={0};
for (int i = 0; i < 10; i++) {
int r= arc4random()%(40-20+1)+20;
a[i]=r;
b[i]=r;
printf("a[%d]+b[%d]=%d \n",i,i,a[i]+b[i]);
}
注意:系统不会检测 数组元素的下标是否越界,编程时,必须保证数组下标不能越界。
数组是一个整体,不能直接参加运算,只能对单个元素进行处理,通常用到数组的地方都会用到循环。
数租排序
冒泡排序是比较常见的排序算法;
冒泡排序涉及到双循环,外层循环控制趟数,内层循环控制比较次数;
//1、随机产⽣生10个[20,40]数,并对10个数从⼩小到⼤大排序。
int a[10]={0};
for (int i=0; i<10; i++) {
int r=arc4random()%(40-20+1)+20;
a[i]=r;
}
for (int i=0; i<9; i++) {
for (int j = 0; j< 9; j++) {
if (a[j]>a[j+1]) {
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for (int i = 0; i<10; i++) {
printf("%d ",a[i]);
}
字符数组
用于存放字符变量的数组,属于一维数组,定义方式与普通一维数组相似,只是类型是 char
字符数组的定义:
char c[10] = {'i', 'p', 'h', 'o', 'n', 'e'}; 或者 char c[10]="iphone";
有'\0'结束标识的字符数组也称为字符串 。
系统提供了很多字符串处理函数
strlen() 计算字符串长度
strcpy() 字符串拷贝
strcat() 字符串拼接
strcmp() 字符串比较
//查找字符串中的空格数:
//例如:“I love iOS, i want an iPhone5s” 6个空格
int c= 0;
char a[]="I love iOS, i want an iPhone5s";
for ( int i = 0; i < strlen(a); i++) {
if (a[i]==' ') {
c=c+1;
}
}
printf("%d ",c);
//将字符串倒转:
//例如:“afjnpue” 转变成字符串“eupnjfa”
//(注:是改变字符串本⾝身,不是反向输出)
char a[]="afhnpue";
int number=strlen(a);
for (int i = 0; i < number/2; i++) { //前面的数和最后的数交换
char temp = a[i];
a[i]=a[number-1-i];
a[number-1-i]=temp;
}
printf("%s",a);
注意: 字符串所占的空间 至少要比字符串长度大1,因为字符串以'\0'表示结束。
系统提高的字符串处理函数都是根据
'\0' 来判断字符串是否结束
char str[]={'o','k'};
char str[]="ok";