首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言 基础题

C语言 基础题

作者头像
py3study
发布2020-01-07 14:15:43
9630
发布2020-01-07 14:15:43
举报
文章被收录于专栏:python3python3

第1题 int sum_nth(unsigned int num, unsigned int n); 功  能:求出给定自然数的指定位置的数字(个位为0,十位为1,......) 参  数:num为给定的自然数;n为指定位置. 返回值:>=0,给定自然数的指定位置的数字; <0,不成功. 分  值:

//第1题
int sum_nth(unsigned int num,unsigned int n){
    if(num>=0){
        unsigned int i;
        if(num>10){
            for(i=1;i<=n;i++){
                num=num/10;
                if(num<10 && (n-i)>0)
                    return -1;
            } 
        }
        num=num%10;
        return num;
    }else{
    return -1;
    }
}

第2题 int sum_square(unsigned int num); 功  能:求出给定自然数的各位数字的平方和(例如 自然数1234的各位数字的平方和为30) 参  数:num为给定的自然数. 返回值:>=0,给定自然数的各位数字的平方和;<0,不成功. 分  值:

//第2题
int sum_square(unsigned int num){
    int sum=0;
    int temp;
    while(num>10){
        temp=num%10;
        sum=sum+temp*temp;
        num=num/10;
    }
    sum=sum+num*num;
    return sum;
}

第3题 int sort_acend(double* array, unsigned int n); 功  能:对给定数组中的数按升序排序 参  数:array为给定的数组;n为数组中元素的个数. 返回值:>=0,成功排序; <0,不成功. 分  值:

//第3题
//使用选择排序算法
int sort_ascend(double *arry, unsigned int n){
    unsigned int i,k;
    unsigned int lowIndex;
    for(i=0;i<n;i++){
        lowIndex=i;
        for(k=i+1;k<n;k++){
            if(*(arry+k)<*(arry+i))
                lowIndex = k;
        }
        double temp=*(arry+i);
        *(arry+i)=*(arry+lowIndex);
        *(arry+lowIndex)=temp;
    }

    bool flag1=true;
    for(i=0;i<n-1;i++){
        if(*(arry+i)<*(arry+i+1) && flag1){
            flag1=true;
        }else{
            flag1=false;
        }
    }
    
    if(flag1)
        return 1;
    return -1;
}

第4题 int sort_decend(double* array, unsigned int n); 功  能:对给定数组中的数按降序排序 参  数:array为给定的数组;n为数组中元素的个数. 返回值:>=0,成功排序; <0,不成功. 分  值:

//第4题
//插入排序算法
int sort_descend(double *arry, unsigned int n){
    unsigned int i,k;
    for(i=1;i<n;i++){
        for(k=i;k>0;k--){
            if(*(arry+k)>*(arry+k-1)){
                double temp=*(arry+k);
                *(arry+k)=*(arry+k-1);
                *(arry+k-1)=temp;
            }    
        }
    }
    bool flag1=true;
    for(i=0;i<n-1;i++){
        //printf("\n%.2f\n",*(arry+i));
        if(*(arry+i)>*(arry+i+1) && flag1){
            flag1=true;
        }else{
            flag1=false;
        }
    }
    
    if(flag1)
        return 1;
    return -1;
}

第5题 int search_bin(int* array, unsigned int n, int value); 功  能:用二分检索法(也称折半法,字典法等)找出给定数值在数组中位置的下标值 参  数:array为给定的数组;n为数组中元素的个数; value为要查找的数值. 返回值:>=0, 给定数值在数组中位置的下标; <0,未找到. 分  值:

//第5题
//二分检索法
int search_bin(int* array, unsigned int n, int value){
    
    int low=0,high=n-1,mid;//置当前查找区间上、下界的初值
    while(low<=high){
        if(*(array+low)==value)
            return low;
        if(*(array+high)==value)
            return high;
        //当前查找区间array[low..high]非空
        mid=low+((high-low)/2);
        //使用(low+high)/2会有整数溢出的问题
        if(*(array+mid)==value)
            return mid;//查找成功返回
        if(*(array+mid)<value)
            low=mid+1;//继续在array[mid+1..high]中查找
        else
            high=mid-1;//继续在array[low..mid-1]中查找
     
    }
    if(low>high)
        return-1;//当low>high时表示所查找区间内没有结果,查找失败
}

第6题 unsigned int factorial(unsigned int n); 功  能:求给定自然数的阶乘。 参  数:n为给定的自然数. 返回值:给定数的阶乘n!. 分  值:

//第6题

unsigned int factorial(unsigned int n){
    if(n==0||n==1){
        return 1;
    }else{
        return n*factorial(n-1);
    }

}

第7题 char*   strn2b(unsigned int n); 功  能:求出给定自然数的二进制字符串表示(例如,5的二进制字符串表示为“101”) 参  数:n为给定的自然数. 返回值:二进制字符串数组的首地址. 分  值:

//第7题
char*   strn2b(unsigned int n){
     char arr[32]={};//因为是无符号整数,所以二进制表示最长为32位
    for(int i=31;i>=0;i--){
        if((n & 0x1)==1){
            arr[i]='1';
        }else{
            arr[i]='0';
        }
        n=(n>>1);
    }

    return arr;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-19 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档