首页 > 其他分享 >C语言新手小白详细教程(5)数组

C语言新手小白详细教程(5)数组

时间:2024-07-29 09:24:41浏览次数:20  
标签:教程 int C语言 二维 数组 printf 空间 新手 counts

希望文章能够给到初学的你一些启发~ 如果觉得文章对你有帮助的话,点赞 + 关注+ 收藏支持一下笔者吧~

阅读指南:


开篇说明

截止目前,我们学习并使用的变量都属于基本类型,且都是单独使用,但有时,我们会有存储批量数据的需求。如,统计100名同学的身高与体重,按照之前的方法,我们需要定义100个int型变量,分别来存储身高,体重,非常繁琐。因此,我们引入数组来解决这个问题。


一.一维数组的定义与引用


我们要如何理解定义数组呢
其实很简单,就是和计算机要一块连续的空间,并且告诉计算机,这块空间会存储哪种类型的数据。


1.定义一个一维数组

我们首先需要和计算机进行交流,来告诉计算机,我们需要一块多大的连续空间,用来存储哪种类型的数据

结构为:数据类型 数组名[常量表达式];
1.数据类型:就是和计算机申请空间时,需要告诉计算机要存储的数据类型;所以,你申请的这块空间,只可以存储一种类型。
2.数组名:就是你给你自己申请的空间来命名。
3.常量表达式:就是一个确定的数字,例如,1,5,8,10。这些都是确定的数字。
例:

int counts[9];//9个连续的空间,每个类型都是int型,数组的名字叫counts

char sex[2];//2个连续的空间,每个类型都是char型,数组的名字叫sex

2.引用一维数组内的元素

当我们向计算机申请了一片连续的空间之后,我们就要使用这些空间。
结构为:数组名字[下标];
下标:就是数组中连续空间的相对位置,从0开始 依次递减。
例如 我们定义int counts[9];数组大小为9,那么空间的相对位置就是0、1、2、3、4、5、6、7、8;那么使用第一个位置的方法就是 counts[0]、使用第二个位置的方法就是 counts[1],依此类推…
这里需要注意的是:我们只能分别引用单个数组元素,不能一次性调用整个数组。


3.一维数组内的初始化

我们在和计算机申请时,就给让申请的这块空间来放置一些元素
1.定义时给全部空间初步赋值。
int counts[5] = {1,2,3,4,5};
这里需要注意的是:你申请的空间是连续的,那么赋值时也是按照相对位置顺序进行放置,用逗号来隔开,用花括号括起来,最后用分号结尾就可以了。
2.只给一部分值
int counts[5] = {1,2};
这里我们申请了五个空间,但是我们只给两个空间赋值,那么剩余的三个空间会自动赋值0.
3.不指定数组长度
int counts[ ] = {1,2,3,4,5};
如果我们没有指定数组长度,计算机会根据后面花括号中数据的个数自动设置数组长度。所以这里数组counts的长度为5.


4.举个例子

申请一个大小为10的int型数组,名字为counts,10个位置分别赋值1、2、3、4、5、6、7、8、9、10;然后依次输出。

这里我们先使用循环来做这个问题

#include <stdio.h>

int main(void) {
    // 申请一个大小为10的int型数组,名字为counts
    int counts[10];
    int i;
    
    for (int i = 0; i < 10; i++) {// 循环变量i从0到9,共循环10次
        counts[i] = i + 1;
    }
    // 依次输出
    for (int i = 0; i < 10; i++) {
        printf("%d ", counts[i]);
    }
    printf("\n");
}

输出结果是这样子的:
在这里插入图片描述


那么我们如果不使用循环会怎么样呢?

#include <stdio.h>

int main() {
    int counts[ ] = {1,2,3,4,5,6,7,8,9,10};
    printf("%d ", counts[0]);
    printf("%d ", counts[1]);
    printf("%d ", counts[2]);
    printf("%d ", counts[3]);
    printf("%d ", counts[4]);
    printf("%d ", counts[5]);
    printf("%d ", counts[6]);
    printf("%d ", counts[7]);
    printf("%d ", counts[8]);
    printf("%d ", counts[9]);

    return 0;
}

输出结果还是一样 但是代码的美观性却很差了,而且我们使用循环可以更好的拓展数组,如果数组长度变为100,我们只需要改变循环即可,而不需要一个一个修改。并且我们使用循环,可以更简洁直观。效率更好
在这里插入图片描述


