实验3

实验3

task1:

  • 源代码:
#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.case被穿透,返回值不匹配

task2:

  • 源代码:
#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

  • 问题回答:
    1.将输入的数字各位相加,输出综合
    2.可以,一种为迭代,一种是递归

task3:

  • 源代码:
#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.是,7a26ea2e37e76b3282d8176d55580269_720

  1. a.正确,把t省略,逻辑没有改变
    b.原来的性能更强,经过该函数后所有的计算都被重复计算一次,原本6次,改后47次

task4:

  • 源代码:
#include <stdio.h>
int classify_triangle(int a,int b,int c);
int main(){
    int a,b,c;
    while(scanf("%d%d%d",&a,&b,&c)!=EOF){
        int k=classify_triangle(a,b,c);
        if(k==0){
            printf("不能构成三角形\n");
        }
        else if(k==1){
            printf("普通三角形\n");
        }
        else if(k==2){
            printf("等边三角形\n");
        }
        else if(k==3){
            printf("等腰三角形\n");
        }
        else if(k==4){
            printf("直角三角形\n");
        }
    }
    return 0;
}
int classify_triangle(int a,int b,int c){
    int sign;
    for(int i=0;i<5;i++){
        if(a+b<=c||a+c<=b||b+c<=a||a<=0||b<=0||c<=0){
            sign=0;
        }
        else if(a*a+b*b==c*c||a*a+c*c==b*b||b*b+c*c==a*a){
            sign=4;
        }
        else if(a==b&&b==c&&a==c){
            sign=2;
        }
        else if(a==b||b==c||a==c){
            sign=3;
        }
        else{
            sign=1;
        }
    }
    return sign;
}
  • 运行截图:
    image

  • 问题回答:

task5:

  • 源代码:
    a:
#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 first=1;
    int sec=1;
    for(int i=n;i>n-m;i--)
    first*=i;
    for(int i=1;i<=m;i++)
    sec*=i;
    return first/sec;
}

b:

#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==m||m==0){
        return 1;
    }
    else if(m>n){
        return 0;
    }
    else if(m==1){
        return n;
    }
    else{
        return func(n-1,m)+func(n-1,m-1);
    }
}
  • 运行截图:
    a:
    image
    b:
    image

  • 问题回答:

task6:

  • 源代码:
#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 0;
}
  • 运行截图:
    image

  • 问题回答:

task7:

  • 源代码:
#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){
    if(n!=0){
    int max=1;
    for(int i=1;i<n;i++){
        max+=2;
    }
    int cnt=0;
    for(int i=0;i<n;i++){
        for(int k=0;k<cnt;k++){
            printf("          ");
        }
        for(int j=0;j<max-2*i;j++){
            printf("  O  ");
            printf("     ");
        }
        printf("\n");
        for(int k=0;k<cnt;k++){
            printf("          ");
        }
        for(int j=0;j<max-2*i;j++){
            printf(" <H> ");
            printf("     ");
        }
        printf("\n");
        for(int k=0;k<cnt;k++){
            printf("          ");
        }
        for(int j=0;j<max-2*i;j++){
            printf(" I I ");
            printf("     ");
        }
        printf("\n");
        cnt++;
    }
}
}
  • 运行截图:
    image
    image
    image

  • 问题回答:

posted @ 2026-11-13 16:46  DancerShamir  阅读(5)  评论(0)    收藏  举报