| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 790 人关注过本帖
标题:请问这个怎么改正确
只看楼主 加入收藏
小呀小蜜蜂
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2014-10-27
结帖率:40%
收藏
 问题点数:0 回复次数:11 
请问这个怎么改正确
#include<stdio.h>
int main()
{
    float a,f,s,d,g;
    scanf("%d%d%d%d%d",&a,&f,&s,&d,&g);  //a是本金,f是活期利率,s是定期利率,d为存储年份,g为事件判断
    switch(g)
    {
    case'A':
        while(d!=0)
        {
            a=a*(1+f);
            a++;
        }printf("%d年后共有%d元",d,a);break;
    case'B':
        while(d!=0)
        {
            a=a*(1+s);
            a++;
        }printf("%d年后共有%d元",d,a);break;
    }
    return 0;
}
是编一个关于银行存款的程序,活期可以一直存下去(中途不取出来,来年将上一年的本金和利息作为这一年的本金,以下类同),定期也是一样,但是活期转定期和定期转活期不会,希望各大神帮忙。谢谢
搜索更多相关主题的帖子: include return 
2014-12-19 22:04
诸葛欧阳
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:流年
等 级:贵宾
威 望:82
帖 子:2790
专家分:14619
注 册:2014-10-16
收藏
得分:0 
g是char型的吧

一片落叶掉进了回忆的流年。
2014-12-19 22:55
小呀小蜜蜂
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2014-10-27
收藏
得分:0 
回复 2楼 诸葛欧阳
不是,在这里仅仅是个字母与a,b,c,同价

如果你会,希望能告诉我怎么编这个程序或者怎么改让这个程序能够运行出来
2014-12-20 13:24
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
程序代码:
#include<stdio.h>

#define HRATE 0.03
#define DRATE 0.05

double (*pcalc)(double cap, double y);

void clearInput(void) {
    char input[1000];
    fgets(input, 1000, stdin);
}

double calcA(double cap, double y) {
    int i = (int)y;
    double j = y - i;

    if(0 == i) {
        cap *= 1 + HRATE * j;

    } else {
        cap = calcA(cap, y - 1) * (1 + HRATE);
    }

    return cap;
}

double calcB(double cap, double y) {
    int i = (int)y;
    double j = y - i;

    if(0 == i) {
        cap *= 1 + HRATE * j;

    } else if(1 == i) {
        cap *= 1 + DRATE;
        cap *= 1 + HRATE * j;

    } else {
        cap = calcA(cap, y - 1) * (1 + DRATE);
    }

    return cap;
}

void calc(double cap, double y, char op) {
    if(cap >= 0) {
        switch(op) {
            case 'a':
            case 'A':
                pcalc = calcA;
                break;

            case 'b':
            case 'B':
                pcalc = calcB;
                break;

            default:
                printf("业务类型选择错误!\n");
        }

    } else {
        printf("本金输入错误!\n");
    }

    printf("%.2lf年后共有%.2lf元\n", y, pcalc(cap, y));
}

int main(void) {
    double cap, y;
    char op, ch;
    printf("输入:\n本金  业务类型(A:活期-利滚利 B:定期-利滚利不满整年转活)  存储年份\n");
    scanf("%lf %c %lf", &cap, &op, &y);
    calc(cap, y, op);
    clearInput();

    if(op == 'A' || op == 'a') {
        printf("是否选择将当前活期转定期?Y/N\n");
        scanf("%c", &ch);
        clearInput();

        if(ch == 'Y' || ch == 'y') {
            printf("输入定期存储年份:");
            scanf("%lf", &y);
            calc(cap, y, 'B');
        }
    }

    return 0;
}

