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

 问题1:score_to_grade的功能是根据分数判断等级。形参类型是整数型,返回值是字符型。

  问题2:改后的代码缺少了“break”,程序会一直执行下去,ABCDE都将会被输出;ABCDE加双引号表示其在ASII码中对应的十六进制数,而等级应当用字符型,即用单引号引用。 

 

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

问题1:函数sum_digits用于计算整数n所有位数之和。

问题2:能实现同等效果。方式一单纯使用了循环,计算n的每个位数并求和;而方式二运用了函数的递归,每次只求整数最后一位,然后/10继续使用函数。

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

 

问题一:计算x的n次幂;

问题二:是递归函数,函数模型为

 实验任务4

 #include<stdio.h>
 #include<math.h>
 #include<stdlib.h>
  int is_prime(int n);
 
 int main(){
      int i = 0;
     int n;
     printf("100以内的孪生素数对:\n");
     for (n = 3; n <= 99; n+=2){
        if (is_prime(n) && is_prime(n +2)){
              printf("%d %d\n", n, n+2);
              i++;
          }
     }
     printf("100以内的孪生素数对共有 %d 个\n", i);
     system("pause");
      return 0;
  }
 
  int is_prime(int n){
      int i;
     if(n<2){
          return 0;
      }
     for (i = 2; i * i <= n; i++)
     {
         if(n % i == 0){
            return 0;
         }
     }
     return 1;
  }

 实验任务5

 #include <stdio.h>
 #include <stdlib.h>

 int count = 0;
 
 void hanoi(int n, char source, char target, char auxiliary) {
     if (n > 0) {
        hanoi(n - 1, source, auxiliary, target);
         printf("%d: %c --> %c\n", n, source, target);
       count++;
         hanoi(n - 1, auxiliary, target, source);
     }
}
 
 int main() {
   int n;
     while (scanf("%d", &n)!= EOF) {
         hanoi(n, 'A', 'C', 'B');
         printf("一共移动了%d次.\n", count);
        count = 0;  
    }
     system("pause");
     return 0;
 }

 实验任务6

#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 i,s=1;
    if(n<m)
        return 0;
     if(n==m||m==0)
        return 1;
    if(n>m)
        return func(n-1,m)+func(n-1,m-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 i,s=1;
    if(n<m)
        return 0;
     if(n==m||m==0)
        return 1;
    if(n>m)
    {
        for(i=1;i<=m;++i)
            s=s*(n-m+i)/i;    
        return s;
    }
}

 结果相同

实验任务7

#include <stdio.h>
 #include <stdlib.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);
     }
     system("pause");
     return 0;
 }


 int gcd(int a, int b, int c) {
     int min,i;
     min = a;
     if (b < min) {
         min = b;
     }
     if (c < min) {
        min = c;
     }
     for (i = min; i >= 1; i--) {
         if (a % i == 0 && b % i == 0 && c % i == 0) {
            return i;
        }
    }
    return 1;
 }

 

posted @ 2025-04-09 19:26  Gallagher1  阅读(9)  评论(0)    收藏  举报