栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言数组知识的个人笔记

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言数组知识的个人笔记

利用数组处理批量数据
  • 数组是一组有序数据的集合,每一个元素都属于同一个数据类型

怎样定义一维数组
  • 一维数组的一般形式为

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

  • 数组名的命名规则和变量名相同,遵循标识符命名规则

  • 在定义数组时需要指定数组中元素的个数,方括号中的常量表达式就是用来表达元素的个数的,即数组长度

  • 常量表达式中可以包括常量和符号变量,不能包含变量,C语言不允许对数组的大小做动态定义

怎样引用一维数组元素
  • 引用数组元素的表示形式为

    数组名[下标]

  • 注意:定义数组时和引用数组时形式相同但是含义同

  • 注意:**数组下标从 0开始,如果用int[10]定义一个数组,则最大下标值为9,不存在数组元素a[10]

  • eg

    #include
    int main()
    {
        int i,a[10];
        for(i=0;i<=9;i++)
            a[i]=i;
        for(i=9;i>=0;i--)
            printf("%d",a[i]);
        printf("n");
        return 0;
    }

一维数组的初始化
  • 为使程序简洁,常在定义数组的同时给各数组元素赋值,这叫做数组的初始化

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

    各数组元素顺序放在一对花括号内,数据间用逗号分开

  • 也可以只给一部分元素赋值

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

    a数组中有十个元素,但是花括号内只提供5个初值,即给前五个赋初值,后5个元素赋初值为0

  • 若数组元素初值全为0

    int a[10]={0}

  • 利用数组排序问题(冒泡法)

    #include
    int main()
    {
        int a[10];
        int i, j, t;
        printf("input 10 numbers:n");
        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[i] > a[i + 1])//相邻两个数比较
                {
                    t = a[i];
                    a[i] = a[i + 1];
                    a[i + 1] = t;
                }
        printf("the sorted numbers:n");
        for (i = 0; i < 10; i++)
            printf("%d", a[i]);
        printf("n");
        return 0;
    }

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

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

  • a[3][4]
        a[0][0] a[0][1] a[0][2] a[0][3]
        a[1][0] a[1][1] a[1][2] a[1][3]
        a[2][0] a[2][1] a[2][2] a[2][3]

  • 在内存中,各元素是连续存放的,不是二维的,是线性的

怎样引用二维数组的元素
  • 数组元素可以出现在表达式中,也可以被赋值

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

  • 引用数组元素时,下标值应在已定义的数组大小的范围内

    int a[3][4];
    a[3][4]=3;//这是错的引用,不存在a[3][4]元素

二维数组的初始化
  • int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
  • int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
  • int a[3][4]={{1},{5},{9}};//只给各行第一列的元素赋初值,其余元素自动为0(部分元素赋初值)
  • eg

    #include
    int main()
    {
        int i, j, row = 0, colum = 0, max;
        int a[3][4] = { {1,2,3,4},{9,8,7,6}, {-10,10,-5,2 } };
        max = a[0][0];
        for (i = 0; i <= 2; i++)
            for(j=0;j<=3;j++)
                if (a[i][j] > max)
                {
                    max = a[i][j];
                    row = i;
                    colum = j;
                }
        
        printf("max=%dnrow=%dncolum=%dn", max, row, colum);
        return 0;
    }

怎么定义字符数组
  • 用来存放字符数据的数组是字符数组,一个元素存放一个字符

    char c[10];
    c[0]='I';c[1]=' ';c[2]='a';c[3]='m';c[4]=' ';c[5]='h';c[6]='a';c[7]='p';c[8]='p';c[9]='y';

  • 由于字符数据是以整形形式存放的(ASCII代码),因此也可以用整形数组来存放字符数据,虽然合法但是会浪费存储空间

字符数组的初始化
  • 最容易理解的方式就是“初始化列表”

    char c[10]={'I',' ','a','m',' ','h','a','p','p','y'};

  • 如果初值个数大于数组长度,会出现语法错误,如果初值个数小于数组长度,其余的元素自动定为空字符

