c語言自增量

輸出的應該是8吧.++i,--i中的逗號是一個操作符,先計算前面的值,再計算後面的值,輸出的是後面的值

⑵ c語言關於增量運算符什麼時候生效

for(i=0;i<18,i++){}等價於i=0;while(i<18){i++;},這里i++是一條語句,i的加1操作在這條語句之後。
while (i++ < 18) 會在表達式 i<18計算完了i自增

⑶ c語言自增量的加法

int a = 0;
++a;//a+1
a+=2;//a+2
a+=3;//a+3

⑷ 求一下增量式和位置式PID的C語言程序

增量式PID:

typedefstruct{
floatscope;//輸出限幅量
floataim;//目標輸出量
floatreal_out;//實際輸出量
floatKp;
floatKi;
floatKd;
floate0;//當前誤差
floate1;//上一次誤差
floate2;//上上次誤差
}PID_Type;

#definemin(a,b)(a<b?a:b)
#definemax(a,b)(a>b?a:b)
#definelimiter(x,a,b)(min(max(x,a),b))
#defineexchange(a,b,tmp)(tmp=a,a=b,b=tmp)
#definemyabs(x)((x<0)?-x:x)

floatpid_acc(PID_Type*pid)
{
floatout;
floatep,ei,ed;

pid->e0=pid->aim-pid->real_out;
ep=pid->e0-pid->e1;
ei=pid->e0;
ed=pid->e0-2*pid->e1+pid->e2;
out=pid->Kp*ep+pid->Ki*ei+pid->Kd*ed;
out=limiter(out,-pid->scope,pid->scope);
pid->e2=pid->e1;
pid->e1=pid->e0;
returnout;
}

位置式PID:

typedefstruct{
floatscope;//輸出限幅量
floataim;//目標輸出量
floatreal_out;//反饋輸出量
floatKp;
floatKi;
floatKd;
floatSum;
floate0;//當前誤差
floate1;//上一次誤差
}PID_Type;

#definemax(a,b)(a>b?a:b)
#definemin(a,b)(a<b?a:b)
#definelimiter(x,a,b)(min(max(x,a),b))

floatpid_pos(PID_Type*p)
{
floatpe,ie,de;
floatout=0;

p->e0=p->aim-p->real_out;//計算當前誤差

p->Sum+=p->e0;//誤差積分

de=p->e0-p->e1;//誤差微分

pe=p->e0;
ie=p->Sum;

p->e1=p->e0;

out=pe*(p->Kp)+ie*(p->Ki)+de*(p->Kd);

out=limiter(out,-p->scope,p->scope);//輸出限幅
returnout;
}

親手移植到我的stm32小車上 調試3個參數後正常使用。

⑸ 求教C語言中的遞增用法!

for語句中,先執行的是printf, 然後才執行y=(++i*5)+10;

而y的初值是55,所以給你一種錯覺回好像++i跟i++是一樣的返回值。答
如果你y不賦初值,你應該就看出來差別了。
你的for語句程序段跟以下程序相同,可以幫助你理解。
x=1;
for(;y<=75;)
{
printf("%10d%10d\n",x,y);
y=(++x*5)+50; /*可變成你的增量表達式*/
}

⑹ 關於C語言增量符號使用

這個問題雖小,但是學問挺大!!!@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@
【第一條】、關於自增自減運算,很多書籍沒有把問題講清楚,在C語言里是這樣的:
1.後置運算:k++表示先運算,後自加。
意思是遇到k++了,我先把當前的k的值拿來參加運算,後面再去管它的自加。
那麼,【「後面」後到什麼程度呢?要後到當前的語句執行完,即遇到分號;表示
語句執行完了,所以k才自加1。】
2.前置運算:++k表示先自加,後運算
這個意思就是遇到++k了,先把k的值加了1,再往後執行別的。
掌握好這兩點,k--和--k也是一樣的道理。
【第二條】、對於多個自增自減運算組合時,在不同的編譯器上運行時會有不同的結果。
但是在C語言里的組合順序如gaozhen所說[「對於++
,--
C編譯系統在處理時盡可能多的(
自左往右)將若干個字元組成一個運算符」]。
結合這兩點,我們就可以來解決這個問題了。
首先,根據【第二條】,結合順序是a=a+++b+++c;等價於a=(a++)+(b++)+c;
其次,根據【第一條】,【「後面」後到什麼程度呢?要後到當前的語句執行完,即遇到
分號;表示
語句執行完了,所以k才自加1。】
那麼,就可以得到結果了。
先是不管自加的事情,取a、b的當前值(都是1)和c(值為1)相加賦給a,即a=1+1+1=3;
然後遇到分號語句結束時再去管自加1,即a+1,b+1。而a的當前值已經是3了,故
a=a+1=4;b的當前值是1,故b=b+1=2;
所以本題答案的正確結果是
4.

⑺ C語言簡單的增量運算問題

b=(++a)*5計算結束時,a已經變為3了,為什麼c=(a++)*5時它還等於2?a++先返回a的值只局限於當前式子,不會說時從函數開始算起

⑻ c語言關於增量運算符

while(i++ < 18)
先比較i < 18,再i自增,再printf()操作自增後的i。

for(i = 0; i < 18; i++)
先比較i < 18,再執行for內語句,再自增i++。

一般來說,專以一個語屬句中為界限。

⑼ c語言增量運算符的使用。

你的初始賦值i=1,
執行「while(i++<30)」這句時i=1;
但是這句執行結束後,通過「i++」 可得i=2,接著回再執行下面的語句,也就答是「n = 1.0/i;」 這句
也就是說當執行「n = 1.0/i;」 的時候i已經等於2了。
你可以將i的初始值賦值為0.
或者這么改一下
while(i<30)
{
n = 1.0/i;
printf("%f\n",n);
i++;
}

⑽ c語言自增量

自增是自右向左運算,但輸出是自左向右輸出,所以是8,7