C语言:用循环累加

来源:互联网 发布:sql union会去重吗 编辑:程序博客网 时间:2024/06/07 06:23

任务代码:

(1)1-1/2+2/3+.....(m-1)/m的和

#include <stdio.h>#include <math.h>int main(){    float a,b=1,m,sum=0,n;    printf("请输入m:");    scanf("%f",&m);    for(n=2;n<=m;n++)    {        sum=sum+b*((n-1)/n);        b=-b;    }    printf("sum is :%f",sum);    return 0;}

(2)求1!+2!+3!...m!和

#include<stdio.h>int main(){ float i,j,fFactoria_result=1,fPlus_total=0,m; /*分成两部分来做,一部分是每一项阶乘的结果fFactoria_result,两外一向是所有结果和fPlus_total=0*/ printf("请输入m:"); scanf("%f",&m); for(i=1;i<=m;i++)/*加和循环*/ {    for(j=1;j<=i;j++)/*阶乘循环*/    {    fFactoria_result=fFactoria_result*j;    }    fPlus_total=fPlus_total+fFactoria_result;    fFactoria_result=1;/*此处尤其注意,在跳出阶乘循环后,要归1*/ } printf("1!+2!+....m!的结果为:%f",fPlus_total); return 0;}

用while和语句来做:

#include<stdio.h>int main(){//用while语句来执行阶乘和 int i=1,fPlus_total=0,m,fFactoria_result,j; printf("请输入数字m:"); scanf("%d",&m); while(i<=m) {     fFactoria_result=1,j=1;//此处最重要的是在跳出阶乘循环后将f初始化     while(j<=i)     {         fFactoria_result=fFactoria_result*j;         j++;     }     fPlus_total=fPlus_total+fFactoria_result;     i++; } printf("最终结果为:%d",fPlus_total); return 0;}

while和for的语句的优化:

#include<stdio.h>int main(){//用while语句来执行阶乘和优化方案 int fPlus_total=0,m,fFactoria_result=1,j=1; printf("请输入数字m:"); scanf("%d",&m);     while(j<=m)     {         fFactoria_result=fFactoria_result*j;//此优化方案主要抓住了,j是和循环次数i其实是相等的,所以省略了i         fPlus_total=fPlus_total+fFactoria_result;         j++;     } printf("最终结果为:%d",fPlus_total); return 0;}

#include<stdio.h>int main(){ float j,fFactoria_result=1,fPlus_total=0,m; /*分成两部分来做,一部分是每一项阶乘的结果fFactoria_result,两外一向是所有结果和fPlus_total=0*/ printf("请输入m:"); scanf("%f",&m);    for(j=1;j<=m;j++)/*阶乘循环*/    {    fFactoria_result=fFactoria_result*j;    fPlus_total=fPlus_total+fFactoria_result;    }    fFactoria_result=1;/*此处尤其注意,在跳出阶乘循环后,要归1*/ printf("1!+2!+....m!的结果为:%f",fPlus_total); return 0;}


(3)求1!+1/2!+1/3!+...1/m!和

#include<stdio.h>int main(){ float i,j,fFactoria_result=1,fPlus_total=0,m; /*分成两部分来做,一部分是每一项阶乘的结果fFactoria_result,两外一向是所有结果和fPlus_total=0*/ printf("请输入m:"); scanf("%f",&m); for(i=1;i<=m;i++)/*加和循环*/ {    for(j=1;j<=i;j++)/*结成循环*/    {    fFactoria_result=fFactoria_result*j;    }    fPlus_total=fPlus_total+1.0/fFactoria_result;//主要更改此处    fFactoria_result=1; } printf("1!+1/2!+....1/m!的结果为:%f",fPlus_total); return 0;}

(4)求1!-1/2!+1/3!+...1/m!和

#include<stdio.h>int main(){ float i,j,fFactoria_result=1,fPlus_total=0,m; int sign=1;//符号计算 /*分成两部分来做,一部分是每一项阶乘的结果fFactoria_result,两外一向是所有结果和fPlus_total=0*/ printf("请输入m:"); scanf("%f",&m); for(i=1;i<=m;i++)/*加和循环*/ {    for(j=1;j<=i;j++)/*结成循环*/    {    fFactoria_result=fFactoria_result*j;    }    fPlus_total=fPlus_total+sign*(1.0/fFactoria_result);    fFactoria_result=1;    sign=-sign;//此处符号变换 } printf("1!+1/2!+....1/m!的结果为:%f",fPlus_total); return 0;}

(5)编程序,输出1/3-3/5+5/7-7/9…+19/21的结果

#include <stdio.h>#include <stdlib.h>int main(){    printf("此程序执行编程序,输出1/3-3/5+5/7-7/9…+19/21的结果\n");    float n,sum=0,sign=1,fPer;    for(n=1;n<20;n++)    {        fPer=sign*(2*n-1)/(2*n+1);        sum=sum+fPer;        sign=-sign;    }    printf("结果为:%f",sum);    return 0;}

执行情况:






知识总结:

如果有需要进行一加一减交替进行的需要,可以通过设置b=1然后切换b=-b;来操作

心得体会:

查代码逻辑错误的最好方法就是写在纸上,帮助记录,能达到高效

原创粉丝点击