引言
北理工C语言乐学15题是针对C语言初学者设计的练习题,旨在帮助学生巩固C语言基础知识,提高编程技巧。本文将详细解析这15道题目,帮助读者轻松掌握编程技巧。
题目一:输出“Hello, World!”
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
解析:这是C语言最基础的程序,用于输出“Hello, World!”。
题目二:计算两个整数的和
#include <stdio.h>
int main() {
int a, b, sum;
scanf("%d %d", &a, &b);
sum = a + b;
printf("Sum: %d\n", sum);
return 0;
}
解析:通过scanf函数读取两个整数,计算它们的和,并输出结果。
题目三:判断一个数是否为偶数
#include <stdio.h>
int main() {
int num;
scanf("%d", &num);
if (num % 2 == 0) {
printf("Even\n");
} else {
printf("Odd\n");
}
return 0;
}
解析:通过取余运算符判断一个数是否为偶数。
题目四:计算阶乘
#include <stdio.h>
int main() {
int n, i, factorial = 1;
scanf("%d", &n);
for (i = 1; i <= n; i++) {
factorial *= i;
}
printf("Factorial: %d\n", factorial);
return 0;
}
解析:使用循环计算阶乘。
题目五:计算斐波那契数列
#include <stdio.h>
int main() {
int n, i, a = 0, b = 1, c;
scanf("%d", &n);
for (i = 1; i <= n; i++) {
c = a + b;
a = b;
b = c;
}
printf("Fibonacci: %d\n", b);
return 0;
}
解析:使用循环计算斐波那契数列。
题目六:冒泡排序
#include <stdio.h>
void bubbleSort(int arr[], int n) {
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int n, i;
scanf("%d", &n);
int arr[n];
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
bubbleSort(arr, n);
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
解析:使用冒泡排序算法对数组进行排序。
题目七:选择排序
#include <stdio.h>
void selectionSort(int arr[], int n) {
int i, j, min_idx, temp;
for (i = 0; i < n - 1; i++) {
min_idx = i;
for (j = i + 1; j < n; j++) {
if (arr[j] < arr[min_idx]) {
min_idx = j;
}
}
temp = arr[min_idx];
arr[min_idx] = arr[i];
arr[i] = temp;
}
}
int main() {
int n, i;
scanf("%d", &n);
int arr[n];
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
selectionSort(arr, n);
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
解析:使用选择排序算法对数组进行排序。
题目八:插入排序
#include <stdio.h>
void insertionSort(int arr[], int n) {
int i, j, key;
for (i = 1; i < n; i++) {
key = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
int main() {
int n, i;
scanf("%d", &n);
int arr[n];
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
insertionSort(arr, n);
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
解析:使用插入排序算法对数组进行排序。
题目九:计算字符串长度
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
scanf("%s", str);
printf("Length: %d\n", strlen(str));
return 0;
}
解析:使用strlen函数计算字符串长度。
题目十:字符串反转
#include <stdio.h>
#include <string.h>
void reverseString(char *str) {
int len = strlen(str);
int i;
for (i = 0; i < len / 2; i++) {
char temp = str[i];
str[i] = str[len - i - 1];
str[len - i - 1] = temp;
}
}
int main() {
char str[100];
scanf("%s", str);
reverseString(str);
printf("Reversed String: %s\n", str);
return 0;
}
解析:使用循环交换字符串首尾字符,实现字符串反转。
题目十一:判断字符串是否为回文
#include <stdio.h>
#include <string.h>
int isPalindrome(char *str) {
int len = strlen(str);
int i;
for (i = 0; i < len / 2; i++) {
if (str[i] != str[len - i - 1]) {
return 0;
}
}
return 1;
}
int main() {
char str[100];
scanf("%s", str);
if (isPalindrome(str)) {
printf("Palindrome\n");
} else {
printf("Not Palindrome\n");
}
return 0;
}
解析:通过比较字符串首尾字符,判断字符串是否为回文。
题目十二:计算两个整数的最大公约数
#include <stdio.h>
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("GCD: %d\n", gcd(a, b));
return 0;
}
解析:使用递归算法计算最大公约数。
题目十三:计算两个整数的最大公倍数
#include <stdio.h>
int lcm(int a, int b) {
return (a * b) / gcd(a, b);
}
int main() {
int a, b;
scanf("%d %d", &a, &b);
printf("LCM: %d\n", lcm(a, b));
return 0;
}
解析:使用最大公约数计算最大公倍数。
题目十四:计算阶乘的阶乘
#include <stdio.h>
int factorial(int n) {
if (n == 0) {
return 1;
}
return n * factorial(n - 1);
}
int main() {
int n;
scanf("%d", &n);
printf("Factorial of Factorial: %d\n", factorial(factorial(n)));
return 0;
}
解析:使用递归算法计算阶乘的阶乘。
题目十五:计算斐波那契数列的第n项
#include <stdio.h>
int fibonacci(int n) {
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
int main() {
int n;
scanf("%d", &n);
printf("Fibonacci: %d\n", fibonacci(n));
return 0;
}
解析:使用递归算法计算斐波那契数列的第n项。
总结
通过以上15道题目的解析,相信读者已经对C语言编程技巧有了更深入的了解。希望这些题目能够帮助读者巩固C语言基础知识,提高编程能力。
