函数题48道

练习5-1 求m到n之和

int sum( int m, int n ){
    int temp=0;
    for(int i=m;i<=n;i++){
        temp +=i;
    }
    return temp;
}

练习5-2 找两个数中最大者

int max( int a, int b ){
    return a>b?a:b;
}

练习5-3 字符金字塔

void CharPyramid( int n, char ch){
    for(int i=0;i<n;i++){
        for(int j=0;j<n-1-i;j++){
            printf(" ");
        }
        for(int j=0;j<=i;j++){
            printf("%c ",ch);
        }
        printf("\n");
        
    }
}

习题5-1 符号函数

int sign( int x ){
    if(x>0){
        return 1;
    }else{
        return x==0?0:-1;
    }
}

习题5-2 使用函数求奇数和

int even( int n ){
    return n%2==0?1:0;
    
}
int OddSum( int List[], int N ){
    int sum=0;
    for(int i=0;i<N;i++){
        if(!even(List[i]))sum+=List[i];
    }
    return sum;
}

习题5-3 使用函数计算两点间的距离

double dist( double x1, double y1, double x2, double y2 ){
    return sqrt(pow((x1-x2),2)+pow((y1-y2),2));
}

习题5-4 使用函数求素数和

int prime( int p ){
    if(p<2)return 0;
    for(int i=2;i*i<=p;i++){
        if(p%i==0){
            return 0;
        }
    }
    return 1;
}
int PrimeSum( int m, int n ){
    int sum=0;
    for(int i=m;i<=n;i++){
        sum+=prime(i)==1?i:0;
    }
    return sum;
}

习题5-5 使用函数统计指定数字的个数

int CountDigit( int number, int digit ){
    number=number<0?-number:number;
    int cnt=0;
    if(number==digit)return 1;
    while(number!=0){
        if(number%10==digit){
            cnt++;
        }
         number /=10;
    }
    return cnt;
}

习题5-6 使用函数输出水仙花数

#include <math.h>
int narcissistic( int number ){
    int cnt=0;
    int temp1=number,temp2=number;
    while(temp1!=0){//统计位数
        cnt++;
        temp1 /=10; 
    }
    int sum=0;
    while(temp2!=0){//计算每个位上的数字的N次幂之和
        sum +=pow(temp2%10,cnt);
        temp2 /=10;
    }
    return number==sum?1:0;
}
void PrintN( int m, int n ){
    for(int i=m+1;i<n;i++){
        if(narcissistic(i))printf("%d\n",i);
    }
}

习题5-7 使用函数求余弦函数的近似值

double funcos( double e, double x ){
    double temp=1.0,res=1.0;
    for(int i=2;;i+=2){
        temp *=(-1)*x*x/(i*(i-1));
         res +=temp;
        if(fabs(temp)<e)return res;//退出条件
    }
    
}

习题5-8 空心的数字金字塔

#include <string.h>
void hollowPyramid( int n ){
      if(n==1){//注意!
        printf("1\n");
        return;
    }
    char arr[20]={0};//定义一行字符串
    //打印特殊第一行
     memset(arr,0,sizeof(arr));
    //前空格
    int pos;
    for(int j=0;j<n-1;j++){
            arr[j]=' ';
            pos=j;
        }
    //左数字
    arr[pos+1]='0'+1;
    printf("%s\n",arr);
    
    //打印2~n-1行
    for(int i=2;i<n;i++){
        memset(arr,0,sizeof(arr));
        //前空格
        int pos;
        for(int j=0;j<n-i;j++){
            arr[j]=' ';
            pos=j;
        }
        //左数字
        arr[pos+1]='0'+i;
        //中间空格
        int pos2=0;
        for(int j=0;j<i*2-3;j++){
            arr[pos+2+j]=' ';
            pos2=pos+2+j;
        }
        //右数字
        arr[pos2+1]='0'+i;  
        //打印一行字符串
        printf("%s\n",arr);
    }
    
    //打印特殊最后一行
    memset(arr,0,sizeof(arr));
    for(int i=0;i<n*2-1;i++){
        arr[i]='0'+n;
    }
    printf("%s\n",arr);
}

习题6-1 分类统计字符个数

#include <ctype.h>
void StringCount( char s[] ){
    int cntl=0,cntb=0,cntd=0,cnto=0;
    for(int i=0;s[i]!='\0';i++){
        if(isalpha(s[i])){
            cntl++;
        }else if(isspace(s[i])){
            cntb++;
        }else if(isdigit(s[i])){
            cntd++;
        }else{
            cnto++;
        }
    }
    printf("letter = %d, blank = %d, digit = %d, other = %d",cntl,cntb,cntd,cnto);
}

习题6-2 使用函数求特殊a串数列和

int fn( int a, int n ){
    int res=a;
    if(n==1)return res;
    for(int i=0;i<n-1;i++){
        a *=10;
       res += a;
    }
    return res;
}
int SumA( int a, int n ){
    int sum=0;
      for(int i=1;i<=n;i++){
          sum +=fn(a,i);
      }
    return sum;
}

习题6-3 使用函数输出指定范围内的完数

int factorsum( int number ){
    int sum=0;
    for(int i=1;i<number;i++){
        if(number%i==0)sum +=i;
    }
    return sum;
}
void PrintPN( int m, int n ){
    int flag=0;
    for(int i=m;i<=n;i++){
        if(factorsum(i) == i){
            flag=1;
            printf("%d = 1",i);
            for(int j=2;j<i;j++){
                if(i%j==0){
                    printf(" + %d",j);
                }
            }
            printf("\n");
        }
    }
    if(!flag)printf("No perfect number");
}

习题6-4 使用函数输出指定范围内的Fibonacci数

int dp[10000]={0};
int fib( int n ){//用递归超时,故改用动态规划记录子状态
    dp[0]=0;
    dp[1]=1;
    for(int i=2;i<10000;i++){
        dp[i]=dp[i-1]+dp[i-2];
    }
    return dp[n];
}
void PrintFN( int m, int n) {
    int flag=0;
    int first=1;
    for(int i=1;;i++){
        if(fib(i)>n)break;
        if(fib(i)>=m){
            if(first){//第一个输出前无空格
                printf("%d",fib(i));
                first=0;
            }else{
                printf(" %d",fib(i));
            }
            flag=1;//有斐波那契数
        }
    }
    if(!flag)printf("No Fibonacci number");
}

习题6-5 使用函数验证哥德巴赫猜想

int prime( int p ){
    if(p<2)return 0;
    for(int i=2;i*i<=p;i++){
        if(p%i==0){
            return 0;
        }
    }
    return 1;
}
void Goldbach( int n ){
    for(int i=2;n-i>0;i++){
        if(prime(i)&&prime(n-i)){
            printf("%d=%d+%d",n,i,n-i);
            break;
        }
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务