实验3 C语言函数应用编程

1. 实验任务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:如果line21-28以下形式,有问题吗?如果有,指出有哪些问题?

有,无论成绩多少都是E。

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的功能是什么?

问题2:如果保持main代码和函数sum_digits声明不变,把函数sum_digits定义成如下实现方式能实现同等的效果吗? 如果不能实现同等效果,分析原因。 如果能实现同等效果,说明两种实现方式背后的算法思维区别。

1:计算各个位数的和

2:能

1是迭代,2是递归

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

问题1: 函数power的功能是什么?

问题2:函数power是递归函数吗?如果是,找出递归模式。写出这个递归模式对应的数学公式模 型。

 

 

4. 实验任务4

#include<stdio.h>
#include<math.h>

int is_prime(int n);

int main() {
    int m, count = 0;
    for (m = 2; m <= 100 - 2; m++) {  // 注意这里的上限,避免越界访问
        if (is_prime(m) && is_prime(m + 2)) {
            count++;
            printf("%d %d\n", m, m + 2);
        }
    }
    printf("100以内的孪生素数有%d个", count);
    return 0;
}
int is_prime(int n){
    int i;
    for(i=2;i<=n/2;i++){
      if(n%i == 0)
    return 0;
    }
    return 1;
}

5. 实验任务

#include<stdio.h>
int count = 0;
void hanoi(unsigned n,char from,char temp,char to);
void moveplate(unsigned nth,char from,char to);
int main(){
    int n;
    char from = 'A',temp = 'B',to = 'C';
    printf("输入n:");
    while(scanf("%d",&n)!= EOF){
      count = 0;
      hanoi(n,from,temp,to);
      printf("一共移动%d\n",count);
    }
    return 0;
} 
void hanoi(unsigned n,char from,char temp,char to){
    if(n == 1)
      moveplate(n,from,to);
    else{
        hanoi(n-1,from,to,temp);
        moveplate(n,from,to);
        hanoi(n-1,temp,from,to);
    }
}
void moveplate(unsigned nth,char from,char to){
    printf("%u: %c --> %c\n",nth, from, to);
    count++;
}

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 i1,ans,i2;
     int ans1 = 1,ans2 = 1;
     if(n < m){
         ans = 0;
     return ans;
     }
    else if(n > m&&m !=0){
        for(i1 = n-m+1;i1 <= n;i1++){
            ans1 *= i1;
        }
        for(i2 = 1;i2 <= m;i2++){
            ans2 *= i2;
        }
        ans = ans1 / ans2;
        return ans;
    }
    else if(n == m)
      return 1;
    else if(m == 0)
      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 ans;
     if(n == m||m == 0){
       ans = 1;
       return 1;
     }
     else if(n < m){
         ans = 0;
         return ans;
     }
     else{
       ans = func(n-1,m) + func(n-1,m-1);
       return ans;
     }
 }

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){
    int t = 0;
    int i,j;         
    for(i = n; i >= 1; i--){
        for(j = 0; j < t; j++)
          printf("\t");
        for(j = 0; j < 2 * i - 1; j++)
          printf(" o\t");
          printf("\n");
        for(j = 0; j < t; j++)
          printf("\t");
        for(j = 0; j < 2 * i - 1; j++)
          printf("<H>\t");
          printf("\n");             
        for(j = 0; j < t; j++)
          printf("\t");
        for(j = 0; j < 2 * i - 1; j++)
          printf("I I\t");
          printf("\n");
           t++;
     }
 }

 

posted @ 2024-10-29 17:38  杨玉鹏  阅读(4)  评论(0编辑  收藏  举报