实验3

实验任务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;
}

运行结果

3task1

问题1:函数score_to_grade的功能是根据输入的分数score将其转换为对应的等级ABCDE,形参类型是数值类型,返回值类型是字符串类型

问题2:缺少break语句会继续执行后面的case,导致无法得到对应等级。单引号变为双引号,字符串类型与字符类型不统一,可能导致类型错误

实验任务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

问题1:函数sum_digits的功能是计算一个整数各个数位上的数字之和

问题2:能实现同样的输出,原来的代码算法思维是迭代思维,先初始化累加变量;改后为递归思维,先设定终止条件。

实验任务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

问题1:函数power的功能是计算一个数的幂次结果

问题2:函数power是递归函数,递归模式:

3task3

实验任务4

源代码

#include<stdio.h>
#include<math.h>

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

运行结果

3task4

实验任务5

源代码(迭代)

#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||m==n)
    	return 1;
    	if(m>n-m)
		m=n-m;
		long long numerator=1;
		long long denominator=1;
		int i;
		for(i=1;i<=m;i++){
			numerator*=(n-m+i);
			denominator*=i;
		}
		return numerator/denominator;
	} 

运行结果

3task5_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){
    	if(m>n)
    	return 0;
    	if(m==0||m==n)
    	return 1;
		return func(n-1,m)+func(n-1,m-1);
	} 

运行结果

3task5_2

实验任务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 min_num=a;
	if(b<min_num){
		min_num=b;
	}
	if(c<min_num){
		min_num=c;
	}
	int i;
	for(i=min_num;i>=1;i--){
		if(a%i==0&&b%i==0&&c%i==0){return i;
		}
	}
	return 1;
}

运行结果

3task6

实验任务7

源代码

#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 k=n*2-1;
	int i,s,j;
	for(i=0;i<n;++i){
		for(s=0;s<i;++s){
			printf("\t");
		}
		for(j=0;j<k;++j){
			printf(" 0 ");
			printf("\t");
		}
		printf("\n");
		for(s=0;s<i;++s){
			printf("\t");
		}
		for(j=0;j<k;++j){
			printf("<H>");
			printf("\t");
		}
		printf("\n");
		for(s=0;s<i;++s){
			printf("\t");
		}
		for(j=0;j<k;++j){
			printf("I I");
			printf("\t");
		}
		k-=2;
		printf("\n");
	}
}

运行结果

3task7

posted @ 2025-10-28 14:45  fhe  阅读(2)  评论(0)    收藏  举报