数组

一:一维数组

      1:定义:将相同类型变量组合到一起,并按顺序排列,形成一个集合(用于存储单一数据类型的集合,不能把不同类型的数据放在同一个一个数组中)

           格式:类型名  数组名[常量表达式]----int a[10]   (元素、下标)

              注:不允许用变量来制度数组长度(int arr[len]) 错--int len=5;

     2:定义数组   @1:定义全部  int a[10]={0,1,2,3,4,5,6,7,8,9}     (int a[  ]错误)      

                              @2:定义部分  int a[10]={5}   

                              @3:定义元素为0  int a[10]={0}

     3:使用数组: n=a[5]   //  a[5]=n      ( int n=5;    int a[n];--错误)

     4:对数组进行赋值:int [10]

           借助循环方式:  eg:  int a[10]正确方式       a[10]={0}错误方式

     5:数组初始化的几种错误形式

             初始化数组的值的个数不能多于数组元素个数,初始化数组的值也不能通过跳过逗号的方式来省略。

           例如,下面的代码对数组进行初始化是错误的:

    int arrayl[5]={1,2,3,4,5,6}; //error: 初始化值个数多于数组元素个数
    int array2[5]={1,,2,3,4}; //error:初始化值不能省略
    int array3[5]={1,2,3,}; //error:初始化值不能省略
    int array4[5]={}; //error:语法格式错误

   

    @1:eg:逆序输出5个数:58946

    int main()
    {
    int a[5]={5,8,9,4,6};
    int i,t;
    for(i=0;i<=5/2;i++)
    {
        t=a[i];
        a[i]=a[5-1-i];
        a[5-1-i]=t;
    }
   for(i=0;i<5;i++)
    printf("%d",a[i]);
    printf("\n");
    }

   @2:eg:输出数列前40个数

   #include <stdio.h>
   main()
   {
    int a[40],i;
    a[0]=a[1]=1;  //前两项不需要计算,直接初始化为1

    for(i=2;i<40;i++)
    a[i]=a[i-2]+a[i-1];   //a[2]=a[0]+a[1]
    for(i=0;i<40;i++)
    printf("%d\t",a[i]);      //\t表示按表格类型输出1
   }


二:二维数组

    1:一般形式:类型说明符 [常量表达式] [常量表达式]

              eg:    int  a[1][2],b[3][4]    下划线处代表一维数组名。

    2:在c语言中,二维数组中的元素排列的顺序是按行存储:即在内存中先存放第一行的元素,再存放第二行的元素。

    3:二维数组元素的表现形式:数组名[下标][下标]  - -

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

               eg:   int a[2][3]    //定义a为2*3的二维数组  .......a[3][4]=3 //不存在与数组中的元素 

             (定义数组时的a[3][4]和引用数组元素时的a[3][4]是不同的概念//前者用a[3][4]定义数组的维数和各维的大小,后者中的3.4

                               是数组元素的下标值,代表行序列和列序列的元素

    4.二维数组中给全部元素赋值时,对一维的长度可以不指定,但第二维的长度必须指定。

              @1: eg:  int a[ ] [3]={2,4,6,8,10,12]     等价于  int a[2][3]={2,4,6,8,10,12}    或  int a[2][3]={{2,4,6},{8,10,12}}

         int arr6[2][]={ 4,8 };//这样是不对的,必须指定二维的长度
	 int arr6[2][]={	4,8 };//这样是不对的,必须指定二维的长度
	 int arr6[][]={{4,5},{5,6,7}};

             @2: eg:  char ch[6]='china';

                     printf("%s",ch)


    5.对部分元素赋值

            eg:  int a[2][3]={{0,4},{8}}   ------a[0][0]=0;   a[0][1]=4   ;a[1][0]=8;     -------   (0 40) (80 0)

            eg:  int a[3][4]={{1},{5},{9}};  -------    1 0 0 0 ; 5 0 0 0; 9 0 0 0 ;

      @1:定义二维数组,每个元素都初始化

     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:二维数组互换元素

#include<stdio.h>
int 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");
    }

    return 0;
}

结果:




三:字符数组(以字符的ASCII代码存储在存储单元中,一般占一个字节)

    字符数组中的一个元素存放一个字符。定义字符数组的方法与定义数值类型数组的方法类似。

      1:字符数组的定义

           * 数组名属于标识符,遵循标识符命名规则。

           ** 数组名后面是[  ]括起来的常量表达式。

          *** 常量表达式可以包含常量和符号常量,不能包含变量。

          eg: char ch[10];--- (一个字符型数组,内存为10) -----  可以为其赋值  int char[10]={'a','b','c','d','e','f','j','h','i',' '}

* 一维字符数组中存放一个字符串,比如一个名字char name[20] = "mj"

* 如果要存储多个字符串,比如一个班所有学生的名字,则需要二维字符数组,char names[15][20]可以存放15个学生的姓名(假设姓名不超过20字符)

* 如果要存储两个班的学生姓名,那么可以用三维字符数组char names[2][15][20]

  2.字符串数组两种表示:

    第一种:char str[4][6] = {"aaa", "bbb", "ccc"}; //char类型的二维数组

    第二种:char *str[4] = {"aaa", "bbb", "ccc"}; //char*类型的一维数组

#include<stdio.h>
int main()
{char c[5]={'h','a','p','p','y',};
int i;
for("%c",c[i]);
printf("\n");
return 0;
}

  3.字符串和字符串结束标志

   *一个字符串的结束标志是以字符 "\0"作为结束标志。

   *用字符数组存储字符串常量的时候,常常会自动加一个"\0"作为结束标志。

 

  4.字符数组的输入与输出

   *逐个字符输入输出:用格式符“%c"

   *将整个字符串一次输入或输出用”%s"格式符

           eg: char c[ ]={“China'};

                  printf(“%s\n",c);

  5.注意

     *  输入的字符中不包括结束符‘\0'

    *  用'%s'格式符输出字符串时,Printf函数中的输出项是字符数组名,而不是数组元素名。(eg:printf("%s",c[0]); 就是错误表达)

    * 如果数组长度大于字符串的实际长度,也只能输出到与'\0'结束。(  eg:  char c[10 ]={“China'};    printf(“%s",c);

    *如果一个字符数组中包含一个以上'\0',则遇到第一个'\0'时输出就结束。

    *可以用scanf函数输入一个字符串。  ( eg:  scanf("%s",c);  )

    *scanf函数中的输入项如果是字符数组名,就不再加地址符&   (eg: scanf("%s',&str);  错误)

#include <stdio.h>
void main()
{
char a[50];
int i=0;
gets(a);
while(a[i])
{
if(a[i] >= 'A' && a[i] <= 'Z')
a[i] += 32;
else if(a[i] >= 'a' && a[i] <= 'z')
a[i] -= 32;
i++;
}
puts(a);
}



     

     






    


















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值