第三次作业

task 1

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

运行结果

问题1:score_to_grade 输入分数可以得到一个等第:;形式参数 int;返回值类型char;
问题2:有问题,类型错误,[Warning] assignment makes integer from pointer without a cast
task 2
 1 #include<stdio.h>
 2 
 3 int sum_digits(int n);
 4 
 5 int main()
 6 {
 7     int n;
 8     int ans;
 9     
10     while(printf("Enter n:"),scanf("%d",&n) !=EOF){
11         ans=sum_digits(n);
12         printf("n=%d,ans=%d\n\n",n,ans);
13     }
14     return 0;
15 }
16 int sum_digits(int n){
17     int ans=0;
18     while(n!=0){
19         ans+=n%10;
20         n/=10;
21     }
22     return ans;
23 }
24  

图片

回答

问题1:计算每一位求和的ans;

问题2:能实现一样的效果,一个是迭代的思维,一个是递归的思维;

task 3

 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     return 0;
14 }
15 
16 int power(int x,int n){
17     int t;
18     if(n==0)
19         return 1;
20     else if(n%2)
21         return x*power(x,n-1);
22     else{
23         t=power(x,n/2);
24         return t*t;
25     }
26 }

图片

回答

问题1:power函数的功能是计算一个数的n次方;

power函数是递归函数,

task 4.

#include<stdio.h>
int is_prime(int n);

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

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

 

图片

task5

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

图片

task6

迭代

 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 s,k,t;
19     int i,j;
20     for(i=n;i>=n-m+1;i--)
21         k*=i;
22     for(j=1;j<=m;j++)
23         t*=j;
24     s=k/t;
25     return s;
26 }

图片

递归

int func(int n,int m)
{
if(n!=0&&m!=0)
return func(n-1,m)+func(n-1,m-1);
else if(n==m||m==0)
return 1;
}

task7

 

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 void print_charman(int n);
 4 
 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 void print_charman(int n)
17 {
18     int i,j,t,k;
19     t=n;
20 for(j=0;j<t;j++)
21 {  
22  
23 
24 for(i=0;i<j;i++)
25 {
26     printf("\t");
27 
28 }
29     for(i=1;i<=2*n-1;i++)
30 {    
31     printf(" o \t");
32 
33 }
34 printf("\n");
35 for(i=0;i<j;i++)
36 {
37     printf("\t");
38 
39 }
40     for(i=1;i<=2*n-1;i++)
41 {
42     printf("<H>\t");
43 }
44 printf("\n");
45 for(i=0;i<j;i++)
46 {
47     printf("\t");
48 
49 }
50     for(i=1;i<=2*n-1;i++)
51 {
52     printf("I I\t");
53 }
54 printf("\n");
55 n--;
56     
57 }
58 }

图片

感受,task7写的过于复杂,先打印全填满的小人,再考虑每行减少两个,最后考虑开头的\t

 

 

posted @ 2024-10-23 20:48  sanaprix  阅读(21)  评论(0编辑  收藏  举报