[二级C]专题习题-二维数组

初学C语言,程序代码只是单纯的实现功能,并未考虑Bug问题。

--------------------------------------------------------------------------------------------------------------

1.对N*N的二维数组求二维数组右上半三角元素的值乘以m.并输出新的二维数组元素。
例如:若m的值为2,a数组中的值为:
1  9   7   
a= 2  3   8   
    4  5   6   
计算后:
2   18  14  
a=   2   6   16  
    4   5   12  

#define N  3
int main()
{
    int a[N][N],m;
    int i,j;
        scanf("%d",&m);

        for(i=0;i<N;i++)
        {
            for(j=0;j<N;j++)
         {
             scanf("%d",&a[i][j]);
                     if(j>=i)//根据规律可得出,当j>=i时,乘以相应的m值就能得出相应的结果
                    a[i][j]*=m;
         }
        }
            printf("\n");
        for(i=0;i<N;i++)
            {
                    for(j=0;j<N;j++)
                           printf("%d ",a[i][j]);
                    printf("\n");
            }
           return 0;
               }

右上半部分的值要乘以m,即当j>=i的时候开始进行。

2.写一程序,定义一个N×N的二维数组,计算数组周边元素的平均值。
例如:a数组中的值为:
0  1  2  7  9
1  9  7  4  5 
2  3  8  3  1
4  5  6  8  2
5  9  1  4  1
则:a数组周边元素的平均值为3.375

#define N  5
int main()
{
    int a[N][N]sum=0;
    int i,j,log=0,x;
    float average;
         for(i=0;i<N;i++)
         {
             for(j=0;j<N;j++)
                scanf("%d ",&a[i][j]);
            printf("\n");
         }
         for(i=0;i<N;i++)
         {
               for(j=0;j<N;j++)
                    sum+=a[i][j];
        }
        for(i=1;i<N-1;i++)
        {
            for(j=1;j<N-1;j++)
                    log+=a[i][j];
        }
            x=sum-log;
        average=x/(float) (4*N-4);
         printf("%.3f",average);
           return 0;
               }




3.编写程序实现矩阵(3行3列)的转置(即行列互换)。
例:若输入下面的矩阵:
100 200  300
400 500  600
700 800  900
转置后:
       100   400   700
       200   500   800
       300   600   900
#include <stdio.h>
#include<stdlib.h>
#define N  3

int main()
{
        int a[N][N]={{100,200,300},{400,500,600},{700,800,900}};
        int i=0,j=0,temp;
        for(i=0;i<N;i++)
        {
            for(j=i;j<N;j++)
            {
                temp=a[i][j];
                a[i][j]=a[j][i];
                a[j][i]=temp;
            }
        }

        for(i=0;i<N;i++)
        {
            for(j=0;j<N;j++)
            {
                printf("%d ",a[i][j]);
            }
                printf("\n");
        }
           return 0;
               }





4.写一程序,找出N×N矩阵中每列元素中的最大值,并按顺序依次存放于一维数组b中。

#include<stdio.h>
#define N 3
int main()
{
    int a[N][N],b[3];
    int i,j;
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            scanf("%d",&a[i][j]);
    for(j=0;j<N;j++)
 {
       b[j]=a[0][j];
    for(i=0;i<N;i++)
    {
        if(b[j]<a[i][j])
            b[j]=a[i][j];
    }
 }
    printf("\n");
    for(i=0;i<N;i++)
        printf("%d ",b[i]);
}






5.写一程序建立一个N×N的矩阵。矩阵元素的构成规律是:最外层元素的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值全部为3,……依此类推。
例如:若N=5,生成的矩阵为:
1   1   1   1   1
1   2   2   2   1
1   2   3   2   1
1   2   2   2   1
1   1   1   1   1
#include<stdio.h>
int main()
{
    int N,a[100][100]={0};
    int i,j,k;
    scanf("%d",&N);
    printf("\n");
    for(i=0;i<N;i++)
       for(j=i; j<N-i; j++)
        {
            a[i][j]=i+1;
            a[N-i-1][j]=i+1;
                    for(k=i+1; k<N-i; k++)
             {
                        a[k][i]=i+1;
                        a[k][N-i-1]=i+1;
             }
        }

    for(i=0;i<N;i++)
    {
        for(j=0;j<N;j++)
        {
                printf("%d ",a[i][j]);
        }
            printf("\n");
        }
        return    0;
}