二.二维数组的定义与引用

我们经常使用的表格其实就是二维数组,在数学中又被称之为矩阵。


1.定义二维数组

我们需要和计算机进行交流,告诉计算机,你需要一块多大的连续空间,这片空间被分为M行N列,来存储同一类型的数据。

结构为:数据类型 数组名[常量表达式1] [常量表达式2];

  1. 数据类型:和一维数组一样,一个二维数组只可以存储一种类型的数据;
  2. 数组名:为你申请的这块空间起一个名字。
  3. 常量表达式1:二维数组的行数;
    常量表达式2:二维数组的列数;
    所以,整个数组的大小为,行数 * 列数;

2.引用二维数组内的元素

当我们成功向计算机申请了一片连续的空间之后,我们就要开始自主的使用这块空间

结构为:数组名字[行下标] [列下标];
行下标 & 列下标:和日常使用的表格是一样的概念,你要引用的位置在第几行第几列,行和列都要从0开始依次递增。
比如,int table[3] [3];这相当于我们申请了一个类型是int型,大小为3行3列的二维数组。


3.一维数组内的初始化

我们在和计算机申请时,就给让申请的这块空间来放置一些元素
1.分行给二维数组赋初值,例如:
int tables[3] [3] = {{1,2,3},{4,5,6},{7,8,9}};
计算机会将第一个花括号内的数据给第0行,第二个花括号内的数据给第一行,第三个花括号内的数据给第二行。
2.所有数据写在一个花括号内,计算机自动依次赋值,例如:
int tables[3] [3] = {1,2,3,4,5,6,7,8,9};
二维数组是顺序的一块空间,所以计算机会按照你给的数据顺序依次赋值这些空间。
3.对部分元素进行赋值,例如:
(1) int tables[3] [3] = {{1},{4},{7}};
赋值方法如下:三个花括号分别对应 0 1 2 行,再结合一维数组中部分赋值的知识,我们可以知道,支队每一列的第一个元素来进行赋值,其他补零即可。
二维数组形式如下:
在这里插入图片描述

(2)int tables[3] [3] = {{1},{4,0,6},{7}};
在这里插入图片描述
4.只指定其中一个维度,另外一个维度通过赋值让计算机自动计算,例如:
int tables[ ] [3] = {1,2,3,4,5,6,7,8,9};
一共九个数据,第二维度即列是3,那么行自然也是3:


4.举个例子

定义一个3行4列的二维数组A,从键盘输入一个整数T,A数组的值为T乘以当前行下标和列下标之和。转置这个二维数组,转置后的数组为B,分别输出原数组和转置后的数组B。

#include <stdio.h>

int main() {
    int A[3][4];
    int B[4][3];
    int T, i, j;
    // 从键盘输入一个整数T
    printf("请输入一个整数T: ");
    scanf("%d", &T);
    // 计算数组A的值
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 4; j++) {
            A[i][j] = T * (i + j);
        }
    }
    // 输出原数组A
    printf("原数组A:\n");
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 4; j++) {
            printf("%d\t", A[i][j]);
        }
        printf("\n");//每次打印完一行后,换行
    }

    // 转置数组A到数组B
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 4; j++) {
            B[j][i] = A[i][j];
        }
    }
    // 输出转置后的数组B
    printf("转置后的数组B:\n");
    for (i = 0; i < 4; i++) {
        for (j = 0; j < 3; j++) {
            printf("%d\t", B[i][j]);
        }
        printf("\n");
    }
    return 0;
}

输出结果是这样子的:
在这里插入图片描述


