/* 标准文档模板 */
#include "Stdio.h"
#include "Conio.h"
/*
月份数: x
每月存入本金: m
月利率: r
第x月的本息和: f(x)
算法: 运用递归思想
f(x)=| m*(1+r) (x=1)
| {m*(1+r)+m}*(1+r) (x=2)
| { f(x-1)+m }*(1+r) (x>2)
*/
float m; /*月份*/
float r; /*月利率*/
float y; /*年限*/
float f(int x)
{
if(x==1) return m*(1+r);
else if(x==2) return (m*(1+r)+m)*(1+r);
else return (f(x-1)+m)*(1+r);
}
void printMsg(float x)
{
printf("------------------------------\n");
printf("\n");
printf("\n");
printf("\t每月存入%.0f元",m);
printf("\n");
printf("\n");
printf("\t年回报率为%.2f%",r*12*100);
printf("\n");
printf("\n");
printf("\t存%.0f年",y);
printf("\n");
printf("\n");
printf("\t复利增长");
printf("\n");
printf("\n");
printf("\t可获得本息共%.2f元",f(x));
printf("\n");
printf("\n");
printf("------------------------------\n");
}
int main(void)
{
/* 此处添加你自己的代码 */
char str='n';
system("graftabl 936"); /*调用Ms-Dos中文支持 */
clrscr(); /* 清屏*/
while(1)
{
printf("\n\n\t每月存入金额为(元):");
scanf("%f",&m);
printf("\n\n\t年回报率为(%):");
scanf("%f",&r);
printf("\n\n\t年限为(年):");
scanf("%f",&y);
r=r/100/12;
printMsg(y*12);
printf("结束?(y/n):");
fflush(stdin);
/*
在你输入y回车后,键盘的缓冲区中会存在一个y和一个'\n'(回车符)。所以第第一次你的a会读入字符y,然而第二次输入y时,缓冲区中还有一个回车符在,所以第二次读入的是第一次残留在
缓冲区的回车符,而不是新输入的y。所以不满足条件,退出循环。
修改方法:
在scanf语句前加一句:fflush(stdin);这句的作用是清空缓冲区(就是所谓的流)中内容,这样你再次输入y的时候就不会读到上次剩余的回车符了。
*/
scanf("%c",&str);
if(str=='y' || str=='Y') break;
}
return 0;
}
04-10
197
04-08
172