Only the Code Tells the Truth             K.I.S.S
2014-12-20 13:53
小呀小蜜蜂
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2014-10-27
收藏
得分:0 
回复 4楼 longwu9t
谢谢
2014-12-20 15:16
小呀小蜜蜂
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2014-10-27
收藏
得分:0 
回复 4楼 longwu9t
大神,能为我解释下吗?有好些都看不懂。。你可以在后面注释下吗?我们的作业要上去讲。。拜托了
2014-12-20 16:02
ouyangshit
Rank: 3Rank: 3
来 自:China
等 级:论坛游侠
帖 子:155
专家分:107
注 册:2014-10-25
收藏
得分:0 
程序代码:
#include<stdio.h>
#define HRATE 0.03 
#define DRATE 0.05
/*宏定义活期年利率,定期年利率*/
double (*pcalc)(double cap, double y);
/*函数指针的运用*/
void clearInput(void) {
    char input[1000];
    fgets(input, 1000, stdin);
}
/*从stdin输入流中取1000个字符存放到input里,用这个方式清理输入流*/
double calcA(double cap, double y) {
    int i = (int)y;      /*强制转化取年数*/
    double j = y - i;    /*取月数*/
    if(0 == i) {
        cap *= 1 + HRATE * j;       /*不足一年部分,HRATE*j是不足一年的利率*/
    } else {
        cap = calcA(cap, y - 1) * (1 + HRATE); /*超过一年部分,递归*/
    }
    return cap;
}
double calcB(double cap, double y) {
    int i = (int)y;
    double j = y - i;
    if(0 == i) {
        cap *= 1 + HRATE * j;
    } else if(1 == i) {
        cap *= 1 + DRATE;
        cap *= 1 + HRATE * j;
    } else {
        cap = calcA(cap, y - 1) * (1 + DRATE);
    }
    return cap;
}
/*不足一年的部分按活期,其他递归,我觉得 i==1的情况多余了,请指教*/
void calc(double cap, double y, char op) {
    if(cap >= 0) {
        switch(op) {
            case 'a':
            case 'A':
                pcalc = calcA;
                break;
            case 'b':
            case 'B':
                pcalc = calcB;
                break;
            default:
                printf("业务类型选择错误!\n");
        }
    } else {
        printf("本金输入错误!\n");
    }
    printf("%.2lf年后共有%.2lf元\n", y, pcalc(cap, y));
}
/*计算利润函数,根据不同情况将活期计算函数与定期计算函数赋值给指针函数,再进行操作*/
int main(void) {
    double cap, y;
    char op, ch;
    printf("输入:\n本金  业务类型(A:活期-利滚利 B:定期-利滚利不满整年转活)  存储年份\n");
    scanf("%lf %c %lf", &cap, &op, &y);
    calc(cap, y, op);
    clearInput();

    if(op == 'A' || op == 'a') {
        printf("是否选择将当前活期转定期?Y/N\n");
        scanf("%c", &ch);
        clearInput();

        if(ch == 'Y' || ch == 'y') {
            printf("输入定期存储年份:");
            scanf("%lf", &y);
            calc(cap, y, 'B');
        }
    }
    return 0;
}

我试着解读楼上大神的,有些不懂和不得体的地方,有错请指出,欢迎交流。

[ 本帖最后由 ouyangshit 于 2014-12-20 21:21 编辑 ]
2014-12-20 16:43
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 7楼 ouyangshit
是我考虑不周
写程序时只顾得逻辑上清晰
没有仔细考虑算法
所以导致calcB函数在递归上有啰嗦的写法
按你的意见是正确而简洁的
程序代码:
double calcB(double cap, double y) {
    int i = (int)y;
    double j = y - i;

    if(0 == i) {
        cap *= 1 + HRATE * j;

    } else {
        cap = calcA(cap, y - 1) * (1 + DRATE);
    }

    return cap;
}

Only the Code Tells the Truth             K.I.S.S
2014-12-20 20:04
ouyangshit
Rank: 3Rank: 3
来 自:China
等 级:论坛游侠
帖 子:155
专家分:107
注 册:2014-10-25
收藏
得分:0 
回复 8楼 longwu9t
我也只是在注释的时候自己学习。有些小地方我不太懂,能给点提示吗?
1. clearInput的I为什么大写,我总是觉得切换大小写按个shitf挺麻烦的,像
书上例题struct Create_Stu_Doc 大写起什么作用?是醒目吗?还有这里的Doc是什么意思,是document文件的意思吗?
2.定义的时候cap是哪个英文单词?我英语不太好,希望能得到指点。
3.fgets的第三个参数都是用stdin吗,我对stdin想有深入了解,能给点提示吗?
谢谢。
2014-12-20 21:43
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
回复 9楼 ouyangshit
1、clearInput 驼峰式的命名方法 你有自己的习惯的话不必按这样来 Create_Stu_Doc是很醒目 也许CreateStuDoc就已经很醒目了 Doc也许是document的意思吧 英文简写没有一定之规 看每个人的习惯或者团队的约定了
2、cap是我随意写写的 capital简写
3、fgets第三个参数是指针 可以是标准输入(键盘输入stdin) 也可以是文件流之类的

我也是初学 回答的不见得正确 还是请多在网上查找标准的答案

Only the Code Tells the Truth             K.I.S.S
2014-12-20 23:13
快速回复:请问这个怎么改正确
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023156 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved