实验三

 1 #include <stdio.h>
 2  char score_to_grade(int score);  // 函数声明
 3 int main() {
 4     int score;
 5     char grade;
 6     while(scanf("%d", &score) != EOF) {
 7         grade = score_to_grade(score);  // 函数调用
 8         printf("分数: %d, 等级: %c\n\n", score, grade);
 9     }
10     return 0;
11  }
12  // 函数定义
13 char score_to_grade(int score) {
14     char ans;
15     switch(score/10) {
16     case 10:
17     case 9:   ans = 'A'; break;
18     case 8:   ans = 'B'; break;
19     case 7:   ans = 'C'; break;
20     case 6:   ans = 'D'; break;
21     default:  ans = 'E';
22     }

问题一:将分数转化为等第,形参为int整形,返回值为char字符型

问题二:没有break,所有生成结果会被最后的E取代

 1 #include <stdio.h>
 2 
 3 int sum_digits(int n);  // 函数声明
 4 
 5 int main() {
 6     int n;
 7     int ans;
 8 
 9     while(printf("Enter n: "), scanf("%d", &n) != EOF) {
10         ans = sum_digits(n);    // 函数调用
11         printf("n = %d, ans = %d\n\n", n, ans);
12     }
13 
14     return 0;
15 }
16 
17 // 函数定义
18 int sum_digits(int n) {
19     int ans = 0;
20 
21     while(n != 0) {
22         ans += n % 10;
23         n /= 10;
24     }
25 
26     return ans;
27 }

问题一:将输入的n的各个位数上的数字相加

问题二:可以,原来是迭代,现在是递归

 1 #include <stdio.h>
 2 
 3 int power(int x, int n);    // 函数声明
 4 
 5 int main() {
 6     int x, n;
 7     int ans;
 8 
 9     while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) {
10         ans = power(x, n);  // 函数调用
11         printf("n = %d, ans = %d\n\n", n, ans);
12     }
13     
14     return 0;
15 }
16 
17 // 函数定义
18 int power(int x, int n) {
19     int t;
20 
21     if(n == 0)
22         return 1;
23     else if(n % 2)
24         return x * power(x, n-1);
25     else {
26         t = power(x, n/2);
27         return t*t;
28     }
29 }

 

问题一:计算x的n次

问题二:是

 四

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

int is_prime(int n);

int main(){
    int n;
    int i;
    int sum=0;
        printf("100以内的孪生素数:\n");
        scanf("%d",&n);
        for(i=2;i<=n-2;++i)
            if(is_prime(i) && is_prime(i+2)){
                sum+=1;
                printf("%d %d\n",i , i+2);
}
    printf("100以内的孪生素数共有%d个",sum);
    system("pause");
    return 0;
}

 

int is_prime(int n){
    int i;
    if(n<2){
        return 0;
    }
    if(n==2){
        return 1;
    }
    for(i=2;i*i<=n;++i)
            if(n%i==0){
            return 0;
            }
    return 1;
        }

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

void hanoi(int n,char from,char temp,char to);
void moveplate(int n,char from,char to);
int t;

int main()
{
   int n;
   while(scanf("%u",&n)!=EOF){
   t=0;
   hanoi(n,'A','B','C');
   printf("移动了%d次\n",t);}
   system("pause");
   return 0;
}
 
void hanoi(int 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(int n,char from,char to)
{
    printf("%u:%c-->%c\n",n,from,to);
    t++;
}

迭代

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int func(int n, int m);   // 函数声明
 4 
 5 int main() {
 6     int n, m;
 7     int ans;
 8 
 9     while(scanf("%d%d", &n, &m) != EOF) {
10         ans = func(n, m);   // 函数调用
11         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
12     }
13     system("pause");
14     return 0;
15 }
16 
17 // 函数定义
18 // 待补足。。。(分别用迭代和递归实现)
19 int func(int n, int m){
20     if(m>n)
21         return 0;
22     if(m==0 || m==n)
23         return 1;
24     int i;
25     int j=1;
26     int k=1;
27 
28     for(i=1;i<=m;++i){
29         j=j*(n-(m-i));
30         k=k*i;
31     }
32     return j/k;
33 }

递归·

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int func(int n, int m);   // 函数声明
 4 
 5 int main() {
 6     int n, m;
 7     int ans;
 8 
 9     while(scanf("%d%d", &n, &m) != EOF) {
10         ans = func(n, m);   // 函数调用
11         printf("n = %d, m = %d, ans = %d\n\n", n, m, ans);
12     }
13     system("pause");
14     return 0;
15 }
16 
17 // 函数定义
18 // 待补足。。。(分别用迭代和递归实现)
19 int func(int n, int m){
20     if(m>n)
21         return 0;
22     if(m==0 || m==n)
23         return 1;
24     return func(n-1,m)+func(n-1,m-1);
25 }

 

 

 1 #include <stdio.h>
 2 
 3 // 函数声明
 4 // 待补足....
 5 int gcd(int a,int b,int c);
 6 
 7 int main() {
 8     int a, b, c;
 9     int ans;
10 
11     while(scanf("%d%d%d", &a, &b, &c) != EOF) {
12         ans = gcd(a, b, c);     // 函数调用
13         printf("最大公约数: %d\n\n", ans);
14     }
15 
16     return 0;
17 }
18 
19 
20 // 函数定义
21 // 待补足...
22 int gcd(int a,int b,int c){
23     int min=a;
24     int i;
25     if(b<min){
26         min=b;
27     }
28     if(c<min){
29         min=c;
30     }
31     for(i=min;i>=1;i--){
32         if(a%i==0 && b%i==0 && c%i==0){
33             return i;
34         }
35     }
36     return 1;
37 }

 

posted @ 2025-04-09 10:33  林觉得冷  阅读(6)  评论(0)    收藏  举报