Program3

任务1

任务1代码

#include<stdio.h>
#include<stdlib.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;
}

任务1截图
image

Q1:score_to_garde作为一个函数讲分数转换成ABCDE字符等级;其中形参类型是,返回值类型是字符型常量。

Q2:(1)应用字符型常量应使用单引号;
(2)每个可能性后面应使用break函数,否则将全部运行一遍。

任务2

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

任务2截图
image

Q1:sum_digits的功能是作为函数将每个位数上的数字求和;

Q2:能实现。原函数使用的是迭代,新的使用的是递归。

任务3

任务3代码

#include<stdio.h>

int power(int x, int y);

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

任务3截图
image

Q1:计算一个数的乘方;

Q2:是递归函数;
image

任务4

任务4代码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int is_prime(int n);

int main(){
	int i,sum=0,j;
	printf("100以内的孪生素数:");
	for(i=2;i<=100;i++){
		if(is_prime(i))
			{j=i+2;
			if(is_prime(j))
				{printf("%d %d",i,j);
				printf("\n");
				sum++;}}
		}
	
	printf("100以内的孪生素数共有%d对",sum);
	
	system("pause");
	
	return 0;
}

int is_prime(int n){
	int k;
	for(k=2;k<=sqrt(1.0*n);k++)
		if(n%k==0)
			return 0;
	return 1;
}

任务4截图
image

任务5

任务5代码

#include<stdio.h>
#include<stdlib.h>
int count=0;
void hanoi(int n,char from,char temp,char to);
void moveplate(int n,char from,char to);

int main()
{
   int n;
   while(scanf("%u",&n)!=EOF)
   {count=0;
   hanoi(n,'A','B','C');
   printf("\n一共移动了%d次.\n",count);}
   system("pause");
   return 0;
}
 
void hanoi(int n,char from,char temp,char to)
{
  if(n==1)
      moveplate(n,from,to);
  else
  {
      hanoi(n-1,from,to,temp);
      moveplate(n,from,to);
      hanoi(n-1,temp,from,to);

  }
}
void moveplate(int n,char from,char to)
{
    printf("%u:%c-->%c\n",n,from,to);
    count++;
}

任务5截图
image

任务6

任务6代码

#include<stdio.h>
#include<stdlib.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);
	}

	system("pause");
	return 0;
}

int func(int n,int m){
	int k;
	if(m==0)
		return 1;
	
	if(n<m)
		return 0;
	else{
		if(m==1)
			return n;
		k=func(n-1,m)+func(n-1,m-1);
		return k;
	}
}
#include<stdio.h>
#include<stdlib.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);
	}

	system("pause");
	return 0;
}

int func(int n,int m){
	if (m > n) 
		return 0;
	else if (m == 0 || m == n) return 1;
	return func(n - 1, m) + func(n - 1, m - 1);
}

任务6截图
image

任务7

任务7代码

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

int gcd(int a,int b,int c);

int main(){
	int a,b, c,ans;

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

}

int gcd(int a ,int b , int c)
{
	
	int i;
	i=a<b?(a<c?a:c):(b<c?b:c);
	for(;i>=1;i--){
		if(a%1==0&&b%i==0&&c%i==0)
		 return i;}
	return 1;
}

任务7截图
image

posted @ 2025-04-08 20:44  王皓惟  阅读(20)  评论(0)    收藏  举报