• C语言成长学习题(十四)


    六十一、定义4*6的实型数组,并将各行前5列元素的平均值分别放在同一行的第6列上。

     1 #include <stdio.h>
     2 
     3 void main(void)
     4 {
     5     float a[4][6], sum;
     6     int i, j;
     7 
     8     for (i = 0; i < 4; i++)
     9         for (j = 0; j < 5; j++)
    10             a[i][j] = i * j + 1;
    11     for (i = 0; i < 4; i++)
    12     {
    13         sum = 0;
    14         for (j = 0; j < 5; j++)
    15             sum = sum + a[i][j];
    16         a[i][5] = sum / 5;
    17     }
    18     for (i = 0; i < 4; i++)
    19     {
    20         for (j = 0; j< 6; j++)
    21             printf("%5.1f", a[i][j]);
    22         printf("
    ");
    23     }
    24 }

     结果:

        1.0    1.0    1.0    1.0    1.0    1.0

        1.0    2.0    3.0    4.0    5.0    3.0

        1.0    3.0    5.0    7.0    9.0    5.0

        1.0    4.0    7.0   10.0   13.0    7.0

    六十二、编程打印n*n阶的螺旋方阵(顺时针方向旋转)。

     1 #include <stdio.h>
     2 
     3 #define N 5
     4 
     5 void main(void)
     6 {
     7     int a[N][N], i, j, k = 1, m;
     8 
     9     if (N % 2 == 0)
    10         m = N / 2;
    11     else 
    12         m = N / 2 + 1;
    13     for (i = 0; i < m; i++)
    14     {
    15         for (j = i; j < N - i; j++)
    16             a[i][j] = k++;
    17         for (j = i + 1; j < N - i; j++)
    18             a[j][N-i-1] = k++;
    19         for (j = N - i - 2; j >= i; j--)
    20             a[N-i-1][j] = k++;
    21         for (j = N - i - 2; j >= i + 1; j--)
    22             a[j][i] = k++;
    23     }
    24     for (i = 0; i < N; i++)
    25     {
    26         for (j = 0; j < N; j++)
    27             printf("%5d", a[i][j]);
    28         printf("
    ");
    29     }
    30 }

    结果:

        1     2    3     4     5

       16   17   18   19    6

       15   24   25   20    7

       14   23   22   21    8

       13   12   11   10    9

    六十三、判断二维数组中是否存在鞍点(如果一个数组元素在改行上最大,在该列上最小,则称此元素为鞍点)。

     1 #include <stdio.h>
     2 
     3 #define N 3
     4 #define M 4
     5 
     6 void main(void)
     7 {
     8     int a[N][M], i, j, k, flag;
     9 
    10     printf("请输入%d个数据: ", N*M);
    11     for (i = 0; i < N; i++)
    12     {
    13         for (j = 0; j < M; j++)
    14         {
    15             scanf("%d", &a[i][j]);
    16             printf("%4d", a[i][j]);
    17         }
    18         printf("
    ");
    19     }
    20     for (i = 0; i < N; i++)
    21     {
    22         k = 0;
    23         for (j = 0; j < M; j++)
    24             if (a[i][k] < a[i][j])
    25                 k = j;
    26         flag = 1;
    27         for (j = 0; j < N; j++)
    28             if (a[i][k] > a[j][k])
    29             {
    30                 flag = 0; 
    31                 break;
    32             }
    33         if (flag ==1)
    34         {
    35             printf("第%d行第%d列的%d是鞍点.
    ", i, k, a[i][k]);
    36             break;
    37         }
    38     }
    39     if (i == N)
    40         printf("二维数组无鞍点.
    ");
    41 }

    结果:

    请输入12个数据: 1 2 3 4 5 6 7 8 9 10 11 12

       1   2   3   4

       5   6   7   8

       9  10  11  12

    第0行第3列的4是鞍点.

    六十四、输出n阶魔方阵。

     1 #include <stdio.h>
     2 
     3 #define N 5
     4 
     5 void main(void)
     6 {
     7     int a[N][N] = {0}, i = 0, j, k;
     8     
     9     j = N / 2;
    10     a[i][j] = 1;
    11     for (k = 2; k <= N * N; k++)
    12     {
    13         i--,j++;
    14         if (i < 0 && j ==N)
    15         {
    16             i = i + 2;
    17             j = j - 1;
    18         }
    19         else
    20         {
    21             if (i < 0)
    22                 i = N - 1;
    23             if (j == N)
    24                 j = 0;
    25         }
    26         if (a[i][j] == 0)
    27             a[i][j] = k;
    28         else
    29         {
    30             i = i + 2;
    31             j = j - 1;
    32             a[i][j] = k;
    33         }
    34     }
    35     printf("%d阶魔方阵为: 
    ", N);
    36     for (i = 0; i < N; i++)
    37     {
    38         for (j = 0; j < N; j++)
    39             printf("%4d", a[i][j]);
    40         printf("
    ");
    41     }
    42 }

    结果:

    5阶魔方阵是:

      12  24   1   8  15

      23   5   7  14  16

       4   6  13  20  22

      10  12  19  21   3

      11  18  25   2   9

    六十五、编写求字符串长度的程序(用指针变量处理)。

     1 #include <stdio.h>
     2 
     3 void main(void)
     4 {
     5     char a[80], *p;
     6 
     7     p = a;
     8     gets(p);
     9     puts(p);
    10     while (*p != '')
    11         p++;
    12     printf("长度 = %d
    ", p - a);
    13 }

    Mark:

      程序中不能把p++改用a++,因为a是数组名,是一个固定值,不能进行a++运算。

      "while (*p != '')"等价于"while (*p)"。

  • 相关阅读:
    什么是字典序算法?
    安装使用zookeeper
    用最快速度将0*10范围内的数进行排序
    自定义schema 流程
    dubbo原理
    jvm 线上命令
    如何实现抢红包算法?
    GC Root 对象有哪些
    Jquery动态绑定事件处理函数 bind / on / delegate
    找出数组中的最小值(es5/es6)
  • 原文地址:https://www.cnblogs.com/zero-jh/p/5027582.html
Copyright © 2020-2023  润新知