数组,递归

1,企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,
低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;
40万到60万之间时高于40万元的部分,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%,
高于100万元时,超过100万元的部分按1%提成,
从键盘输入当月利润I,求应发放奖金总数?

void main()
{
    int i;
    double  j=0, k=0, a=0, b=0, c=0, d=0,g;
    scanf("%d",&i);
    getchar();
    j = i*0.1;
    d = j + (i - 10)*0.075;
    k =  + (i - 20)*0.05;
    a = k + (i - 40)*0.03;
    b = a + (i - 60)*0.015;
    c = b + (i - 100)*0.01;
    if (i <= 10)
    {
        g = i*0.1;
    }
    else if (10 < i&&i < 20)
    {
        g = j + (i - 10)*0.075;
    }
    else if (20 < i&&i < 40)
    {
        g =  d + (i - 20)*0.05;
    }
    else if (40 < i&&i < 60)
    {
        g = k + (i - 40)*0.03;
    }
    else if (60 < i&&i < 100)
    {
        g = a + (i - 60)*0.015;
    }
    else if (i > 100)
    {
        g = b + (i - 100)*0.01;
    }
    printf("%lf",g);

getchar();
}

这题的条件全都给了,当时写这题的时候一直卡在了计算它的总数;没考虑到它每个范围的奖励百分比都是独立的;一直没有转过弯来满心的泪啊问题的考虑还是不够全面;

递归判断输入的数字有几位;

int f(int num)
{
    if(num/10==0)
    {
        return 1;
    }
    else 
    {
        return 1+f(num/10);
    }
}
void main()
{
    int a;
    scanf("%d",&a);
    getchar();
    printf("%d",f(a));
    getchar();
}

递归,自己调用自己用两个return,拿100举例,100满足第一个条件继续(num/10==0)除了两次后不满足第一个条件自动到第二个条件内,1+f(num/10)后就不在循环1+记录它进入了这,因此显示3;

4,求s=a+aa+aaa+aaaa+aa…a的值,其中a是一个数字。
例如输入3则求3+33+333(此时共有3个数相加),
例如输入5则求5+55+555+5555+55555(此时共有5个数相加);

void main()
{
    int num,j,k,sum=0;
    scanf("%d",&num);
    getchar();
    k=num;
    printf("\n%d=",sum);
    for(j=1;j<k;j++)
    {
        sum+=num;
        num=num*10+k;
        printf("%d+",num);
    } 
    printf("=%d",sum);
    getchar()
}

k的作用是开辟一处空间来装num因为num是在不断变化的所以需要一个变量来承载他的原始值j

void main()
{
    int n, t;
    float a = 2, b = 1, s = 0;
    for (n = 1; n <= 20; n++)
    {
        s = s + a / b;
        t = a; 
        a = a + b;
        b = t;/*后面的b为前个a的数值*/
    }
    printf("sum ==  %9.6f\n", s);
    getchar();
}

从题目中可知从第二项开始b=a,a=a+b,先输出第一个结果再给个循环次数;

将输入的元素插入到顺序数组中,插入后不改变数组的排列书序.
比如:有数组 a[10] = {12,14,23,45,66,68,70,77,90,91};
插入数字50后,数组将为:{12,14,23,45,50,66,68,70,77,90};

void main()
{
    int a[10] = { 12, 14, 23, 45, 66, 68, 70, 77, 90, 91 },i,j,num,temp = 0;
    for (i = 0; i < 10; i++)
    {
        printf("%5d", a[i]);
    }
    printf("\n\n请输入您要插入的数字:\t");
    scanf("%d",&num);
    getchar();
    for (i = 0; i < 10; i++)
    {
        if (num <= a[i] && temp == 0)
        {
            temp = a[i];
            for (j = i + 1; j<10; j++)
            {
                temp = a[j] ^ temp;
                a[j] = a[j] ^ temp;
                temp = a[j] ^ temp;
            }
            a[i] = num;
        }
        printf("%5d", a[i]);
    }
    getchar();
}

在数组中插入50,并且把最末尾的挤出去;首先给第一个数列循环;判断输入的数不能大于数列且变量初始化比较等于0;然后赋值用冒泡排序判断;再将数值转换回来输出;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值