意气风发,漫卷疏狂
学习是成长的阶梯,每一次`的积累都将成为未来的助力。我希望通过持续的学习,不断汲取新知识,来改变自己的命运,并将成长的过程记录在我的博客中

如果我的博客能给您带来启发,如果您喜欢我的博客内容,请不吝点赞、评论和收藏,也欢迎您关注我的博客。
您的支持是我前行的动力。听说点赞会增加自己的运气,希望您每一天都能充满活力!

愿您每一天都快乐,也欢迎您常来我的博客。我叫意疏,希望我们一起成长,共同进步。
logo
我是意疏 下次见!

标签:教程,int,C语言,二维,数组,printf,空间,新手,counts
From: https://blog.csdn.net/2302_79751907/article/details/140657670

相关文章

  • 【[代码详细教程+文档+PPT+源码等]SSM框架美妆商城全套|电商购物[包运行成功+永久免费
    一、项目介绍《基于SSM美妆商城项目前后台全套》该项目含有源码、文档、答辩ppt、开题报告、代码详细讲解教程等资料、配套开发软件、软件安装教程、项目发布教程等前端使用技术:JSP,bootstrap、jQuery等后端使用技术:Springmvc、Spring、Mybatis等数据库:Mysql数据库二、......
  • [代码详细教程+文档+PPT+源码等]SpringBoot/SSM/Shiro物流管理系统|快递[包运行成功+
    一、项目介绍《基于SpringBoot/MybatisPlus/Shiro/Bootstrap物流管理系统》该项目含有源码、文档、答辩ppt、代码详细讲解教程等资料、配套开发软件、软件安装教程、项目发布教程等前端使用技术:HTML5,h-ui、JavaScript、jQuery等后端使用技术:SpringBoot/MybatisPlus/Shiro......
  • C语言 -- sizeof和strlen的用法
    C语言--sizeof和strlen的用法1.sizeof和strlen的对比​1.1sizeof​1.2strlen​1.3sizeof和strlen的对比​2.数组和指针笔试题解析2.1一维数组​2.2字符数组​2.3二维数组3.指针运算笔试题解析3.1题目1:3.2题目2​3.3题目3​3.4题目4​3.5题目5​3.6......
  • C语言笔记(第n版):编译器与构建系统
    一、C语言标准与编译器        C编译器是软件开发中至关重要的工具,它的主要作用是将人类可读的C语言源代码转换为计算机能够理解和执行的可执行代码。    (一)C语言标准的制定C语言标准的制定是一个逐步发展和完善的过程。在早期,C语言缺乏统一的标准,这导致......
  • C语言进阶版—扫雷游戏
    文章目录1.打印棋盘2.游戏逻辑3.游戏框架3.1打印菜单3.2do……while实现主逻辑3.3创建棋盘3.4初始化棋盘3.5设置雷3.6排查雷完整游戏代码1.打印棋盘  在正式讲解扫雷游戏之前,我们简单来看一下打印出来的棋盘.  第一步我们要打印每行的框架printf("......
  • C语言中的断言函数assert
    简介assert是C语言中的一个宏,用于在程序运行时进行条件检查,主要用于调试目的。它在<assert.h>头文件中定义,用于验证程序中的假设条件是否成立,如果不成立,程序将打印错误信息并终止执行。特点调试用途:主要用于捕获程序中的逻辑错误或不期望的条件。可移除:通过定义NDEBUG......
  • C语言----设计魔方阵
    设计魔方阵实例说明:        魔方阵就是由自然数组成方阵,方阵的每个元素都不相等,且每行和每列以及主副对角线上的各元素之和都相等。实现过程:    1. 打开VisualC++6.0开发环境,新建一个C源文件,并输入要创建C源文件的名称。    2.引用头文件,代码......
  • C语言----对调最大数与最小数位置
    对调最大数与最小数位置实例说明:        从键盘中输入一组数据,找出这组数据中的最大数与最小数,将最大数与最小数位置互换,并将互换后的数据再次输出。实现过程:打开VisualC++6.0开发环境,新建一个C源文件,并输入要创建C源文件的名称。引用头文件,代码如下:#include<s......
  • c语言(运算符,流程)
    运算符位运算符说明:按位(bit)来进行运算操作的运算符。语法:~&|^<<>>**~:**按位取反说明:单目运算符,数据的每一个bit位取反,也就是二进制数位上的1变0,0变1。举例:unsignedcharret=~0x05;//00000101-->11111010printf("%d\n",~5);//-6**&......
  • c语言自学第二十天----深入探究指针下(补前面的)
    一.二级指针C++中的指针是一个非常重要的概念,而二级指针是指向指针的指针。什么是指针?指针是一个变量,用来存储内存地址。它可以指向其他变量或对象,并通过解引用操作符"*"来访问所指向的值。什么是二级指针?二级指针是指向指针的指针,它存储的是指针的地址。通过二级指......