程序 C语言 求超详细解释

程序 C语言 求超详细解释,第1张

#include<stdio.h>  表示引入库函数

int main() 表示主函数入口

{

         inti,n,m,AX=0,AY=0,AZ=0,B=0,BX=0,BY=0,BZ=0表示定义变量

         chara,b

    坦团     scanf("%d",&n)表示接收外部变量输入, 要执行的次数

   getchar()

         for(i=0i<ni++)

         {

                   scanf("%c%c",&a,&b) 表示分别输入

       getchar()

       m=a-b

       switch(m)表示判断输入的内容,并累计

                   {

                       case -7:AX++break

                            case8:AY++break

                            case-1:AZ++break

           case 1:BX++break

                            case7:BY++break

                            case-8:BZ++break

                   伏埋         case0:B++break

                            default:printf("error\n")

                   }

      缺信蚂   }

         printf("%d%d %d\n",AX+AY+AZ,B,BX+BY+BZ)表示输出累计的结果

         printf("%d%d %d\n",BX+BY+BZ,B,AX+AY+AZ)

 

         if(AY<AX&&AZ<AX)表示判断结果

        printf("C")

         elseif(AZ<AY)

        printf("J")

         else

        printf("B")

 

   if(BY<BX&&BZ<BX)

        printf(" B")

         elseif(BZ<BY)

        printf(" C")

         else

        printf(" J")

  

         return0表示结束程序

}

这个程序是计算以下式子

1

-1/2

+1/3+1/4

-1/5

+1/6+1/7+1/8

-1/9

+1/10+1/11+1/12+1/13

-1/14

+1/15+...1/19

-1/20....

+1/n+....1/(n+m-1)

…………这里的m、n与程序里的没关系啊,只是为了说明算法

-1/(n+m)

单数都是加法,

第双数行都是减法。

每单数行的分数数量都是递增的

每双数行的分数数量不变,即都是1

无论单行双行,分数的分母都是逐一递增的。

==============以下是程序解释

k和m都是计数器

n是输入的数,比如输入10,则计算1-1/2+1/3+1/4-1/5+1/6+1/7+1/8-1/9+1/10

t就是分母

h是标志位,当t计算至n时,就不做运算了碧橡。

这程序只能处理100以内(含100)的正确结果。

int

main(

int

argc,char**

argv)

{

int

k,n,m,t,h

float

s=0

h=0t=0

scanf("%d",&n)

printf("s=1-1/2+1/3+1/4-1/5+...")

for(k=1k<=100k++)//计数循环,用来标记一共有多少个单数行。只能处理单数行<=100的情况。

{

for(m=1m<=km++)//在这个循环中你会发现t没被清零过,每单数行的分数数量都是递增的,所以用k作为上限。

{

//这个for处理当前单数行的结果

t++//t一直在增长

s+=1.0/t//计算总值。这个你应该明白。

printf("t=%d,s=%f\n",t,s)

if(t==n)

{

//如果到达目的数(即输入的数)就不再处理了。

h=1//这里h只是个标志位,如果不是因为底下的(A)部分,也可以把这一行所在的for写为for(m=1m<=k&&t!=nm++)

break//这个break只是退出了m所在的for循环

}

}

if(h==1)

//(A)

{

//如果到达目的数(即输入的数)就不再处理了。这里就用到了刚才赋的那个h。用来退出k所在的for循环

printf("h==1\n")

break

}

//以下处理双数行的结果,只有在(A)不作用时才会用到此部悔闭旁分。

t++//先要把分母这个值自增

s-=1.0/t//就是态郑在结果里减去1.0/t

if(t==n)

break//因为有可能用户输入的数可能为双数行所在。这一块就是用来在此时退出k所在的for循环

}

if(h==1)

printf("+1/%d=",n)

else

printf("-1/%d=",n)

printf("%9.6f\n",s)

system("PAUSE")

return

0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12329491.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存