C语言---数组及其常用算法

一.初始数组
1.数组是一个变量,由数据类型相同的一组元素组成。
2.变量:内存中的一块空间
数组:内存中的一串连续的空间
3.数组的结构和基本元素:(1)标识符:数组的名称,用于区分不同的数组。数组只有一个名称。
(2)数组元素:向数组中存放的数据。数组中的每个元素都可以通过下标来访问。
(3)元素下标:对数组元素进行编号。它标明了元素在数组中的位置,从0开始。
(4)元素类型:数组元素的数据类型。
注:数组长度固定不变,避免数组越界。
二.初始一维数组
1.实例:学生单门学科的成绩;某类别商品的单价;某人N个月的工资。
2.语法:datatype arrayName[size];
如int nums[25];
char array_of_name[30];
double curr_salary[35];
#define N 50; //使用了宏定义,将50赋给N,但此时N没有数据类型,在具体使用时才换成相应类型。
int emp_id[N];

const int SIZE = 100; //已经有固定类型,表示常量。
double prices[SIZE];
3.初始化一维数组:
//正确:后面的元素个数与声明的一致。
int years[6]={11,12,13,14,15,16};
//正确:后面5个元素未初始化,默认值为0
int months[12]={1,3,5,7,9,13,15};
//正确:元素个数为2
int days[]={1,15};
//错误:未知元素个数!
int array[]={};
4.动态地从键盘录入信息并赋值:

#include <stdio.h>
 #include <stdlib.h>
 #define N 5

 int main()
 {
     //动态录入
     double score[N];
     int i;  //循环变量
     //使用循环操作数组时,要注意:一个循环尽量只做一件事
     for(i=0;i<N;i++)
     {
         printf("请输入第%d位同学的成绩:",i+1);
         scanf("%lf",&score[i]);
     }
     //下面的循环用来打印数组元素
     for(i=0;i<N;i++)
     {
         printf("第%d位同学的成绩是:%.2lf\n",i+1,score[i]);
     }
     return 0;
 }

三.数组排序
1.循环录入5个整型数字,进行降序排列后输出结果
方案:使用冒泡排序(基础原理:遍历和交换)

#include <stdio.h>
#include <stdlib.h>
#define N 5  //宏定义,并不是必须的

int 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-i-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]);
    }
    return 0;
}

四.数组元素的删除与插入
1.删除的逻辑:(1)查找要删除数字的下标
(2)从下标开始,后面一个覆盖前面一个数字
(3)数组的总长度-1
五.二维数组
1.实例:学生多门学科的成绩;玩家的背包数据;游戏角色行走动画
2.语法:datatype name[rowSize][colSize];
double score[5][3];
int animate[4][4];
3.二维数组的动态赋值

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int i,j;
    //使用二维数组表示学生的成绩表
    //四个学生的三门课成绩---四行三列
    double scores[4][3]  ={
        {34,45,23,56},
        {54,23,75,32},
        {54,22,34,87},
        {34,23,53,65}
    };
    printf("语文\t数学\t英语\n");
    //使用循环打印每个数组元素
    for(i=0;i<4;i++)  //外层循环控制有几个学生
    {
       for(j=0;j<3;j++)
       {
           printf("%-8.2lf",scores[i][j]);
       }
       printf("\n");
    }
    return 0;
}
六.用例
1.使用数组定义游戏参数:
char name[8];  //用来存放用户输入的姓名
//姓名数组,最多容纳6个字符串,每个字符串的最大长度为8个字符(英文)
char names[6][8]={"西施","貂蝉","王昭君","杨玉环","赵飞燕"};



  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值