实验三

实验任务1
#include <stdio.h>
char score_to_grade(int score);
int main() {
	int score;
	char grade;
	while (scanf("%d", &score) != EOF) {
		grade = score_to_grade(score);
		printf ("分数: %d, 等级: %c\n\n", score, grade);
	}
	return 0;
}
char score_to_grade(int score){
	char ans;
	switch(score/10){
	case 10:
	case 9: ans='A';break;
	case 8: ans='B';break;
	case 7: ans='C';break;
    case 6: ans='D';break;
	default:ans='E';
	}
	return ans;
}

  实验结论:实验三task1.c

问题1:功能是将分数转化为对应的等级

形参类型是整数型

返回类型是字符串型

问题2:没有break,会一直执行,等级与分数不匹配

本来是''却打成了""导致字符串类型不一样

 

实验任务2

#include <stdio.h>
int sum_digits(int n);
int main() {
	int n;
	int ans;
	while (printf("Enter n: "), scanf("%d", &n) != EOF) {
	ans= sum_digits(n);
	printf("n = %d, ans = %d\n\n", n, ans);
	}
	return 0;
}
int sum_digits(int n) {
	int ans = 0;
	while (n != 0) {
	ans += n % 10;
	n /= 10;
	}
	return ans;
}

  实验结论:实验任务3task2.c

问题1:功能是计算某整数的各位数字之和

问题2:可以

原本即为迭代,一直提取个位数字,再将n除以10去掉个位直到其为0

改版即为递归,加上个位数字

 实验任务3 

#include <stdio.h>
int power(int x, int n );
int main(){
int x ,n;
int ans;
while (printf("Enter x and n:"),scanf("%d%d",&x,&n)!=EOF) {
	ans = power(x, n);
	printf("n = %d, ans = %d\n\n", n, ans);
	}
	return 0;
	}
	int power(int x, int n) {
	int t;
	if(n == 0)
	return 1;
	else if(n % 2)
	return x * power(x, n-1);
	else {
	t = power(x, n/2);
	return t*t;
	}
	}

 实验结论实验任务3task3.c

问题1:函数power的作用是计算x的n次幂

问题2:是递归函数

模型

实验任务4

 

#include <stdio.h>
int is_prime(int n){
	if(n<=1)
	return 0;
	for(int i=2;i*i<=n;i++)
	{if (n%i==0)
	return 0;}
	return 1;}
	int main(){
		int count=0;
		printf("100以内的孪生素数:\n");
		for(int n=2;n<=98;n++){
			if(is_prime(n)&&is_prime(n+2)){
				printf("%d %d\n",n,n+2);
				count++;
			}
		}
	printf("总数:%d\n",count);
	return 0;
}

  实验结论:实验任务3task4.c

实验任务5(1)

#include <stdio.h>
int func(int n, int m); 
int main() {
int n, m;
int ans;
while(scanf("%d%d", &n, &m) != EOF) {
ans = func(n, m);
printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
}
return 0;
}
int func(int n,int m){
	int i,ans=1;
	for(i=1;i<m;i++)
	ans=ans*(n-i)/(m-i);
	return ans;
}

  实验结论实验任务3task5(1).c

(2)

#include <stdio.h>
int func(int n, int m); 
int main() {
int n, m;
int ans;
while(scanf("%d%d", &n, &m) != EOF) {
ans = func(n, m);
printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
}
return 0;
}
int func(int n,int m){
    if (m>n)
    return 0;
    if (m ==0)
    return 1;
    return func(n-1,m)+func(n-1,m-1);
}

  实验结论实验任务3task5(2).c

实验任务6

#include <stdio.h>
// 函数声明
int gcd(int a,int b,int c);
int main() {
int a, b, c;
int ans;
while(scanf("%d%d%d", &a, &b, &c) != EOF) {
ans = gcd(a, b, c); 
printf("最大公约数: %d\n\n", ans);
}
return 0;
}
int gcd(int a,int b,int c){
	int i=a;
	if(b<i){
		i=b;
	}
	if(c<i){
		i=c;
	}
	for(i;i>0;i--){
		if(a%i==0&&b%i==0&&c%i==0){
			return i;
		}
	}
	return 1;
}

  实验结论实验任务3task6.c

实验七

 #include <stdio.h>
#include <stdlib.h>
void print_charman(int n);
int main() {
    int n;

    printf("Enter n: ");
    scanf("%d", &n);
    print_charman(n); // 函数调用
       
    return 0;
}

void print_charman(int n){
    int i;
    int j;
    int k;
    for (i=1;i<=n;i++){
        
        for (j=i-1;j>0;j--){
            printf("\t");
        }
        
        for(k=1;k<=2*(n-i)+1;k++){
            printf(" O \t");
            
        }
        printf("\n");
        for(j=i-1;j>0;j--){
            printf("\t");
        }
        for (k=1;k<=2*(n-i)+1;k++){
            printf("<H>\t");
            
        }
        printf("\n");
        for(j=i-1;j>0;j--){
            printf("\t");
        }
        for (k=1;k<=2*(n-i)+1;k++){
            printf("I I\t");
            
        }
        printf("\n");
    }
}

  实验结论实验任务3task7.c(1)

实验任务3task7.c(2)

实验总结:迭代和递归运用不够熟练

posted @ 2025-10-30 22:03  Aaaaa叉少  阅读(1)  评论(0)    收藏  举报