实验三

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

屏幕截图 2026-04-17 133302

  • 问题1

功能是将100以内的整数转化为相对应的等级(A~E),形参类型是int整数型,返回值是char字符型。

  • 问题2

修改后的“”是字符串常量,而char应该用‘’,是单字符类型。
修改后每个case后面没有加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);
    }
    return 0;
}
// 函数定义
int sum_digits(int n) {
    int ans = 0;
    while(n != 0) {
        ans += n % 10;
        n /= 10;
    }
    return ans;
}
  • 截图

屏幕截图 2026-04-17 142552

  • 问题1

功能是计算一个整数的各个位的数字之和。

  • 问题2

能实现。修改前是用while循环,从个位开始相加,然后再用n%10把十位变成个位,用n/10去掉个位,再相加,如此循环得到各个位的和。
修改后是递归方法,从高位分解,再从低位合并相加。

实验3

#include <stdio.h> 1
int classify_triangle(int a, int b, int c);
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;
    }
}
  • 截图

屏幕截图 2026-04-20 161246

  • 问题1

功能是计算x的n次方。

  • 问题2

是递归函数

实验4

  • 代码

#include <stdio.h>
#include <windows.h>
        int classify_triangle(int a, int b, int c){
   
        if (a + b <= c || a + c <= b || b + c <= a) 
        return 0;
        else
	 {
        if (a == b && b == c) 
        return 2;
        else if (a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a) 
        return 4;
        else if (a == b || a == c || b == c) 
        return 3;
        else 
        return 1;
        }
    }
        int main() {
        int a, b, c;
        int type;
         printf("输入三角形边长:\n");
	    while(scanf("%d %d %d", &a, &b, &c)!=EOF) {
         type = classify_triangle( a, b, c);
    
        switch (type){
      	case 0:
      		 printf("不能构成三角形\n");
			 break;
        case 1:
        	printf("普通三角形\n");
			break;
      	case 2:
		     printf("等边三角形\n");
			 break;
		case 3:
			printf("等腰三角形\n");
			break;
	    case 4:
	    	printf("直角三角形\n");
			break;
	    
	  }
	}
	    system("pause");

    return 0;
}
  • 截图

屏幕截图 2026-04-17 132437

实验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<0 || m>n)
 	return 0;
 	if(m==n || m==0)
 	return 1;
 	if(m>n-m)
 	m=n-m;
 	long long up =1, down = 1;
 	for(int i=1; i<=m; i++){
 	up*=(n-i+1);
 	down*=i;
	 }
	return up/down;
 	
 }
  • 递归代码

#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(m==n || m==0)
 	return 1;
 	else 
 	return func(n-1, m) + func(n-1, m-1);
 	
 }
  • 截图

屏幕截图 2026-04-20 210450

实验6

  • 代码

#include <stdio.h> 1
  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>=1; i--){
   	if(a%i ==0 && b%i ==0 && c%i ==0)
   	return i;
}
    return 1;
   }
  • 截图

屏幕截图 2026-04-20 212342

实验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) {
  	for (int layer = 0; layer < n; layer++) {
  		int group = 2*(n -layer) -1;
        int indent = layer;       
        for (int row = 0; row < 3; row++) {
        for (int i = 0; i < indent; i++) 
        printf("\t");
        for (int i = 0; i < group; i++) {
        switch (row) {
        case 0: printf(" O"); break;
        case 1: printf("<H>"); break;
        case 2: printf("I I"); break;
}
        if (i != group - 1) 
        printf("\t");
}
        printf("\n");   
    }
}
  }
  • 截图

屏幕截图 2026-04-20 215234

屏幕截图 2026-04-20 215249

posted @ 2026-04-20 21:54  inenen  阅读(12)  评论(0)    收藏  举报