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.1定义一维数组

? ? ? ? 数组就是在内存空间中连续存在的相同类型的变量空间。要定义一维数组,其一般形式为:

类型符 数组名[常量表达式]

例如:int a[10];? ? ? ? 它表示定义了一个整形数组,数组名为a,此数组共有10个整形元素。

说明:

? ? ? ? (1)在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示数组的个数,即数组长度。例如,指定a[10],表示a数组中有10个元素。注意,下表是从0开始的,这是个元素是:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9].特别注意,按上面的定义,不存在数组元素a[10]。

? ? ? ? (2)常量表达式中可以包含常量和符号常量,如"int a[3+5];"是合法的。不能包含变量,如"int a[n];"是不合法的。也就是说,C语言不允许对数组大小做动态定义,即数组大小不依赖于程序运行过程中变量的值。

? ? ? ? 说明:如果在被调用的函数(不包括主函数)中定义数组,其长度可以是变量或非变量表达式。如:

? ? ? ? ? ? ? ? void func(int n)

? ? ? ? ? ? ? ? {

? ? ? ? ? ? ? ? ? ? ? ? int a[2*n];? ? ? ? ? ? ? ? ? ? ? ? //合法,n的值从实参来

? ? ? ? ? ? ? ? ? ? ? ? ...

? ? ? ? ? ? ? ? }

在调用func函数时,形参n从实参得到值。这种情况称为“可变长数组”,允许在每次调用func函数时,n有不同的值。但是在执行函数时,n的值是不变的,数组长度是固定的。

? ? ? ? 如果指定数组为静态(static)存储方式,则不能用“可变长数组”。也就是前面说的:c语言不允许对数组大小作动态定义。

1.2 引用一维数组元素

? ? ? ? 在定义数组并对其中个元素赋值后,就可以引用数组中的元素。应注意:只能引用数组元素而不能一次整体调用全部元素的值。

? ? ? ? 引用数组元素的表示形式为:

数组名[下标]

下标可以是整型变量或整形表达式。例如:

? ? ? ? a[0]=a[5]+a[7]-a[2*3]

注意:定义数组时用到的“数组名[常量表达式]”和引用数组元素时用的“数组名[下标]”形式相同,但含义不同。如:

int a[10];? ? ? ? ? ? ? ? ? ? ? ? //这里表示定义数组时指定数组包含10个元素

t=a[10];? ? ? ? ? ? ? ? ? ? ? ?//这里表示引用a数组中序号为10的元素

1.3一维数组的初始化

? ? ? ? (1)在定义数组时对全部数组元素赋予初值

? ? ? ? (2)可以指给数组中的一部分元素赋值。系统自动给后面元素赋初值为0。

? ? ? ? (3)在对全部数组元素赋初值时,由于数据的个数已经确定,可以不指定数组长度。

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

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

? ? ? ? ? ? ? ? 但是,如果数组长度与赋初值得到个数不相同,方括号中的数组长度就不能省略。

例题:有10个地区的面积,要求对他们按从小到大的顺序排列(冒泡法比较大小

#include<stdio.h>
int main(void)
{
    int a[10];
    int i,j,t;
    for(i=0;i<10;i++)
    {
        scanf("%d",&a[i];
        printf("\n");
     }
    for(j=0;j<9;j++)                    //进行9次循环,实现9趟比较
    {
        for(i=0;i<9-j;i++)              //每一趟中进行9-j次比较
        if(a[j]>a[j+1]                  //相邻两个数比较
        {
            t=a[j];
            a[j]=a[j+1];
            a[j+1]=t;
        }
    }
    for(i=0;i<10;i++)
    printf("%d%,a[i]);
    return 0;
}

? 2.1定义二维数组

二维数组定义的一般形式为:

类型说明符 数组名[]常量表达式[常量表达式];

例如:? ? ? ? float pay[3][6];? ? ? ? ? ? ?

此上定义了一个float型的二维数组,第一维有3个元素,第二维有6个元素。

注意:用矩阵形式(如3行4列形式)表示二维数组,是逻辑上的概念,能形象地表示出行列关系。而在内存中,各元素是连续存放的,不是二维的,是线性的。

2.2怎样引用二维数组的元素

二维数组元素的表示形式为:

数组名[下标][下标]

例如a[2][3]表示a数组中序号为2的行中序号为3的列的元素。下标应是整形表达式,如a[2-1][2*2-1]

数组元素可以出现杂子表达式中,也可以被赋值,如:

b[1][2]=a[2][3]/2

注意:在引用数组元素时,下标值应在已定义的数组大小的范围内。如:

int a[3][4];

...

a[3][4]=3;? ? ? ? ? ? ? ? ? ? ? ? //不存在a[3][4]元素

按照上面的定义,数组a的行下标范围为0~2,列下标的范围为0~3,用a[3][4]表示元素超过了数组的范围

2.3二维数组的初始化

(1)分行给二维数组赋值。如:

int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};

? (2) 可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序给个元素赋初值,如:

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

(3)可以对部分元素赋初值。如:

?int a[3][4]={{1},{5},{9}};

它的作用是只对各行第一列(即序号为0)的元素赋初值,其余元素自动为0。

(4)如果对全部元素都赋初值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。如:

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};

等价于

int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};

3.1定义字符数组

用来存放字符数据的数组是字符数组。字符数组中的一个元素存放一个字符。

定义字符数组的方法和定义数值型数组的方法类似。例如:

char c[3];

c[0]='I';c[1]=' ';c[2]='a';

以上定义了c为字符数组,包含3个元素。由于字符型数组是以整数形式(ASCII)码存放的,因此也可以用整形数组来存放字符数据,合法但是浪费储存空间。

3.2字符数组的初始化

例:char c[3]={'I',' ','a'};

注意:如果在定义字符数组时候不进行初始化,数组中各元素的值是不可预料的。如果初值个数小于数组长度,则其余元素自动定为空字符(即'\0')。?

也可以定义和初始化一个二维字符数组。

3.3引用字符数组中的元素

3.4字符串和字符串结束标志

在C语言中,是将字符串作为字符数组来处理的,字符串中的字符是逐个存放到数组元素中的。

c语言规定了一个“字符串结束标志”以'\0'作为结束标志,在遇到/0字符时,表示字符串结束,把它前面的字符组成一个字符串。

c系统再用字符数组存储字符串常量时会自动加一个'\0'作为结束符。例如"C program"共有9个字符,在数组中它占10个字节,最后一个字节'\0'是由系统加上的。

因此,对字符数组初始化的方法又可以补充一种,即用字符串常量使字符数组初始化。例如:

char c[]={"i am happy"};

也可以直接省略花括号,写成:

char c[]="i am happy";

3.5字符数组的输入输出

字符数组的输入输出有两种方法。

(1)逐个字符输入输出

(2)将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串(string)的输入输出。例如:

char c[]={"China"};

printf("%s",c);

可以用scanf函数输入一个字符串。例如:

scanf("%s",c);

注意:scanf函数中的输入项如果是字符数组名,不要再加地址符&,因为在C语言中数组名代表该数组的起始地址。下面写法不正确:

scanf("%s",&str);? ? ? ? ? ? ? ? ? ? ? ? //str前面不应加&

? ? ? ? ?

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-10 12:12:56  更:2021-11-10 12:15:27 
 
开发: 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年11日历 -2024/11/24 5:17:34-

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