C语言函数与递归编程实验
分数等级判定
实现分数到等级的转换功能。原实现存在逻辑缺陷导致输出固定为E级。
#include <stdio.h>
char get_grade(int score) {
if(score >= 90) return 'A';
else if(score >= 80) return 'B';
else if(score >= 70) return 'C';
else if(score >= 60) return 'D';
else return 'E';
}
int main() {
int mark;
printf("输入分数: ");
scanf("%d", &mark);
printf("等级: %c", get_grade(mark));
return 0;
}
数字各位求和
计算输入整数的各位数字之和,提供迭代算法实现。
#include <stdio.h>
int digit_sum(int num) {
int total = 0;
while(num > 0) {
total += num % 10;
num /= 10;
}
return total;
}
int main() {
int value;
printf("输入整数: ");
scanf("%d", &value);
printf("各位和: %d", digit_sum(value));
return 0;
}
幂运算实现
使用递归方法计算x的n次方。
#include <stdio.h>
double power(double base, int exp) {
if(exp == 0) return 1;
return base * power(base, exp - 1);
}
int main() {
double x;
int n;
printf("输入底数和指数: ");
scanf("%lf%d", &x, &n);
printf("结果: %.2f", power(x, n));
return 0;
}
孪生素数检测
查找并统计100以内的孪生素数对。
#include <stdio.h>
#include <math.h>
int check_prime(int num) {
if(num < 2) return 0;
for(int i = 2; i <= sqrt(num); i++)
if(num % i == 0) return 0;
return 1;
}
int main() {
int count = 0;
printf("100以内孪生素数:\n");
for(int k = 2; k < 99; k++) {
if(check_prime(k) && check_prime(k+2)) {
printf("%d 和 %d\n", k, k+2);
count++;
}
}
printf("总计: %d对", count);
return 0;
}
组合数计算
递归实现
#include <stdio.h>
int combination(int total, int select) {
if(select == 0 || select == total) return 1;
if(select == 1) return total;
return combination(total-1, select) + combination(total-1, select-1);
}
int main() {
int n, m;
while(scanf("%d%d", &n, &m) != EOF)
printf("C(%d,%d) = %d\n", n, m, combination(n, m));
return 0;
}
三数最大公约数
#include <stdio.h>
int three_gcd(int a, int b, int c) {
int min_val = a;
if(b < min_val) min_val = b;
if(c < min_val) min_val = c;
while(min_val > 0) {
if(a%min_val==0 && b%min_val==0 && c%min_val==0)
break;
min_val--;
}
return min_val;
}
int main() {
int x, y, z;
while(scanf("%d%d%d", &x, &y, &z) != EOF)
printf("GCD: %d\n", three_gcd(x, y, z));
return 0;
}
字符图案打印
#include <stdio.h>
void print_line(int chars, int spaces) {
for(int s = 0; s < spaces; s++) printf(" \t");
for(int c = 0; c < chars; c++) printf(" o \t");
printf("\n");
for(int s = 0; s < spaces; s++) printf(" \t");
for(int c = 0; c < chars; c++) printf("<H>\t");
printf("\n");
for(int s = 0; s < spaces; s++) printf(" \t");
for(int c = 0; c < chars; c++) printf("I I\t");
printf("\n");
}
void print_pattern(int layers) {
for(int i = 0; i < layers; i++)
print_line(2*layers - 2*i - 1, i);
}
int main() {
int n;
printf("输入层数: ");
scanf("%d", &n);
print_pattern(n);
return 0;
}