c语言--算法题(一)

一、函数digit(n,k)的功能是求正整数n中从右端开始的第k个数字的值,如果k超过了n的位数,则函数返回-1;否则返回n中第k个数字

//非递归
int digit1(int n,int k)
{
    int t;
    while(k)
    {
        if(n==0) return -1;
        t = n%10;
        n = n/10;
        k--;
    }
    return t;
}
//递归
int digit2(int n,int k)
{
    if(n == 0) return -1;
    if(k ==1) return n%10;
    return digit2(n/10,k-1);
}


二、编程统计输入的一行中的大写字母、小写字母、数字的个数以及单词数

void number(char str[])
{
    int a=0,b=0,c=0,d=0,flag = 0;
    while(*str)
    {
        if(*str>=65 && *str<=90) a++,flag = 1;
        if(*str>=97 && *str<=122) b++,flag = 1;
        if(*str>=48 && *str<=57) c++;
        if(!(*str>=65 && *str<=90) && !(*str>=97 && *str<=122) && flag == 1)
        {
            d++;
            flag = 0;
        }
        str++;
    }
    printf("%d %d %d %d",a,b,c,d);
}

三、建立一个学生登记表,按学号排序,打印学生登记表

struct student
{
    long no;
    char name[8];
    char sex;
    float score;
};

//输入学生信息
int input(struct student *stu)
{
    int i = 0;
    scanf("%ld",&stu[i].no);
    while(stu[i].no != -1)
    {
        scanf("%s%f%c",stu[i].name,&stu[i].score,&stu[i].sex);
        i++;
        scanf("%ld",&stu[i].no);
    }
    return i;
}

//按学号排序
void stu_sort(struct student *stu,int n)
{
    int i,j;
    struct student temp;
    for(i = 0;i<n;i++)
    {
        for(j = i+1;j<n;j++)
        {
            if(stu[i].no>stu[j].no)
            {
                temp = stu[i];
                stu[i] = stu[j];
                stu[j] = temp;
            }
        }
    }
}

//打印学生信息
void output(struct student *stu)
{
    int i = 0;
    while(stu[i].no != -1)
    {
        printf("%d %s %.2f %c\n",stu[i].no,stu[i].name,stu[i].score,stu[i].sex);
        i++;
    }
}

四、删除”最右下“的结点子树,并返回该子树的根节点

BitTree RightBottom(BitTree T)
{
    if(T == NULL) return NULL;
    BitTree p,pre;
    p = T->right;
    if(!p) return NULL;
    pre = T;
    while(!p->right)
    {
        pre = p;
        p = p->right;
    }
    pre->right = NULL;
    return p;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值