• 阵列变数(2)


    15.7 数字统计

    • 请使用者输入10个整数后,输出最大与平均值

    13 23 78 77 37 30 40 50 83 99
    Max: 99
    Avg: 53

    Process returned 0 (0x0) execution time : 36.634 s
    Press any key to continue.

    // 三个参数都狗在一起
    #include <stdio.h>
    
    int main() {
        int i, n, max, avg, sum = 0;
        for (i = 1; i <= 10; i++) {
            scanf("%d", &n);  // 读数字
            if (i == 1 || n > max) {
                max = n; // 把第一个数赋值给max,比较合理,如果max直接等于0,那就没有考虑负数的情况
            }
            sum += n; // sum每次加数
        }
        avg = sum / 10;
        printf("Max: %d
    ", max);
        printf("Avg: %d
    ", avg);
        return 0;
    }
    
    // 各参数依次分开
    #include <stdio.h>
    
    int main()
    {
        int i, n[10], avg;
        for (i = 1; i <= 10; i++) {
            scanf("%d", &n[i-1]);// 数组是从0开始的
        }
        int max = n[0]; // 把max是为第一个数
        for (i = 1; i < 10; i++) {
            if (n[i] > max) {
                max = n[i];
            }
        }
        int sum = n[0];
        for (i = 1; i < 10; i++) {
            sum += n[i];
        }
        avg = sum / 10;
        printf("Max: %d
    ", max);
        printf("Avg: %d
    ", avg);
        return 0;
    
    
    }
    
    // 使用函式来做
    #include <stdio.h>
    #include <stdlib.h>
    
    int max10(int n[10]);
    int avg10(int n[10]);
    
    void main()
    {
        int i, n[10];
        for (i =1; i <= 10; i++) {
            scanf("%d", &n[i-1]);
        }
        printf("Max: %d
    ", max10(n));
        printf("Avg: %d
    ", avg10(n));
        return 0;
    }
    
    int max10(int n[10]){
        int i, max;
        for (i = 1; i <= 10; i++) {
            if (i == 1 || n[i-1] > max) {
                max = n[i-1];
            }
        }
        return max;
    
    }
    
    int avg10(int n[10])
    {
        int i, sum=0;
        for (i = 1; i <= 10; i++) {
            sum += n[i-1];
        }
        return sum /10;
    }

     16 产生不重复乱数的练习

    • 随机产生一组由10个1到10之间的数字所组成的序列,序列里面没有重复的数字
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main() {
        srand(time(0));
        int i, j, n[10];
        for (i = 1; i <= 10; i++) {
                do {
                    n[i-1] = rand() % 10 + 1;// rand()是产生乱数的函式,rand() % 10 产生1到9,然后再加1;就是1到10了
                    for (j = 1; j <= i; j++) {
                        if (n[i-1] == n[j-1]) {
                            break;
                        }
                    }
                }while (j != i); // j=i表示这个值没有被用过,j!=表示这个值被用过了,没有自然的结束,被break了。
    
            printf(" %d", n[i -1]);
        }
        printf("
    ");
        return 0;
    
    }
    
     2 10 8 6 5 4 7 3 1 9
    
    Process returned 0 (0x0)   execution time : 7.412 s
    Press any key to continue.

    16.1 用建表法产生不重复的乱数

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main() {
        srand(time(0));
        int i, n, counter[10] = {10};// 统计1到10有没有被使用过,计数,为1次表示只用一次没有重复
        for (i = 1; i <= 10; i++) {
                do {
                    n = rand() % 10 + 1;// rand()是产生乱数的函式,rand() % 10 产生1到9,然后再加1;就是1到10了
                } while (counter[n-1] != 0);//
                printf(" %d", n);
                counter[n-1]++;
                }
    
        printf("
    ");
        return 0;
    
    }
    
     5 2 3 8 10 4 7 6 9

     

    16.2  用交换法产生不重复的乱数

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    
    
    int main() {
        srand(time(0));
        int i,n[10];
        for (i = 1; i <= 10; i++)
        {
            n[i-1] = i;
        }
        for (i = 1; i <= 10; i++)
        {
            int j = rand() % (11-i) + i;
            int t = n[i-1];  // i与j交换
            n[i-1] =n[j-1];
            n[j-1] = t;
            printf(" %d", n[i-1]);
        }
        printf("
    ");
        return 0;
    }
    
     9 7 10 4 1 6 5 3 8 2
    
    Process returned 0 (0x0)   execution time : 2.027 s
    Press any key to continue.
    
     1 5 6 3 9 8 7 2 4 10
    
    Process returned 0 (0x0)   execution time : 1.686 s
    Press any key to continue.
    
    // 每次输出都不一样

    17  阵列的排序问题

    阵列排序好以后有如下好处:

    最大、最小值,中位数,众数,查某一个数(二分)。

    17.3  冒泡排序法::

    #include <stdio.h>
    
    int main()
    {
    
        int i, j, v[5];
        for (i = 0; i < 5; i++) {
            scanf("%d", &v[i]);
        }// 用回圈读数
    
        for (i = 0; i < 5; i++) // 比较的轮数
        {
            for (j = 0; j < 5 - i; j++) //开始一轮一轮地比数字
            {
               if (v[j] > v[j + 1]) {
                int temp = v[j];
                v[j] = v[j + 1];
                v[j + 1] = temp;
               }
            }
        }
        for (i = 0; i < 5; i++) {
            printf("%d ", v[i]);
        }
        return 0;
    }
    
    
    12 13 44 10 9
    9 10 12 13 44
    Process returned 0 (0x0)   execution time : 7.250 s
    Press any key to continue.

    18.2  阵列的阵列

    18.3 用二维阵列表示九宫格

    #include <stdio.h>
    
    int main()
    {
        int v[3][3], i, j, k = 1;
        for (i = 0; i < 3; i++) {
            for (j = 0; j < 3; j++) {
                v[i][j] = k;
                k++;
                printf("%d", v[i][j]);
            }
            printf("
    ");// 这语句很重要,没有这个就是一排,v[1][2]=6
    
        }
            printf("%d",v[1][2]);
            return 0;
    
    }
    
    
    123
    456
    789
    6
    Process returned 1 (0x1)   execution time : 4.901 s
    Press any key to continue.

     18.4 用一维阵列表示九宫格

    #include <stdio.h>
    
    int main()
    {
        int v[9];
        int i;
    
        for (i = 0; i < 9; i++) { // 0~8
            v[i] = i + 1; // 1~9
        }
    
        for (i = 0; i < 9; i++) {
            printf("%d ", v[i]);
            if (i % 3 == 2) { //换行的条件
                printf("
    ");
            }
        }
    }
    
    1 2 3
    4 5 6
    7 8 9
    
    Process returned 10 (0xA)   execution time : 17.671 s
    Press any key to continue.

    18.5  随机生成九宫格(随机产生是重点)

    // 二维产生随机九宫格
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    int main()
    {
        srand(time(0));
        int v[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
        int i, j, k = 0; // k从0开始的时候为(9-k)+k,k从1开始时为(10-k)+k
        for (i = 0; i < 3; i++) {
            for (j = 0; j < 3; j++) {
                int r = rand() % (9-k) + k;// rand()%10表示将产生的随机数对10求余,结果为余数,整体表示产生0到9的随机数
                int m = r / 3;
                int n = r % 3; // 求所在的行列
                int t = v[i][j];
                v[i][j] = v[m][n];
                v[m][n] = t;
                k ++;
            }
        }
        for (i = 0; i < 3; i++) {
            for (j = 0; j < 3; j++) {
                printf("%d ", v[i][j]);
            }
            printf("
    ");
        }
        return 0;
    
    }
    
    6 8 2
    7 1 4
    9 3 5
    
    Process returned 0 (0x0)   execution time : 11.846 s
    Press any key to continue.
    
    // 一维产生随机九宫格 
    
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main() {
        srand(time(0));
        int v[9] = {1,2,3,4,5,6,7,8,9};
        int i;
        for (i = 0; i < 9; i++) {
            int m = rand() % (9-i) + i;
            int t = v[i];
            v[i] = v[m];
            v[m] = t;
    
        }
        for (i = 0; i < 9; i++) {
            printf("%d ", v[i]);
            if (i % 3 == 2) {
                printf("
    ");
            }
        }
        return 0;
    }
    
    5 7 9
    6 1 3
    8 4 2
    
    Process returned 0 (0x0)   execution time : 11.088 s
    Press any key to continue
  • 相关阅读:
    Gem命令详解
    使用Ruby脚本部署Redis Cluster集群
    解决gem install redis报错
    Redis Cluster命令安装
    Redis Sentinel原理介绍与部署
    PyCharm单行多行代码注释快捷键
    windows下python安装与卸载
    MySQL通过SQL语句查看表的索引
    Redis主从复制
    MySQL开启binlog日志
  • 原文地址:https://www.cnblogs.com/pxxfxxxx/p/10838261.html
Copyright © 2020-2023  润新知