kissyoume 发表于 2008-8-1 23:46

本人初学C语言 发现循环满繁琐 有一题不解

计算1-3+5-7+...-99+101的值
我是这样编的 但是不对啊。。。
main()
{
  int a,b;
  b=0;
  while(fabs(a)<=101)
   {
    b=b+a;
    a=fabs(a)+2;
    a=-1*a;
  }
printf("%d",b);
}

elan1986 发表于 2008-8-2 00:41

main()
{
        int a,b=1,i;
        for(i=2;i<=50;i++)
        {
                if(i%2==0)
                        b=b+(-1*2*i);
                else
                        b=b+2*i;
        }
        printf("%d",b)
}
我是这样的
但是不知道是否正确
可以参考

zhaoyang84993 发表于 2008-8-2 00:49

这个简单

把原式写成 (1+5+9+...+101)- (3+7+11+...+99)

#include <stdio.h>

int main()
{
int i, total1=0, total2=0, total;

for (i=1;i<=101;i+=4)
   total1+=i;
for (i=3;i<=99;i+=4)
   total2+=i;

total=total1-total2;

printf("%d\n", total);
return 0;
}

结果是51

广陵绝唱 发表于 2008-8-2 01:14

[code]/*******************************************************************************

    计算1-3+5-7+...-99+101的值

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

   我是这样写的,谨供参考。

*******************************************************************************/
#include<stdio.h>
int main(void)
{
        int i,j=0,k=1;
        for(i=1;i<102;i+=2,k++)
        {
                if(k%2)   j+=i;
                else      j-=i;
        }
        printf("%d\n",j);
        getch();
}
[/code]

彦宏 发表于 2008-8-2 08:50

你最开始未对a初始化

he20041987 发表于 2008-8-2 10:05

本人学java的也试一下(语法上可能有错不要介意啊!)
计算1-3+5-7+...-99+101的值
main(){
int a=1,b=1,t=0,sum=0;
for(a=1;a<=101;a++){
   t=a*b;
   sum+=t;
   a+=2;
   b=-b;
}
  printf("%d\n",sum);
}

mark0289 发表于 2008-8-2 10:56

#include <stdio.h>

int calc( int n )
{
        int sum=0;
        if ((n-1)%4==0)
                sum=(n+1)/2;
        else
                sum=-(n+1)/2;
        return sum;       
}

main()
{
        int n,sum;
        while(1)
        {
                scanf("%d",&n);
                if(n%2==0 || n<0)
                        printf("Please input odd number!\n");
                else
                        break;       
        }
        sum=calc(n);
        printf("sum=%d",sum);
        getch();
}

这是我写的,没有用循环,只是对这一串数字分析了下,找了规律

还请大家指教

he20041987 发表于 2008-8-2 13:39

[quote][bo][un]mark0289[/un] 在 2008-8-2 10:56 的发言:[/bo]

#include

int calc( int n )
{
        int sum=0;
        if ((n-1)%4==0)
                sum=(n+1)/2;
        else
                sum=-(n+1)/2;
        return sum;       
}

main()
{
        int n,sum;
        while(1)
        {
                scanf("%d",&n);
                if(n%2==0 ||  ... [/quote]

while(){} 不是循环?

[[it] 本帖最后由 he20041987 于 2008-8-2 13:40 编辑 [/it]]

woshiyun 发表于 2008-8-2 14:33

[quote][bo][un]he20041987[/un] 在 2008-8-2 13:39 的发言:[/bo]



while(){} 不是循环? [/quote]
你强!别人说的是算法没有循环。

学不懂也要学C 发表于 2008-8-2 16:49

这个可以拿去参考一下
main()
{int sum,sign,i,term;
sum=1,sign=1,i=3;
while(i<=101)
   {sign=-sign;
    term=sign*i;   
    sum+=term;
    i+=2;
   }      
printf("%d",sum);
}

学不懂也要学C 发表于 2008-8-2 16:49

算出来结果是51

学不懂也要学C 发表于 2008-8-2 17:05

a=fabs(a)+2;/*这里计算出来的a是一个正值*/
    a=-1*a;/*经过计算后a的值始终是一个负值,所以后面的b的值也始终是一个负值*/

死了都要C 发表于 2008-8-3 02:33

输入最后一项的绝对值 NUM




[quote][font=新宋体][size=2][color=#008000]/*******************************************************************
** HighlightCodeV3.2 software by yzfy(雨中飞燕) [url=http://yzfy.org/c]http://yzfy.org/c[/url] **
*******************************************************************/

[/color][color=#ff0000]#include <stdio.h>

[/color][color=#ff0000]#define[/color][color=#ff00ff] N  ( (num-1)/2 + 1 )

[/color][color=#0000ff]int [/color][color=#ff0000]main[/color]([color=#0000ff]void[/color])
[color=#800000]{
    [/color][color=#0000ff]int [/color]num ;

    [color=#0000ff]if[/color]( ![color=#ff0000]scanf[/color]( [color=#ff00ff]"%d" [/color], &num ) || !(num%[color=#8000c0]2[/color]) )
    [color=#800000]{
        [/color][color=#ff0000]printf[/color]([color=#ff00ff]"Input error!!!\n"[/color]);
        [color=#0000ff]return [/color]-[color=#8000c0]1 [/color];
    [color=#800000]}
   
    [/color][color=#ff0000]printf[/color]([color=#ff00ff]"Result: %d\n" [/color], ( [color=#800080]N[/color]%[color=#8000c0]2 [/color]) ? [color=#800080]N [/color]: -[color=#800080]N [/color]) ;

    [color=#0000ff]return [/color][color=#8000c0]0 [/color];
[color=#800000]}[/color][/size][/font][/quote]

[[it] 本帖最后由 死了都要C 于 2008-8-3 02:40 编辑 [/it]]

kissmahao 发表于 2008-8-4 16:10

楼主的a 没赋初值啊?
还没加math头文件

[[it] 本帖最后由 kissmahao 于 2008-8-4 16:15 编辑 [/it]]

崔园园 发表于 2008-8-4 19:50

main()
{
  int a=1,b;
  b=0;
  while(abs(a)<=101)
   {
    b=b+a;
    a=abs(a)+2;
    a=-1*a;
  }
printf("%d",b);
}

页: [1]

编程论坛