实验作业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

功能是统计学生分数等级,60及以下为E,60-70为D,70-80为C,80-90为B,90-100为A。形参及返回值均为整型。

问题2

有,第一个问题是用双引号,而不是用单引号标识字符。第二个问题是没有用break结束switch语句。

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

计算每一位数加起来的和

问题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

计算x的n次方

问题2

是,递归模式为,当n=0时返回1,否则重复x×x,n-1直到n为0。结束数学模型为Y=x^n

任务4

源代码

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

运行截图

任务5

源代码

#include<stdio.h>
int hanoi(unsigned int n,char from,char temp,char to);
int moveplate(unsigned int n,char from,char to );
int times(int n); 
int main(){
    unsigned int n; int m=1,i,q;

     while(scanf("%u",&n)!=EOF)
    {hanoi(n,'A','B','C');
    q= times( n);
    printf("\n一共移动了%d次\n\n",q);
    }
    return 0;
}
int hanoi(unsigned n,char from,char temp,char to)
{    int m;
    if(n==1)
    moveplate(n,from,to);
    
    else
    {hanoi(n-1,from,to,temp);
    moveplate(n,from,to);
    hanoi(n-1,temp,from,to);
    }
}
int moveplate(unsigned int n,char from,char to ){
    printf("%u:%c-->%c\n",n,from,to);
}
int times(int n)
{int i,s=1,j;
for (i=1;i<=n;i++)
 {s=s*2;}
 j=s-1;
 return j;
}

运行效果

 

任务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 s,q=1,g,h,a=1;int ans;
    g=m; h=n;
    for(s=1;s<=m;s++)
    {q=q*g;
     g--;
    }
        for(m=m;m>0;m--)
    { a=a*h;
      h--;
    }
    ans=a/q;
    return ans;
}

运行效果

源代码(递归)

#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)
    return 1 ;
    else if(n<m)
    return 0;
    else
    ans = func(n-1,m)+func(n-1,m-1);
    return ans;
    }

运行截图

任务7

源代码

#include<stdio.h>
#include<stdlib.h>
int print_charman(int n);
int main(){
    int n;
    printf("Enter n:");
    scanf("%d",&n);
    print_charman(n);
    return 0;
}
int print_charman(int n){
    int q,a,b,c=1,g,d,i=0;
    for(q=n;q>0;q--){
        for(a=0;a<i;a++)
        printf("\t");
        for(g=2*q-1;g>0;g--)
            {
            printf(" o");
            printf("\t");}
            printf("\n");
        for(a=0;a<i;a++)
        printf("\t");
            for(g=2*q-1;g>0;g--)
            {
            printf("<H>");
            printf("\t");}
            printf("\n");
        for(a=0;a<i;a++)
        printf("\t");
            for(g=2*q-1;g>0;g--)
            {
            printf("I I");
            printf("\t");}
            printf("\n\n");
            i++;
                   }
}

 

运行效果

 

 

posted @ 2024-10-25 23:31  难绷  阅读(9)  评论(0编辑  收藏  举报