谁帮我解释一下C语言程序!看好久也看不懂!

#include<math.h>main(){intk,n,m,t,h;floats=0;h=0;t=0;scanf("%d",&n);printf("s=1-1/2+1... #include<math.h>
main()
{
int k,n,m,t,h;float s=0;
h=0;t=0;
scanf("%d",&n);
printf("s=1-1/2+1/3+1/4-1/5+...");
for(k=1;k<=100;k++)
{for(m=1;m<=k;m++)
{t++,s+=1.0/t;
if(t==n){h=1;break;}}
if(h==1) break;
t++;s-=1.0/t;
if(t==n) break;}
if(h==1) printf("+1/%d=",n);
else printf("-1/%d=",n);
printf("%9.6f\n",s);
getch();
}以上是完整程序!
请懂的详细解析一下部分程序的意思!
主要是以下程序:
for(k=1;k<=100;k++)
{for(m=1;m<=k;m++)
{t++,s+=1.0/t;
if(t==n){h=1;break;}}
if(h==1) break;
t++;s-=1.0/t;
if(t==n) break;}
具体解释每一步的意思!k,n,m,t,h各代表的具体的作用和意思!谢谢!
请一句一句解释程序语句的意思!
for(k=1;k<=100;k++)
{for(m=1;m<=k;m++)
{t++,s+=1.0/t;
if(t==n){h=1;break;}}
if(h==1) break;
t++;s-=1.0/t;
if(t==n) break;}
目前所有回答的答案我不明白!
回答者:hhpydzx 说的不明白之处,不正确,因为运算方面我还是懂的!
展开
 我来答
无大智有大勇
2008-04-02
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
这个程序是计算以下式子
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=0;t=0;
scanf("%d",&n);
printf("s=1-1/2+1/3+1/4-1/5+...");
for(k=1;k<=100;k++)//计数循环,用来标记一共有多少个单数行。只能处理单数行<=100的情况。
{
for(m=1;m<=k;m++)//在这个循环中你会发现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=1;m<=k&&t!=n;m++)
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;
}
上海勤革
2024-10-18 广告
Golang程序员在准备面试时,可以参考多个在线刷题平台来提高编程能力和解题技巧。虽然没有具体的网址,但常见的刷题网站通常会提供丰富的算法题库、在线编程环境以及详细的题目解析。通过不断练习,Golang程序员能够加深对常用数据结构和算法的理... 点击进入详情页
本回答由上海勤革提供
L_o_o_n_i_e
2008-04-02
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
弄清计算什么。
(1) 这个 级数 的 第 t 项 的 值 等 于 1/t
(2) 这个 级数 的 某项的 符号,正负 这样考虑:
从第一项起:
+ - ++ - +++ - ++++ - +++++ - ....
即 连续正项 每组个数 为 1,2,3,4,5....
组与组之间的那 项是 负号。
(3) 输入项数 n
(4) 输出 级数 加减运算结果
(5) 打印最后一项 和打印 级数运算结果。

n -- 输入,要求计算多少项。
t -- 第 t 项, 用 t++ 推进。一旦 t==n 则 结束。
k -- 循环变量,表示计算 第几组。
例如,k=3, 第3组,就是要算 +++ - 这组
m -- 循环变量, 从1循环到k,
例如, k=3, m 循环 计算 第一组 的正号项,第二组 的正号项,第三组 的正号项,累加到 s 里
每组正号项算完,t 增加 1,算 1 个 负 号项,从 s 里 减去。

h==1 最后一项的符号为+,否则为负,用于 打印最后一项 的 符号。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hhpydzx
2008-04-02
知道答主
回答量:0
采纳率:0%
帮助的人:0
展开全部
for(k=1;k<=100;k++) 这句是一个for循环语句,k++相当于k=k+1,整个语句表示k从1开始,每次增加1直到k=100.其实这里就相当于我们的自然数1~100这一个组.
{for(m=1;m<=k;m++)这里也是一个for循环语句,只是K变成了M,并且,M的上限变为K,但k与上面一个,上限为100
{t++,s+=1.0/t; 这里t++相当于t=t+1;s+=1.0/t相当于s=s+1.0/t;形如x+=y这样的式子 表示的含义就是:x=x+y
if(t==n){h=1;break;}} 这里表示,当t一个1一个1地加,加到与之前读入的n相等时,执行大括号里面的两个语句,即h=1,并且执行break,break是一个强制切断程序语句
if(h==1) break; 这句的意思是如果h等于1则马上切断程序
t++;s-=1.0/t; 这里的t++与前面相同,s-=1.0/t相当于s=s-1.0/t
if(t==n) break;} 这句的意思是如果t自加到等于n则切断程序
从你的问题来看,我觉得你不明白的主要是两个地方:
1:自加运算和x+=y;x-=y;x*=y;x/=y这样的运算式;
2:就是if和break语句的用法和意义;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式