自学内容网 自学内容网

C语言---程序设计基础练习题目3

对之前的练习和文章进行回顾,并在此文章中解决新问题
如在题目中有看不明白的地方
可跳转我的主页去查看
Wanyu的主页

以下题目是留在文章中的练习:(点击即可查看)
Wanyu C语言—程序设计练习题目及学习方法2

习题1:计算正整数1-100中的奇数之和和偶数之和
#include <stdio.h>

int main() {
    int sum_odd = 0, sum_even = 0;

    for (int i = 1; i <= 100; i++) {
        if (i % 2 == 0) {
            sum_even += i;
        } else {
            sum_odd += i;
        }
    }

    printf("1-100之间奇数之和为:%d\n", sum_odd);
    printf("1-100之间偶数之和为:%d\n", sum_even);

    return 0;
}

解释:

  • 初始化变量: sum_odd 和 sum_even 分别用来存储奇数和偶数的和,初始值为0。
  • 循环遍历: 使用 for 循环遍历1到100之间的所有整数。
  • 判断奇偶: 使用 % 取余运算符判断当前数字 i 是奇数还是偶数。
  • 累加: 如果是偶数,则将 i 加到 sum_even 中;如果是奇数,则将 i 加到 sum_odd 中。
习题2:输入10个数,统计并输出整数、负数和0的个数
#include <stdio.h>

int main() {
    int num, positive = 0, negative = 0, zero = 0;

    for (int i = 1; i <= 10; i++) {
        printf("请输入第%d个数:", i);
        scanf("%d", &num);

        if (num > 0) {
            positive++;
        } else if (num < 0) {
            negative++;
        } else {
            zero++;
        }
    }

    printf("正数个数:%d\n", positive);
    printf("负数个数:%d\n", negative);
    printf("0的个数:%d\n", zero);

    return 0;
}

解释:

  • 初始化: positive、negative 和 zero 分别用来存储正数、负数和0的个数,初始值为0。
  • 输入: 使用 for 循环,提示用户输入10个整数。
  • 分类统计: 根据输入的数字是正数、负数还是0,分别将对应的计数器加1。
习题3:打印并输出所有的水仙花数
#include <stdio.h>

int main() {
    int i, a, b, c;

    for (i = 100; i <= 999; i++) {
        a = i / 100;
        b = (i % 100) / 10;
        c = i % 10;
        if (i == a * a * a + b * b * b + c * c * c) {
            printf("%d是水仙花数\n", i);
        }
    }

    return 0;
}

解释:

  • 循环遍历: 使用 for 循环遍历100到999之间的所有三位数。
  • 分解: 将三位数 i 分解成百位数 a、十位数 b 和个位数 c。
  • 判断: 判断 i 是否等于 a 的三次方加上 b 的三次方加上 c 的三次方。
习题4:将一个数组中的元素进行逆序存放,9,8,7,6,5,4,3,2,1

思路:利用双指针法,
一个指针从数组开头开始,
另一个从末尾开始,
依次交换这两个指针所指的元素,
直到它们相遇或交错。

#include <stdio.h>

void reverseArray(int arr[], int size) {
    int temp;
    for (int i = 0; i < size / 2; i++) {
        temp = arr[i];
        arr[i] = arr[size - i - 1];
        arr[size - i - 1] = temp;
    }
}

int main() {
    int arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1};
    int size = sizeof(arr) / sizeof(arr[0]);

    reverseArray(arr, size);

    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

大家需认真去读程序,
去思考此代码中涉及的知识点,
这里帮助大家快速复习
WanyuC语言—函数指针基础总结万字(4)

习题5:在一个升序数组中插入一个数,使数组仍然保持升序排列

思路:找到插入位置,
将后续元素右移一位,
插入新元素。

#include <stdio.h>

void insertAndSort(int arr[], int *size, int num) {
    int i;
    for (i = *size - 1; (i >= 0 && arr[i] > num); i--) {
        arr[i + 1] = arr[i];
    }
    arr[i + 1] = num;
    (*size)++;
}

int main() {
    int arr[10] = {1, 3, 5, 7, 9}; // 假设已有 5 个元素
    int size = 5;
    int num = 6;

    insertAndSort(arr, &size, num);

    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    return 0;
}

习题6:合并两个降序数组,使合并后的数据仍然保持降序排列
#include <stdio.h>

void mergeArrays(int arr1[], int size1, int arr2[], int size2, int result[]) {
    int i = 0, j = 0, k = 0;
    while (i < size1 && j < size2) {
        if (arr1[i] > arr2[j]) {
            result[k++] = arr1[i++];
        } else {
            result[k++] = arr2[j++];
        }
    }
    while (i < size1) {
        result[k++] = arr1[i++];
    }
    while (j < size2) {
        result[k++] = arr2[j++];
    }
}

int main() {
    int arr1[] = {9, 7, 5, 3, 1};
    int arr2[] = {8, 6, 4, 2, 0};
    int size1 = sizeof(arr1) / sizeof(arr1[0]);
    int size2 = sizeof(arr2) / sizeof(arr2[0]);
    int result[size1 + size2];

    mergeArrays(arr1, size1, arr2, size2, result);

    for (int i = 0; i < size1 + size2; i++) {
        printf("%d ", result[i]);
    }
    return 0;
}

习题7:求一个3x3矩阵主对角线元素之和
#include <stdio.h>

int main() {
    int matrix[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
    int sum = 0;

    for (int i = 0; i < 3; i++) {
        sum += matrix[i][i];
    }

    printf("主对角线元素之和为:%d\n", sum);
    return 0;
}

习题8:编写程序,打印10行杨辉三角

思路:用二维数组存储三角形,
每行第一个和最后一个元素为 1,
中间元素是上行两个元素之和。

#include <stdio.h>

void printPascalsTriangle(int rows) {
    int arr[rows][rows];

    for (int i = 0; i < rows; i++) {
        arr[i][0] = arr[i][i] = 1;
        for (int j = 1; j < i; j++) {
            arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
        }
    }

    for (int i = 0; i < rows; i++) {
        for (int j = 0; j <= i; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }
}

int main() {
    int rows = 10;
    printPascalsTriangle(rows);
    return 0;
}

快速回顾:
WanyuC语言—复杂数据类型程序设计(5)


原文地址:https://blog.csdn.net/m0_75089299/article/details/143579720

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!