欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

第五部分、数组

程序员文章站 2022-03-21 16:26:02
2020年1月21日C语言数组学习 一、数组 1.数组的定义 数组是一个变量,由 数据类型相同 的的一组元素组成 | 变量 | 内存中的一块空间 | | | | | 数组 | 内存中一串连续的空间 | 2.数据的结构和基本要素 | 标识符 | 数组的名称,用于区分不同的数组 | | | | | 数组 ......

2020年1月21日c语言数组学习

一、数组

1.数组的定义

数组是一个变量,由数据类型相同的的一组元素组成

变量 内存中的一块空间
数组 内存中一串连续的空间

2.数据的结构和基本要素

标识符 数组的名称,用于区分不同的数组
数组元素 向数组中存放的数据
元素下标 对数组元素进行编号
元素类型 数组元素的数据类型

数组中只有一个名称,即标识符(用来表示数组的变量名)

元素下标标明了元素在数组中的位置,从0开始

数组中的每个元素都可以通过下标来访问

数组长度固定不变,避免数组越界

二、一维数组

语法:datatype arrayname[size]

1.初始化一维数组

(1)//正确:后面的元素个数与声明一致

int years[3]={2012,2013,2014}

(2)//正确:后面一个元素未初始化,默认值为0

int years[3]={2012,2013}

(3)//正确:元素个数为2

int years[]={2012,2013,2014}

(4)//错误:未知元素个数

int years[]={}

2.一维数组的动态赋值

#include <stdio.h>
#define n 5//宏定义,在程序中n只能等于5

void main()
{
    //动态录入
    double score[n];
    int i;//循环变量
    for (i = 0; i <  n; i++) {
        printf("请输入第%d位同学的成绩:",i+1);//i从0开始
        scanf("%lf",&score[i]);
    }
    //打印数组元素
    for (i = 0; i < n; i++) {
        printf("第%d位同学的成绩是:%.2lf\n",i+1,score[i]);
    }
}

3.一个数列:8,4,2,1,23,344,12

(1)循环输出队列的值

(2)求数列中所有数值的和及平均值

(3)猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含次数

#include <stdio.h>

void main()
{
    int i;//循环变量
    int sum;//定义和
    double avg;//定义均值
    int search;//定义需要查找的数字

    //一个数列:8,4,2,1,23,344,12
    int nums[7]={8,4,2,1,23,344,12};

    //循环输出队列的值
    printf("该数列的值为:\n");
    for(i = 0; i < 7; i++){
        printf("%d\t",nums[i]);
    }

    //求数列中所有数值的和及平均值
    for(i = 0; i < 7; i++){
        sum += nums[i];
    }
    avg = sum / 7.0;
    printf("\n该数列的和为:%d,均值为:%.2lf",sum,avg);

    //猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含次数
    printf("\n请输入要查找的数字:");
    scanf("%d",&search);
    for (i = 0; i < 7; i++) {
        if(search ==nums [i])
        {
            printf("找到了相同的元素!");
            break;
        }
    }
    if(i == 7){
        printf("没有这个数哦!");
    }
}

4.循环输入5个整型数字,进行降序排列后输出结果(冒泡排序)(重点)

冒泡排序的基础原理:遍历和交换

(1)需要比较多轮(数组长度 - 1)轮

(2)每一轮比较的次数比上一轮 - 1次;第一轮比较(数组长度 - 1)次

#include <stdio.h>
#define n 5

void main()
{
    int i, j;//定义循环变量
    int temp; //用于交换的临时变量
    int nums[n] = {16, 25, 9, 90, 23};
    //外层循环控制轮数
    for (i = 0; i < n - 1; i++)
    {
        //内层循环控制每轮的比较次数
        for (j = 0; j < n - 1; j++)
        {
            if(nums[j] < nums[j + 1])
            {
                temp = nums[j];
                nums[j] = nums[j + 1];
                nums[j + 1] = temp;
            }
        }
    }
    printf("排序之后的顺序为:\n");
    for (i = 0; i < n ; i++) {
        printf("%d\t",nums[i]);

    }
}
拓展:初始无序,逆序输出

第一个元素与最后一个元素交换;第二个元素与倒数第二个元素交换......

for (i = 0; i < n ; i++)
{
    temp = nums[j];
    nums[j] = nums[n - i - 1];
    nums[n - i - 1] = temp;
}

5.数组元素的删除和插入

第五部分、数组

删除的逻辑:

  • 查找要删除数字的下标
  • 从下标开始,后面一个覆盖前面一个数字
  • 数组的总长度-1
#include <stdio.h>
#define n 5 //常量的值不能改变,因此采用变量方式count

void main()
{
    int count = 5;//表示数组元素的个数
    double powers[] = {42322, 45771, 40907, 41234, 40767};
    double deletepower;//用户要删除的战力值
    int deleteindex = -1;//要删除战力值的下标,给一个不可能的初值,为了判断是否找到
    double insertpower;//插入的战力值
    int i;//循环变量

    printf("请输入要删除的战力值:");
    scanf("%lf",&deletepower);

    for(i = 0; i < count; i++)
    {
        if(deletepower == powers[i])
        {
            deleteindex = i;//记录下当前的下标
            break;//找到了要删除的战力值,直接跳出循环
        }
    }

    //根据判断是否找到,执行后续的操作
    if(-1 == deleteindex)
    {
        printf("很遗憾,没有找到该战力值!\n");
    } else{
        for(i = deleteindex; i < count - 1; i++)
        {
            powers[i] = powers[i + 1];
        }
        count--;//数组总长度-1
    }
    printf("删除后的结果为:\n");
    for(i = 0; i < count; i++)
    {
        printf("%0.lf\t",powers[i]);
    }
    
    //删除之后进行插入
    printf("请输入要插入的值:\n");
    scanf("%lf",&insertpower);
    powers[count] = insertpower;
    //插入操作完毕后数组总长度要+1
    count++;
    printf("插入后的结果为:\n");
    for(i = 0; i < count; i++)
    {
        printf("%0.lf\t",powers[i]);
    }
    //想让战力值有序操作可以进行冒泡排序
}

三、二维数组