1. 数组:是有相同数据类型组成的有序的一组的数据。数组是一种构造数据类型,因为数组中的数据都是一格格的基本的数据类型组成的
2.数组的定义: 数组也是数据类型 数组名【数组中的元素的个数】 = {值1,值2,。。。。};
定义一个整形数组
int array[10] = {19,20,21,22,23,24,25,26,27,28};
定义一个float类型的数组
float score[10] = {65.0,76.0,86.0,86.0,85.9,85.8,85.7,87.6,86.7,86.0};
定义一个字符型的数组
char m[3] = {'1','2','3'};
3.数组中需要注意的问题:数组的长度是不能定义为变量的,只能使用常量表达式
int arr[3*2] = {1,2,3,4,5,6};//定义整形数组,使用常量表达式
4.定义一个数组,数组中有10个元素
int arr【10】= {0};我们没有完全初始化数组,数据系统会默认给我们赋值,系统默认值都是0,这时数组中也是十个元素
5.定义一个整形数组
int arr【】={1,2,3};定义数组的时候,如果我们没有指定数组的长度(数组元素的个数),这时数组元素的个数由我们往数组中赋值的个数来决定
6.定义一个整形数组
int arr【3】= {1,2,3,4};这种现象叫数组的越界,数组越界很危险,而且系统不会报错
7. sizeof(数据类型或者变量名)计算数据类型在内存中所占的字节数的运算符
计算int类型的字节数
unsigned long size = sizeof(int);size 的返回值是无符号长整形
printf("size = %lu\n",size);//无符号长整形的占位符是%lu
int num = 10;
size = sizeof(num);
printf("size = %lu\n",size);
8. 计算double在内存中站的字节数
double m = 56.00;
printf("double = %lu\n",sizeof(double));
printf("short = %lu\n",sizeof(short));
printf("float = %lu\n",sizeof(float));
printf("char = %lu\n",sizeof(char));
/
9.数组也有大小,就是数组在内存中所占的字节数,数组的大小有什么来决定???数组大小 =数组的类型 *数组的元素的个数
eg:int arr[5] ={1,2,3,4,5};是20个字节
10.定义一个整形数组
int arr[] = {1,2,3,4,56,7,7};
数组元素的个数 = 数组所占的总字节数 / 数组的数据类型
int count = sizeof(arr) /sizeof(int);
printf("count = %lu",count);
11. 数组的使用
int a = 3,int b = 5;a =b;变量可以直接给变量赋值
定义两个整形数组
int arr1[3] = {1,2,3};
int arr2[3] = {3,4,5};
arr1 = arr2;//*数组是不能直接拿来直接使用的,√
·12.如何访问数组的元素
数组名[下标] 下标的范围 从 0到数组元素个数 -1
int arr[5] = {1,2,3,4,5};
arr[0];//
代表是数组中第一个元素
arr[2];
printf("arr[0] = %d,arr[2] = %d\n",arr[0],arr[2]);
13.数组和数组元素的区别:定义数组时,有类型修饰符;数组元素没有类型修饰符
14. 数组元素取值越界
printf("arr[6] = %d",arr[6]);error!
15.
为数组中的第三元素赋值为 10
arr2[2] = 10;//数组元素赋值
printf("arr2[2] = %d\n",arr2[2]);
16. 使用for循环把数组中所有的元素都打印出来,叫做遍历。遍历的是数组的下标,通过数组的下标来改变取出数组的每一个元素
17.练习1 定义一个数组包含十个元素,通过数值遍历为其赋,赋值的范围20~40之间
int arr3[10] = {0};
遍历赋值
for ( int i = 0; i < 10; i++) {
arr3[i] = arc4random_uniform(20 -10 + 1) +20;
查看复制结果
printf("arr3[%d] = %d\t",i,arr3[i]);
}
18.
2.
定义一个整形数组
包含十个元素,初始值为零,给每个元素付出至,范围
5~15
之间,输出每个元素的,并计算初所有元素的和。以及平均值。
int arr3[10] = {0};
int sum = 0;//接受累加的结果
float ave = 0;//平均值
for (int i = 0; i < 10; i++) {
arr3[i] = arc4random_uniform(15 -5 +1) +5;
printf("arr3[%d] = %d\t",i,arr3[i]);
sum += arr3[i];
}
//循环结束sum里存储就是所有元素的和
ave = sum*1. / 10;//小数也可以这样写:1.或1.0
printf("\n sum = %d,ave = %.2f",sum,ave);
*/
19. 3.复制数组,先定义一个数组,为这个数组付出是指,然后将这个数组中的所有元素复制到另一个数组
//定义数组arr3[5]
int arr3[5] = {12,14,15,16,17};
int arr4[5] = {0};
for (int i = 0; i < 5; i++) {
arr4[i] = arr3[i];//将arr3中的元素复制给arr4
printf("%d\t",arr4[i]);
//定义数组arr3[5]
int arr3[5] = {12,14,15,16,17};
int arr4[5] = {0};
for (int i = 0; i < 5; i++) {
arr4[i] = arr3[i];//将arr3中的元素复制给arr4
printf("%d\t",arr4[i]);
}
20. 4.生成两个数组,每个数组中有十个元素,元素的取值范围20~40之间,数组对应元素相加,相加的结果放到另一个数组中
int arr3[10] = {0};
int arr4[10] = {0};
int arr5[10] = {0};//存放对应元素相加
for (int i = 0; i < 10; i++) {
arr3[i] = arc4random_uniform(40 -20 +1) + 20;
arr4[i] = arc4random_uniform(40 -20 +1) + 20;
arr5[i] = arr3[i] + arr4[i];
printf("%d %d %d\n",arr3[i],arr4[i],arr5[i]);
int arr3[10] = {0};
int arr4[10] = {0};
int arr5[10] = {0};//存放对应元素相加
for (int i = 0; i < 10; i++) {
arr3[i] = arc4random_uniform(40 -20 +1) + 20;
arr4[i] = arc4random_uniform(40 -20 +1) + 20;
arr5[i] = arr3[i] + arr4[i];
printf("%d %d %d\n",arr3[i],arr4[i],arr5[i]);
}
21. 5.定义一个数组,数组中10个元素,每个元素取值范围10~30,求出所有元素中最大值
int arr3[10] = {0};
int max = 0;//
记录最大值
int min = 10000000;//
记录最小值
for (int i = 0; i < 10; i++) {
arr3[i] = arc4random_uniform(30 -10 +1) + 10;
printf("%d\t",arr3[i]);//
打印赋值结果
if (max < arr3[i])
{
max = arr3[i];
}
if (min > arr3[i])
{
min = arr3[i];
}
}
printf("\n max = %d min = %d",max,min);
22.冒泡排序原理:在冒泡排序中每一趟都是拿数组中的第一个元素开始比较和相邻的元素进行比较,一旦发现前面的值比后面的值大,就立刻交换位置,这样就保证每一次都把最大值放到后面。
23.外层循环用于控制比较的趟数,比较的趟数等于元素个数减一
24. 有一个整形数组有十个元素,每个元素的额取之10~30
int arr[10] = {0};
//
维数组赋值
for (int i = 0; i < 10 ; i++) {
arr[i] = arc4random_uniform(30 - 10 + 1) + 10;
printf("%d\t",arr[i]);
}
printf("\n");
//
对数字进行升序
for (int i = 0; i < 10; i ++) {
//
内层控制次数
for (int j = 0; j < 10 - i -1; j++) {
if (arr[j] > arr[j+1]) {
int temp = 0;
temp = arr[j];
arr[j] = arr[j+1];
arr[j + 1] = temp;
}
}
}
//
遍历查看排序的结果
for (int i = 0; i < 10; i++)
{
printf("%d\t",arr[i]);
}
25.字符数组:用来存放字符变量的数组叫做字符数组
char str[10] = {'a','s','d','f','g','h','j','u','i','o'};
printf("%c \t",str[4]);
str[1] ='n';
printf("%c\n",str[1]);
printf("%s \t",str);
字符数组的另一种定义方式
char str1[20] = "s d f g l l";//
直接用字符串赋值
printf("%s\n",str1);//%s
是字符串占位符
只有字符数组才能用%s打印
char str2[] ={ 'c','a','n','g'}; *//
而这样赋值后面没有\0
char str3[] ="cang";//
使用常量字符串赋值系统默认在最后加\0
//
使用%S打印才会停止打印
printf("%s %lu\n",str2,sizeof(str2));
printf("%s %lu\n",str3,sizeof(str3));
char str4[5] = {'a'};//
未初始化的部分系统默认赋值\0 NUT 0
26.字符串数组操作函数
第一函数,strlen(),计算字符串数组的长度,只计算\0前面的字符个数 char str5[] = "luozeluoza";
unsigned long len = strlen(str5);
unsigned long len = strlen(str5);
printf("len = %lu\n",len);
第二函数,strcpy(),字符串拷贝
char
str6[
20
] =
"xiaoze"
;
char str7[ 15 ] = "xiaozema\0liya" ;
strcpy (str6, str7); // 将后面的字符串(字符数组)str7拷贝到前面的字符串str6中,这个拷贝函数碰到\0就停止拷贝,前面的字符串要足够大,至少要和后面的字符串相等
char str7[ 15 ] = "xiaozema\0liya" ;
strcpy (str6, str7); // 将后面的字符串(字符数组)str7拷贝到前面的字符串str6中,这个拷贝函数碰到\0就停止拷贝,前面的字符串要足够大,至少要和后面的字符串相等
printf("%s\n",str6);
第三个函数,strcat(),字符串拼接函数
char str8[30] ="bodou";
char str9[15] ="yejie\0yi";
char str9[15] ="yejie\0yi";
strcat(str8, str9);
将后一个字符串拼接到前一个字符串后,前一个字符串的容量要足够大,碰到\0就停止拼接。
第四个函数,strcmp(),字符串比较函数
char str10[] ="jize\0mingbu";
char str11[] ="jize\0xiaozhu";
int result = strcmp(str10, str11);//字符串的比较,两个字符串对应位置进行减法运算,一旦发现差值不为零,就返回差值;如果返回值为正数,前一个字符串大于后一个字符串;如果返回值为零,两个字符串相等;如果返回值为负数,前一个字符串小于后一个字符串;相同位置都是\0就结束比较
printf("result = %d\n",result);
char str11[] ="jize\0xiaozhu";
int result = strcmp(str10, str11);//字符串的比较,两个字符串对应位置进行减法运算,一旦发现差值不为零,就返回差值;如果返回值为正数,前一个字符串大于后一个字符串;如果返回值为零,两个字符串相等;如果返回值为负数,前一个字符串小于后一个字符串;相同位置都是\0就结束比较
printf("result = %d\n",result);