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位同学的成绩是:%.2lfn",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("%dt",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("%dt",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.lft",powers[i]);
    }
    
    //删除之后进行插入
    printf("请输入要插入的值:n");
    scanf("%lf",&insertPower);
    powers[count] = insertPower;
    //插入操作完毕后数组总长度要+1
    count++;
    printf("插入后的结果为:n");
    for(i = 0; i < count; i++)
    {
        printf("%0.lft",powers[i]);
    }
    //想让战力值有序操作可以进行冒泡排序
}

三、二维数组

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/fanzy1103/p/12426452.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程

3766 8.82元 9.8元 9折