数组的定义及练习

一、引言

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值