IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言初步学习之数组 -> 正文阅读

[C++知识库]C语言初步学习之数组

目录

一:数组的基础知识

? ? ? ? #什么是数组

? ? ? ? ? ##数组的概念定义

二:数组的应用

? ? ? ? #数组的初始化(赋值)

? ? ? ? ##数组的相关应用

? ? ? ? 1.数组例子:统计个数

? ? ? ? 2.判断数组中是否有某数,并找出其在数组中位置

三:对数组的补充(拓展)

? ? ? ? #二维数

? ? ? ? #函数对字符数组的处理

? ? ??


一:

1 什么是数组。

? ? ? ? 在C语言中,我们通常会输出某个或者某些东西,可以是数字,可以是字符,也可以是汉字。若是输出一两个较少量的话用printf()函数可以很好的解决,但若是输出十个甚至二十上百个数字,很明显printf()函数在这里显得不够看了。什么?有人说只相信眼见为实!!!那好,我们就用printf()函数输出一个3x3的整数矩形吧。

#include<stdio.h>
int main()
{
    int a1 = 1, a2 = 2, a3 = 3;
    int b1 = 4, b2 = 5, b3 = 6;
    int c1 = 7, c2 = 8, c3 = 9;
    printf("%d %d %d/n",a1 a2 a3);
    printf("%d %d %d/n",b1 b2 b3);
    printf("%d %d %d/n",c1 c2 c3);
    return 0; 
}

? ?输出结果:1 2 3

? ? ? ? ? ? ? ? ? ? ?4 5 6

? ? ? ? ? ? ? ? ? ? ?7 8 9

? ? ? 若使用printf()的话就单单一个3x3的整数矩阵就显得略为复杂。但是对于数组a[ ]来说,一句话来形容“just a piece of cake”甚至我们还能上点难度来个4x4的矩阵。请看下图。

#include<stdio.h>
int main()
{
    int a[] = {1 ,2 , 3};
    int b[] = {4 ,5 , 6};
    int c[] = {7 ,8 , 9};
    int d[] = {10 ,11 ,12};
    printf("%d/n",a[]);
    printf("%d/n",b[]);
    printf("%d/n",c[]);
    printf("%d/n",d[]);
    return 0;
}

结果如下

1 2 3

4 5 6

7 8 9

10 11 2

如上面代码块显示的,C语言中数组一般就用a(还可以是别的)加上一个[ ]组成。

2 数组的概念与定义

C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。在我们定义一系列相同类型的变量时往往可以使用数组,但需要注意的是,数组中所有变量类型相同,而不同类型的变量是不可以存放于同一个数组当中。但是可以定义不同类型的数组来存放不同类型的变量。

int a[ ] = {1, 2, 3, 4}

char b[ ] = {q, w, e, r}

float c [ ] = {1.1, 2.2 ,3.3, 4.4}

我们像这样处理就可以定义不同的数组来储存不同类型的变量。

在我们定义概念时除了对数组类型进行定义以外,还可以对数组中变量的长度限定。

int a[3] = {1,2,3}//定义一个长度为3的整数型数组

char b[3] = {a,b,c}//定义一个长度为3的字符型数组

float c[3] = {1.1,2.2,3.3}//定义一个长度为3的浮点型数组

上面的“3”称为数组的下标,数组中的元素个数不能超过下标值

二.

1.数组的赋值

除了以上较为普遍的数组赋值以外,在给数组赋值时我们同样需要注意一下两点

1.在给数组赋值时,只给数组中前几个元素赋值的情况

int a[7] = {1,2,3,4}

输出结果为:1,2,3,4,0,0,0

在上面对数组进行赋值时,我们只给数组中前4个元素进行赋值,而后三个未进行赋值,所以在输出时,编译器将后面未进行赋值的三个元素全部赋值为0.

2.在给数组定义时,只给第n个元素赋值的情况

int a[10] = {[0]=1,[3]=5,[7]=6}

输出结果:1,0,5,0,0,0,6,0,0,0

其实和第一种情况差不多,对未赋值的元素,在输出时全部赋值为0.

但我们需要注意的是,在上述数组中,元素是以a[0]开始的,到a[9]结束,正好十个元素,0到9就为该数组的下标,a[0]到a[9]就为该数组的各个元素

2.数组的的相关应用

2.1数组例子:统计个数

在定义数组并给数组赋值时,难免会遇到数组元素数量巨大的情况,若这时我们要想知道数组中所有元素的个数总不可能一个一个去数吧。在处理这样的问题时,我们可以使用sizeof()来解决,但据我们所知,sizeof()只能求出所有元素所占内存的大小,跟求出元素个数不沾边啊!!!这里我们便要引出数组元素储存的原理了,数组在存储元素时,必定会分配出一定的内存来存储这些数据,但是,各个元素存储所占内存的大小是相等的,我们只需再求出sizeof(a[0])的大小。利用sizeof(a)/sizeof(a[0]),其结果便是该数组中所含元素的个数。

