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)