数组----那些学习C语言的日子,写给二级C学习的同学

类别:前端设计与创意 | 发布时间:2018-12-6 17:46:24 | 网迅科技  |  阅读次数: 

第八部分   数组(占10分)

 

主要内容:

1、一维数组

2、二维数组

一、一维数组:

1、分类:

  1)一维数组:int a[10];

  2)二维数组:int a[2][3];

2、定义:连续的存储单元,数组中每个元素只带有一个下标

  1)格式:基类型  数组名[下标];

     int a[10];

  a、特点:

     数组名仅代表首地址单元

     首地址不能移动

     下标从0开始 

     所有元素具有同一类型 

  2)元素引用:int a[N];

      范围:  x>=0  &&  x<=N-1

例1:利用数组将1,3,5,...的前30个奇数分别顺序与逆序输出?

 #include

 #define   N    30

 void main()

 {

  int  x[N],i,j;

  for(i=0,j=1;i

  x[i]=j;

  printf("output  x array:\n");

  for(i=0;i

  printf("%d\t",x[i]);

  printf("\n output  x array:\n");

  for(i=N-1;i>=0;i--)

  printf("%d\t",x[i]);  

  }

例2:以下定义语句中,错误的是?

A、int a[]={1,2,3,4};              B、char *a[5];

C、char  str[6]="test";           D、int n=5,a[n];

例3:以下程序的输出结果是? 

  #include

  void  main()

  {

   int p[8]={5,6,7,8,9,16,17,18};

   int i=0,j=0;

   while(i<7  && p[i]%2==1)

   j+=p[i++];

   printf("%d\n",j); }

  A、5      B、6     C、15    D、16

 3、初始化:赋初值

  1)方法:

  a、全部初始化:

   int x[3]={1,2,3};

   int x[ ]={1,2,3};

  b、部分初始化:未赋值元素自动以类型补0或'\0'(与类型有关)

   int x[3]={1,2};

例4:以下能正确定义一维数组的选项是____

A、 int  a[5]={0,1,2,3,4,5};

B、 int  a[]={0,1,2,3,4,5};

C、 char a={'A','B','C'};

D、 int a[5]="0123";

 4、功能:

 (1)存储

 (2)回文判断

 (3)排序

 (4)统计

 (5)反转 

存储问题 

例5:输入任意一串字符,将下标为偶数的字符输出?

 #include

 #include

 #define    N   100

 void main()

 {  

 char  x[N],i,l=0;

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

 gets(x); 

 l=strlen(x);

 for(i=0;i

 printf("%c",x[i]);  

 }

回文判断

例6: 编写函数,判断一字符串是否为回文。若是回文函数返回值为1;则返回值为0。(回文:顺读和倒读都一样的字符串) 

 #include

 #include

 #define   N   100

 int  fun(char x[])

 {  int  i,j,l=0,f=1;

    l=strlen(x);

  for(i=0,j=l-1;i<=l/2;i++,j--)

    if(x[i]!=x[j])

    { f=0;

     break; }

   return  f;    

  }

 void main()

 {  char  x[N];

    int   flag;

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

    gets(x);

    flag=fun(x); 

   if(flag==1)

   printf("YES!\n");

   else

   printf("NO!\n");  }

冒泡排序法

例7:排序 输入10个任意整数,将这些数升序输出? 

冒泡排序法:方法就是逐次比较。即一次比较两个数,若它们的顺序错误,则它们交换;重复进行,直到没有需要交换为止。

 #define   N   10

 #include

 void main()

 { 

  int  x[N],i,j,t;

  printf("input  x  array:\n");

  for(i=0;i

  scanf("%d",&x[i]);

  printf("\n(1)output xarray:\n");

  for(i=0;i

  printf("%d\t",x[i]);

  for(i=0;i

  for(j=i+1;j

  if(x[i]>x[j])

  {

  t=x[i];

  x[i]=x[j];

  x[j]=t;

  }

 printf("\n(2)output xarray:\n");

 for(i=0;i

 printf("%d\t",x[i]);  

  }

分类统计

例8:输入一行数字字符,请用数组元素作为计数器来统计每个数字字符的个数。下标为0的元素统计字符'0'的个数,下标为1的元素统计字符'1'的个数,依次进行统计后输出结果?

  #include

  #define   N   10

  void main()

 { 

   int  cnt[N]={0},i;

   char   ch;

   while((ch=getchar())!='\n')

  if(ch>='0'  &&  ch<='9')

  cnt[ch-'0']++; /*分类统计*/

  printf("count result:\n"); 

  for(i=0;i

  printf("%d------%d\n",i,cnt[i]);   

  }

二、二维数组:

 1、定义:

  基类型  数组名[下标1][下标2];

  int   x[3][4];

  1)说明:

   数组名代表首地址单元:x<=====>&x[0][0]

   下标1: 行标

   下标2:列标

   元素总数:行标*列标

   允许省略行下标

   存储状态:逐行存储 

 2、初始化: 

  1)方法:

  a、全部:

   int x[3][3]={1,2,3,4,5,6,7,8,9};

   int x[3][3]={{1,2,3},{4,5,6},{7,8,9}};

  b、部分:

   int x[3][3]={1,2,3,4};

   int x[][3]={1,2,3,4,5,6,7};

   int x[3][3]={{1,2,3},{4},{5,6,7}}; 

  3、功能: 

 (1)最值

 (2)计算和

 (3)输出图案

 (4)转置

最值:所有元素最大/最小值,每行/每列,对角线 

例9:定义一个3*4的数组,并输入值,输出最大值及所在行,列下标?

   #include

  #define   M   3

  #define   N   4

  void main()

  { 

   int  x[M][N],i,j,h=0,l=0,max;

   printf("input  x   array:\n");

   for(i=0;i

   for(j=0;j

   scanf("%d",&x[i][j]);

   max=x[0][0];

   for(i=0;i

   for(j=0;j

   if(max

   { max=x[i][j];

     h=i;

     l=j;  }

  printf("output  max is :\n");

  printf("max=%d,h=%d,l=%d\n",max,h,l);    

  }

例10:定义一个3*4的数组,并输入值,输出每列的最大值?   

   #include

   #define   M   3

   #define   N   4

   void main()

   { 

   int  x[M][N],y[N],i,j,max;

   printf("input  x  array:\n");

   for(i=0;i

   for(j=0;j

   scanf("%d",&x[i][j]);

   printf("\n output  x  array:\n");

   for(i=0;i

    { for(j=0;j

      printf("%4d",x[i][j]);

      printf("\n"); }    

   for(j=0;j

   { max=x[0][j];

     for(i=0;i

     if(max

     max=x[i][j];

     y[j]=max;  }

  printf("output max is :\n"); 

  for(j=0;j

  printf("%d\t",y[j]); }

例11、分析以下程序的运行结果?

   #include

   void main()

   { int  x[3][2]={0},i;

     for(i=0;i<3;i++)

     scanf("%d",x[i]);

     printf("%d,%d,%d\n",x[0][0],x[0][1],x[1][0]);

   }

  若运行时输入:2  4  6 ,则输出结果?

例12、以下数组定义中错误的是?

  A) int x[][3]={0};   

  B) int x[2][3]={{1,2},{3,4},{5,6}};

  C) int  x[][3]={{1,2,3},{4,5,6}};

  D) int  x[2][3]={1,2,3,4,5,6};

例13、以下程序按下面指定的数据为x数据的下三角置数,并按如下形式输出,请填空。

       4  

       3    7

       2    6    9

       1    5    8    10

  #include

  void main()

  { int  x[4][4],n=0,i,j;

    for(j=0;j<4;j++)

     for(i=3;i>=j;____)  

      { 

       n++;

       x[i][j]=______; 

       }

     for(i=0;i<4;i++)

     { 

       for(j=0;j<=i;j++)

       printf("%3d",x[i][j]);

       printf("\n"); 

        }

     }

计算和

例14:定义一个3*3的二维数组,并输入值,分别输出左右对角线元素和?

 #include

 #define    N    3

 main()

 {

    int   x[N][N],i,j,sl=0,sr=0;

    printf("input  x  array:\n");

    for(i=0;i

    for(j=0;j

    scanf("%d",&x[i][i]);

    printf("\n  output  x  array:\n");

    for(i=0;i

    {

     for(j=0;j

     printf("%4d",x[i][j]);

     printf("\n");

    }

   for(i=0;i

   sl=sl+x[i][i];

 

   for(i=0;i

    for(j=0;j

    if(i+j==2)  

    sr=sr+x[i][j];

   printf("\n sl=%d,sr=%d\n",sl,sr);  

}

例15:定义4*4的二维数组,并输入值,输出该数组的边框元素和?

方法1:全部和-中间和

 #define   N   4

 #include

 void main()

 {

   int  x[N][N],i,j,s=0,s1=0;

   printf("input  x  array;\n");

   for(i=0;i

    for(j=0;j

    { scanf("%d",&x[i][j]);

      s=s+x[i][j];  }

 

   for(i=1;i

    for(j=1;j

    s1=s1+x[i][j];

    s=s-s1;

    printf("s=%d\n",s); }

 方法2:直接找周边元素的特点

 #define   N   4

 #include

 void main()

 { int  x[N][N],i,j,s=0;

  printf("input  x  array:\n");

  for(i=0;i

   for(j=0;j

   scanf("%d",&x[i][j]);

 

  for(i=0;i

   for(j=0;j

   if(i==0 || j==0 || i==N-1 || j==N-1) 

  s=s+x[i][j];

   printf("s=%d\n",s);   }

转置

例16: 定义3*3的二维数组,并输入值,转置后输出该数组?

方法1:临时数组

 #define   N    3

 #include

 void main()

 { 

  int  x[N][N],i,j,y[N][N];

  printf("input  x  array:\n");

  for(i=0;i

  for(j=0;j

  { scanf("%d",&x[i][j]);

    y[j][i]=x[i][j]; }

    printf("\n output  x array:\n");

   for(i=0;i

    { for(j=0;j

       printf("%4d",x[i][j]);

       printf("\n");  }

 

  printf("\n output  y array:\n");

   for(i=0;i

    { for(j=0;j

       printf("%4d",y[i][j]);

       printf("\n");  } 

  }

方法2:临时变量

 #define   N    3

 #include

 void main()

 { int  x[N][N],i,j,t;

   printf("input  x  array:\n");

    for(i=0;i

     for(j=0;j

      scanf("%d",&x[i][j]);

 

   for(i=0;i

    for(j=i+1;j

    { t=x[i][j];

      x[i][j]=x[j][i];

      x[j][i]=t;   }

 printf("\n output  x  array:\n");

  for(i=0;i

   { 

     for(j=0;j

     printf("%4d",x[i][j]);

     printf("\n"); 

    }

   }

例17:分析以下程序的运行结果? 

 #include

 void main()

 { 

   int  a[4][4]={{1,4,3,2},{3,7,2,5},{8,6,5,7},  {4,8,6,1}},i,k,t;

  for(i=0;i<3;i++)

   for(k=i+i;k<4;k++)

   if(a[i][i]

   {

    t=a[i][i];

    a[i][i]=a[k][k];

    a[k][k]=t;}

    for(i=0;i<4;i++)

    printf("%d\t",a[0][i]); 

  }

例18:以下程序按照如下形式输出数组右上半三角  

 #include

 void main()

 {  

  int  x[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},  {13,14,15,16}},i,j;

  for(i=0;i<4;i++)

   { for(j=0;j<=i;j++)

    printf("%4c",' ');

    for(j=____;j<4;j++)

    printf("%4d",x[i][j]);

    printf("\n"); }

    } 

  1   2   3    4

      6   7    8

          11  12

              16

 

编程题:

1、请编写函数fun,其功能是:统计出x所指数组中能被e整除的元素个数,通过函数值返回主函数;同时, 计算不能被e整除的元素之和, 放到形参sum所指的存储单元中。

例如,当数组x内容为1,7,8,6,10,15,11,13,29,31,整数e内容为3时,输出结果应该是: n=2,sum=110

注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

#include

#define N 10

int fun(int x[], int e, int *sum)

{

 

}

void main()

{  

int x[N] = {1, 7, 8, 6, 10, 15, 11, 13, 29, 31}, e = 3, n, sum;

n=fun(x, e, &sum);

printf("n=%d,sum=%d\n", n, sum);

}

 

2、编写程序,实现矩阵(3行、3列)的转置(即行列互换)。例如,若输入下面的矩阵: 

 100 200 300

 400 500 600

 700 800 900 

则程序输出:

 100 400 700

 200 500 800

 300 600 900  

请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include

void fun (int array[3][3])

{

 

}

void main()

{

  int i,j;

  int array [3][3]={{100,200,300},{400,500,600},{700,800,900}};  

  for (i=0;i<3;i++)

  {for (j=0;j<3;j++)

   printf("%7d ",array[i][j]);

   printf("\n ");

    }

  fun(array);

  printf("Converted array:\n ");

  for (i=0;i<3;i++)

  {for (j=0;j<3;j++)

    printf("%7d ",array[i][j]);

    printf("\n ");

    }  

}

此文关键字:C语言,二级C

在线项目合作

网迅科技结合创新的设计理念与专业技术,为客户制定从策划到创意再到技术的系列支持,帮助企业通过全新的媒体展示平台实现更多价值。如果您喜欢我们的项目,有兴趣合作?请您联系我们,以便我们能够为您提供可行的价值服务。