实验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;
}

分数转化为等级,整型,字符型。

使用了双引号。

 

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

将n的各个位上的数相加
可以,一个循环,一个递归。

 

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

求x的n次方
是,x的n次方=x*x的n-1次方。

 

任务4:

#include <stdio.h>
#include <stdlib.h>

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

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

 

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

#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;
    
    }

#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--){
            x*=a;}
        for(b=n;b>=1;b--){
            y*=b;}
        for(c=(n-m);c>=1;c--){
            z*=c;}
        return ans=(y/(x*z)); }
}
  

 

任务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-30 01:13  无所事事的旅客  阅读(5)  评论(0编辑  收藏  举报