A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© duzhong 中级黑马   /  2014-10-13 01:26  /  1165 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

自己总结的C语言几个基本数组的应用,和几道简单的例子,手都打麻了。 呵呵

(一).一维数组
    1.一维数组的定义:  类型符 数组名[常量表达式]。数组名与变量名的定义规则一样,常量表达式表示数组中元素的个数。类型符指数组元素的类型。同一个数组元素的类型是相同的。 例: int a[20];  表示以a为数组名的数组中有20各全为整形的数。


    2.一维数组的使用
     数组名[表达式]   表达式表示数组中元素的下标,下标是从0开始计算。


    3.一维数组的初始化
      1>全部元素的初始化  例:int a[5]={1,2,3,4,5};则表示 a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5

      2>部分元素的初始化  例:int a[5]={1,2,3};这只能保证前面给定的初始化数据是确定的,而没给定数据的数组是不确定数值的。


    一维数组举例
      例:选猴王,20各猴子编号0-19围成一圈,0号猴子从1开始报数,凡是报到3的倍数的猴子出列,直至剩下最后一只猴子,求猴王号数。

          #include <stdio.h>
           void  main()
          {
            int a[20],i,k=0,n=20;
           for(i=0;i<20;i++)
              a[i]=1;
                i=0;
            while(n>1)
             {
               k+=a[i];  //a[i]赋值给k,k为1,然后i++所以k=2.....
               if(k%3==0 && a[i]==1)
                {a[i]=0;   n--;}
                  i++;
                if(i==20)
                   i=0;
             }
            for(i=0;i<20;i++)
               if(a[i]==1)
                printf("猴王的编号为%d\n",i);
         }



   (二).  二维数组
       1.二维数组的定义   类型符 数组名[常量表达式][常量表达式]  例: int a[3][4];这二维数组中共有12各元素。

       2.二维数组的使用   数组名[下标1][下标2]  // 下标1称为行下标,下标2称为列下表。
          二维数组存储时是按行存储
           例: int 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]
       3.二维数组的初始化
          二维数组是按行初始化的。例: int a[2][3]={{1,2,3},{4,5,6}};
          二维数组的整体初始化   int a[2][3]={1,2,3,4,5,6};
          如果在二维数组中列下标的大小确定之后,行的数值可以省略。 例: int a[][3]={1,2,3,4,5,6};与int a[2][3]相同。

       二维数组举例:
         #include"stdio.h"
         #define N 4               
         #define M 5

         void main()
        {
         int i,j,k,a[N][M],max,maxj,flag;
         printf("please input matrix:n");
         for(i=0;i<N;i++)           
           for(j=0;j<M;j++)
            scanf("%d",&a[i][j]);
             for(i=0;i<N;i++)
              {
                 max=a[i][0];               //开始时假设a[i][0]最大
                 maxj=0;                    //将列号0赋给maxj保存
                   for(j=0;j<M;j++)           //找出第i行中的最大者(i定,j变,即从一行中横向比较)
                 if(a[i][j]>max)
                   {
                    max=a[i][j];       //将本行的最大数存放在max中
                    maxj=j;            //将最大数所在的列号存放在maxj中
                     }
                 flag=1;                    //先假使是鞍点,以flag为1代表
              for(k=0;k<N;k++)
                if(max>a[k][maxj])     //将最大数和其同列元素比较
                 {
                   flag=0;            //如果max不是同列最小,表示不是鞍点,令flag为0
                   break;             //答案书上这里是continue,其实直接用break跳出这个“小”循环
            }
           if(flag)                   //如果flag为1表示是鞍点
            {
              printf("a[%d][%d]=%dn",i,maxj,max); //输出鞍点的值和所在的行,列号
                 break;                 //因为只有一个鞍点,找到一个后直接跳出整个“大”循环
            }
          }
          if(!flag)                   //如果flag为0表示是鞍点不存在
            printf("It is not exist! n");
     }


  (三). 字符数组
       1.字符数组的定义   char 数组名[常量表达式];   //用于存放字符串。字符数组可与字符串不等长。字符串在存储时,系统会自动加结束标记\0

       2.字符数组的初始化      1>逐个字符初始化  char s[10]={'a','b','c'};
                               2>字符串整体赋值  char s[10]={"book"};

       3.字符数组的输入和输出   1>逐个字符输入与输出
                                2>输入字符串     scanf("%s",s);   //s一定是数组名,数组名代表着地址。
                                3>字符串输出和输出函数    gets(数组名)代表从键盘输入一个字符串。puts代表输出一个字符

       字符数组举例:
        #include <stdio.h>

        #include <string.h>

        void     main()

        {

       char str[100];

       int i;

       int sum = 0;

       printf("input a string: \n");

       gets(str);

       for (i = 0; i < strlen(str); i++)

      {

             if (str[i] == 'A')

                 sum++;

      }

      printf("The string has %d [A]\n", sum);

    }

2 个回复

倒序浏览
这篇帖子看不到么??
回复 使用道具 举报
顶一个  楼主用心了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马