• C语言期末复习题(下)


    14. 用选择法对10个整数从小到大排序

    test14() {
        int i, j, t, a[10];
        for (i = 0; i < 10; i++) {
            scanf("%d", &a[i]);
        }
        for (i = 0; i < 9; i++) {
            for (j = i + 1; j < 10; j++) {
                if (a[j] < a[i]) {
                    t = a[i];
                    a[i] = a[j];
                    a[j] = t;
                }
            }
        }
        for (i = 0; i < 10; i++) {
            printf("%d\n", a[i]);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    15. 求一个3×3矩阵对角线元素之和

    test15() {
        int arr[3][3] = {{80, 75, 92},
                         {71, 59, 63},
                         {87, 90, 76}};
        int row = sizeof(arr) / sizeof(arr[0]);
        int col = sizeof(arr[0]) / sizeof(arr[0][0]);
        int sum = 0;
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < col; j++) {
                if ((i == j) || (i + j == row - 1)) {
                    if (i == 1 && j == 1) {
                        sum += arr[i][j] * 2;
                    } else {
                        sum += arr[i][j];
                    }
                }
            }
        }
        printf("对角线的和为:%d\n", sum);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    16. 已有一个已排序的数组,如{1,7,8,17,23,24,59,62,101},现从键盘输入一个数,要求按原来排序的规律将它插入数组中

    test16() {
        int arr[11] = {1, 7, 8, 17, 23, 24, 59, 62, 101};
        int n = 11;
        int x;
        printf("输入一个数:\n");
        scanf("%d", &x);
        for (int i = 0; i < n; i++) {
            if (arr[i] > x) {
                for (int j = n; j > i; j--) {
                    arr[j] = arr[j - 1];
                }
                arr[i] = x;
                break;
            }
        }
        printf("插入后排序的数组\n");
        for (int i = 0; i < 11; ++i) {
            printf("%d ", arr[i]);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    17. 打印出以下杨辉三角形(要求打印出10行)

    test17() {
        int i, j;
        int a[10][10];
        printf("\n");
        for (i = 0; i < 10; i++) {
            a[i][0] = 1;
            a[i][i] = 1;
        }
        for (i = 2; i < 10; i++) {
            for (j = 1; j < i; j++) {
                a[i][j] = a[i - 1][j - 1] + a[i - 1][j];
            }
        }
        for (i = 0; i < 10; i++) {
            for (j = 0; j <= i; j++) {
                printf("%d  ", a[i][j]);
            }
            printf("\n");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    18. 找出一个二维数组中的鞍点,即该位置上的元素在该行上最大,在该列上最小,也可能没有鞍点

    例如,下列二维数组中8为鞍点
    8 1 6
    13 5 7
    24 9 2

    test18() {
        int arr[3][3] = {{8,  1, 6},
                         {13, 5, 7},
                         {24, 9, 2}};
        int row = sizeof(arr) / sizeof(arr[0]);
        int col = sizeof(arr[0]) / sizeof(arr[0][0]);
        // 记录坐标
        int a = 0;
        int b = 0;
        int num;
        // 行最大
        int max = 0;
        // 列最小
        int min = 0;
        printf("打印数组\n");
        for (int i = 0; i < 3; ++i) {
            for (int j = 0; j < 3; ++j) {
                printf("%d ", arr[i][j]);
            }
            printf("\n");
        }
        for (int i = 0; i < row; i++) {
            max = arr[i][0];
            for (int j = 0; j < col; j++) {
                if (arr[i][j] > max) {  // 行内最大
                    max = arr[i][j];
                    b = j;  //i 行最大的数在j列,那么现在去第j列找最小的数,如果找到的数的行数为i,便是;
                }
            }
            min = arr[i][b];  // 设目前最小为i行b列
            a = i;  // 假设
            for (int k = 0; k < row; k++) {
                if (arr[k][b] < min) {  // 列内最小
                    min = arr[k][b];
                    a = k;  // 如果有更小的,那么a就变化
                }
            }
            if (a == i) {
                num = 0;
                printf("本数组的鞍点为:arr[%d][%d] = %d\n", a, b, min);
            }
        }
        if (num) {
            printf("本数组不存在鞍点");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    19. 编一程序,将两个字符串连接起来,不要strcat函数

    test19() {
        char str1[80], str2[40];
        int i = 0, j = 0;
        printf("请输入字符串:\n");
        gets(str1);
        printf("请再次输入字符串:\n");
        gets(str2);
        while (str1[i] != '\0') {
            i++;
        }
        while (str1[j] != '\0') {
            str1[i] = str2[j];
            i++;
            j++;
        }
        str1[i] = '\0';
        printf("连接后的字符串为:%s \n", str1);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    20. 使给定的一个二维数组(3×3)转置,即行列互换。

    test20() {
        int arr[3][3] = {{8,  1, 6},
                         {13, 5, 7},
                         {24, 9, 2}};
        printf("排序前!\n");
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                printf("%d ", arr[i][j]);
            }
            printf("\n");
        }
        
        int i, j, t;
        for (i = 0; i < 3; i++) {
            for (j = 0; j < i; j++) {//这里是j
                t = arr[i][j];//数组里面不能将行列互换,只能借助另外的参数;
                arr[i][j] = arr[j][i];//即不能写成a[i][j]=a[j][i];
                arr[j][i] = t;
            }
        }
        printf("排序后!\n");
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                printf("%d ", arr[i][j]);
            }
            printf("\n");
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    21. 写一函数用冒泡法对输入的10个数按由小到大的顺序排列

    test21() {
        int arr[10];
        printf("输入10个数\n");
        for (int i = 0; i < 10; ++i) {
            scanf("%d", &arr[i]);
        }
        for (int i = 0; i < 10; ++i) {
            for (int j = 0; j < 10 - i - 1; ++j) {
                if (arr[j] > arr[j + 1]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
        printf("从小到大的排序是\n");
        for (int i = 0; i < 10; i++) {
            printf("%d ", arr[i]);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    22. 回文数的判断:输入一个5位数,判断它是不是回文数,即个位与万位、十位与千位是否分别相同。如:12321是一个回文数

    test22() {
        int x;
        printf("输入一个数 判断是否是回文数\n");
        scanf("%d", &x);
        if (x / 10000 == x % 10 && x / 10 % 10 == x / 1000 % 10) {
            printf("%d是一个回文数", x);
        } else {
            printf("%d是不是回文数", x);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    23. 兔子问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问前20个月每个月的兔子总数为多少?

    test23() {
        int sum = 0, i;//兔子总数(对)
        int f[100] = {1, 1};//中间变量
        for (i = 2; i < 20; i++) {
            f[i] = f[i - 1] + f[i - 2];
            sum += f[i];
        }
        printf("%d", sum);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    24. 有10位同学,参加了3门课程的考试,他们的成绩存放在数组score[3][10]中,数组每一行存放的是一门课程所有同学的成绩。编写一个程序,找出每门课程的最高分,并输出

    #define void chose(struct Student *s, int n);
    struct Student {
        int num;
        float score[3];
    } s[10];
    
    void chose(struct Student *s, int n) {
        int i, j, k = 0;
        float temp;
        for (i = 0; i < 3; i++) {
            temp = s[0].score[i];
            k = s[0].num;
            for (j = 0; j < n; j++) {
                if (s[j].score[i] > temp) {
                    temp = s[j].score[i];
                    k = s[j].num;
                }
            }
            printf("%d号课程最高分是学生%d 的: %f\n", i+1, k, temp);
        }
    }
    int main() {
        int i, j;
        for (i = 0; i < 3; i++) {
            printf("请输入第%d个学生的学号和成绩:", i + 1);
            scanf("%d %f %f %f", &s[i].num, &s[i].score[0], &s[i].score[1], &s[i].score[2]);
        }
        chose(s, 10);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    25. 打印乘法九九表

    int main() {
        int i, j;
        for (i = 1; i <= 9; i++) {
            for (j = 1; j <= i; j++)
                printf("%d*%d=%2d\t", i, j, i * j);
            printf("\n");
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    26. 从键盘输入10个数,求出他们的平均值及比平均值大的数。要求编写自定义函数完成

    int a[10] = {0};
    
    float avg(int array[], int n) {
        if (n <= 0)
            return 0;
        int sum = 0;
        for (int i = 0; i < n; ++i) {
            sum += array[i];
        }
        return sum / n;
    }
    
    int main() {
        for (int i = 0; i < 10; i++)
            scanf("%d", &a[i]);
        float avgx = avg(a, 10);
        int key = 0;
        for (int i = 0; i < 10; i++) {
            if (a[i] > avgx) {
                printf("%d\t", a[i]);
                key++;
            }
        }
        printf("比avg%d大的数有%d个", avgx, key);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    贝叶斯网络是神经网络吗,贝叶斯网络和神经网络
    Redis的持久化机制
    Oracle 数据库相关操作记录
    C语言之字符函数&字符串函数篇(1)
    群晖synology DSM 7.2设置钉钉Webhooks通知
    解放你的项目!depcheck:清理无用依赖,让代码更精致
    糖尿病患者也会低血糖?
    Learning Git Branch 题解(基础、高级、Git远程仓库)
    LVS集群
    单向环形链表介绍以及约瑟夫问题分析
  • 原文地址:https://blog.csdn.net/qq_51495235/article/details/127826773