C语言基础知识之(六):数组 |
您所在的位置:网站首页 › pc属于什么类型的 › C语言基础知识之(六):数组 |
一、数组简介 1、数组属于构造类型 2、什么是数组:具有相同数据类型的成员组成的一组数据 3、整型数组、浮点型数组、字符数组、字符串数组。数组前的修饰词表示数组中存储的成员数据类型。 二、定义数组 类型修饰符 数组名[常量表达式] = {值1,值2,值3,...}; 说明: 1、类型修饰符:声明了成员的数据类型 2、[]中的值决定了数组中成员的数量 3、{}中设置数组中的成员
数组定义方式: 方式1, 定义整型数组,存数三个学生的年龄 int ages[3] = {18, 17, 20};
方式2 没有赋初值的成员系统自动设置为0. int b[5] = {4, 5, 6};
方式3 没有赋初值的数组,系统自动默认数组元素全部为0. int c[5] = {0};
方式4 根据初始化的数组元素个数,系统自动推断数组中成员的数量 int d[] = {7, 8, 9,10};
错误方式1 指定的数组成员数量 < 实际初始化成员的数量 int e[3] = {1, 2, 3, 4};
错误方式2 理论上来说此种设置正确的,数组元素个数为1,初始值为1.但是如果在后面的程序中需要赋的值大于数组声明的元素个数,则会出现错误,不建议使用,故归为错误的定义方式。 int f[]= {0};
三、数组元素 1、数组元素:数组中的成员 2、数组下标:数组元素的序号。 注:数组下标从0开始,即第一个元素的下标为0,后面的元素下标一次增加1。
3、数组所占的存储空间 元素个数 * 每个元素所占的字节数,数组的存储空间是连续的。
四、使用数组 1、访问数组元素 a、不能通过数组名来一次性访问所有的数组元素 b、访问数组元素:通过 数组名[下标] 访问某个数组元素 c、下标可以使用常量或变量
2、读取数组元素的值
int age[5] = {12,15, 20, 26};
printf("%d\n",age[0]);// 读取第一个元素中的值 printf("%d\n",age[3]);// 读取第四个元素中的值
3、遍历数组 按照顺序,从第一个元素开始访问,到最后一个元素结束。使用for循环实现数组遍历
for (int i = 0; i< 5; i++) { printf("%d ", age[i]); } printf("\n");
反向遍历数组
for (int i = 4; i>= 0; i--) { // i自减 printf("%d ", age[i]); }
4、修改数组元素的值
int a[] = {1, 2, 3, 4, 5}; a[0] = 19; a[4] = 25; for (int i = 0; i< 5; i++) { printf("%d ", a[i]); }
5、数组越界:使用数组下标时,超出下标范围 int a[10] = {0}; 下标范围 0~9, a[10]即为越界
注意:C语言中,编译器不会检测下标是否越界 6、注意事项: a、区分定义数组和数组元素 b、数组作为一个整体,不能直接参与运算。数组名是一个符号常量,表示数组首元素的地址
例题: 生成 2个数组,每个数组都有 10个元素 ,元素取值范围 20-40之间,数组对应元素相加,放到另外一个数组中。
int a[10] = {0}; int b[10] = {0}; int c[10] = {0};
for (int i = 0; i< 10; i++) {
a[i] = arc4random() % 21 + 20; b[i] = arc4random() % 21 + 20;
c[i]= a[i] + b[i];
printf("%d", a[i]); printf("%d ", b[i]); printf("%d ", c[i]);
printf("\n");//打印一次换行一次 }
五、数组排序 1、排序的规律:升序、降序 2、冒泡排序的基本思路:每次将相邻的两个数进行比较,按照升序或降序的顺序进行交换,直到所有数字的顺序全部正确 3、冒泡排序需要两层循环实现 (1)外层循环 控制排序的趟数 (2)内层循环 控制每趟排序中,比较的次数
冒泡排序举例: int a[5] = {5, 4, 3,2, 1};
// 外层循环 控制比较趟数 for (int i = 0; i< 5-1; i++) { // 内层循环 控制比较的次数 for (int j = 0; j < 5-(i+1); j++) { // 比较相邻的两个数,根据比较规则,实现排序 if (a[j] > a[j+1]) { // j即是数组元素的下标,也控制比较的次数 //a[j] > a[j+1],升序排列; a[j] < a[j+1],降序排列 int temp = a[j]; a[j] = a[j+1]; a[j+1] = temp; } } } //遍历数组 for (int i = 0; i< 5; i++) { printf("%d ", a[i]); }
例题: 获取字符中的最大值,并找出所在的位置
int b[5] = {1, 3, 5,8, 6}; int max = b[0];
int max = 0; 前提是数组中的元素必须全部是正整数 for (int i = 0; i< 5; i++) { if (max < b[i]) { max = b[i]; } } printf("%d", max); //找出最大值的位置 for (int i = 0; i< 5; i++) { if (b[i] == max) { int index = i;//获取最大值所在的下标 printf("%d ", index+1); } }
六、字符数组 char a[5] = {'h','e', 'l', 'l', 'o',}; char b[10] = {'i','p', 'h', 'n', 'o', 'e'}; 1、未设置初始值的元素,默认设置为‘\0’, '\0'是空操作符,不能显示 2、访问字符数组 读取字符数组a中的第一个元素 printf("%c\n",a[0]); 遍历数组b for (int i = 0; i< 10; i++) { printf("%c ", b[i]); }
七、字符串 1、字符串常量 “love” “helloworld” 2、使用%s实现输入输出字符串。 3、系统如何识别字符串。从第一个字符开始读取,知道遇见‘\0’结束。 4、‘\0’是字符串结束标志。 注意:使用字符数组存储字符串 字符数组在内存中是:n个连续的字符 字符串在内存中是:n个连续的字符 char name[] = "hello"; 存储字符串的字符数组,元素个数 = 可见的字符数量+1 输出字符串 printf("%s", name);
八、字符数组和字符串数组关系 1、字符串是一个字符数组 char a[] = "hello"; char b[] = {'h', 'e', 'l', 'l', '0','\0'}; a、b都是字符数组,两个数组中存储的都是字符串“hello”,都可以访问元素
2、字符数组 不一定是 字符串 char a[] = "hello"; char b[] = {'h', 'e', 'l', 'l', 'o'}; // 无'\0'字符 数组a中存储的是一个字符串,数组b中存储的是5个字符
3、如果数组中存储的是字符串,可以输出单个字符,也可以使用%s输出完整的字符串。使用%s输出时,遇到'\0'时即结束输出。 4、访问字符串中的元素 char a[] = "hello"; for (int i = 0; i < 6; i++) { printf("%c ", a[i]); } printf("%s \n", a); 九、处理字符串的函数 1、strlen()测量字符串的长度 测量的是字符串中可见字符的数量,不包含‘\0’。Strlen返回值为unsigned long类型,输出使用%lu。
char name[] = "zhangsan";
printf("%lu\n",strlen(name)); printf("%lu\n",strlen("zhangsan")); 2、strcpy 字符串拷贝 strcpy(字符数组1, 字符数组2);将字符数组2复制到字符数组1中 拷贝字符串的时候需要将字符数组2中的'\0'也拷贝过去。 字符数组1的存储空间 >= 字符数组2的存储空间
char a[10] = {0}; char b[] = "zhangsan";
strcpy(a, b); printf("%s ", a); for (int i = 0; i< 10; i++) { printf("%c ", a[i]); }
3、字符串拼接 strcat(字符数组1, 字符数组2);将字符数组2中的内容拼接到字符数组1的内容后面 字符数组1的存储空间必须足够大 拼接之后,字符串1的'\0'被取消了,只保留字符串2的'\0'
char a[30] ="hello"; char b[] = "world";
strcat(a, b); printf("%s\n",a);
4、字符串比较 strcmp(字符串1, 字符串2) 将两个字符串自左向右,逐个字符进行比较(按ASCII码值进行比较),直到出现不同的字符或者遇到‘\0’ 用字符串1 - 字符串2 字符串1 = 字符串2, strcmp返回结果为0 字符串1 > 字符串2, strcmp返回结果大于0 字符串1 < 字符串2, strcmp返回结果小于0
char m[] ="abc"; char n[] ="abC";
printf("%d\n",strcmp(m, n)); printf("%d\n",strcmp(n, m)); |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |