目录
学习目标:
例如:
- 一周掌握 C基础知识
学习内容:
1. 数组
1.1 概念
数组是用来保存一组相同数据类型的数据的。
数组是一个构造类型。
数组中每个相同的数据类型的数据称之为数组的元素,也叫数组的成员。
定义数组会在内存上分配一块连续的空间来存储数据,不管几维数组,都是连续的。
1.2 一维数组
1.2.1 概念
所谓的一维数组,就是下标只有一个的数组。
1.2.2 格式
数据类型 数组名[下标];
数据类型:既可以是基本类型,也可以是构造类型(数组除外)
数组名:是一个标识符,要符合标识符命名规范
下标:在定义数组时,下标一般是一个常量,用来表示要定义的数组的长度。在其他场下既可以是常量,也可以是变量,也可以是表达式表示操作数组中第几个数据的意思。
例如:
1.2.3 初始化
所谓初始化,就是在给变量申请空间时,顺便给定初始值
初始化时,用一对花括号将元素的值包裹起来,多个值之间使用逗号隔开
对于数组的初始化而言,有三种方式
1.全部初始化:数组的长度为多少,就初始化几个元素的值
int arr[5] = {520, 1415, 666, 999, 1234};
arr[0] arr[1] arr[2] arr[3] arr[4]
2.部分初始化:初始化元素的个数,小于数组的长度,此时,默认从前面元素进行初始化,没有初始化的元素用0补齐
int arr[5] = {520, 1415, 666}; 0 0
arr[0] arr[1] arr[2] arr[3] arr[4]
3.特殊初始化:在定义数组并初始化时,可以不用给定数组的长度,数组的长度由初始化元素个数而定
int arr[ ] = {520, 1415, 666, 999, 1234};
arr[0] arr[1] arr[2] arr[3] arr[4]
例如:
#include<stdio.h>
int main(int argc, const char *argv[])
{
//定义一个长度为5的整形数组
int arr[5]; //数组元素分别是:arr[0]--arr[4]
//定义一个长度为10的字符数组
char brr[10];
//定义一个长度为100的数组,存储小数
double crr[100];
//如果对于数组,没有进行初始化的话,里面的元素值全部都是
//随机值
printf("arr[0] = %d, brr[0] = %c, crr[0] = %lf\n", arr[0], brr[0], crr[0]);//定义数组并初始化
int drr[5] = {1,2,3,7,6}; //全部初始化
int err[5] = {520, 1314, 666}; //部分初始化
int frr[] = {1,3,5,7,9}; //特殊初始化
printf("sizeof(frr) = %ld\n", sizeof(frr)); //20
printf("len of frr = %ld\n", sizeof(frr)/sizeof(frr[0]));return 0;
}
1.3 对数组元素的常规操作
1.3.1 输入输出
所谓对数组进行输入输出,其实就是对任意一个元素进行重复性输入输出,重复性的动作我们使用循环解决。
注意:C语言不允许对除字符数组外的其他数组整体进行输入输出,只能找到数组元素,对单个元素进行操作。
1.3.2 求和值、均值
所谓求和值,就是将所有任意值进行累加,需要定义一个变量存储总和,但是要求,在使用之前,必须清零
所谓均值,就是将数据总和除以总个数,均值不需要循环求
1.3.3 求最值
套路:将数组中的第一个先设置成当前的最值,然后拿着当前的最值与数组中的任意一个元素进行比较,如果比较过程中,不满足条件,则更新最值,直到所有数据都跟最值比较一番后,得出最值。
1.3.4 查找
存在性查找:当数组中出现要查找的数据时,立即结束本次查找
统计性查找:将数组全部元素进行遍历一遍,统计出要查找数据的个数
课堂练习:
#include<stdio.h>
#define MAX 10 //宏定义一个常量int main(int argc, const char *argv[])
{
//定义一个数组,用于存储班级所有成员的成绩
int score[MAX] = {0};//完成对成员成绩的输入
for(int i=0; i<MAX; i++)
{
//找到任意一个元素:score[i]
printf("请输入第%d个学生的成绩:", i+1);
scanf("%d", &score[i]);
}//程序执行至此,表示数组元素全部赋值成功
//输出数组元素
printf("数组中的元素分别是:");
for(int i=0; i<MAX; i++)
{
printf("%d\t", score[i]);
}
putchar(10); //输出一个回车换行//求和值、均值
int sum = 0; //记录总和
double avg = 0; //记录平均值
for(int i=0; i<MAX; i++) //遍历数组中的所有元素
{
sum += score[i]; //讲任意一个数据进行累加
}
//程序执行至此,表示总和已经求出来
avg = 1.0*sum/MAX;
printf("总和为:%d, 平均值为:%.2lf\n", sum, avg);//求最值(以求最大值为例)
int max = 0; //存储数组的中最大值
int maxi = 0; //记录最大值所在的下标//先将数组中的第一个当做最值
max = score[0];
maxi = 0; //记录当前最值所在的下标
for(int i=0; i<MAX; i++)
{
//将当前的最值,与任意一个数据进行比较
if(max < score[i])
{
max = score[i]; //更新最值中的数据
maxi = i; //更新记录最值下标的变量
}
}
//程序执行至此,表示最值以及最值的下标已经求出
printf("当前数组的最大值为:%d, 在数组的第%d个位置\n", max, maxi+1);
//查找
int search = 0;
int i = 0; //用于遍历数组的循环变量
printf("请输入您要查找的值:");
scanf("%d", &search);
//开始遍历数组,实现存在性查找
for(i=0; i<MAX; i++)
{
//判断数据是否是要查找的数据
if(search == score[i])
{
break;
}
}
//判断是否查找到
if(i==MAX)
{
printf("查找失败\n");
}else
{
printf("您要查找的值,存在于数组中\n");
}//遍历数组,完成统计性查找
int count = 0; //计数器
for(int i=0; i<MAX; i++)
{
if(search == score[i])
{
count++; //计数器自增
}
}
//循环结束后,对计数器进行判断
if(count == 0)
{
printf("查找失败\n");
}else
{
printf("查找成功,您要找的值一共出现%d次\n", count);
}
return 0;
}
课外作业:
无。