实验三

实验任务一

代码

点击查看代码
#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

ans1:score_to_grade的功能是将输入的整数分数转化为对应的等级ABCD,形参类型是int,返回值类型是char
ans2:每个case分支后都缺少break;ABCD要用单引号

实验任务二

代码

点击查看代码
#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
ans1:sum_digits的功能是计算输入整数n的各位数字之和
ans2:能实现,原来的使用的是循环方式,新的使用的是递归的方式

实验任务三

代码

点击查看代码
#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;
	}
}

截图
image

ans1:power的功能是计算x的n次幂
ans2:是
image

实验任务四

代码

点击查看代码
#include <stdio.h>
#include<stdlib.h>

int is_prime(int n);

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

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

截图
image

实验任务五

代码

点击查看代码
#include<stdio.h>
#include<stdlib.h>
int count=0;

void hanoi(int n, char A,char B, char C) {
    if(n==1){
        count++;
        printf("%d: %c --> %c\n",1,A,C);
    } 
	else{
        hanoi(n-1,A,C,B);
        count++;
        printf("%d: %c --> %c\n",n,A,C);
        hanoi(n-1,B,A,C);
    }
}

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

截图
image

实验任务六

代码
迭代

点击查看代码
#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;
    }
    if(m==0||m==n){
        return 1;
    }
    int a=1;
    int b=1;
    for(int i=1;i<=m;i++){
        a*=(n-(m-i));
        b*=i;
    }
    return a/b;
}

递归
点击查看代码
#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);
}

截图
image

实验任务七

代码

点击查看代码
#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;
}

截图
image

posted @ 2025-04-09 14:04  任书静  阅读(15)  评论(0)    收藏  举报