《实验与习题指导》函数题|011-020

实验5-8 使用函数求圆台体积 – 浙大版《C语言程序设计实验与习题指导(第4版)》题目集

#include <math.h>

// 求圆台体积
double volume_tc(double r_lower,double r_upper,double h){
    double s_lower=PI*r_lower*r_lower;
    double s_upper=PI*r_upper*r_upper;
    double result=h*(s_lower+s_upper+sqrt(s_lower*s_upper))/3.0;
    return result;
}

实验5-9 使用函数求余弦函数的近似值 – 浙大版《C语言程序设计实验与习题指导(第4版)》题目集

// 返回:余弦函数的近似值
double funcos(double e,double x){
    double frac[2]={1,1};
    int flag=1;
    int cnt=1;
    double result=0;
    // do-while等效写法
    while(1){
        result+=flag*frac[0]/frac[1];
        if(frac[0]/frac[1]<e){
            break;
        }
        frac[0]*=x*x;
        frac[1]*=cnt++;
        frac[1]*=cnt++;
        flag*=-1;
    }
    return result;
}

实验5-10 使用函数统计指定数字的个数 – 浙大版《C语言程序设计实验与习题指导(第4版)》题目集

// 返回:统计指定数字个数
int CountDigit(int number,int digit){
    // 边界处理
    if(number==0){
        if(digit==0) return 1;
        else return 0;
    }
    // 负数转正数
    if(number<0){
        number*=-1;
    }
    int cnt=0;
    while(number>0){
        if(number%10==digit){
            ++cnt;
        }
        number/=10;
    }
    return cnt;
}

实验5-11 空心的数字金字塔 – 浙大版《C语言程序设计实验与习题指导(第4版)》题目集

// 输出:空心的数字金字塔
void hollowPyramid(int n){
    // 边界处理
    if(n==1){
        printf("1");
        return;
    }else if(n==2){
        printf(" 1\n");
        printf("222");
        return;
    }
    // 第1层
    for(int i=1;i<=n-1;++i){
        printf(" ");
    }
    printf("1\n");
    // 第2-(n-1)层
    for(int i=2;i<=n-1;++i){  // 第i层
        for(int j=1;j<=n-i;++j){
            printf(" ");
        }
        printf("%d",i);
        for(int j=1;j<=2*i-3;++j){
            printf(" ");
        }
        printf("%d\n",i);
    }
    // 第n层
    for(int i=1;i<=2*n-1;++i){
        printf("%d",n);
    }
    printf("\n");
    // 返回
    return;
}

实验6-3 使用函数求特殊a串数列和 – 浙大版《C语言程序设计实验与习题指导(第4版)》题目集

// 返回:n个a组成的数字
int fn(int a, int n){
    int result=0;
    for(int i=0;i<n;++i){
        result*=10;
        result+=a;
    }
    return result;
}

// 返回:要求的和
int SumA( int a, int n ){
    int result=0;
    for(int i=1;i<=n;++i){
        result+=fn(a,i);
    }
    return result;
}

实验6-6 使用函数验证哥德巴赫猜想 – 浙大版《C语言程序设计实验与习题指导(第4版)》题目集

// 返回:素数->1 否则->0
int prime(int p){
    // 边界处理
    if(p<=1) return 0;
    else if(p==2) return 1;
    // 检查是否有除1和自身外的其他因数
    int upper=sqrt(p)+1;
    for(int i=2;i<=upper;i++){
        if(p%i==0){
            return 0;
        }
    }
    return 1;
}

// 输出:n的素数分解n=p+q(要求p最小)
void Goldbach(int n){
    for(int i=2;i<=n/2;++i){
        if(prime(i)==1 && prime(n-i)==1){
            printf("%d=%d+%d",n,i,n-i);
            break;
        }
    }
    return;
}

实验6-7 使用函数输出一个整数的逆序数 – 浙大版《C语言程序设计实验与习题指导(第4版)》题目集

// 输出 整数的逆序数
int reverse(int number){
    // 边界处理
    if(number==0) return 0;
    int result=0;
    int sign=1;
    // 负数转正数,保留符号
    if(number<0){
        sign=-1;
        number*=-1;
    }
    while(number>0){
        result*=10;
        result+=number%10;
        number/=10;
    }
    result*=sign;
    return result;
}

实验6-8 使用函数输出指定范围内的完数 – 浙大版《C语言程序设计实验与习题指导(第4版)》题目集

#include <stdbool.h>
// 输出:整数除自身外因子和
int factorsum(int number){
    int result=0;
    int limit=number/2;
    for(int i=1;i<=limit;++i){
        if(number%i==0){
            result+=i;
        }
    }
    return result;
}
// 输出:指定范围内的完数的因子累加形式的分解式
void PrintPN(int m,int n){
    bool isFound=false;
    for(int i=m;i<=n;++i){
        if(factorsum(i)==i){
            isFound=true;
            printf("%d = 1",i);
            int limit=i/2;
            for(int j=2;j<=limit;++j){
                if(i%j==0){
                    printf(" + %d",j);
                }
            }
            printf("\n");
        }
    }
    if(!isFound){
        printf("No perfect number\n");
    }
    return;
}

实验6-9 使用函数输出指定范围内的Fibonacci数 – 浙大版《C语言程序设计实验与习题指导(第4版)》题目集

// 返回:第n项fib数
int fib(int n){
    // 边界处理
    if(n<=0) return 0;
    else if(n==1 || n==2) return 1;
    // 滚动更新
    int nums[3]={0,1,1};
    for(int i=2;i<n;++i){
        nums[0]=nums[1];
        nums[1]=nums[2];
        nums[2]=nums[0]+nums[1];
    }
    return nums[2];
}
// 输出:闭区间[m,n]内所有fib数
void PrintFN(int m, int n){
    // 输出
    int cnt=0;
    for(int i=0;fib(i)<=n;++i){
        int cur=fib(i);
        if(cur>=m){
            ++cnt;
            if(cnt>1){
                printf(" ");
            }
            printf("%d",cur);
        }
    }
    if(cnt==0){
        printf("No Fibonacci number");
    }
    return;
}

实验6-11 使用函数输出水仙花数 – 浙大版《C语言程序设计实验与习题指导(第4版)》题目集

#include <math.h>

// 返回:自幂数->1 否则->0
int narcissistic(int number){
    if(number<100){
        return 0;
    }
    int result=0;
    int n=0;
    int tmp=number;
    while(tmp>0){
        ++n;
        tmp/=10;
    }
    int sum=0;
    tmp=number;
    while(tmp>0){
        sum+=pow(tmp%10,n);
        tmp/=10;
    }
    if(sum==number){
        result=1;
    }
    return result;
}
// 输出:开区间(m,n)内所有的水仙花数字
void PrintN(int m, int n){
    for(int i=m+1;i<=n-1;++i){
        if(narcissistic(i)){
            printf("%d\n",i);
        }
    }    
    return;
}

《《实验与习题指导》函数题|011-020》有2条评论

    • 感谢评论♥,也是心血来潮做的网站,
      初心是做知识输出练习,并且在赛博空间留下自己的一些痕迹。
      刚刚访问您做的博客,设计得太漂亮了,等我博客内容详实以后,也要向您学习!!!

      回复

发表评论