// 数组的定义: 保存同种类型的多个数据
// 声明一个数组 保存年龄
// [3] 3 代表的是数组中元素的个数
// { }中的值 是数组中元素的初值 用逗号隔开
// int 表示数组中每一个元素的数据类型
// 声明数组公式
// 数据类型 数组的名字[常量表达式] = {初值1, 初值2, ......};
int ageArray[3] = {27, 19, 22};
// 数组的元素个数可以用变量来表示 但是不可以进行初始化
int count = 5;
int array[count] = {1, 2, 3, 7, 9};
如果声明数组时,数组元素的个数大于给出的数组元素初值的个数 系统自动补0
int array2[5] = {2, 5, 7};
int array3[5] = {0};// 相当于int array3[5] = {0, 0, 0, 0, 0};
// 声明的时候没有给定元素的个数 那么初值有几个元素数组就有几个元素
int array4[] = {1, 4, 6, 7, 9};
// 声明一个字符型数组 i p h o n e
char str[10] = {'i', 'p', 'h', 'o', 'n', 'e'};
// 字符串
char str1[] = "ipone";
取出数组中的元素
使用 数组名[下标] 切记下标从0开始
int array[6] = {27, 19, 22, 26, 23, 18};
需求 : 修改鹏举年龄 19->39(真实年龄)
array[1] = 39;
printf("%d",array[1]);
array[5] = 5;
需求: 输出数组中的所有元素 叫做遍历
循环输出
for (int n = 0; n < 6; n++) {
printf("%d ",array[n]);
}
// 1、定义⼀个具有20个元素的整型数组,每个元素的取值范围是30-70之间,求数组元素的和。
int array1[20] = {0};
int all = 0;
// 遍历数组
for (int n = 0; n < 20; n++) {
int random = arc4random()%(70 - 30 + 1) + 30;
array1[n] = random;
all = all + array1[n];// 相当于sum += array[i]
}
printf("%d", all);
2、交换⼀个数组,即两个数组容量⼀样,把其中⼀个数组中的元素交换到另外⼀个数组中。
int array1[5] = {3, 2, 4, 5, 6};
int array2[5] = {33, 22, 44, 55, 66};
int switch1[5] = {0};
for (int i = 0; i < 5; i++) {
switch1[i] = array1[i];
array1[i] = array2[i];
array2[i] = switch1[i];
printf("%d ",array1[i]);
}
3、⽣成2个数组,每个数组都有10个元素,元素取值范围20-40之间,数组对应元素相加,放到另外⼀个数组中
int array1[10] = {0};
int array2[10] = {0};
int array3[10] = {0};
for (int i = 0; i < 10; i++) {
// 给数组赋值随机数
array1[i] = arc4random()%(40 - 20 + 1) + 20;
array2[i] = arc4random()%(40 - 20 + 1) + 20;
// 利用前两数组的元素赋值第三个数组的元素
array3[i] = array1[i] + array2[i];
printf("%d ",array3[i]);
}
数组越界问题
切记: 系统不会提示你越界 需要你自己注意 千万不要越界
int array[5] = {1, 3, 5, 7, 9};
printf("%d",array[5]);
数组在内存当中是连续的一段存储区域
并且 数组的名字就是数组的元素的首地址(第一个元素的地址)
注意 : 数组不能直接赋值
array1 = array2 错误的(数组的名字是元素的首地址,是一个地址,地址是一个常量,是程序执行期间,无法改变的量,所以数组不能直接赋值)
冒泡排序
比较趟数 5个数(5 - 1)趟
每趟比较次数 第一趟比较(5 - 1)次 第二趟 比较(5 - 2)次 ...
精髓:前后两个数比较大小 前面大于后面的 两个数交换位置 依次继续
int array[5] = {1, 3, 5, 7, 9};
// 外层控制比较的趟数
for (int i = 0; i < 5 - 1; i++) {
// 内存循环 控制每趟比较的次数
for (int j = 0;j < 5 - 1 - i; j++) {
// 比较的过程 2个数比大小 前面大 交换
if (array[j] > array[j + 1]) {
// 交换 通过中间值交换(第三只手)
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
// 遍历数组
for (int i = 0; i < 5; i ++) {
printf("%d ",array[i]);
}
1、随机产⽣10个[20,40]数,并对10个数从⼩到⼤排序。
int array[10] = {0};
// 随机生成十个数
for (int n = 0; n < 10; n ++) {
array[n] = arc4random()%(40 - 20 + 1) + 20;
}
for (int n = 0; n < 10 - 1; n ++) {
for (int m = 0; m < 10 - 1 - n ; m ++) {
if (array[m + 1] < array[m]) {
int temp = array[m];
array[m] = array[m + 1];
array[m + 1] = temp;
}
}
}
for (int n = 0; n < 10; n++) {
printf("%d ",array[n]);
}
字符数组的两种表现形式
字符串比字符数组多了一个 '\0'
'\0' 是用来结束字符串的
char str1[] = {'i', 'p', 'h', 'o', 'n', 'e'};
char str2[] = "iphone"; // 字符串数组
打印数据类型或者变量的 所占字节数的函数
sizeof()
%lu 无符号的长整型
unsigned long number1 = sizeof(str1);
printf("%lu ",sizeof(str1));
printf("%lu",sizeof(str2));
字符串长度的计算
strlen(要计算的字符串)
char str[] = {"I Love Jay"};
打印有效长度
从第一个字符开始 如果不是'\0' 长度 + 1,遇到'\0'结束 并且输出的长度不包含'\0'
printf("%lu ",strlen(str));
char str2[] = {'i', 'p'};// 不能用 strlen来计算长度 只应用字符串
字符串的拷贝
拷贝 :从第一个字符开始拷贝 遇到'/0'拷贝结束
注意 :目标字符串的长度最好大于源字符串
char str1[20] ="I LOVE Jay"; // 目标字符串
char str2[] = "I LOVE Echo"; // 源字符串
strcpy(目标字符串, 源字符串);
strcpy(str1, str2);
如果不是'\0' 一个字符一个字符输出 如果遇到'\0' 就结束
printf("%s",str1);
字符串的拼接
被拼接的字符串长度一定要够接受拼接完的字符串
char str1[100] = "Edward";
char str2[] = "Gaming";
strcat(str1, str2);// 把后面的str2拼接到str1的后面
printf("%s",str1);
字符串的比较
char str1[] = "I LOVE YOU";
char str2[] = "I MISS YOU";
接收比较的结果
从第一个字符开始比较 如果一样的话看下一个 如果不一样开始进行比较 比较的内容是该字符在ASCII表中对应的数 前面减去后面的 得到一个返回值 返回值是正数则前面大 反之后面大 然后比较结束 如果返回值是0 那么两个字符串相同
int number = strcmp(str1, str2);
printf("%d",number);
/*
练习: 查找字符串中的空格数:
例如:“I love iOS, i want an iPhone5s”
6个空格
*/
char str1[] = "I love iOS, i want an iPhone5s";
int b = 0;
跟数组有关基本需要遍历.
for (int i = 0; i < strlen(str1);i++) {
判断这个字符是不是空格
if (str1[i] == ' ') {
b ++;
}
}printf("%d",b);