一、引言
q:为什么要有数组?
a:为了批量存储数据
q:数组的概念?
a:数组是一组数目固定、类型相同、连续存放的有序集合
q:怎么用?
a:?
学了这节课就知道咯
二、数组
1、基本概念
是一组数目固定(避免抢内存)、类型相同(偏移量计算)、连续存放(下标/偏移量)的有序集合
是一种线性的数据结构(线性:从一个数据到另一个数据之间的关系,且为单向的)
数组名代表整个数组的内存空间=sizeof(a)----(sizeof测数组的存储长度),也代表数组的首地址(指针),每一个字节都对应一个地址编号
索引/下标:距首地址下标偏移的元素个数(偏移量)
数组名+数字(n)=第n+1个元素的首地址
地址是自带类型的
2.定义方式
1)、
int arr[100] = {0};
一个数组最大分配空间不要超过1M~2M
2)、
int n = 0 ;
scanf("%d",&n);
int arr[n]; //!该种元素定义数组不能赋初值表
{ }:初值表 使用:
//输入n,再输入n个数
#include <stdio.h>
int main(){
int arr[100] = {0};
int n = 0; //一般定义数组是,会定义一个整型变量用来存储
//你要使用的元素个数
scanf("%d",&n);
for(int i = 0;i < n;i++){
scanf("%d",&arr[i]);
}
int sum = 0;
for(int i = 0;i < n;i++){
sum += arr[i];
}
printf("%d\n",sum);
for(int i = 0;i < n;i++){
printf("%d\t",arr[i]);
}
return 0;
}
三、练习
题目:
1.求数组中最大最小值
2.对数组中所有元素逆序
3.删除指定位置的元素
4.删除指定位置的m个元素
1.求数组中最大最小值
思路:先定义两个变量用来存储最大值最小值 遍历数组 遇到较大值或较小值则记录到对应的变量中
2.对数组中所有元素逆序
思路:更换首尾元素值 从两边往中间走 直至逆序完成
3.删除指定位置的元素
如:输入 5
2 3 4 1 2
3
输出 2 3 4 2
4.删除指定位置的m个元素
如:输入 5
2 3 4 1 2
2 2
输出 2 3 2
#include <stdio.h>
//1.求数组中最大值最小值
int main(){
int n=0;
scanf("%d",&n);
int arr[n];
for(int i = 0 ;i<n;i++){
scanf("%d",arr+i);
}
int max=arr[0];
int min=arr[1];
for(int i=0;i<n;i++){
max=max>arr[i]?max:arr[i];
min=min<arr[i]?min:arr[i];
}
printf("最大值为:%d 最小值为:%d",max,min);
}
//2.对数组中所有元素逆序
int main() {
int n = 0;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", arr + i);
}
//方法一:单指针
for (int i = 0; i <= n / 2; i++) {
int t = arr[i];
arr[i] = arr[n - i - 1];
arr[n - i - 1] = t;
}
//方法二:双指针
for (int i = 0, j = n - 1; i < j; i++, j--) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
}
//3.删除指定位置的元素
int main() {
int n = 0;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", arr + i);
}
int post = 0;
scanf("%d", &post);
for (int i = post + 1; i < n; i++) {
arr[i - 1] = arr[i];
}
n -= 1;
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
}
//4.删除指定位置的m个元素
int main() {
int n = 0;
scanf("%d", &n);
int arr[n];
for (int i = 0; i < n; i++) {
scanf("%d", arr + i);
}
int post = 0;
int num=0;
scanf("%d %d", &post,&num);
for (int i = post + num; i < n; i++) {
arr[i - num] = arr[i];
}
n -= num;
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
}
课后练习:
1.求数组中的元素和及平均值
2.求有序数组的中位数 若个数为偶数个 按中间2元素的平均值输出
3.求指定值的个数
4.数组的拷贝操作(将一个数组中的所有元素赋予另一个数组 输出该数组)
5.数组的拼接 (将一个数组完整的拼接到另一个数组的末尾)
6.数组的比较 (比较两个数组是否完全相等 若是 输出yes 否则输出no)