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
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)