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

  

image

 问题1

功能为给学生成绩分配等级,形参类型为整型,返回值类型为字符型

问题2

字符ABCDE应用单引号引用,在case 9~case 6语句后都没有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);
	}
}


int sum_digits(int n)
{
	int ans=0;
	while(n!=0)
	{
		ans+=n%10;
		n/=10;
	}

	return ans;
}

  

image

问题1

功能是得到输入数据的每位数相加的和

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

  

image

问题1

功能是求x的n次方的值

问题2

是,

image

 任务4

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

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

int is_prime(int n)
{
	int i;
	for(i=2;i<=n/2;i++)
	{
		if(n%i==0)
			break;
	}
		if(i>n/2)
			return 1;
		else
		    return 0;
}

  

image

 任务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)
{
	int ans1=1,ans2=1,ans,i,j;
	for(i=n-m+1;i<=n;i++)
		ans1=ans1*i;
	for(j=1;j<=m;j++)
		ans2=ans2*j;
	ans=ans1/ans2;
	return ans;
}
	

 

image

 递归方式:

#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(n==1&&m>1||n==0)
		return 0;
	if(n==1&&m<=1||m==0)
		return 1;

	return func(n-1,m)+func(n-1,m-1);
}

  

image

 任务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 t,m,n,i;
	if(a<b&&a<c)
	{
		t=a;
		m=b;
		n=c;
	}

	if(b<a&&b<c)
	{
		t=b;
		m=a;
		n=c;
	}
	if(c<a&&c<b)
	{
		t=c;
		m=a;
		n=b;
	}
	for(i=t;i>=1;i--)
	{
		if(m%i==0&&n%i==0&&t%i==0)
			break;
	}

		return i;
}

  

image

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

	system("pause");
	return 0;
}

void print_charman(int n)
{
	int i,j,k,p,q;
	for(p=n;p>=1;p--)
	{
		for(q=1;q<=(n-p);q++)
			printf("\t");
		for(i=1;i<=2*p-1;i++)
			printf(" O \t");

		printf("\n");

		for(q=1;q<=(n-p);q++)
			printf("\t");
		for(j=1;j<=2*p-1;j++)
			printf("<H>\t");

		printf("\n");

		for(q=1;q<=(n-p);q++)
			printf("\t");
		for(k=1;k<=2*p-1;k++)
			printf("I I\t");

		printf("\n");
	}
}

  

image

 

image

 

 

 

posted @ 2025-10-24 17:17  鸋y  阅读(8)  评论(0)    收藏  举报