数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 1851|回复: 7

[讨论]C语言小应用

[复制链接]
发表于 2004-7-23 01:12:10 | 显示全部楼层 |阅读模式

< > 写一个函数计算当参数为n(n很大)时的值 1-2+3-4+5-6+7......+n <p></p></P>
 楼主| 发表于 2004-7-23 01:20:26 | 显示全部楼层
<>这里有一种解法 供大家参考</P><> </P>< 18pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo8; tab-stops: list 18.0pt">1、long fn(long n)
{
long temp=0;
int i,flag=1;
if(n&lt;=0)
{
printf("error: n must &gt; 0);
exit(1);
}
for(i=1;i&lt;=n;i++)
{
temp=temp+flag*i;
flag=(-1)*flag;
}
return temp;
}
评价:执行结果肯定是没有问题!但当n很大的时候我这个程序执行效率    很低; <p></p></P>
 楼主| 发表于 2004-7-23 01:22:16 | 显示全部楼层
这是又一种解法   
 楼主| 发表于 2004-7-23 01:24:37 | 显示全部楼层
< 18pt; TEXT-INDENT: -18pt; mso-list: l2 level1 lfo8; tab-stops: list 18.0pt">1、long fn(long n) <p></p></P><>{long temp=0;
int j=1,i=1,flag=1;
if(n&lt;=0)
{
printf("error: n must &gt; 0);
exit(1);
}
while(j&lt;=n)
{
temp=temp+i;
i=-i;
i&gt;0?i++:i--;
j++;
}
return temp;
}
这种解法较前一种更好些:运算时间上缩短了很多,而代价仅仅是增加了一个整型变量,这个程序确实在效率上有的很大的提高!<p></p></P>
 楼主| 发表于 2004-7-23 01:32:12 | 显示全部楼层
<>提供的第三种方法是</P><>1、long fn(long n)
{
if(n&lt;=0)
{
printf("error: n must &gt; 0);
exit(1);
}
if(0==n%2)
return (n/2)*(-1);
else
return (n/2)*(-1)+n;
} </P>< 18.0pt? list tab-stops: lfo8; level1 l2 mso-list: -18pt; TEXT-INDENT: 18pt;>我列出这三种方法让大家比较它们各自的优点</P><P 18.0pt? list tab-stops: lfo8; level1 l2 mso-list: -18pt; TEXT-INDENT: 18pt;>也希望大家讨论给出其他的算法</P>
发表于 2004-7-23 03:04:35 | 显示全部楼层
<>当然是第三种方法最好了,我想应该没有比它还好的了;运用了活的脑子把问题大大的简化了,第一种是机械性的运算,不做任何思考,对写程序来说无疑是最省事的 ,但计算机也是最累的。这告诉我们,在编程序以前,要仔细观察尽可能的减少计算机的运行时间,人会累 ,计算机也会3的啊</P>
发表于 2004-7-23 06:52:34 | 显示全部楼层
<>说一种不是C语言的解法</P><>在MALEL中输入这条语句</P><>add((-1)^(n-1)*n,n=1..m);</P><P>m是你写入的,一下就搞定的,而且速度很快</P>
发表于 2004-7-25 02:30:05 | 显示全部楼层
<>我也想用一下 最受欢迎的工程软件之一MATLAB去解 很容易的!!!</P><>看 :</P><>&gt;&gt; syms n
&gt;&gt; symsum((-1)^(n-1)*n,1,n)

ans =

1/2*(-1)^(n+1)*(n+1)-1/4*(-1)^(n+1)+1/4</P><P>呵呵 很简单的哦</P>
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-28 10:55 , Processed in 0.060858 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表