C语言程序设计:大量练习题(50题)
下面是C语言的一些经典练习题,帮助你加深对C语言的理解和掌握。
基本语法
1. 输出"Hello, World!"到屏幕。
2. 输入一个整数,输出该整数的平方。
3. 输入一个整数,判断它是否是偶数。
4. 输入两个整数,输出它们的和、差、积和商。
5. 输入一个浮点数,计算其平方根。
6. 输入一个整数n,输出从1到n的所有整数。
7. 输出1到100之间所有能被3整除的数字。
8. 输入一个整数,判断它是正数、负数还是零。
9. 输入一个三位数,输出它的每一位数字。
10. 输出99乘法表。
条件语句
11. 输入三个整数,输出其中最大的一个。
12. 输入一个年份,判断它是否是闰年。
13. 输入一个月,输出该月的天数(考虑闰年)。
14. 输入一个数字,判断它是否是质数。
15. 输入一个正整数,输出它的阶乘。
16. 输入一个月份,输出季节(春、夏、秋、冬)。
17. 输入一个字符,判断它是字母、数字还是其他字符。
18. 输入一个整数,判断它是否是回文数(如121, 12321等)。
19. 输入一个正整数,输出该数的各个因子。
20. 输入一个年份和月份,判断该月有多少天。
循环语句
21. 输出1到100的所有偶数。
22. 计算1到100之间所有奇数的和。
23. 计算1到100之间所有数字的和。
24. 输入一个整数n,输出从1到n的阶乘。
25. 输入一个整数n,输出1到n的所有奇数。
26. 输入一个整数n,输出1到n之间的所有质数。
27. 输出一个九九乘法表。
28. 输入一个正整数,输出它的每一位数字。
29. 输入一个正整数,判断它是否是完全数(如6 = 1 + 2 + 3)。
30. 输入一个整数,输出它的反向数字(如输入123,输出321)。
数组
31. 输入10个整数,输出这些整数的和与平均值。
32. 输入一个数组,找出数组中的最大值和最小值。
33. 输入一个整数数组,计算并输出数组的平均值。
34. 输入两个整数数组,计算它们的和并输出。
35. 输入一个整数数组,输出其中的偶数和奇数。
36. 计算一个数组中的元素之和。
37. 输入一个数组,输出数组的逆序。
38. 输入一个数组,输出该数组的最大值和最小值的差。
39. 输入一个二维数组,输出其所有元素的和。
40. 输入一个二维数组,输出每列的和。
字符串
41. 输入一个字符串,输出该字符串的长度。
42. 输入一个字符串,判断该字符串是否是回文。
43. 输入一个字符串,输出它的每个字符。
44. 输入两个字符串,判断它们是否相等。
45. 输入一个字符串,将所有小写字母转换为大写字母。
46. 输入一个字符串,将所有大写字母转换为小写字母。
47. 输入一个字符串,删除其中所有空格。
48. 输入两个字符串,输出它们的拼接结果。
49. 输入一个字符串,判断它是否包含数字。
50. 输入一个字符串,输出该字符串中的单词数量。
练习题答案概述:
1. 输出"Hello, World!"到屏幕。
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
2. 输入一个整数,输出该整数的平方。
#include <stdio.h>
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
printf("%d 的平方是:%d\n", num, num * num);
return 0;
}
3. 输入一个整数,判断它是否是偶数。
#include <stdio.h>
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
if (num % 2 == 0) {
printf("%d 是偶数\n", num);
} else {
printf("%d 是奇数\n", num);
}
return 0;
}
4. 输入两个整数,输出它们的和、差、积和商。
#include <stdio.h>
int main() {
int num1, num2;
printf("请输入两个整数:");
scanf("%d %d", &num1, &num2);
printf("和:%d\n", num1 + num2);
printf("差:%d\n", num1 - num2);
printf("积:%d\n", num1 * num2);
if (num2 != 0) {
printf("商:%f\n", (float)num1 / num2);
} else {
printf("商:无法除以零\n");
}
return 0;
}
5. 输入一个浮点数,计算其平方根。
#include <stdio.h>
#include <math.h>
int main() {
double num;
printf("请输入一个浮点数:");
scanf("%lf", &num);
printf("平方根是:%f\n", sqrt(num));
return 0;
}
6. 输入一个整数n,输出从1到n的所有整数。
#include <stdio.h>
int main() {
int n;
printf("请输入一个整数:");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
printf("%d ", i);
}
printf("\n");
return 0;
}
7. 输出1到100之间所有能被3整除的数字。
#include <stdio.h>
int main() {
for (int i = 1; i <= 100; i++) {
if (i % 3 == 0) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
8. 输入一个整数,判断它是正数、负数还是零。
#include <stdio.h>
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
if (num > 0) {
printf("%d 是正数\n", num);
} else if (num < 0) {
printf("%d 是负数\n", num);
} else {
printf("它是零\n");
}
return 0;
}
9. 输入一个三位数,输出它的每一位数字。
#include <stdio.h>
int main() {
int num;
printf("请输入一个三位数:");
scanf("%d", &num);
printf("百位:%d,十位:%d,个位:%d\n", num / 100, (num / 10) % 10, num % 10);
return 0;
}
10. 输出99乘法表。
#include <stdio.h>
int main() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d * %d = %2d ", j, i, i * j);
}
printf("\n");
}
return 0;
}
11. 输入三个整数,输出其中最大的一个。
#include <stdio.h>
int main() {
int a, b, c;
printf("请输入三个整数:");
scanf("%d %d %d", &a, &b, &c);
int max = (a > b) ? (a > c ? a : c) : (b > c ? b : c);
printf("最大值是:%d\n", max);
return 0;
}
12. 输入一个年份,判断它是否是闰年。
#include <stdio.h>
int main() {
int year;
printf("请输入一个年份:");
scanf("%d", &year);
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
printf("%d 是闰年\n", year);
} else {
printf("%d 不是闰年\n", year);
}
return 0;
}
13. 输入一个月,输出该月的天数(考虑闰年)。
#include <stdio.h>
int main() {
int month, year;
printf("请输入年份和月份:");
scanf("%d %d", &year, &month);
int days = 0;
if (month == 2) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
days = 29; // 闰年二月
} else {
days = 28; // 平年二月
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
days = 30;
} else if (month >= 1 && month <= 12) {
days = 31;
} else {
printf("无效的月份\n");
return 0;
}
printf("该月的天数是:%d\n", days);
return 0;
}
14. 输入一个数字,判断它是否是质数。
#include <stdio.h>
int main() {
int num;
printf("请输入一个数字:");
scanf("%d", &num);
if (num <= 1) {
printf("%d 不是质数\n", num);
} else {
int is_prime = 1; // 假设是质数
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
is_prime = 0;
break;
}
}
if (is_prime) {
printf("%d 是质数\n", num);
} else {
printf("%d 不是质数\n", num);
}
}
return 0;
}
15. 输入一个正整数,输出它的阶乘。
#include <stdio.h>
int main() {
int num;
long long factorial = 1;
printf("请输入一个正整数:");
scanf("%d", &num);
for (int i = 1; i <= num; i++) {
factorial *= i;
}
printf("%d 的阶乘是:%lld\n", num, factorial);
return 0;
}
16. 输入一个月份,输出季节(春、夏、秋、冬)。
#include <stdio.h>
int main() {
int month;
printf("请输入一个月份:");
scanf("%d", &month);
if (month >= 3 && month <= 5) {
printf("春季\n");
} else if (month >= 6 && month <= 8) {
printf("夏季\n");
} else if (month >= 9 && month <= 11) {
printf("秋季\n");
} else if (month == 12 || month == 1 || month == 2) {
printf("冬季\n");
} else {
printf("无效的月份\n");
}
return 0;
}
17. 输入一个字符,判断它是字母、数字还是其他字符。
#include <stdio.h>
int main() {
char ch;
printf("请输入一个字符:");
scanf("%c", &ch);
if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
printf("%c 是字母\n", ch);
} else if (ch >= '0' && ch <= '9') {
printf("%c 是数字\n", ch);
} else {
printf("%c 是其他字符\n", ch);
}
return 0;
}
18. 输入一个整数,判断它是否是回文数(如121, 12321等)。
#include <stdio.h>
int main() {
int num, original, reversed = 0, remainder;
printf("请输入一个整数:");
scanf("%d", &num);
original = num;
while (num != 0) {
remainder = num % 10;
reversed = reversed * 10 + remainder;
num /= 10;
}
if (original == reversed) {
printf("%d 是回文数\n", original);
} else {
printf("%d 不是回文数\n", original);
}
return 0;
}
19. 输入一个正整数,输出它的各个因子。
#include <stdio.h>
int main() {
int num;
printf("请输入一个正整数:");
scanf("%d", &num);
printf("%d 的因子有:", num);
for (int i = 1; i <= num; i++) {
if (num % i == 0) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
20. 输入一个年份和月份,判断该月有多少天。
#include <stdio.h>
int main() {
int year, month, days = 0;
printf("请输入年份和月份:");
scanf("%d %d", &year, &month);
if (month == 2) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
days = 29; // 闰年二月
} else {
days = 28; // 平年二月
}
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
days = 30;
} else if (month >= 1 && month <= 12) {
days = 31;
} else {
printf("无效的月份\n");
return 0;
}
printf("该月有 %d 天\n", days);
return 0;
}
继续补充后面的练习题及其答案,帮助你进一步加深对C语言的理解和掌握。
21. 输出1到100的所有偶数。
#include <stdio.h>
int main() {
for (int i = 2; i <= 100; i += 2) {
printf("%d ", i);
}
printf("\n");
return 0;
}
22. 计算1到100之间所有奇数的和。
#include <stdio.h>
int main() {
int sum = 0;
for (int i = 1; i <= 100; i += 2) {
sum += i;
}
printf("1到100之间所有奇数的和是:%d\n", sum);
return 0;
}
23. 计算1到100之间所有数字的和。
#include <stdio.h>
int main() {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
printf("1到100之间所有数字的和是:%d\n", sum);
return 0;
}
24. 输入一个整数n,输出从1到n的阶乘。
#include <stdio.h>
int main() {
int num;
long long factorial = 1;
printf("请输入一个整数:");
scanf("%d", &num);
for (int i = 1; i <= num; i++) {
factorial *= i;
}
printf("1到%d的阶乘是:%lld\n", num, factorial);
return 0;
}
25. 输入一个整数n,输出1到n的所有奇数。
#include <stdio.h>
int main() {
int n;
printf("请输入一个整数:");
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
if (i % 2 != 0) {
printf("%d ", i);
}
}
printf("\n");
return 0;
}
26. 输入一个整数n,输出1到n之间的所有质数。
#include <stdio.h>
int main() {
int n;
printf("请输入一个整数:");
scanf("%d", &n);
for (int num = 2; num <= n; num++) {
int is_prime = 1;
for (int i = 2; i * i <= num; i++) {
if (num % i == 0) {
is_prime = 0;
break;
}
}
if (is_prime) {
printf("%d ", num);
}
}
printf("\n");
return 0;
}
27. 输出一个九九乘法表。
#include <stdio.h>
int main() {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
printf("%d*%d=%-2d ", j, i, i * j);
}
printf("\n");
}
return 0;
}
28. 输入一个正整数,输出它的每一位数字。
#include <stdio.h>
int main() {
int num;
printf("请输入一个正整数:");
scanf("%d", &num);
while (num > 0) {
printf("%d ", num % 10);
num /= 10;
}
printf("\n");
return 0;
}
29. 输入一个正整数,判断它是否是完全数(如6 = 1 + 2 + 3)。
#include <stdio.h>
int main() {
int num, sum = 0;
printf("请输入一个正整数:");
scanf("%d", &num);
for (int i = 1; i < num; i++) {
if (num % i == 0) {
sum += i;
}
}
if (sum == num) {
printf("%d 是完全数\n", num);
} else {
printf("%d 不是完全数\n", num);
}
return 0;
}
30. 输入一个整数,输出它的反向数字(如输入123,输出321)。
#include <stdio.h>
int main() {
int num, reversed = 0;
printf("请输入一个整数:");
scanf("%d", &num);
while (num != 0) {
reversed = reversed * 10 + num % 10;
num /= 10;
}
printf("反向数字是:%d\n", reversed);
return 0;
}
31. 输入10个整数,输出这些整数的和与平均值。
#include <stdio.h>
int main() {
int sum = 0;
float avg;
for (int i = 0; i < 10; i++) {
int num;
printf("请输入第%d个整数:", i + 1);
scanf("%d", &num);
sum += num;
}
avg = sum / 10.0;
printf("这些整数的和是:%d,平均值是:%.2f\n", sum, avg);
return 0;
}
32. 输入一个数组,找出数组中的最大值和最小值。
#include <stdio.h>
int main() {
int arr[5], max, min;
printf("请输入5个整数:\n");
for (int i = 0; i < 5; i++) {
scanf("%d", &arr[i]);
}
max = arr[0];
min = arr[0];
for (int i = 1; i < 5; i++) {
if (arr[i] > max) max = arr[i];
if (arr[i] < min) min = arr[i];
}
printf("最大值:%d,最小值:%d\n", max, min);
return 0;
}
33. 输入一个整数数组,计算并输出数组的平均值。
#include <stdio.h>
int main() {
int arr[5], sum = 0;
float avg;
printf("请输入5个整数:\n");
for (int i = 0; i < 5; i++) {
scanf("%d", &arr[i]);
sum += arr[i];
}
avg = sum / 5.0;
printf("数组的平均值是:%.2f\n", avg);
return 0;
}
34. 输入两个整数数组,计算它们的和并输出。
#include <stdio.h>
int main() {
int arr1[5], arr2[5], sum[5];
printf("请输入第一个数组的5个整数:\n");
for (int i = 0; i < 5; i++) {
scanf("%d", &arr1[i]);
}
printf("请输入第二个数组的5个整数:\n");
for (int i = 0; i < 5; i++) {
scanf("%d", &arr2[i]);
}
for (int i = 0; i < 5; i++) {
sum[i] = arr1[i] + arr2[i];
}
printf("数组的和为:\n");
for (int i = 0; i < 5; i++) {
printf("%d ", sum[i]);
}
printf("\n");
return 0;
}
35. 输入一个整数数组,输出其中的偶数和奇数。
#include <stdio.h>
int main() {
int arr[5];
printf("请输入5个整数:\n");
for (int i = 0; i < 5; i++) {
scanf("%d", &arr[i]);
}
printf("偶数:");
for (int i = 0; i < 5; i++) {
if (arr[i] % 2 == 0) {
printf("%d ", arr[i]);
}
}
printf("\n奇数:");
for (int i = 0; i < 5; i++) {
if (arr[i] % 2 != 0) {
printf("%d ", arr[i]);
}
}
printf("\n");
return 0;
}
36. 计算一个数组中的元素之和。
#include <stdio.h>
int main() {
int arr[5], sum = 0;
printf("请输入5个整数:\n");
for (int i = 0; i < 5; i++) {
scanf("%d", &arr[i]);
sum += arr[i];
}
printf("数组元素的和是:%d\n", sum);
return 0;
}
37. 输入一个数组,输出数组的逆序。
#include <stdio.h>
int main() {
int arr[5];
printf("请输入5个整数:\n");
for (int i = 0; i < 5; i++) {
scanf("%d", &arr[i]);
}
printf("数组的逆序是:");
for (int i = 4; i >= 0; i--) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
38. 输入一个矩阵,计算其行列和。
#include <stdio.h>
int main() {
int matrix[3][3];
int row_sum[3] = {0}, col_sum[3] = {0};
printf("请输入一个3x3矩阵:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
scanf("%d", &matrix[i][j]);
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
row_sum[i] += matrix[i][j];
col_sum[j] += matrix[i][j];
}
}
printf("行和:\n");
for (int i = 0; i < 3; i++) {
printf("第%d行和:%d\n", i + 1, row_sum[i]);
}
printf("列和:\n");
for (int i = 0; i < 3; i++) {
printf("第%d列和:%d\n", i + 1, col_sum[i]);
}
return 0;
}
39. 输入一个矩阵,输出矩阵的转置。
#include <stdio.h>
int main() {
int matrix[3][3], transpose[3][3];
printf("请输入一个3x3矩阵:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
scanf("%d", &matrix[i][j]);
}
}
// 计算转置矩阵
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
transpose[j][i] = matrix[i][j];
}
}
printf("矩阵的转置是:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", transpose[i][j]);
}
printf("\n");
}
return 0;
}
40. 判断一个矩阵是否为对称矩阵。
#include <stdio.h>
int main() {
int matrix[3][3];
int is_symmetric = 1; // 假设是对称矩阵
printf("请输入一个3x3矩阵:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
scanf("%d", &matrix[i][j]);
}
}
// 判断是否为对称矩阵
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
if (matrix[i][j] != matrix[j][i]) {
is_symmetric = 0;
break;
}
}
if (!is_symmetric) break;
}
if (is_symmetric) {
printf("该矩阵是对称矩阵\n");
} else {
printf("该矩阵不是对称矩阵\n");
}
return 0;
}
41. 计算一个矩阵的行列式(适用于2x2矩阵)。
#include <stdio.h>
int main() {
int matrix[2][2];
printf("请输入一个2x2矩阵:\n");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
scanf("%d", &matrix[i][j]);
}
}
int determinant = matrix[0][0] * matrix[1][1] - matrix[0][1] * matrix[1][0];
printf("矩阵的行列式为:%d\n", determinant);
return 0;
}
42. 输入一个字符串,判断它是否是回文字符串。
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
int len, is_palindrome = 1;
printf("请输入一个字符串:");
scanf("%s", str);
len = strlen(str);
for (int i = 0; i < len / 2; i++) {
if (str[i] != str[len - i - 1]) {
is_palindrome = 0;
break;
}
}
if (is_palindrome) {
printf("该字符串是回文字符串\n");
} else {
printf("该字符串不是回文字符串\n");
}
return 0;
}
43. 输入两个字符串,判断它们是否相等。
#include <stdio.h>
#include <string.h>
int main() {
char str1[100], str2[100];
printf("请输入第一个字符串:");
scanf("%s", str1);
printf("请输入第二个字符串:");
scanf("%s", str2);
if (strcmp(str1, str2) == 0) {
printf("两个字符串相等\n");
} else {
printf("两个字符串不相等\n");
}
return 0;
}
44. 输入一个字符串,统计其中每个字符出现的次数。
#include <stdio.h>
#include <string.h>
int main() {
char str[100];
int count[256] = {0};
printf("请输入一个字符串:");
scanf("%s", str);
for (int i = 0; str[i] != '\0'; i++) {
count[str[i]]++;
}
printf("字符出现的次数:\n");
for (int i = 0; i < 256; i++) {
if (count[i] > 0) {
printf("%c: %d\n", i, count[i]);
}
}
return 0;
}
45. 计算两个字符串的最长公共子串。
#include <stdio.h>
#include <string.h>
int main() {
char str1[100], str2[100];
int len1, len2, max_len = 0;
int end_index = -1;
printf("请输入第一个字符串:");
scanf("%s", str1);
printf("请输入第二个字符串:");
scanf("%s", str2);
len1 = strlen(str1);
len2 = strlen(str2);
// 动态规划求解
int dp[len1 + 1][len2 + 1];
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= len1; i++) {
for (int j = 1; j <= len2; j++) {
if (str1[i - 1] == str2[j - 1]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
if (dp[i][j] > max_len) {
max_len = dp[i][j];
end_index = i - 1;
}
}
}
}
if (max_len > 0) {
printf("最长公共子串是:");
for (int i = end_index - max_len + 1; i <= end_index; i++) {
printf("%c", str1[i]);
}
printf("\n");
} else {
printf("没有公共子串\n");
}
return 0;
}
好的,我们可以继续拓展C语言练习题,加入一些涉及函数、指针和结构体的题目,让内容更完整,也更适合小白循序渐进学习。
46. 写一个函数,计算两个整数的和
#include <stdio.h>
int add(int a, int b) {
return a + b;
}
int main() {
int x, y;
printf("请输入两个整数:");
scanf("%d %d", &x, &y);
printf("它们的和是:%d\n", add(x, y));
return 0;
}
说明:add函数封装了加法操作,提高代码可复用性。
47. 写一个函数,判断一个整数是否是素数
#include <stdio.h>
int is_prime(int n) {
if (n < 2) return 0;
for (int i = 2; i*i <= n; i++) {
if (n % i == 0) return 0;
}
return 1;
}
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
if (is_prime(num)) {
printf("%d 是素数\n", num);
} else {
printf("%d 不是素数\n", num);
}
return 0;
}
说明:使用函数封装素数判断逻辑,主函数更清晰。
48. 使用指针交换两个整数的值
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
int main() {
int x = 10, y = 20;
printf("交换前:x=%d, y=%d\n", x, y);
swap(&x, &y);
printf("交换后:x=%d, y=%d\n", x, y);
return 0;
}
说明:指针可以直接操作变量内存,实现交换功能。
49. 输入一个数组,使用函数计算平均值
#include <stdio.h>
float average(int arr[], int size) {
int sum = 0;
for (int i = 0; i < size; i++) {
sum += arr[i];
}
return sum / (float)size;
}
int main() {
int arr[5];
printf("请输入5个整数:\n");
for (int i = 0; i < 5; i++) {
scanf("%d", &arr[i]);
}
printf("数组的平均值是:%.2f\n", average(arr, 5));
return 0;
}
说明:函数参数传入数组及大小,返回计算结果,增强模块化。
50. 定义结构体表示学生信息,并输出
#include <stdio.h>
#include <string.h>
struct Student {
char name[50];
int age;
float score;
};
int main() {
struct Student s1;
strcpy(s1.name, "小明");
s1.age = 18;
s1.score = 92.5;
printf("学生信息:\n姓名:%s\n年龄:%d\n成绩:%.2f\n", s1.name, s1.age, s1.score);
return 0;
}
说明:结构体可以将相关信息组合,便于管理复杂数据。
51. 输入学生信息,存入数组,输出最高分学生
#include <stdio.h>
#include <string.h>
struct Student {
char name[50];
int age;
float score;
};
int main() {
struct Student students[3];
for (int i = 0; i < 3; i++) {
printf("请输入第%d个学生的姓名 年龄 成绩:", i+1);
scanf("%s %d %f", students[i].name, &students[i].age, &students[i].score);
}
int max_index = 0;
for (int i = 1; i < 3; i++) {
if (students[i].score > students[max_index].score) {
max_index = i;
}
}
printf("最高分学生:%s,成绩:%.2f\n", students[max_index].name, students[max_index].score);
return 0;
}
说明:结合数组和结构体实现信息管理和查找操作。
52. 使用指针数组输出字符串列表
#include <stdio.h>
int main() {
char *fruits[] = {"苹果", "香蕉", "橘子", "葡萄"};
int n = 4;
printf("水果列表:\n");
for (int i = 0; i < n; i++) {
printf("%s\n", fruits[i]);
}
return 0;
}
说明:指针数组可以方便存储字符串,实现灵活管理。
53. 函数递归计算阶乘
#include <stdio.h>
long long factorial(int n) {
if (n == 0 || n == 1) return 1;
return n * factorial(n - 1);
}
int main() {
int num;
printf("请输入一个整数:");
scanf("%d", &num);
printf("%d 的阶乘是:%lld\n", num, factorial(num));
return 0;
}
说明:递归函数是理解算法思维的关键。
54. 使用递归计算斐波那契数列第n项
#include <stdio.h>
int fibonacci(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return fibonacci(n-1) + fibonacci(n-2);
}
int main() {
int n;
printf("请输入n:");
scanf("%d", &n);
printf("斐波那契第%d项是:%d\n", n, fibonacci(n));
return 0;
}
说明:递归求解斐波那契是经典算法练习。
以上是50道C语言编程练习题,涵盖了从基础语法到数组、字符串、条件判断及循环等多个方面。这些题目可以帮助你更加熟悉C语言的基本操作和常见算法,为进一步深入学习打下坚实的基础。练习时,不仅要关注代码的实现,还要考虑如何优化代码的效率和可读性。
评论区