1、4.1 用用while语句实现循环语句实现循环4.2 用用do-while语句实现循环语句实现循环4.3 用用for语句实现循环语句实现循环4.4 循环的嵌套循环的嵌套4.5 跳转语句跳转语句:break和和continue语句语句4.6 循环结构程序设计综合举例循环结构程序设计综合举例 第第4章章 循环结构程序设计循环结构程序设计 n循环结构:在循环结构:在一定条件下一定条件下,重复执行某重复执行某段程序段程序的流程结构,被反复执行的程序的流程结构,被反复执行的程序被称为被称为循环体循环体.条件循环体例例如,如,求求1+2+3+100n解题解题分析分析:n这是累加问题这是累加问题:分别将分别
2、将1,2,3,至至100,累加到,累加到sum求和求和变量中变量中n要重复要重复100次加法运算,用循环实现次加法运算,用循环实现n加完前一个数加完前一个数i后,使后,使i加加1可得到后一个数可得到后一个数n具体过程:具体过程:nC语言语言循环语句:循环语句:n while语句语句n do-while语句语句n for语句语句 第第4章章 循环结构程序设计循环结构程序设计 while语句的形式:语句的形式:while(条件条件表达式表达式)语句语句循环体循环体循环循环条件条件4.1 用用while语句实现循环语句实现循环例如:求例如:求1+2+3+100之和。之和。#include void
3、main()int i,sum;sum=0;/累加和变量置累加和变量置0 i=1;/计数器计数器i的初始值为的初始值为1 while(i=100)sum+=i;i+;printf(sum=%dn,sum);sum=5050循环体循环体复合语句复合语句例如:求例如:求1+2+3+100之和。之和。#include void main()int i,sum;sum=0;/累加和变量置累加和变量置0 i=1;/计数器计数器i的初始值为的初始值为1 while(i=100)sum+=i;i+;printf(sum=%dn,sum);循环控制变量循环控制变量i 如果丢掉丢掉 i=i+1,循环永不结束循环
4、永不结束(死循环)(死循环)循环体中一定有改变循环条循环体中一定有改变循环条件的语句件的语句例如:求例如:求1+2+3+100之和。之和。#include void main()int i,sum;sum=0;i=1;while(i=100)sum+=i;i+;printf(sum=%dn,sum);n请思考:请思考:1.例子的累加和算法改为:例子的累加和算法改为:sum=sum+i 但但i从从100 变化到变化到1。则程序应如何修。则程序应如何修改?改?2.求求100以内的奇数(或偶数)以内的奇数(或偶数)之和。上面程序应如何修改?之和。上面程序应如何修改?3.当累加和仍为:当累加和仍为:s
5、um=sum+i (i从从1 到到n),但但n从键盘输入。程序应如从键盘输入。程序应如何修改?当输入何修改?当输入n为为0时,时,循环执行多少次?循环执行多少次?n while语句语句的循环特点:的循环特点:n 先判断条件表达式,后执行循环体语句先判断条件表达式,后执行循环体语句(pre-test loop)while(条件条件表达式表达式)语句语句;4.1 用用while语句实现循环语句实现循环例例4-2 从键盘输入一组学生的成绩,统计这组成从键盘输入一组学生的成绩,统计这组成绩的及格和不及格的人数,以及平均成绩。假设绩的及格和不及格的人数,以及平均成绩。假设这组成绩的结尾标志是这组成绩的结
6、尾标志是-1的数据。的数据。n解题思路:解题思路:n变量分配:变量分配:ninput:存放输入的成绩;存放输入的成绩;npassed:及格人数;及格人数;nfailed:不及格的人数不及格的人数,navg:平均成绩。平均成绩。n解题思路:解题思路:n变量分配:变量分配:ninput:存放输入的成绩;存放输入的成绩;npassed:及格人数,及格人数,failed:不及格的人数不及格的人数,navg:平均成绩。平均成绩。n处理过程:处理过程:#include void main()int input,passed=0,failed=0;double avg=0;scanf(%d,&input);
7、while(input=0)avg+=input;if(input=60)passed+;else failed+;scanf(%d,&input);avg=avg/(passed+failed);printf(passed=%d,failed=%d,average score is%.2fn,passed,failed,avg);do-whiledo-while语句的一般形式语句的一般形式do do 语句语句while(while(条件表达式条件表达式);执行流程执行流程do-whiledo-while语句:语句:post-test looppost-test loop 与与while wh
8、ile 语句的比较:语句的比较:pre-test loop4.2 用用do-while语句实现循环语句实现循环#include void main()int i,sum;sum=0;i=1;do sum+=i;i+;while(i=100);printf(sum=%dn,sum);例例4-3 用用do-while语句求:语句求:1+2+100的和。的和。#include void main()int i,sum;sum=0;i=1;while(i=100)sum+=i;i+;printf(sum=%dn,sum);sum=5050#include void main()int i,sum;su
9、m=0;i=101;do sum+=i;i+;while(i=100);printf(sum=%dn,sum);while语句与语句与 do-while语句比较语句比较do-while语句的循环次数语句的循环次数1while语句的循环次数语句的循环次数0#include void main()int i,sum;sum=0;i=101;while(i=100)sum+=i;i+;printf(sum=%dn,sum);输出:输出:sum=101输出:输出:sum=0例例4-4 输入一个整数,将各位数字反转后输出。输入一个整数,将各位数字反转后输出。n解题思路:依次输出数解题思路:依次输出数n的
10、个位,十位、百位的个位,十位、百位直至直至最高位。采用不断除以最高位。采用不断除以10取余数法,直到商等于取余数法,直到商等于0为为止。由于无论整数止。由于无论整数n是多少位,至少要输出个位数(即是多少位,至少要输出个位数(即使使n=0),因此用),因此用do-while语句循环。语句循环。n处理过程:处理过程:void main()int n;/n存放输入数存放输入数 int rightDigit;/rightDigit存放一位数字存放一位数字printf(输入一个整数:输入一个整数:);scanf(%d,&n);printf(反转序列为:反转序列为:);do rightDigit=n%10
11、;printf(%d,rightDigit);n=n/10;while(n!=0);printf(n);如何生成正着排的数字?语法形式语法形式:for (for (表达式表达式1 1;表达式2;表达式;表达式3)3)语句语句 为为true时执行循环体时执行循环体每次执行完循环体后求解每次执行完循环体后求解.用于改变循环控制变量的值用于改变循环控制变量的值 执行流程:循环前先求解循环前先求解,完成初始化循环变量和其他变量完成初始化循环变量和其他变量例如例如:for(i=1;i=100;i+)sum+=i;for(i=1;i=100;i+)sum+=i;4.3 用用for语句实现循环语句实现循环例
12、例4-5 用用for语句求语句求1+2+n,n从键盘输入。从键盘输入。void main()void main()int i,n,sum;printf(输入输入n?);scanf(%d,&n);sum=0;/累加和变量置累加和变量置0 for(i=1;i=n;i+)sum+=i;printf(sum=%d“,sum);如何求如何求1+3+5+7+.+99=?如何求如何求2+4+6+8+.+100=?for(i=1;i100;i=i+2)for(i=1;i100;i=i+2)for(i=2;i=100;i=i+2)for(i=2;i0;i=i-2)for(i=100;i0;i=i-2)for(i
13、=1;i=100;i+)sum=sum+i;等价于等价于i=1;while(i=100)sum=sum+i;i+;用用for语句语句更更简单、方便简单、方便4.3 用用for语句实现循环语句实现循环n关于关于for语句的几点说明:语句的几点说明:for (for (表达式表达式1 1;表达式2;表达式;表达式3)3)语句;语句;(1)for语句的三个表达式可以为空语句的三个表达式可以为空,但分号一定但分号一定不能省略不能省略.若表达式若表达式2也为空,则表示当前循环也为空,则表示当前循环是一个无限循环,需要在循环体中书写另外的是一个无限循环,需要在循环体中书写另外的跳转语句终止循环。跳转语句终
14、止循环。例如:例如:for(;)语句语句;相当于相当于 while(1)语句语句;for(;i=100;)语句语句;相当于相当于 while(i=100)语句语句;4.3 用用for语句实现循环语句实现循环n关于关于for语句的几点说明:语句的几点说明:(2)在表达式在表达式1和表达式和表达式3的位置上可包含多个的位置上可包含多个语句语句。4.3 用用for语句实现循环语句实现循环sum=0;for(i=1;i=100;i+)sum+=i;for(i=1,sum=0;i=100;i+)sum+=i;i=1;sum=0;for(;i=100;i+)sum+=i;4.3 用用for语句实现循环语句
15、实现循环sum=0;for(i=1;i=100;i+)sum+=i;for(sum=0,i=1;i100;)sum=sum+i;i+;表达式表达式3省掉省掉n关于关于for语句的几点说明:语句的几点说明:(2)在表达式)在表达式1和表达式和表达式3的位置上可包含多个的位置上可包含多个语句。语句。4.3 用用for语句实现循环语句实现循环for(i=1,j=100;i=j;i+,j-)k=i+j;for(i=0;(c=getchar()!=n;i+=c);for(;(c=getchar()!=n;)printf(%c,c);4.3 用用for语句实现循环语句实现循环实现什么功能?例例4-6 输入
16、一个整数输入一个整数n,求出它的所有因子。,求出它的所有因子。n解题思路:解题思路:对对1 n的全部整数的全部整数k判断判断:如果如果n能整除能整除k,则则k是是n的因子的因子 即即n%k=0 (k从从1变化到变化到n)for(k=1;k=n;k+)if(n%k=0)printf(%d ,k);#include void main()int k,n;printf(输入输入n?);scanf(%d,&n);for(k=1;k=n;k+)if(n%k=0)printf(%d ,k);printf(n);输入n?241 2 3 4 6 8 12 24例例4-6 输入一个整数输入一个整数n,求出它的所
17、有因子。,求出它的所有因子。4.4 循环的嵌套循环的嵌套n一个循环体内又包含另一个完整的循环一个循环体内又包含另一个完整的循环结构,称为循环的嵌套。结构,称为循环的嵌套。n内嵌的循环中还可以嵌套循环,这就形内嵌的循环中还可以嵌套循环,这就形成多重循环。成多重循环。n三种循环语句三种循环语句while、do-while和和for可以相互嵌套使用。可以相互嵌套使用。4.4循环的嵌套循环的嵌套int m,p;m=1;do /外层循环外层循环 p=3;while(p 6)/内层循环内层循环 printf(m=%d and p=%dn,m,p);p+;m+;while(m!=3);m=1 and p=3
18、m=1 and p=4m=1 and p=5m=2 and p=3m=2 and p=4m=2 and p=5u内层循环控制变量的赋初值应放在正确位置:内层循环控制变量的赋初值应放在正确位置:通常放在外层循环体内、内层循环之前。通常放在外层循环体内、内层循环之前。4.4循环的嵌套循环的嵌套m=1;p=3;do /外层循环外层循环 while(p 6)/内层循环内层循环 printf(m=%d and p=%dn,m,p);p+;m+;while(m!=3);m=1 and p=3m=1 and p=4m=1 and p=5u内层循环控制变量的赋初值应放在正确位置:内层循环控制变量的赋初值应放在
19、正确位置:这是m=1时的输出结果。m=2时无输出结果例例4-7 打印星星菱型图案。打印星星菱型图案。n解题思路:菱型图案可分为两部分打印:上半部解题思路:菱型图案可分为两部分打印:上半部分(前分(前4行)和下半部分(后行)和下半部分(后3行)。行)。n分析上半部分图案:分析上半部分图案:n第第1行有行有4-1个空格,有个空格,有1(2*1-1)个)个“*”;n第第2行有行有4-2个空格,有个空格,有3(2*2-1)个)个“*”;n类推地,第类推地,第 i 行有行有 4-i 个空格,有个空格,有(2*i-1)个个“*”。void main()int i,j,n;printf(n=);scanf(
20、“%d”,&n);/n为上半部分行数 /画出上半部分图案,for(i=1;i=n;i+)/画第i行 for(j=1;j=n-i;j+)printf();for(j=1;j=1;i-)for(j=1;j=n-i;j+)printf();for(j=1;j=2*i-1;j+)printf(*);printf(n);4.5 跳转语句跳转语句n用于改变控制流的语句:用于改变控制流的语句:ncontinue语句语句nbreak语句语句ngoto 语句语句n用于改变程序控制流用于改变程序控制流:ncontinuecontinue语句语句n用于循环语句中用于循环语句中n提前结束本轮循环提前结束本轮循环nbr
21、eakbreak语句语句n用于循环或用于循环或switchswitch语句中语句中n提前跳出从循环提前跳出从循环循循 p1环环 break体体 pn循环条件循环条件true循循 p1环环 continue体体 pn循环条件循环条件true4.5 跳转语句跳转语句4.5.1 continue语句语句ncontinue语句的一般语法格式:语句的一般语法格式:continue;n作用:提前结束本轮循环(跳过本轮循环剩余作用:提前结束本轮循环(跳过本轮循环剩余的语句)直接进入下一轮循环。的语句)直接进入下一轮循环。n在在while或或do while循环中,循环中,continue语句语句会使流程直接
22、跳转至条件表达式;会使流程直接跳转至条件表达式;n在在for循环中,循环中,continue语句会跳转至表达语句会跳转至表达式式3,计算修改循环变量后再判断循环条件。,计算修改循环变量后再判断循环条件。循循 p1环环 continue体体 pn循环条件循环条件truefor (表达式1;表达式2;表达式3)语句;例例4-8 使用使用continue语句的程序例子。语句的程序例子。#include void main()int count;for(count=1;count=10;count+)if(count=5)continue;printf(%d ,count);printf(count=
23、%dn,count);1 2 3 4 6 7 8 9 10 count=11nbreak语句的语法格式:语句的语法格式:break;n作用作用:使程序的流程从一个使程序的流程从一个语句块内部跳语句块内部跳转出来转出来.nbreak语句出现在语句出现在switch语句和循环体中语句和循环体中.n从从switch语句的分支中跳出语句的分支中跳出n从循环体内部跳出,提前结束循环。从循环体内部跳出,提前结束循环。循循 p1环环 break体体 pn循环条件循环条件true4.5.2 break语句语句例例4-9 使用使用break语句的程序例子。语句的程序例子。void main()int count
24、;for(count=1;count=10;count+)if(count=5)break;printf(%d ,count);printf(count=%dn,count);1 2 3 4 count=5无条件转向语句无条件转向语句 goton语句使用格式:语句使用格式:goto label;.label:语句;语句;无条件转向无条件转向 Goto语句语句main()doule x,y;read:scanf(“%lf”,&x);if(x0)goto read;y=sqrt(x);printf(“%f%f”,x,y);goto read;4.6循环结构程序设计综合举例循环结构程序设计综合举例n
25、介绍常用算法及实例介绍常用算法及实例n掌握循环结构的程序设计技术。掌握循环结构的程序设计技术。4.6循环结构程序设计综合举例循环结构程序设计综合举例1.累加或叠乘算法累加或叠乘算法n累加算法累加算法:指在某个值的基础上,重复地:指在某个值的基础上,重复地加加下下一个数一个数,直到累加的结果达到最终目标。,直到累加的结果达到最终目标。使用一个变量(累加器),存放在每次累加的使用一个变量(累加器),存放在每次累加的运算结果。运算结果。累加器的初值为累加器的初值为0。n叠乘算法叠乘算法:是指在某个值的基础上,重复地乘:是指在某个值的基础上,重复地乘下一个数下一个数,直到叠乘的结果达到运算最终的目,直
26、到叠乘的结果达到运算最终的目标。标。使用一个变量(叠乘器)来存放在每次迭乘的使用一个变量(叠乘器)来存放在每次迭乘的运算结果。运算结果。叠乘器的初值为叠乘器的初值为1。例例4-10 求阶层求阶层n!=1*2*3*nn解题思路:这是叠乘问题。解题思路:这是叠乘问题。n变量分配变量分配 t:存放叠乘的积,存放叠乘的积,i:控制循环的变量。控制循环的变量。n则求则求n!的过程:的过程:#include void main()int i,n;long t=1;printf(Input n=?);scanf(%d,&n);for(i=2;i=10:|t|=10-6-6。用do while实现比较方便,求
27、t的绝对值用库函数fabs(t)#include#define PI 3.1415926void main()double d,x,x2,xn,t,n,sinx=0.0;int sign=1,i=1;printf(输入输入 x(单位为度单位为度):);scanf(%lf,&d);x=d/180.0*PI;/转换成弧度转换成弧度x2=x*x;xn=x;n=1;t=sign*xn/n;do sinx=sinx+t;sign=sign*(-1);xn=xn*x2;n=n*(i+1)*(i+2);t=sign*xn/n;i=i+2;while(fabs(t)=1e-6);printf(sin(%.1f
28、)=%.2fn,d,sinx);输入输入 x(单位为度单位为度):30sin(30.0)=0.504.6循环结构程序设计综合举例循环结构程序设计综合举例2.穷举法穷举法n列举可能出现解的范围内的所有数列举可能出现解的范围内的所有数-判断是否判断是否符合条件。符合条件。n确定确定搜索的范围搜索的范围n使用循环语句使用循环语句例例4-12 求由数字求由数字0、1、2、3、4组成的组成的所有无重复数字的所有无重复数字的3位正整数。位正整数。n 解题思路:解题思路:1.对对3个位上的数字组成的数,进行穷举,其中百位数字个位上的数字组成的数,进行穷举,其中百位数字不能为不能为0。a:表示百位数字,取值从
29、:表示百位数字,取值从1到到4 b:表示十位数字,取值从:表示十位数字,取值从0到到4 c:表示个位数字,取值从:表示个位数字,取值从0到到4 且且abc,应用三重循环来实现。,应用三重循环来实现。使用使用for语句实现比较方便。语句实现比较方便。2.程序在输出时要求一行输出程序在输出时要求一行输出10个数,用个数,用count计数器来计数器来控制。控制。count=0,1,9,10换行且归零换行且归零void main()int a,b,c,count;count=0;/控制换行的计数器控制换行的计数器 for(a=1;a=4;a+)for(b=0;b=4;b+)if(a!=b)for(c=
30、0;c=4;c+)if(a!=b&b!=c&a!=c)printf(%5d,a*100+b*10+c);count=count+1;/每输出十个数换行每输出十个数换行,但开始不换行但开始不换行 if(count%10=0&count!=0)printf(n);printf(n);减少循环时间4.6循环结构程序设计综合举例循环结构程序设计综合举例n3.素数(质数)素数(质数)素数:指能素数:指能被被1和自身整除和自身整除而不能被其他任何而不能被其他任何数整除的数。数整除的数。n判断判断n是否为素数的过程:是否为素数的过程:n用用i=2到到n-1,n/i都除不尽,则都除不尽,则n是素数,是素数,或
31、说只要有一个因子,或说只要有一个因子,n/i 能除尽,则能除尽,则n不是素数。不是素数。在在2到到n-1中寻找因子中寻找因子i,若找不到则,若找不到则n是素数,否则是素数,否则n不是素数不是素数ni 取值范围取值范围:2,n-1 或或 2,n/2 或或 2,n例例4-13 从键盘输入整数从键盘输入整数n,判断其是否是素数。判断其是否是素数。#include#include void main()int i,n,sqrtn;printf(n=?);scanf(%d,&n);sqrtn=(int)sqrt(n);for(i=2;i=sqrtn;i+)if(n%i=0)break;if(i=sqrt
32、n)printf(%d is not a prime.n,n);else printf(%d is a prime.n,n);n=?12371237 is a prime.1.求100之内的所有素数?2.求小于n的最大素数?3.求大于n的最小素数?4.6循环结构程序设计综合举例循环结构程序设计综合举例4.递推法递推法 解决问题时,解决问题时,n能推算出能推算出后一个状态(后项)与前一个状态(前项)后一个状态(后项)与前一个状态(前项)之间的之间的函函数关系。数关系。n使用使用循环语句循环语句来实现。来实现。例如,裴波那契数列例如,裴波那契数列(Fibonacci):1,1,2,3,5,8,13
33、,从数列的第从数列的第3项开始,每一项都等于前两项之和,用公式表示如下:项开始,每一项都等于前两项之和,用公式表示如下:4.6循环结构程序设计综合举例循环结构程序设计综合举例nFibonacci数列解决一个古典的数学问题:数列解决一个古典的数学问题:兔子繁殖问题兔子繁殖问题 有一对兔子,从出生后第有一对兔子,从出生后第3个月起,每月生殖一对子兔,个月起,每月生殖一对子兔,而子兔在出生后第而子兔在出生后第3个月起也有生殖能力,试问一对兔子个月起也有生殖能力,试问一对兔子一年能生多少对兔子?一年能生多少对兔子?n解决思路:解决思路:第第1个月时有个月时有1对兔子,第对兔子,第2个月时还是个月时还是
34、1对兔子,第对兔子,第3个个月时变成了月时变成了2对兔子:对兔子:一对是原来最初的一对,另一对是它生下的小兔。一对是原来最初的一对,另一对是它生下的小兔。第第4个月时变成了个月时变成了3对:对:一对是最初的一对老兔,另一对是它生下来的小兔,第三一对是最初的一对老兔,另一对是它生下来的小兔,第三对是老兔再次生的幼兔。对是老兔再次生的幼兔。第第5个月时变成了个月时变成了5对,第对,第6个月时变成了个月时变成了8对,第对,第7个月个月是是13对兔子,对兔子,类推地:,类推地:第第12个月兔子对数个月兔子对数=第第10月兔子对数月兔子对数+第第11月兔子对数。月兔子对数。例例4-14 求裴波那契数列的
35、第求裴波那契数列的第n项。项。n解题思路:解题思路:n变量分配:变量分配:nf1:Fin(n-2),nf2:Fin(n-1),nf3:Fin(n)void main()int i,n,f1=1,f2=1,f3;printf(n=?);scanf(%d,&n);if(n=1|n=2)f3=1;else for(i=3;im)t=m;m=n;n=t;/交换交换m与与n的值的值if(n=0)printf(输入的数不能为输入的数不能为0.n);else do r=m%n;/在下一语句,除数在下一语句,除数n被放到被除数被放到被除数m中,余数放到中,余数放到n中中 m=n;n=r;while(r!=0)
36、;t=x*y/m;printf(最大公约数是最大公约数是%d,最小公倍数是,最小公倍数是%dn,m,t);n m=35 90最大公约数是最大公约数是5,最小公倍数是最小公倍数是630例例4-16 房屋商业贷款计算器的设计。房屋商业贷款计算器的设计。n 已知某银行已知某银行2011年房屋商业贷款年利率如下:六个月年房屋商业贷款年利率如下:六个月以内(含以内(含6个月)个月)6.10,六个月至一年(含,六个月至一年(含1年)年)6.56,一至三年(含一至三年(含3年)年)6.65,三至五年(含,三至五年(含5年)年)6.90,五,五年以上年以上7.05。设个人购房抵押贷款的还款方式是。设个人购房抵
37、押贷款的还款方式是等额本金等额本金还款方式还款方式:即将本金每月等额偿还,然后根据剩余本金计:即将本金每月等额偿还,然后根据剩余本金计算利息,所以初期由于本金较多,将支付较多的利息,从算利息,所以初期由于本金较多,将支付较多的利息,从而使还款额在初期较多,而在随后的时间每月递减,这种而使还款额在初期较多,而在随后的时间每月递减,这种方式的好处是,由于在初期偿还较大款项而减少利息的支方式的好处是,由于在初期偿还较大款项而减少利息的支出,比较适合还款能力较强的家庭。出,比较适合还款能力较强的家庭。n每月等额本金还款的计算公式:每月等额本金还款的计算公式:第第N N月还款额月还款额=贷款本金贷款本金
38、/贷款期月数贷款期月数+(贷款本金(贷款本金-已归还本金累计额)已归还本金累计额)月利率月利率例例4-16 房屋商业贷款计算器的设计。程序要求用户输入房屋商业贷款计算器的设计。程序要求用户输入贷款本金贷款本金loan(万元)和年限后,计算出第(万元)和年限后,计算出第n个月还款额、个月还款额、利息合计和还款总额。利息合计和还款总额。例如:贷款loan=50万,贷10年(120个月)年利率为7.05%,月 利率rate=7.05%/12,月还本金principal=500000/12=4166.67元,则:贷款第1个月后(n=2)还款:500000/120+500000*7.05%/12=710
39、4.17元 贷款第2个月后(n=3)还款:500000/120+(500000-500000/120)*7.05%/12 =7104.17元 最后一个月(n=120)还款:500000/120+(500000-500000/120*119)*7.05%/12 =4191.15元 第第n个月还款个月还款:500000/120+500000-500000/120*(n-1)*7.05%/12元 n解题思路:第解题思路:第n个月还款的计算公式:个月还款的计算公式:pr(n)=principal+loan-principal*(n-1)*rate 其中每月还款本金其中每月还款本金 principal=
40、loan/(year*12)还款总额计算公式还款总额计算公式(用循环实现):(用循环实现):refund=pr(1)+pr(2)+pr(k)其中其中 k=year*12 利息合计公式:利息合计公式:refund-loan#include#include#define R1 6.10#define R2 6.56#define R3 6.65#define R4 6.90#define R5 7.05void main()int months,n,i;double loan,principal,rate=0;double pr;double refund=0;printf(输入贷款数额(万元):
41、);scanf(%lf,&loan);printf(输入贷款时间(月数):);scanf(%d,&months);printf(第n月还贷 n=?);scanf(%d,&n);if(months0&months=6)rate=(double)R1/12/100;else if(months=12)rate=(double)R2/12/100;else if(months=3*12)rate=(double)R3/12/100;else if(months=5*12)rate=(double)R4/12/100;else rate=(double)R5/12/100;principal=loan*10000/months;/每月还款本金数 pr=principal+(loan*10000-principal*(n-1)*rate;/第n个月还款额for(i=1;i=months;i+)refund+=principal+(loan*10000-principal*(i-1)*rate;printf(第%d 月还款数额(元):%.2fn,n,pr);printf(利息合计(元):%.2f 还款总额(元):%.2fn,refund-loan*10000,refund);本章小结本章小结