主题:新手问题急
lovelvchen
[专家分:0] 发布于 2008-08-07 10:52:00
数值变量的问题,问题是如果只有1个数值,他在目标位的上面还是下面,我是不知道的.我想知道,那个数值如果在目标位下时,上升到目标位时不触发,只有数值在目标位上面的时候,下降到目标位时才触发那个条件 的思路,和计算的方法,C语言
最后更新于:2008-08-07 10:54:00
回复列表 (共2个回复)
沙发
zhangyafei578661046 [专家分:0] 发布于 2008-08-08 09:08:00
我也不太懂,这个应属于专区中应有的帖子。
增加记录变量,记录前一时刻变量的数值。当数值达到目标位且数值小于记录值时触发条件,不知是否是楼主想要的。
唉,编程太深奥,我想一辈子也研究不出个所以然来。
板凳
purplemath [专家分:0] 发布于 2008-08-12 09:54:00
这个问题很简单。有两种方法。
[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;
}
我来回复