怎么引用字符数组中的元素
#include
int main()
{
    char c[15]={'I',' ','a','m',' ','h','a','p','p','y'};
    int i;
    for(i=0;i<=15;i++)
        printf("%c",c[i]);
    printf("n");
    return 0;
}
字符串和字符数组
  • 在c语言中,是将字符串作为字符数组来处理的

  • c系统再用字符数组存储字符串常量时会自动加一个''作为结束符

  • 有了结束标志''之后,字符数组的长度就显得不那么重要了,程序中往往通过检测''的位置老判定字符串是否结束,而不是数组长度

  • ''代表ASCII码为0的字符,只起一个供辨别的作用

  • char c[]={"I am happy"};
    //可以省略花括号
    char c[]="I am happy";
    //这里不用单个字符作为字符数组的初值,而是用一个字符串作为初值。注意:数组的长度不是10而是11,因为字符串常量的最后由系统加了一个''。
    //在执行printf函数时,每输出一个字符检查一次,看下一个字符是否为'',遇''就停止输出

字符数组的输入输出
  • 逐个字符输入输出,用格式符%c

  • 整个字符串一次输入或输出用%s

  • char c[]={"China"};
    
    printf("%sn",c);

    在内存中数组c的存储情况为

    Chinan

    输出时,遇结束符''就停止输出,输出结果为

    China

  • 用"%s"格式符输出字符串时,printf函数中输出项是字符数组名,而不是数组元素名

    printf("%s",c); ✔

    printf("%s",c[0]); ❌

  • 如果数组长度大于字符串的实际长度,也只输出到遇''结束

  • 可以用scanf函数输入一个字符串

    scanf(“%s”,c);//输入项c是已定义的字符数组名

  • 用一个scanf函数输入多个字符串,则应在输入时以空格分隔

    char str1[5],str2[5],str3[5];
    
    scanf("%s%s%s",str1,str2,str3);

    输入数据:How are you

    str1:How
    str2:are
    str3:you
  • scanf函数中的输入项如果是字符数组名,不要再加地址符&

    scanf("%s",&str); ❌

使用字符串输入函数
  • puts函数---输出字符串的函数

    puts(字符数组)

  • gets函数---输入字符串的函数

    gets(字符数组)

  • 用gets和puts函数只能输出或输入一个字符串,不能写成

    gets(str1,str2)

  • strcat函数---字符串连接函数

    一般形式为:strcat(字符数组1,字符数组2)

    作用是把两个字符数组中的字符串连接起来,把字符串2接到字符串1的后面

    char str1[30]={"People's Republic of"};
    char str2[]={"China"};
    printf("%s",strcat(str1,str2));
    //输出结果是
    People's Republic of China 

  • strcpy和strncpy函数---字符串复制函数

    一般形式为:

    strcpy(字符数组1,字符串2)

    作用是将字符串2复制到字符数组1中去

    char str1[10],str2[]="China";
    strcpy(str1,str2);
    //执行后,str1输出为:China
    • “字符数组1”必须写成数组名形式(如str),“字符串2”可以是字符数组名,也可以是一个字符串常量:

      strcpy(str1,"China");
  • 不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。字符数组名是一个地址常量,它不能改变值

    str="China";❌
    str1=str2  ;  ❌

  • strcmp函数---字符串比较函数

    一般形式:

    strcmp(字符串1,字符串2)

    strcmp(str1,str2);
    strcmp("China","Korea");
    strcmp(str1,"Beijing");
    • 字符串的比较的规则是:将两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到''为止

    • 若str1=str2,则函数值为0

    • 若str1>str2,则函数值大于0

    • 若str1

    • if(strcmp(str1,str2)>0)
          printf("Yes");
  • strlwr函数---测字符串长度的函数

    一般形式:

    strlen(字符数组)

    char str[10]=“China”;
        printf("%d",strlen(str));
    //测出结果不是10,而是5,函数的值为字符串中的实际长度(不包括''在内)
  • strlwr函数---转换为小写的函数

    一般形式:

    strlwr(字符串)

  • strupr函数---转换为大写的函数

    一般形式:

    strupr(字符串)

  • 注意:在使用字符串处理函数时,应在程序文件的开头用

    #include

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/923614.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号