[二級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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章