回 帖 发 新 帖 刷新版面

主题:新手问题急

数值变量的问题,问题是如果只有1个数值,他在目标位的上面还是下面,我是不知道的.我想知道,那个数值如果在目标位下时,上升到目标位时不触发,只有数值在目标位上面的时候,下降到目标位时才触发那个条件 的思路,和计算的方法,C语言

回复列表 (共2个回复)

沙发

我也不太懂,这个应属于专区中应有的帖子。
        增加记录变量,记录前一时刻变量的数值。当数值达到目标位且数值小于记录值时触发条件,不知是否是楼主想要的。
   唉,编程太深奥,我想一辈子也研究不出个所以然来。

板凳

这个问题很简单。有两种方法。
[b]方法一:[/b]当变量单调增或单调减的时候相对来说比较简单。只要判断初始值与临界值的大小即可。然后

赋值给一个标记变量。循环时通过标记变量的值确定是否退出循环。
举例:求和直至10结束。如果是至上而下(初值为20),那么到10是有效的(结束循环);如果是从下往上(

初值为1),那么到10是无效的,循环将继续下去(死循环)。具体实现如下。
#include<stdio.h>
int main() /*可能会有死循环*/
{
  int i,sum=0,flag,add;
  printf("Please input i(i!=10):");/*输入初始值*/
  scanf("%d",&i);
  if(i<10){
    flag=0;  /*标记*/
    add=1;
  }
  else{
    flag=1;  /*标记*/
    add=-1;
  }
  while(1){
    sum+=i;
    if(i==10&&flag)
      break;
    i+=add;
  }      
  printf("sum=%d\n",sum);
}


[b]方法二:[/b]如果变量不是单调变化而是忽上忽下,问题会比较复杂。此时用两个循环变量,先至变量(主

变量)和后至变量,当先至变量的值大于后至变量时,条件无效;否则有效。
举例:数列求和直至10结束。如果最后那一瞬间是至上而下,那么到10是有效的(结束循环);如果是从下往

上,那么到10是无效的,循环将继续下去,直至数列中所有数累加完。具体实现(函数)如下。
int sum10(int a[],int lenth) /*无死循环*/
{
  int i=a[0],i2,k,sum;
  if(i==10)
    return 10;
  i2=i;
  sum=i;
  i=a[1];
  k=2;
  while(k<=lenth){
    sum+=i;
    if(i==10&&i<i2)
      break;
    i2=i;
    i=a[k];
    k+=1;
  }
  return sum;
}
如果要求不是恰好达到边界而是越过边界,比如说当边界为10时,9到11算越过边界,13到8也算越过边界。但

前者无效,后者有效,则我们可以这样写函数:
int sum10(int a[],int lenth) /*无死循环*/
{
  int i=a[0],i2,k,sum;
  if(i==10)
    return 10;
  i2=i;
  sum=i;
  i=a[1];
  k=2;
  while(k<=lenth){
    sum+=i;
    if(i<=10&&i2>10)
      break;
    i2=i;
    i=a[k];
    k+=1;
  }
  return sum;
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册