实验三

任务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定义一个函数,将分数转化为对应的等第 形式参数score  返回值类型char字符
问题2 没有break终止,会一直进行指令,输出结果始终为E
任务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;
}
//dingyihanshu
int sum_digits(int n){
 int ans=0;
 while(n!=0){
  ans+=n%10;
  n/=10;
 }
     return ans;
  }

 

问题1输入的n除以10取余,将余数(个位)加到ans中,再将n/10后的数再进行一次这样的操作,直到n=0,ans是所有的位数上数字之和
问题2使用递归函数10以内即为自身,十以上将个位保留,前面的数继续进入函数,自己调用自己
任务3
#include<stdio.h>
int power(int x,int n);
int main(){
int x,n;
int ans;
while(printf("Ener x and n:"),scanf("%d%d",&x,&n)!=EOF){
 ans=power(x,n);
 printf("n=%d,ans=%d\n\n",n,ans);
 }
 return 0;
}
//dingyihanshu
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递归.当n为2的倍数时,化为t*t(t=power(x,n/2))再次调用了这个函数;重复使用至n为奇数时,提出1个x,化为x*(n-1)个x相乘,(n-1)又变回偶数,又带回前面的偶数t*t

任务4

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

 

任务5

 

#include<stdio.h>
#include<stdlib.h>
void hanoi(unsigned int n,char from,char temp,char to);//递归声明
void moveplate(unsigned int n,char from,char to);//移动声明
int count=0;
int main(){
    unsigned int n;
    while(scanf("%d",&n)!=EOF){
        hanoi(n,'A','B','C');
        printf("一共移动了%d次\n",count);
        count=0;}
    system("pause");
    return 0;
}
void hanoi(unsigned 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(unsigned int n,char from,char to) 
{
printf("%u:%c-->%c\n",n,from,to);
count++;
}

任务6

 

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 x=1,y=1,z=1,a,b,c,ans;
    if(n<m)
    return ans=0;
    if(n==m)
    return ans=1;
    else{
         for(a=m;a>=1;a--){//    m!   m=5
        x*=a;}
        for(b=n;b>=1;b--){//     n!     n=3
        y*=b;}
        for(c=(n-m);c>=1;c--){    //(n-m)!     n-m=2
        z*=c;}
        return ans=(y/(x*z)); }
   
    } 

2递归

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

任务7

#include<stdio.h>
#include<stdlib.h>
void print_charman(int n);
int main(){
    int n;
    printf("Enter n:");
    scanf("%d",&n);
    print_charman(n);
    return 0;
}
void print_charman(int n){
    int x,y=0,z,a,b,c;//一行个数z    yx定义空格  abc个数 
    z=n*2-1;
    while(z!=-1) {
        for(x=0;x<y;x++){
            printf(" ");}
        for(a=0;a<z;a++){
            printf(" O    ");}
        printf("\n");
        for(x=0;x<y;x++){
            printf(" ");}
        for(b=0;b<z;b++){
            printf("<H>   ");}
        printf("\n");
        for(x=0;x<y;x++){
            printf(" ");}
        for(c=0;c<z;c++){
            printf("I I   ");}
        printf("\n");
        y+=6;
        z=z-2;
}}

 

 

 

 

posted @ 2024-10-27 15:31  史康乐  阅读(11)  评论(0编辑  收藏  举报