int a[] = {1,5,6,7,10,16,48,15,76,10,19,75,46,42,56}//数组a中共15个元素

printf("%d/n",sizeof(a));//输出数组中所有元素所占内存大小

int n?= sizeof(a)/sizeof(a[0]);//a数组所有元素所占内存除以第一个元素所占内存

printf("%d",n);//输出数组中元素个数

输出结果:60

? ? ? ? ? ? ? ? ? 4

可知数组中所有元素共占60个字节大小,而其中每个元素被平均分配了4个字节大小的内存,这样一计算便很快速地得出该数组的元素个数。(主要想要引出的内容)

2.2.判断数组中是否有某数,并找出其在数组中位置

这里我们就举个例子来给大家展示吧。

#include<stdio.h>
int main()
{
    int i,n,index = -1;//因为从a[0]开始,所以index初始赋值为-1
    int a[10] = {1,5,9,8,10,15,76,100,65,80};
    scanf("&d",n);
    for(i; i<10; i++)
    {
        if(a[i] == n)//判断数组中是否有n所对应数值
        {
            index = i;
        }
        break;//跳出循环
    }
    if(index<0)//a数组中没有n所对应数值
    {
        printf("%d is not in this array",n);
    }
    else
    {
        printf("%d is in this array,the index is %d",n,i);
    }
    return 0;
}

输入:8

输出:3

三:数组的补充(拓展)

1.二维数组

二维数组在形式上与一维数组大同小异,二维数组的组成为a[][](数组名+两个方括号)

例如a[3][3],我们可以通俗地理解为一个三列三行的矩阵。注意,a[3,3]这样的方式表达二维数组是错误的。

在我们对二维数组进行初始化时有一些点需要我们注意

int a[][5]={

? ? ? ? ? ? ? ? {1,2,3,4,5}

? ? ? ? ? ? ? ? {6,7,8,9,10}}

二维数组的初始化时,列数是必须给出的,行数则不用,可以由编译器自己判断,每一行的数据都用{}包起来。若没有赋值的元素则统一赋值为0.

2.函数对字符数组的处理

C语言提供了丰富的字符串处理函数,可以对字符串进行输入、输出、合并、修改、比较、转换、复制、搜索等操作,使用这些现成的函数可以大大减轻我们的编程负担。

string.h是一个专门用来处理字符串的头文件

在引入该头文件后可以使用一些函数来处理字符数组。例如字符串连接函数 strcat(),字符串复制函数 strcpy(),字符串比较函数 strcmp(),

strcat 是 string catenate 的缩写,意思是把两个字符串拼接在一起,语法格式为:

strcat(arrayName1, arrayName2);

strcat() 将把 arrayName2 连接到 arrayName1 后面,并删除原来 arrayName1 最后的结束标志'\0'。这意味着,arrayName1 必须足够长,要能够同时容纳 arrayName1 和 arrayName2,否则会越界(超出范围)。

#include<stdio.h>
#include<string.h>
int main()
{
    char s1[100]="learnnig c ";
    char s2[100];
    gets(s2);
    strcat(s1,s2);
    puts(s1);
    return 0;
}

输入:is not happy at all

输出:learnning c is not happy at all

strcpy 是 string copy 的缩写,意思是字符串复制,也即将字符串从一个地方复制到另外一个地方,语法格式为:

strcpy(arrayName1, arrayName2);

?

#include <stdio.h>
#include <string.h>
int main(){
    char str1[50] = "学习c不是真正的快乐。";
    char str2[50] = "learnning c  is not the true happiness.";
    strcpy(str1, str2);
    printf("%s\n", str1);
    return 0;
}

输出:learnning c ?is not the true happiness

注意,将str2复制到str1中,需要保证str1有足够的空间存储str2

strcmp 是 string compare 的缩写,意思是字符串比较,语法格式为:

strcmp(arrayName1, arrayName2);

字符本身没有大小之分,strcmp() 以各个字符对应的 ASCII 码值进行比较。strcmp() 从两个字符串的第 0 个字符开始比较,如果它们相等,就继续比较下一个字符,直到遇见不同的字符,或者到字符串的末尾。

返回值:若 arrayName1 和 arrayName2 相同,则返回0;若 arrayName1 大于 arrayName2,则返回大于 0 的值;若 arrayName1 小于 arrayName2,则返回小于0 的值。这一个大家可以自己下去试一试。在这里我也不做过多的展示了(主要足够ASCII码表转换起来我觉得太麻烦)

感谢大家支持,如有不足也请指出
?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-11-05 00:06:35  更:2022-11-05 00:08:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 2:49:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码