精华内容
下载资源
问答
  • C语言总结第七章、数组一维数组一维数组的定义一维数组的引用一维数组的初始化程序举例二维数组及多维数组二维数组的定义二维数组元素的引用二维数组元素的初始化程序举例字符数组字符串字符数组 第七章、数组 ...

    第七章、数组

    数组是构造数据类型之一

    • 数组: 有序数据的集合,用数组名标识
    • 元素: 属同一数据类型,用数组名和下标确定

    一维数组

    一维数组的定义

    定义方式:
    在这里插入图片描述
    例: int a[6]
    在这里插入图片描述

    一维数组的引用

    1、数组必须先定义,后使用。
    2、只能逐个引用数组元素,不能一次引用整个数组。
    3、数组元素表示形式: 数组名[下标] ,下标可以是常量或整型表达式

    一维数组的初始化

    初始化方式:
    在这里插入图片描述

    说明:
    1、数组不初始化,其元素值为随机数。
    2、对static数组元素不赋初值,系统会自动赋以0值。
    在这里插入图片描述
    3、只给部分数组元素赋初值。
    在这里插入图片描述
    4、当全部数组元素赋初值时,可不指定数组长度。
    在这里插入图片描述

    程序举例

    例1: 读10个整数存入数组,找出其中最大值和最小值
    在这里插入图片描述

    /*示例1*/
    #include <stdio.h>
    #define SIZE 10
    main()
    {   int x[SIZE],i,max,min;
        printf("Enter 10 integers:\n");
        for(i=0;i<SIZE;i++)
        {   printf("%d:",i+1);
    	scanf("%d",&x[i]);
        }
        max=min=x[0];
        for(i=1;i<SIZE;i++)
        {  if(max<x[i])  max=x[i];
           if(min>x[i])  min=x[i];
        }
        printf("Maximum value is %d\n",max);
        printf("Minimum value is %d\n",min);
    }
    

    例2: 用数组求Fibonacci数列前20个数
    在这里插入图片描述

    /*示例2*/
    #include <stdio.h>
    main()
    {   int i;
         int f[20]={1,1};
        for(i=2;i<20;i++)
           f[i]=f[i-2]+f[i-1];
        for(i=0;i<20;i++)
        {   if(i%5==0)  printf("\n");
             printf("%12d",f[i]);
        }
    }
    

    例3: 用冒泡法对10个数排序
    在这里插入图片描述
    在这里插入图片描述

    /*示例3*/
    #include <stdio.h>
    main()
    {   int a[11],i,j,t;
        printf("Input 10 numbers:\n");
        for(i=1;i<11;i++)
           scanf("%d",&a[i]);
        printf("\n");
        for(j=1;j<=9;j++)
           for(i=1;i<=10-j;i++)
              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=1;i<11;i++)
    	printf("%d ",a[i]);
    }
    

    例4: 用简单选择法对10个数排序

    在这里插入图片描述

    在这里插入图片描述

     /*示例4*/
    #include <stdio.h>  
    main()
    {   int a[11],i,j,k,x;
        printf("Input 10 numbers:\n");
        for(i=1;i<11;i++)
           scanf("%d",&a[i]);
        printf("\n");
       for(i=1;i<10;i++)
       {  k=i;
          for(j=i+1;j<=10;j++)
                if(a[j]<a[k])  k=j;
          if(i!=k)
          {  x=a[i]; a[i]=a[k]; a[k]=x;}
       }
        printf("The sorted numbers:\n");
        for(i=1;i<11;i++)
    	printf("%d ",a[i]);
    }
    

    二维数组及多维数组

    二维数组的定义

    定义方式: 
    在这里插入图片描述
    在这里插入图片描述
    数组元素的存放顺序
    1、原因: 内存是一维的
    2、二维数组: 按行序优先
    3、多维数组: 最右下标变化最快

    在这里插入图片描述
    数组a[m][n],m行n列,共m*n个元素
    在这里插入图片描述

    这些元素占用m*n个单元,每个单元的大小取决于
    元素的类型。

    任意元素a[i][j]在数组中的位置计算公式为:

    i×n+j (从0开始)

    a——数组的起始地址;a[0]——0行0列元素的地址。

    二维数组元素的引用

    形式: 数组名[下标][下标]

    二维数组元素的初始化

    1、分行初始化
    2、按元素排列顺序初始化

    程序举例

    例1:将二维数组行列元素互换,存到另一个数组中
    在这里插入图片描述

    /*示例1*/
    #include <stdio.h>
    main()
    {   int a[2][3]={{1,2,3},{4,5,6}};
         int b[3][2],i,j;
        printf("array a:\n");
        for(i=0;i<=1;i++)
        {   for(j=0;j<=2;j++)
    	{   printf("%5d",a[i][j]);
    	    b[j][i]=a[i][j];
    	}
    	printf("\n");
        }    
        printf("array b:\n");
        for(i=0;i<=2;i++)
        {   for(j=0;j<=1;j++)
    	   printf("%5d",b[i][j]);
             printf("\n");
        }
    }
    

    例2:求二维数组中最大元素值及其行列号
    在这里插入图片描述

    /*示例2*/
    #include <stdio.h>
    main()
    {  int a[3][4]={{1,2,3,4},
                            {9,8,7,6},
                            {-10,10,-5,2}};
        int i,j,row=0,colum=0,max;
        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=%d,row=%d,\colum=%d\n",max,row,colum);
    }
    

    例3:分别求n阶方阵两条对角线上的元素之和

    /*示例3*/
    #define N 3
    main()
    {   int i,j,a[N][N];
    int sum1=0,sum2=0;
    for(i=0;i<N;i++)
      for(j=0;j<N;j++)
        scanf(%d”,&a[i][j]);
    for(i=0;i<N;i++)
      for(j=0;j<N;j++)
        if(i==j) sum1+=a[i][j];
    for(i=0;i<N;i++)
      for(j=N-1;j>=0;j--)
        if((i+j)==N-1) sum2+=a[i][j];
    printf(“sum1=%d,sum2=%d\n”,sum1,sum2);
    }
    

    字符数组和字符串

    字符数组

    定义 : 每个元素存一个字符,主要用来对字符串操作。
    字符数组的初始化:

    1、逐个字符赋值
    2、用字符串常量

    字符数组的引用:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    字符串

    字符串及其结束标志

    (1)、无字符串变量,用字符数组处理字符串。
    (2)、字符串结束标志:‘\0’。

    在这里插入图片描述
    字符串的输入输出
    输入:

    • 用scanf函数
      (1).输入单个字符:%c 需用循环语句
      (2).输入字符串:%s scanf(“%s”,str);
    • 用gets函数:gets(str);

    输出:

    • 用printf函数
      (1).输出单个字符:%c 需用循环语句
      (2).输出字符串:%s printf(“%s”,str);
    • 用puts函数:puts(str);

    在这里插入图片描述

    常用的字符串处理函数: 加粗样式包含在头文件 string.h

    字符串输出函数puts

    格式: puts(字符数组)
    功能: 向显示器输出字符串(输出完,换行)
    说明: 字符数组必须以‘\0’结束

    字符串输入函数gets

    格式: gets(字符数组)
    功能: 从键盘输入一以回车结束的字符串放入字符数组中,并自动加‘\0’
    说明: 输入串长度应小于字符数组维数

    字符串连接函数strcat

    格式: strcat(字符数组1,字符数组2)
    功能: 把字符数组2连到字符数组1后面
    返值: 返回字符数组1的首地址
    说明:
    1、字符数组1必须足够大
    2、连接前,两串均以‘\0’结束;连接后,串1的‘\0’取消, 新串最后加‘\0’

    字符串拷贝函数strcpy

    格式: strcpy(字符数组1,字符串2)
    功能: 将字符串2,拷贝到字符数组1中去
    返值: 返回字符数组1的首地址
    说明:
    1、字符数组1必须足够大
    2、拷贝时‘\0’一同拷贝
    3、不能使用赋值语句为一个字符数组赋值
    在这里插入图片描述

    字符串比较函数strcmp

    格式: strcmp(字符串1,字符串2)
    功能: 比较两个字符串
    比较规则: 对两串从左向右逐个字符比较(ASCII码),直到遇到不同字符或‘\0’为止
    返值: 返回int型整数,
    a. 若字符串1< 字符串2, 返回负整数
    b. 若字符串1> 字符串2, 返回正整数
    c. 若字符串1== 字符串2, 返回零
    说明: 字符串比较不能用“==”,必须用strcmp

    字符串比较函数strcmp

    字符串长度函数strlen
    格式:strlen(字符数组)
    功能:计算字符串长度
    返值:返回字符串实际长度,不包括‘\0’在内
    在这里插入图片描述

    展开全文
  • 一维字符数组存放字符串

    千次阅读 2020-02-13 17:21:24
    一、用一维字符数组存放字符串 1、C语言对字符串的约定 字符串是借助于字符型一维数组来存放的,并规定以字符‘\0’作为字符串的结束标志,’\0’作为标志占用存储空间,但不计入串的实际常量 2、C语言中表示字符串...

    一、用一维字符数组存放字符串
    1、C语言对字符串的约定
    字符串是借助于字符型一维数组来存放的,并规定以字符‘\0’作为字符串的结束标志,’\0’作为标志占用存储空间,但不计入串的实际常量
    2、C语言中表示字符串常量的约定
    虽然c语言中没有字符串数据类型,但却允许有‘字符窜常量,字符串常量是由双引号括起来的,在表示字符串常量时不需要人为在其末尾加‘\0’.
    3、C语言字符串常量给出的是地址值
    每个字符串在内存中占有一段连续的存储空间,这些连续的存储空间实际上就是字符型一维数组,不同的字符串在内存中占有不同的存储空间,也就是在C语言中,字符串常量被隐含处理成为以‘\0’结尾的无名字符型一维数组。
    若有一下定义:
    char *sp,s[10];
    则以下赋值是不合法的
    s=“hello”;
    因为s相当于一维数组的首地址,是一个不可重新赋值的数组名,因此赋值不合法。
    而以下赋值是合法的
    Sp=“hello”;
    这个语句并不是把字符串的内容收入Sp中而只是把字符串中在所占的首地址赋予了char类型的指针变量Sp,指针变量Sp指向该字符串.
    4、字符数组与字符串的区别
    字符数组的每个元素可存放一个字符,但它并不限定最后一个字符应该是什么,而字符串则要求最后一个必须是‘\0’作为结束标识,在字符数组中可以存放字符串,但不能通过赋值语句将字符串常量或其他字符数组中的字符串直接赋值给字符串常量

    二、通过赋初值的方式给一维字符数组赋字符串
    1、用给一般数组赋初值的相同方式给一维字符组赋初值
    char str[10]={‘s’,‘t’,‘r’,‘i’,‘i’,‘n’,‘j’,’\0’}
    字符数组str共有10个元素,但str作为字符串,其长度为7,虽然最后一个字符是‘\0’,但它并不是结束标识因为系统会自动的给其分配一个结束标识。
    2、在赋值时直接赋字符串常量
    char str[10]={“string”};
    习惯上省略花括号
    char str[10]=“string!”(这种方式会自动给字符串的末尾添加结束标识,但需要注意的是字符串数组的长度一定要比赋值的长度多一个)

    三、在C程序执行中给一维字符数组赋字符串
    1、不可以用赋值语句给字符数组整体赋一串字符
    当做字符串变量是用的字符数组,不能由赋值语句直接赋字符串常量
    如:
    char mark[10];
    mark=“C Program”;
    以上赋值时不允许的
    再如:
    char str[10]=“computer”,str[10];
    Str2=str1;
    2、给数组元素逐个赋值赋值,最后为加入串结束标志

    展开全文
  • 维字符数组字符串数组

    千次阅读 2019-07-22 10:46:00
    首先,对于一维字符数组:char a[N]={}; 其实最后代表的也是一个字符串 字符数组的初始化有两种方式: 但其实使用字符常量初始化数组的时候,可以不加上这个 '\0',而使用字符串初始化字符数组的时候,是自动...

    首先,对于一维字符数组:char a[N]={};

    其实最后代表的也是一个字符串

    字符数组的初始化有两种方式:

    但其实使用字符常量初始化数组的时候,可以不加上这个 '\0',而使用字符串初始化字符数组的时候,是自动加上'\0',所以要将\0占的字节大小算进去。字符数组并不要求它的最后一个字符为'\0',甚至可以不包含'\0',向下面
    这样写是完全合法的。
    char str[5]={'C','h','i','n','a'};

    展开全文
  • 维字符数组字符串数组的使用

    千次阅读 2020-03-20 17:34:15
    一维字符数组的定义形式如下: <存储类型>char<数组名>[<常量表达式>]={<初始值>}; 二维字符数组定义的形式是: <存储类型>char<数组名>[<常量表达式e1>] [<常量...

    二维字符数组与字符串数组的使用

    一维字符数组的定义形式如下:

    <存储类型>  char  <数组名>[<常量表达式>]={<初始值>}

    二维字符数组定义的形式是:

    <存储类型>  char  <数组名>[<常量表达式e1>] [<常量表达式e2>]={<初始值>}

    字符串数组定义的形式是:

    <存储类型>  string  <数组名>[<常量表达式e1>] ={<初始值>}

    二维字符数组定义的数组元素个数为:e1*e2。同数值数组一样,字符数组的每一维元素的下标都是从0开始。

    例如:

    char  aa[8]定义了长为8的一维字符数组aa

    char  bb[4][5]定义了4*5的二维字符数组bb

    string  cc[3]定义了含3个字符串的一维数组cc

     

    关于字符数组的初始化有如下两种方式:

    (1)    用字符常量初始化数组

    例如:

    char ch[5]={'a','b','c','d','\0'};

    或者:char ch[ ]={'a','b','c','d','\0'};    /*可以缺省数组定义长度,但不能少结尾符*/

    char st[3][6]={{'c','h','i','n','a','\0' },{'j','a','p','a','n','\0'},{'k','o','r','e','a','\0'}}; 

    或者:

    char st[ ][6]={{'c','h','i','n','a','\0' },{'j','a','p','a','n','\0'},{'k','o','r','e','a','\0'}};

    /*可以缺省行下标,但不能缺省列下标*/

     

    (2)    用字符串常量初始化数组

    例如:

    char ch[6]={"abcd"};

     

    33586048_1.gifuploading.4e448015.gif正在上传…重新上传取消文本框:  注意:用字符串常量方式赋值时,在末尾自动加上一个结束符'\0' 作为结束标志,比用字符常量赋值方式每行要多占一个字节。

     

    例如:

     char st[3][6]={"china","japan","korea"};

    或者:

    char st[ ][6]={"china" ,"japan","korea"};

    /*可以缺省行下标,但不能缺省列下标*/

     

    例如:

     string st[]={"china","japan","korea"};

     

     

    以下两段程序输出结果一样

     

     

    // 二维字符数组

    char a[3][6]={"Tread","Micro","Soft"};
    for(int i=0;i<3;i++)   {
    for(int j=0;j<6;j++)
    cout<<a[i][j];
    cout<<endl;   }
     
           // 字符串数组
    string b[]={"Tread","Micro","Soft"};
    for(i=0;i<3;i++)
    cout<<b[i]<<endl;
     

     

    展开全文
  • 例题:请补充main函数,该函数的功能是:把个二维字符数组每行字符串最大的字符拷贝到字符数组str中。 例如:如果s[4]={“abt”, “aec”, “ghs” “irt”},则str= “test”。 仅在横线上填写所需的若干表达式或...
  • 动态实现二维字符数组存放字符串 思路: 首先建立一维数组,每个元素都是char*型,再给每一个元素分配它的指向,使每一个元素都指向一个一维的char数组。这就实现了动态二维字符数组 分析:程序第4行先建立row个char...
  • 维字符数组赋值和字符串比较

    千次阅读 2018-11-29 22:51:46
    、赋值 1. 声明时初始化赋值 char str[][20]={"aaa","bbb","ccc"};  2. sprintf / strcpy(#include &lt;string.h&gt;) char str[3][20];  sprintf(str[0],"...
  • 具有一个下标的数组称为一维数组 定义一维数组的形式如下: 数据类型 数组名 [常量表达式] 例如: int a[10]; 注意: 数据类型指数组的数据类型,也就是每一个数组元素的数据类型。可以是任何合法的数据类型,也...
  • c语言: 关于二维字符数组字符串数组)作为函数参数时的问题错误的示范正确的示范为什么会错,后续补充 错误的示范 定义: void func(char *strs[255]) or oid func(char **strs) 使用: char a[4][255] = {0}; ...
  • c-一维字符数组

    千次阅读 2018-12-17 11:14:36
    该语句定义了一个一维字符数组 c,大小为 10,即占 10 个字符变量空间,最大可存储长度为 9 的字符串(第 10 个字符为 '0')。由于没有显式给每个字符变量赋值,故每个字符变量为随机值。 可以采用单个字符逐个赋值...
  • 如: 二维字符数组a[3][3] : a b c d e f g h l 那么如何将 g h l 追加到 a b c后面?
  • C语言二维字符数组详解

    万次阅读 多人点赞 2019-07-06 23:28:10
    维字符数组一般用于存储和处理多个字符串,二维字符数组中的每一行均可存储表示一个字符串。 二维字符数组的定义 二维字符数组的定义格式为: char 数组名[第一维大小][第二维大小]; 如: char c[3][10]; //...
  • 要求:了解多维数组的概念掌握二数组的使用掌握用字符数组存放字符串的方法掌握字符串的输入及输出方法二数组的定义 例:int a[2][3]; 定义个二数组 该数组有2行3列共6个元素 这6个元素都存放int型数据...
  • 和数组形式定义的字符串相同,数组形式定义的字符串数组,存储了字符串字面量的副本,可以直接对这些字符串进行更改 d. 其中每个含有m个元素的数组必须不大不小的将数组填满,如果字符串长度小于m-1,其余位置就补...
  • 如果让你指定一个气球的颜色,可以定义一个一维数组设定颜色 #include<stdio.h> int main(){ char a[10]; printf("设定一个气球的颜色\n"); scanf("%s",a); printf("这个气球的颜色是%s\n",a); } 如果让...
  • sizeof 和 strlen 在求解数组 字符数组 字符串数组时候的小结
  • C++二维数组和二维字符串数组

    千次阅读 2020-09-09 11:47:06
    字符串数组提取首地址可直接提取到字符串,而int型只能提到某一维的首地址。
  • 一、维数组的定义和引用:1、一维数组的定义:类型说明符 数组名 [常量表达式];(int a[10];)2、一维数组的初始化:类型说明符 数组名[常量表达式]={值,值,....};int a[10]={1,2,3,4,5,6}; 相当于: a[0]=1;a[1]...
  • 在PHP中,字符串函数join () 将一个一维数组转化为字符串。 函数语法: join(string$separator,array$pieces):string 函数参数说明: 参数 描述 separator 可选。规定数组元素之间放置的内容。默认是 ...
  • 一维数组、二维数组字符串总结

    千次阅读 2017-07-12 19:20:05
    一维数组主要在高精度计算上,所谓高精度计算,也就是模拟计算过程,然后就没有什么了…… 然后是二维数组 二维数组就是坐标系,难点在坐标的变化上: //1顺时针旋转90度 for(j=1;jn;j++) for(i=1;in;i++) ...
  • 用C语言的话,就主要考察二元字符数组那块的知识,因为只有这样才能在数组中存储多个字符串,因为字符串在C语言中就是字符数组的形式存在的,而在C++中则多了个string容器,就会省事很多,但是没有办法,因为我...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 156,801
精华内容 62,720
关键字:

一维字符数组就是字符串吗