实验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  根据分数判断等第  形参类型为int   返回值类型为char

问题2 有问题 在判断出分数所属的等第后程序不会进入下一个循环 而是接着执行相对应

 

 

 

 

任务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) {
   if(n<10)
   return n;
 
   
   return sum_digits(n/10)+n%10;
}

 

 

 

运行结果

 

 

问题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   求 n的x次幂

 问题2   

 

 

 

任务4

源代码

#include<stdio.h>
int is_prime(int n);
int main(){
    int n;
    int ans=0; 
    printf("100以内的孪生素数:\n");
    for(n=2;n<=100;n++){
        if(is_prime(n)&&is_prime(n+2)){
        
        
        printf("%d %d\n",n,n+2);
   ans+=1;
   }
    }
   
    printf("100以内的孪生素数共有%d个",ans);
    return 0;
}
int is_prime(int n)
{
  int k;
  for(k=2;k<=n/2;k++)
     if(n%k==0)
       return 0;
   return 1;
    
}

 

运行结果   

 

任务5

源代码  

 1 #include <stdio.h>
 2 #include <stdlib.h> 
 3 void hanoi(unsigned int n,char from,char temp,char to);
 4     void moveplate(unsigned int n,char from,char to);
 5     int ans=0;
 6 int main(){
 7 
 8     unsigned int n;
 9     while(scanf("%u",&n)!=EOF){
10     
11     hanoi(n,'A','B','C');
12     
13     printf("一共移动了%d次\n",ans);
14     system("pause");
15     
16 }
17     return 0;
18     
19 }
20 void hanoi(unsigned int n,char from,char temp,char to)
21 {
22 
23     if(n==1){
24     ans+=1;
25     moveplate(n,from,to);
26     
27 }
28     else     
29     {
30     
31         hanoi(n-1,from,to,temp);
32         ans+=1;
33         moveplate(n,from,to);
34         
35         hanoi(n-1,temp,from,to);
36         
37        
38     }
39     
40 }
41 void moveplate(unsigned int n,char from,char to)
42 {int ans=0;
43     printf("%u:%c-->%c\n",n,from,to);
44     ans+=1;
45 }

 

 

运行结果

 

 

任务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)
{

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

 

 

运行结果

递归

 

  

 

 

迭代

 

 

 

任务7

源代码

 

#include <stdio.h>
#include <stdlib.h>
void print_charman(int n);
int i;
int main() {
    int n,m;

    printf("Enter n: ");
    scanf("%d", &n);
    print_charman(n); // 函数调用
       
    return 0;
}


    
void print_charman(int n) {
    int i,j;
 
     for (j=0;j<n;j++){
    
for(i=1;i<=j;i++)
    printf("   \t");
for (i=1;i<=2*(n-j)-1;i++)
    printf(" O \t");
printf("\n");
for(i=1;i<=j;i++)
    printf("   \t");
for (i=1;i<=2*(n-j)-1;i++)
    printf("<H>\t");
printf("\n");    
for(i=1;i<=j;i++)
    printf("   \t");
    for (i=1;i<=2*(n-j)-1;i++)
    printf("I I\t");
printf("\n");
}
}

 

 

运行结果

 

 

posted @ 2024-10-28 12:19  麟0803  阅读(14)  评论(0编辑  收藏  举报