实验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:将输入的成绩进行分类。形参类型是整型,返回值类型是字符型。

问题2:有问题,没有停止符号最后都会输出‘E',且输出字符应该使用单引号而不是双引号。

任务2

源代码

 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     while(n!=0){
21         ans+=n%10;
22         n/=10;
23     }
24     
25     return ans;
26 }

问题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的作用是计算x的n次方的值。

问题2:函数power是递归函数。

实验4

源代码

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

int is_prime(int n);

int main()
{
int i,count=0;
printf("100以内的孪生素数:\n");
for(i=1;i<=98;++i)
{
if(is_prime(i)&&is_prime(i+2))
{
printf("%d %d\n",i,i+2);
count+=1;}

}
printf("100以内的孪生素数共有%d个",count);
}
int is_prime(int n)
{
int a;
if(n<=2)
return 0;
for(a=2;a<=sqrt(n);++a)
{

if(n%a==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 count;
 6 int main()
 7 {
 8     unsigned int n;
 9     while(scanf("%u",&n)!=EOF){
10     
11     hanoi(n,'A','B','C');
12     extern int count;
13     printf("一共移动了%d次\n",count);
14     count=0;
15     } 
16     system("pause");
17     return 0;
18 }
19 void hanoi(unsigned int n,char from,char temp,char to)
20 {
21     if(n==1)
22         moveplate(n,from,to);
23     else
24     {
25         hanoi(n-1,from,to,temp);
26         moveplate(n,from,to);
27         hanoi(n-1,temp,from,to);
28         
29     }
30 }
31 void moveplate(unsigned int n,char from,char to)
32 {
33     printf("%u:%c-->%c\n",n,from,to);
34     extern int count;
35     count+=1;
36 }

任务6

源代码

迭代:

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

递归:

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

任务7

源代码

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 char print_charman(int n);
 5 
 6 int main() {
 7     int n;
 8 
 9     printf("Enter n: ");
10     scanf("%d", &n);
11     print_charman(n); // 函数调用
12        
13     return 0;
14 }
15 
16 char print_charman(int n)
17 {
18     int p,m,t;
19     for(p=n;p>0;--p){
20         for(t=0;t<n-p;++t)
21         {
22             printf("\t");
23         }
24         for(m=2*p-1;m>0;--m)
25         {
26             printf(" O \t");
27             
28         }
29         printf("\n");
30         for(t=0;t<n-p;++t)
31         {
32             printf("\t");
33         }
34         for(m=2*p-1;m>0;--m)
35         {
36             printf("<H>\t");
37             
38         }
39         printf("\n");
40         for(t=0;t<n-p;++t)
41         {
42             printf("\t");
43         }
44         for(m=2*p-1;m>0;--m)
45         {
46             printf("I I\t");
47             
48         }
49         printf("\n");
50         
51     }
52 }

 

posted @ 2024-10-27 01:07  山雖去  阅读(5)  评论(0编辑  收藏  举报