《程序设计》函数题|001-010

练习5-1 求m到n之和 – 浙大版《C语言程序设计(第4版)》题目集

// 返回:[m,n]的整数之和
int sum(int m,int n){
    return (m+n)*(n-m+1)/2;
}

练习5-2 找两个数中最大者 – 浙大版《C语言程序设计(第4版)》题目集

// 返回:较大整数
int max(int a,int b){
    return a>b?a:b;
}

练习5-3 字符金字塔 – 浙大版《C语言程序设计(第4版)》题目集

// 输出:字符金字塔
void CharPyramid(int n,char ch){
    for(int i=1;i<=n;++i){    // 第i行
        for(int j=1;j<=n-i;++j) printf(" ");
        for(int j=1;j<=i;++j) printf("%c ",ch);
        if(i<=n-1) printf("\n");
    }
    return;
}

习题5-1 符号函数 – 浙大版《C语言程序设计(第4版)》题目集

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

习题5-2 使用函数求奇数和 – 浙大版《C语言程序设计(第4版)》题目集

// 返回:奇数->0 偶数->1
int even(int n){
    return n%2?0:1;
}
// 返回:线性表中所有奇数的和
int OddSum(int List[],int N){
    int result=0;
    for(int i=0;i<=N;++i){
        if(even(List[i])==0){
            result+=List[i];
        }
    }
    return result;
}

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

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

习题5-4 使用函数求素数和 – 浙大版《C语言程序设计(第4版)》题目集

// 返回:素数->1 否则->0
int prime(int p){
    if(p<=1) return 0;
    for(int i=2;i<=p/2;++i){
        if(p%i==0){
            return 0;
        }
    }
    return 1;
}

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

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

// 返回:指定整数中指定数字的个数
int CountDigit(int number,int digit){
    if(number==0){
        if(digit==0) return 1;
        else return 0;
    }
    int result=0;
    if(number<0) number*=-1;
    while(number>0){
        if(number%10==digit) ++result;
        number/=10;
    }
    return result;
}

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

// 返回:自幂数->1 否则->0
int narcissistic(int number){
    // 求正整数的位数
    int cnt=0;
    int tmp=number;
    while(tmp>0){
        ++cnt;
        tmp/=10;
    }
    // 求幂和
    int sumPow=0;
    tmp=number;        
    while(tmp>0){
        sumPow+=pow(tmp%10,cnt);
        tmp/=10;
    }
    if(sumPow==number) return 1;
    return 0;
}

// 输出:开区间内所有自幂数
void PrintN(int m,int n){
    for(int i=m+1;i<=n-1;++i){
        if(narcissistic(i)){
            printf("%d\n",i);
        }
    }
    return;
}

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

// 返回:非整负数的阶乘
double fact(int n){
    if(n==0 || n==1) return 1;
    double res=1;
    for(int i=2;i<=n;++i) res*=i;
    return res;
}

// 返回:余弦函数的近似值
double funcos(double e, double x){
    double res=0;
    int cnt=-1;
    int flag=-1;
    double numr=1,deno=1;
    // do-while 等效写法,可读性更好
    while(1){
        // 更新参数
        ++cnt;
        numr=pow(x,2*cnt);
        deno=fact(2*cnt);
        flag*=-1;
        // 累和
        res+=flag*numr/deno;
        if(numr/deno<e){
            break;
        }
    }
    return res;
}

《《程序设计》函数题|001-010》有1条评论

发表评论