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

//函数score_to_grade 用来 划分不同分数等级 形参类型是整数int,分数数值,返回值类型是char,字母类型
//首先引用字母应该使用单引号‘’;其次,每个case后应该加break,否则后续事件依然会执行

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

 

//算一个数字的每一位数加起来求和
//能实现,第二种方法是 递归算法,将多位数不断减少位数,同时ans加上个位数,直到变为个位数;第一种是迭代 逐个相加每位数

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

//函数power用来计算 x的n次方
//是递归, 递归模式模式是: return x * power(x, n-1);n为偶数是,x的n次方==x的二分之n次方的平方,一直循环直到n=2

任务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("100以内的孪生素数:%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

递归

#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){
    if (m==0 || n==m)
     return 1;
     else if (n<m)
     return 0;
     
     else {
     int a=1, b=1, c=1;
     int i, j, k;
     for(i=1;i<=n;i++){
        a=i*a;
    }
     for(j=1;j<=m;j++){
        b=j*b;
    }
     for(k=1;k<=n-m;k++){
        c=k*c;
    }
     return (a/b/c);
 }
}

迭代

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

任务7

void print_charman(int n);// 函数声明
// 待补足
// xxx

int main() {
    int n;

    printf("Enter n: ");
    scanf("%d", &n);
    print_charman(n); // 函数调用
       
    return 0;
}

void print_charman(int n){
int x,y=0,q,a,b,c;
    q=n*2-1;
    while(q!=-1) {
        for(x=0;x<y;x++){
            printf(" ");}
        for(a=0;a<q;a++){
            printf(" O    ");}
        printf("\n");
        for(x=0;x<y;x++){
            printf(" ");}
        for(b=0;b<q;b++){
            printf("<H>   ");}
        printf("\n");
        for(x=0;x<y;x++){
            printf(" ");}
        for(c=0;c<q;c++){
            printf("I I   ");}
        printf("\n");
        y+=6;
        q=q-2;
}
}

 

posted @ 2024-10-30 01:25  搞传销  阅读(6)  评论(0编辑  收藏  举报