pxxfxxxxx

导航

阵列变数(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\n", max);
    printf("Avg: %d\n", 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\n", max);
    printf("Avg: %d\n", 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\n", max10(n));
    printf("Avg: %d\n", 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("\n");
    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("\n");
    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("\n");
    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("\n");// 这语句很重要,没有这个就是一排,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("\n");
        }
    }
}

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("\n");
    }
    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("\n");
        }
    }
    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

 

posted on 2019-05-09 14:30  pxxfxxxxx  阅读(189)  评论(0编辑  收藏  举报