6.写一程序,判断N×N(规定N为奇数)的矩阵是否是“幻方”。“幻方”的判断条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。
例如:以下3×3的矩阵就是一个“幻方”:
       4   9   2
       3   5   7
       8   1   6

#include<stdio.h>
#define N 3
int main()
{
    int a[N][N];
    int i,j,m=0,n=0,k=0;
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            scanf("%d",&a[i][j]);
            for(i=0;i<N;i++)
          {
              m+=a[i][i];
              n+=a[i][N-i-1];
          }
      if(m==n)
        {
                    for(i=0;i<N;i++)
                    {
                        for(i=0,j=N;i<N;i++)
                          {
                              n+=a[i][j];
                              k+=a[j][i];
                          }
                    }
                        if ((n !=m)&&(k!= m))
                            printf("该数组为幻方数组");

        }

      return 0;
}






7.写一程序,将4×3矩阵中第k行的元素与第0行元素交换。
例如:有下列矩阵:
1   2   3
4   5   6
7   8   9
10  11  12
若k为2,程序执行结果为:
7    8    9
4    5    6
1    2    3
10   11   12

#include<stdio.h>

int main()
{
    int a[4][3];
    int i,j,b[3],k;
    for(i=0;i<4;i++)
        for(j=0;j<3;j++)
            scanf("%d",&a[i][j]);
            printf("please input K value:");
            scanf("%d",&k);
            printf("\n");
            for(i=0;i<4;i++)
          {
             for(j=0;j<3;j++)
             {
                 b[j]=a[0][j];
                 a[0][j]=a[k][j];
                 a[k][j]=b[j];
                 printf("%d ",a[i][j]);

             }
                printf("\n");
          }
          printf("\n");


      return 0;
}






8.写一程序,求矩阵a[N][N]中每行的最小值,结果存放到数组b中。
例如:若
     1   4   3    2      
a=   8   6   5    7      
     11  10  12   9      
     13  16  14   15     


则结果b数组应该为1,5,9,13

#include<stdio.h>
#define N 4
int main()
{
    int a[N][N],b[4];
    int i,j;
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            scanf("%d",&a[i][j]);
    for(i=0;i<N;i++)
 {
       b[i]=a[i][0];
    for(j=0;j<N;j++)
    {
        if(b[i]>a[i][j])
            b[i]=a[i][j];
    }
 }
    printf("\n");
    for(i=0;i<N;i++)
        printf("%d ",b[i]);
	return 0;
}






9.写一程序计算N×N矩阵的主对角线元素和反向对角线元素之和,要求先累加主对角线元素中的值,再累加反向对角线元素中的值。
例如:若N=3,有下列矩阵:
      1    2    3
      4    5    6
      7    8    9 
首先累加1,5,9,然后累加3,5,7,结果为30。
#include<stdio.h>
#define N 3
int main()
{
    int a[N][N];
    int i,j,m=0,n=0;
    for(i=0;i<N;i++)
        for(j=0;j<N;j++)
            scanf("%d",&a[i][j]);
            for(i=0;i<N;i++)
          {
              m+=a[i][i];
              n+=a[i][N-i-1];
          }
          printf("\n");
            printf("%d",m+n);

      return 0;
}





10.写一程序,实现将N×N矩阵中元素的值按列向右移动1个位置,右边被移出矩阵的元素的绕回左边第1列。
例如:N=3,有下列矩阵
       1   2   3
       4   5   6
       7   8   9
计算结果为:
       3   1   2
       6   4   5

       9   7   8

#include<stdio.h>
#define N 3
int main()
{
    int a[N][N],temp=0;
    int i=0,j=0;
    for(i=0;i<N;i++)
   {
        for(j=0;j<N;j++)
            scanf("%d",&a[i][j]);
   }
        for(i=0;i<N;i++)
  {
        temp=a[i][N-1];//取得0行最后一个数字
            for(j=N-1;j>0;j--)//从最后一行开始遍历
                a[i][j]=a[i][j-1];//a[0][2]=a[0][1],遍历所有行,将每行第一个数赋值给第二个数
                    a[i][0]=temp;//将每行的最后一个数给每行第一个数
 }
        printf("\n");
           for(i=0;i<N;i++)
            {
                for(j=0;j<N;j++)
                    printf("%d ",a[i][j]);
                            printf("\n");
              }
        return    0;
}









发布了39 篇原创文章 · 获赞 48 · 访问量 11万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章