实验三

实验任务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';break;
	}
	
	return ans;
	
}

实验截图

批注 2025-10-24 084040

实验结论

1.函数“score_to_grade”目的是将分数转化为对应的等级,形参是score,数据类型为整型,返回值是ans,数据类型为字符型
2.(1)ans未被定义
(2)每个分支后无“break”,导致输出至最后一个分支,即全为“E”
(3)无返回值,函数调用完成后内存回收,对主调函数无影响

实验二

源代码

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

实验截图

ex3task2

实验结论

1.函数“sum_digits”目的是对数“n”所有位的数字进行求和
2.可以进行,原算法是进行迭代运算,新代码是进行递归运算

实验三

源代码

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

运行截图

ex3task3

实验结论

1.power函数可以计算x的n次方,并输出n的具体值和结果
2.递归出口:n=0,返回值为1
递归公式:\(x^{n}=x\times x^{n-1}\)

实验四

源代码

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

int is_prime(int n, int divisor);

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

int is_prime(int n, int divisor) {
    if (n <= 1) return 0;
    if (n == divisor) return 1;
    if (n % divisor == 0) return 0;
    return is_prime(n, divisor + 1);
}

运行截图

extask4

问题

这题编写参考了ai,没想通递归模式(为什么是通过增加因子的值而不是降低n的值)

实验五

源代码

点击查看递归代码
#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 < 0 || m > n)
        return 0;
    if (n < m)
        return 0;
	else if(n>m)
	    return func(n-1,m)+func(n-1,m-1);
	else if(m==0)
	    return 1;
	else if(n==m)
	   return 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){
	int mom=1;
	int son=1;
	
	if (m == 0 || m == n) 
        return 1;
    if (m > n || m < 0) 
        return 0;
    for(int i=0;i<m;i++){
    	mom *= (i+1);
    	son *= (n-i);
	}
	return son/mom;
}

运行截图

task5

task5die

实验六

源代码

点击查看代码
#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 = a;
    if (b < min)
        min = b;
    if (c < min)
        min = c;
    
	
	for(int i=min;i>0;i--){
		if(a%i==0&&b%i==0&&c%i==0)
		   return i;
	}
	return 1;
}

运行截图

extask 6

实验七

源代码

点击查看代码
#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){
	for(int i=1;i<=n;i++){
		for(int l=0;l<=i;l++) 
		    printf("\t");
		for(int k=2*n-2*i+1;k>0;k--)
		    printf(" O\t");
		    printf("\n");
	
	for(int l=0;l<=i;l++) 
		    printf("\t");
		for(int k=2*n-2*i+1;k>0;k--)
		    printf("<H>\t");
		    printf("\n");
		    
	for(int l=0;l<=i;l++) 
		    printf("\t");
		for(int k=2*n-2*i+1;k>0;k--)
		    printf("I I\t");
		    printf("\n");	    
	}
}

运行截图

extask7

posted @ 2025-10-30 15:26  lolikana  阅读(2)  评论(0)    收藏  举报