第六章 数组课后练习1-4

//
// Created by 86184 on 2024/8/11.
//
//素数,又称质数,
//是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
//换句话说,素数只有两个正因数:1和它本身。‌
//1.用筛选法 求100之内的素数

#include <stdio.h>
int main() {
    int i;
    int array[100];
    //向数组中填充1—100数据
    for (i = 0; i < 100; ++i) {
        array[i] = i + 1;
    }
    //1不是素数 只需要将1划掉
    array[0] = 0;

    for (i = 1; i < 100; ++i) {
        //跳过数组中已经被赋值为零的元素 已经比前面的数字模过的元素
        if (array[i] == 0) {
            continue;
        }
        //使用a[i]去模其之后所有数据
        for (int j = i + 1; j < 100; ++j) {
            //排除后面已经被摸过的元素
            if (0 != array[j] && array[j] % array[i] == 0) {
                array[j] = 0;
            }
        }
    }
    //输出所有的素数
    for (int j = 0; j < 100; ++j) {
        if (0 != array[j]) {
            printf("%d ", array[j]);
        }
    }
    printf("\n");
    return 1;
}
//
// Created by 86184 on 2024/8/11.
//
//2.用选择法对十个整形数据排序

//分析:
//  1.10个整数排序 准备十个整型数据
//      a.数据给死
//      b.可以输入
//  整型数组
//  2.选择法
//      类似于简单选择排序
//      每一趟找到最大元素所在位置
//      与末尾元素进行交换
//  3.升序

#include <stdio.h>

int main() {
    int maxPos, temp;
    int array[10] = {2, 8, 3, 9, 5, 7, 1, 4, 0, 6};
    int size = sizeof(array) / sizeof(array[0]);
    //将排序之前的数组元素输出
    for (int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");
    for (int i = 0; i < size; ++i) {
        //选择法排序
        maxPos = 0;
        for (int j = 1; j < size - i; j++) {
            if (array[j] > array[maxPos]) {
                maxPos = j;
            }
        }
        if (maxPos != size - i - 1) {
            //交换元素
            temp = array[maxPos];
            array[maxPos] = array[size - i - 1];
            array[size - i - 1] = temp;
        }

    }
    //将排序好的数组元素输出
    for (int i = 0; i < size; i++) {
        printf("%d ", array[i]);
    }
    printf("\n");
    return 1;
}
//
// Created by 86184 on 2024/8/11.
//
//3. 求一个3*3的整型矩阵的对角线元素之和

//分析:
//  左上角到右下角:行列小标相同
//  右上角到左下角:行下标依次递增 列下标依次递减


#include <stdio.h>

int main() {
    int i, j;
    int sum = 0;
    //接收矩阵中的数据
    int array[3][3];
    for (i = 0; i < 3; ++i) {
        for (j = 0; j < 3; j++) {
            scanf("%d", &array[i][j]);
        }
    }

    //左上角到右下角对角线元素之和
    for (i = 0; i < 3; ++i) {
        for (j = 0; j < 3; j++) {
            if (i == j) {
                sum += array[i][j];
            }
        }
    }
    //右上角到左下角对角线元素之和
    for (i = 0; i < 3; ++i) {
        for (j = 2; j >= 0; j--) {
            if ((i + j) == 2) {
                sum += array[i][j];
            }
        }
    }

    printf("对角线元素之和为:%d", sum);
    return 1;
}
//
// Created by 86184 on 2024/8/11.
//
//4.有一个已经排好序的数组,要求输入一个数后,按原来的排序规律将它插入数组中

//分析:
//1.找待插入元素在数组中的位置
//  一边比较,一边搬移元素
//2.插入元素

#include <stdio.h>

int main() {
    int key = 0, end = 8;
    int array[10] = {0, 1, 2, 3, 4, 6, 7, 8, 9};
    printf("请输入插入的元素:");
    fflush(stdout);
    scanf("%d", &key);

    printf("原数组:\n");
    for (int i = 0; i < 9; ++i) {
        printf("%d ", array[i]);
    }
    printf("\n");
    //找待插位置
    while (end >= 0 && key < array[end]) {
        array[end + 1] = array[end];
        end--;
    }
    //插入元素
    array[end + 1] = key;

    printf("结果数组:\n");
    for (int i = 0; i < 10; ++i) {
        printf("%d ", array[i]);
    }
    return 1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值