《实验与习题指导》函数题|001-010

实验2-5-1 求排列数 – 浙大版《C语言程序设计实验与习题指导(第4版)》题目集

// 返回:非负整数->阶乘 负数->-1
double fact(int n){
    // 边界处理
    if(n<0) return -1;
    if(n==0 || n==1) return 1;
    // 递推
    double result=1;
    for(int i=2;i<=n;++i){
        result*=i;
    }
    return result;
}

实验2-5-5 简单实现x的n次方 – 浙大版《C语言程序设计实验与习题指导(第4版)》题目集

// 返回:x的n次方
double mypow(double x,int n){
    // 快速幂
    double result=1;
    double cur=x;
    while(n>0){
        if((n&1)==1) result*=cur;
        cur*=cur;
        n=n>>1;
    }
    return result;
}

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

// 返回:非负整数->阶乘 负数->-1
double fact(int n){
    // 边界处理
    if(n<0) return -1;
    if(n==0 || n==1) return 1;
    // 递推
    double result=1;
    for(int i=2;i<=n;++i){
        result*=i;
    }
    return result;
}

实验5-1 使用函数计算两点间的距离 – 浙大版《C语言程序设计实验与习题指导(第4版)》题目集

// 返回:计算两点之间的距离
double dist(double x1,double y1,double x2,double y2){
    return sqrt(pow(x1-x2,2)+pow(y1-y2,2));
}

实验5-2 符号函数 – 浙大版《C语言程序设计实验与习题指导(第4版)》题目集

// 返回:正数->1 负数->-1 0->0
int sign(int x){
    if(x>0) return 1;
    else if(x<0) return -1;
    return 0;
}

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

// 返回:第n项fib数
int fib(int n){
    // 边界处理
    if(n<=2) return 1;
    // 递推
    int nums[2]={1,1};
    for(int i=3;i<=n;++i){
        // 滚动数组更新
        int temp=nums[0];
        nums[0]=nums[1];
        nums[1]+=temp;
    }
    return nums[1];
}

实验5-4 输出每个月的天数 – 浙大版《C语言程序设计实验与习题指导(第4版)》题目集

// 返回:(年,月)->(天数)
int MonthDays(int year,int month){
    // 月份数据
    int days[13]={12
        ,31,28,31,30
        ,31,30,31,31
        ,30,31,30,31
    };
    // 若是闰年 则更新月份数据
    if((year%4==0 && year%100!=0)
      || year%400==0){
        ++days[2];
    }
    return days[month];
}

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

// 返回:最大公约数
int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}

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

// 返回:[m,n]内所有素数的和
int PrimeSum(int m, int n){
    // 边界处理
    if(m>n) return 0;
    int result=0;
    for(int i=m;i<=n;++i){
        if(prime(i)){
            result+=i;
        }
    }
    return result;
}

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

// 输出:一个实心的字符矩形
void matrix(int length, int width, char ch){
    for(int i=1;i<=width;++i){
        for(int j=1;j<=length;++j){
            printf("%c",ch);
        }
        printf("\n");
    }    
    return;
}

发表评论