实验三

task1

代码

#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("score:%d,grade:%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;
}

image

1.该函数是为了评等级,返回类型是字符串

2.如果没有break语句

无论分数多少,评分都会是E,原因是在进行第一个语句之后,由于没有break,会继续向下执行

task2

代码

#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;
}

image

1.该函数的作用是把输入的数字所有位的数字求和

2.如果使用

int sum_digits(int n) {
	if(n < 10)
		return n;
	return sum_digits(n/10) + n%10;
}

也可以达到想要的结果

task3

代码

#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;
	}
}

image

1.该函数作用是计算x的n次方

2.是递归函数

if n=0:
	print("x**n=1")
if n%2!=0:
	print("x*x**(n-1)")
if n%2==0:
	print("(x**n/2)*2")

task4

代码部分

#include<stdio.h>
#include<stdlib.h>

int is_prime(int x){
	int n;
	if(x==0)
		return 0;
	if(x==1)
		return 0;
	if(x==2)
		return 1;
	if(x>=3){
		for(n=2;n<x;++n)
			if(x%n==0)
				return 0;
				
		return 1;
			
	}
}

int main(){
	int n=100;
	int i,count=0;
	for(i=0;i<100;++i){
		if(is_prime(i)&&is_prime(i+2)){
			count=count+1;
			printf("100以内的孪生素数:%d %d\n",i,i+2);
			
		}
		

	}
	printf("100以内的孪生素数一共有%d个",count);
	
	system("pause");
	return 0;
}

image

task5

代码

#include <stdio.h>

int count = 0;

void hanoi(int n, char a, char b, char c) {
    if (n > 0) {
        hanoi(n - 1, a, c, b);
        printf("1: %c --> %c\n", a, c);
        count++;
        hanoi(n - 1, b, a, c);
    }
}

int main() {
    int n;
    while (scanf_s("%d", &n) != EOF) {
        count = 0;
        hanoi(n, 'A', 'B', 'C');
        printf("一共移动了%d次.\n", count);
    }
    return 0;
}

image

task6

代码部分

1.
#include <stdio.h>
int func(int n, int m); 
int jiecheng(int n);
int main() {
	int n, m;
	int ans;
	while (scanf_s("%d%d", &n, &m) != EOF) {
		ans = func(n, m); 
		printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
	}

	return 0;
}

int jiecheng(int n) {
	int i,sum=1;
	for (i = 1; i <= n; ++i) {
		sum = sum * i;
	
	}
	return sum;
}

int func(int n, int m) {
	int result;
	result = jiecheng(n) / (jiecheng(m) * jiecheng(n - m));
	return result;
	



}


2.
#include <stdio.h>
int func(int n, int m); 
int jiecheng(int n);
int main() {
	int n, m;
	int ans;
	while (scanf_s("%d%d", &n, &m) != EOF) {
		ans = func(n, m); 
		printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
	}

	return 0;
}

int jiecheng(int n) {
	int i,sum=1;
	for (i = 1; i <= n; ++i) {
		sum = sum * i;
	
	}
	return sum;
}

int func(int n, int m) {
	if (m == 0 || m == n) {
		return 1;  
	}
	if (m > n) {
		return 0; 
	}
	return func(n - 1, m) + func(n - 1, m - 1);
}//jiecheng那部分可以删除

image

task7

代码部分

#include <stdio.h>
// 函数声明
int gcd(int a,int b,int c) {
	int min,i;
	min = (a > b) ? b:a;
	min = (min > c) ? c : min;
	for (i = min; i >0; --i) {
		if (a % i == 0 && b % i == 0 && c % i == 0) {
			return i;
		}
	}

}
int main() {
	int a, b, c;
	int ans;
	while (scanf_s("%d%d%d", &a, &b, &c) != EOF) {
		ans = gcd(a, b, c); 
		printf("最大公约数: %d\n\n", ans);
	}
	return 0;
}

image

posted @ 2025-04-07 22:54  毛志威  阅读(19)  评论(0)    收藏  举报