1. 习题一:计算阶乘
1.1 题目描述
编写一个C语言程序,计算一个非负整数的阶乘。
1.2 解题思路
阶乘的定义是n! = n * (n-1) * (n-2) * … * 1。我们可以使用递归或者循环来计算阶乘。
1.3 代码实现
#include <stdio.h>
// 递归方法
unsigned long long factorial_recursive(int n) {
if (n <= 1) return 1;
return n * factorial_recursive(n - 1);
}
// 循环方法
unsigned long long factorial_iterative(int n) {
unsigned long long result = 1;
for (int i = 2; i <= n; ++i) {
result *= i;
}
return result;
}
int main() {
int number;
printf("Enter a non-negative integer: ");
scanf("%d", &number);
printf("Factorial of %d is %llu\n", number, factorial_iterative(number));
return 0;
}
1.4 解答解析
在上面的代码中,我们提供了两种计算阶乘的方法。factorial_recursive函数使用递归方法计算阶乘,而factorial_iterative函数使用循环方法。在main函数中,我们从用户那里接收一个非负整数,然后使用循环方法计算并打印出阶乘的结果。
2. 习题二:逆序打印数组
2.1 题目描述
编写一个C语言程序,逆序打印一个整数数组。
2.2 解题思路
要逆序打印一个数组,我们可以使用一个循环,从数组的最后一个元素开始打印,直到第一个元素。
2.3 代码实现
#include <stdio.h>
void print_array_reverse(int arr[], int size) {
for (int i = size - 1; i >= 0; --i) {
printf("%d ", arr[i]);
}
printf("\n");
}
int main() {
int numbers[] = {1, 2, 3, 4, 5};
int size = sizeof(numbers) / sizeof(numbers[0]);
print_array_reverse(numbers, size);
return 0;
}
2.4 解答解析
在上述代码中,print_array_reverse函数接受一个整数数组和它的大小,然后逆序打印数组中的每个元素。在main函数中,我们定义了一个整数数组numbers,并调用print_array_reverse函数来逆序打印这个数组。
3. 习题三:判断素数
3.1 题目描述
编写一个C语言程序,判断一个整数是否是素数。
3.2 解题思路
一个素数是一个大于1的自然数,且除了1和它本身外,不能被其他自然数整除。为了判断一个数是否是素数,我们可以尝试从2开始到该数的平方根,看看是否有任何数能整除它。
3.3 代码实现
#include <stdio.h>
#include <math.h>
int is_prime(int n) {
if (n <= 1) return 0;
for (int i = 2; i <= sqrt(n); ++i) {
if (n % i == 0) return 0;
}
return 1;
}
int main() {
int number;
printf("Enter a number to check if it is prime: ");
scanf("%d", &number);
if (is_prime(number)) {
printf("%d is a prime number.\n", number);
} else {
printf("%d is not a prime number.\n", number);
}
return 0;
}
3.4 解答解析
在上述代码中,is_prime函数接受一个整数并判断它是否是素数。在main函数中,我们从用户那里接收一个整数,并使用is_prime函数来判断这个数是否是素数,然后打印出相应的结果。
