《循環(huán)結(jié)構(gòu)》PPT課件.ppt
《《循環(huán)結(jié)構(gòu)》PPT課件.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《《循環(huán)結(jié)構(gòu)》PPT課件.ppt(56頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第 四 章 循環(huán)結(jié)構(gòu),4.1 用格里高利公式求的近似值 (while語句) 4.2 統(tǒng)計(jì)一個(gè)整數(shù)的位數(shù) (do-while語句) 4.3 判斷素?cái)?shù) (break 和 continue 語句) 4.4 求1!+2!+...+100! (循環(huán)嵌套) 4.5 循環(huán)結(jié)構(gòu)程序設(shè)計(jì),本章要點(diǎn),什么是循環(huán)? 為什么要使用循環(huán)? 如何實(shí)現(xiàn)循環(huán)? 實(shí)現(xiàn)循環(huán)時(shí),如何確定循環(huán)條件和循環(huán)體? 怎樣使用while 和do-while語句實(shí)現(xiàn)次數(shù)不確定的循環(huán)? while 和do-while語句有什么不同? 如何使用break語句處理多循環(huán)條件? 如何實(shí)現(xiàn)多重循環(huán)?,for語句一般應(yīng)用形式:,for( 循環(huán)變量賦初值;
2、循環(huán)條件; 循環(huán)變量增值) 循環(huán)體語句 ,#include void main() int i,sum=0; for( i=1; i<=100; i++ ) sum+=i; printf(%d,sum); ,for (表達(dá)式1;表達(dá)式2;表達(dá)式3),循環(huán)結(jié)構(gòu)回顧,確定循環(huán)次數(shù),4.1 用格里高利公式求的近似值,使用格里高利公式求的近似值,要求精確到最后一項(xiàng)的絕對(duì)值小于104。 4.1.1 程序解析 4.1.2 while語句 4.1.3 輸入一批學(xué)生的成績,統(tǒng)計(jì)平均分,4.1.1 程序解析求的近似值,#include #include void main( ) int denomi
3、nator, flag; double item, pi; flag = 1; denominator = 1 ; item = 1.0; pi = 0; while (fabs (item) = 0.0001) item = flag * 1.0 / denominator; pi = pi + item; flag = -flag; denominator = denominator +2; pi = pi * 4; printf ( “pi = %fn”, pi); ,不確定循環(huán)次數(shù),for( i=1; i<=100; i++ ),4.1.2 while
4、語句,while (條件) 循環(huán)體語句;,循環(huán)條件,循環(huán)體,一般形式:,while (表達(dá)式) 循環(huán)體語句;,執(zhí)行流程:當(dāng)表達(dá)式為真(非0值)時(shí),執(zhí)行循環(huán)體語句;直到表達(dá)式為假,循環(huán)終止,4.1.2 while語句,特點(diǎn):先判斷表達(dá)式,后執(zhí)行循環(huán)體(當(dāng)型),求1+2++100的和 sum=0; i=1; while(i<=100) sum=sum+i; i++; ,此處無分號(hào) ;,一般形式:,while(表達(dá)式) 循環(huán)體語句,4.1.2 while語句,說明: 循環(huán)體有可能一次也不執(zhí)行(一開始條件就不成立) 當(dāng)表達(dá)式為真(非0值)時(shí),即可繼續(xù)執(zhí)行循環(huán) 循環(huán)體包括一個(gè)以上語句的
5、用 組成復(fù)合語句 有使循環(huán)趨向結(jié)束的語句,如 i++ 無限循環(huán): 也即無循環(huán)結(jié)束條件 while(1) 循環(huán)體; 下列情況,退出while循環(huán): 條件表達(dá)式不成立(為零) 循環(huán)體內(nèi)遇 break,特點(diǎn):先判斷表達(dá)式,后執(zhí)行循環(huán)體(當(dāng)型),sum=0; i=1; while(i<=100) sum=sum+i; i++; printf(“%d”,sum);,用一對(duì)大括號(hào) 將若干語句順序組合在一起就是一個(gè)復(fù)合語句,例 用while循環(huán)求1+2++100的累加和,#include void main() int i,sum=0; i=1; while(i<=100) sum=su
6、m+i; i++; printf(%d,sum); ,循環(huán)結(jié)構(gòu)的五要素: 循環(huán)初值,循環(huán)條件,循環(huán)終值,循環(huán)變量增值,循環(huán)體,例 用while循環(huán)求1+2++n的累加和,#include void main() int i,sum=0; i=1; while(i<=100) sum=sum+i; i++; printf(%d,sum); ,求前n項(xiàng)的和 可用scanf讀入n,#include void main() int i,sum=0,n; i=1; printf(“Enter n: ”); scanf(“%d”, ,while 語句和for語句 都是在循環(huán)
7、前先判斷條件 while 和 for 的比較,while 語句說明,表達(dá)式1; while (表達(dá)式2) 循環(huán)體語句; 表達(dá)式3; ,for(表達(dá)式1; 表達(dá)式2; 表達(dá)式3) 循環(huán)體語句,for (i = 1; i <= 10; i++) sum = sum + i;,i = 1; while (i <= 10) sum = sum + i; i++; ,求110的累加和,程序解析求的近似值,例4-1 #include #include void main( ) int denominator, flag; double item, pi; flag
8、= 1; denominator = 1 ; item = 1.0; pi = 0; while (fabs (item) = 0.0001) item = flag * 1.0 / denominator; pi = pi + item; flag = -flag; denominator = denominator +2; pi = pi * 4; printf ( “pi = %fn”, pi); ,精確到最后一項(xiàng)的絕對(duì)值小于104 ,即|item| 104, 達(dá)到精度要求,循環(huán)結(jié)束,fabs(item) < 0.0001 精度要求給出了循環(huán)結(jié)束條件,程序解析求
9、的近似值,#include #include void main( ) int denominator, flag; double item, pi; flag = 1; denominator = 1 ; item = 1.0; pi = 0; while(fabs (item) = 0.0001) item = flag * 1.0 / denominator; pi = pi + item; flag = -flag; denominator = denominator +2; pi = pi * 4; printf ( “pi = %fn”, pi);
10、,item=0.0 ?,#include #include void main() int s; float n,t,pi; t=1; s=0; n=1.0; m=1; while((fabs(t))=1e-6) s=s+t; n=n+2; m=-m; t=m/n; pi=s*4; printf(pi=%fn,pi); ,例4-2 從鍵盤輸入一批學(xué)生的成績,計(jì)算平均分 分析: 求累加和 確定循環(huán)條件 不知道輸入數(shù)據(jù)的個(gè)數(shù),無法事先確定循環(huán)次數(shù) 用一個(gè)特殊的數(shù)據(jù)作為正常輸入數(shù)據(jù)的結(jié)束標(biāo)志,比如選用一個(gè)負(fù)數(shù)作為結(jié)束標(biāo)志。,4.1.3 統(tǒng)計(jì)輸入的一批學(xué)生的平均成績,例4-2
11、從鍵盤輸入一批學(xué)生的成績,計(jì)算平均分 #include void main() int num; double grade, total; num = 0; total = 0; printf(“Enter grades: n); scanf(“%lf”, ,4.2 統(tǒng)計(jì)一個(gè)整數(shù)的位數(shù),從鍵盤讀入一個(gè)整數(shù),統(tǒng)計(jì)該數(shù)的位數(shù)。 4.2.1 程序解析 4.2.2 do - while語句 4.2.3 循環(huán)語句的選擇,例4-3 #include void main ( ) int count, number; count = 0; printf(“Enter a number: ); scanf (
12、%d, ,4.2.1 程序解析統(tǒng)計(jì)一個(gè)整數(shù)的位數(shù),while (number != 0) number = number / 10; count ++; ,4.2.2 do - while 語句,do 循環(huán)體語句 while (表達(dá)式);,先循環(huán),后判斷,真,假,表達(dá)式,循環(huán)體語句,,,,,,,,,,,do-while的下一條語句,while 是先判別條件,再?zèng)Q定是否循環(huán); do-while 是先至少循環(huán)一次,然后再根據(jù)循環(huán)的結(jié)果決定是否繼續(xù)循環(huán)。,while 和 do-while 的比較,while (number != 0) number = number / 10; coun
13、t ++; ,do number = number / 10; count ++; while (number != 0);,例 while和dowhile比較,#include void main() int i,sum=0; scanf(%d, ,#include void main() int i,sum=0; scanf(%d, ,結(jié)論:當(dāng) while后的表達(dá)式第一次的值為“真”時(shí),兩種結(jié)果相同,否則不同,輸入:10,輸出:sum=10 輸出:sum=10,輸入:11,輸出:sum=11 輸出:sum=0,三種循環(huán)結(jié)構(gòu):求1100的和,
14、sum=0; i=1; while(i<=100) sum=sum+i; i++; printf(%d,sum);,sum=0; i=1; do sum+=i; i++; while(i<=100); printf(%d,sum);,sum=0; for(i=1; i<=100; i++) sum+=i; printf(%d,sum);,幾種循環(huán)的比較,1、三種循環(huán)語句在處理循環(huán)問題時(shí),一般可以相互替代,2、對(duì)于循環(huán)次數(shù)不確定的問題,可以用while或do-while語句來實(shí)現(xiàn)。 while語句為先判斷后執(zhí)行,do-while語句則先執(zhí)行后判斷。,3、對(duì)于循環(huán)次
15、數(shù)確定的問題,用for語句更方便。for語句也為先判斷后執(zhí)行。,4.2.3 循環(huán)語句的選擇,if(循環(huán)次數(shù)已知) 使用for語句 else /* 循環(huán)次數(shù)未知 */ if (循環(huán)條件在進(jìn)入循環(huán)時(shí)明確) 使用while語句 else /* 循環(huán)條件需要在循環(huán)體中明確 */ 使用do-while語句,4.3 判斷素?cái)?shù),輸入一個(gè)正整數(shù)m,判斷它是否為素?cái)?shù)。 4.3.1 程序解析 4.3.2 break語句 和continue語句,4.3.1 程序解析判斷素?cái)?shù),算法:一個(gè)正整數(shù)m,除了能被1和它本身(m)整除外,不能被其它數(shù)整除,該數(shù)就是素?cái)?shù)。 設(shè) i 取值 2, m-1 如果m不能被該區(qū)間上的任何
16、一個(gè)數(shù)整除,即對(duì)每個(gè)i,m%i 都不為0,則m是素?cái)?shù) 只要找到一個(gè)i,使m%i為0,則m肯定不是素?cái)?shù) m不可能被大于 m/2 的數(shù)整除 i 取值 2, m-1 、 2, m/2 、 2, ,for(i = 2; i m/2) printf(yesn) else printf(non”);,int main(void) int i, m; printf(“Enter a number: ); scanf (%d, ,例4-4源程序判斷素?cái)?shù),for (i = 2; i <= m/2; i++) if (m % i == 0) printf(No!n); else printf(%d i
17、s a prime number! n, m);,,根據(jù)素?cái)?shù)定義,在for循環(huán)中,只要有一個(gè)i能滿足m%i==0,則m就不是素?cái)?shù),不用在檢查m是否能被其他數(shù)整除,可提前結(jié)束循環(huán),,一般形式:break; 功能:放在循環(huán)語句和switch語句中,用于終止并跳出循環(huán)體或switch語句,接著執(zhí)行循環(huán)語句或switch語句后面的語句。 說明: break語句應(yīng)該和if語句配合使用,即條件滿足時(shí),才執(zhí)行break跳出循環(huán) break只能終止并跳出最近一層的循環(huán)(嵌套循環(huán)時(shí))。如果要跳出多層循環(huán),用goto語句 break只能用于循環(huán)語句和switch語句,break語句,求前50項(xiàng)和 for(i=1;
18、 i50) break; sum+=i; printf(%d,sum);,循環(huán)體,例lt-area: break舉例:按不同的半徑,輸出圓面積,面積大于100時(shí)停止,#include #define PI 3.14159 void main() int r; float area; for(r=1;r100) break; printf(r=%d,area=%.2fn,r,area); ,通常break語句總是和if語句連在一起,if(area<=100) printf(r=%d,area=%.2fn,r,area); else break;,例lt-char break舉
19、例: 小寫字母轉(zhuǎn)換成大寫字母,直至輸入非小寫字母字符。,#include void main() char c; while(1) c=getchar(); if(c=a ,#include void main() char c; while(1) c=getchar(); if(c=a ,只將小寫字母轉(zhuǎn)成大寫字母輸出,將小寫字母轉(zhuǎn)成大寫字母輸出如果是大寫字母,則直接輸出,一般形式:continue; 功能:結(jié)束本次循環(huán),跳過循環(huán)體中尚未執(zhí)行的語句,進(jìn)行下一次是否執(zhí)行循環(huán)體的判斷,如果條件成立,繼續(xù)執(zhí)行循環(huán)。 說明: 僅用于循環(huán)語句中 continue 語句僅結(jié)束本次循環(huán),但
20、break語句則是結(jié)束整個(gè)循環(huán)過程。,例 輸出1到100之間能被9整除的數(shù) #include void main() int i; for(i=1; i<=100; i++) if(i%9!=0) continue; printf(%dn,i); ,continue 語句,分析:i為循環(huán)變量,從110 十個(gè)整數(shù)n, 用scanf讀入 正數(shù)的個(gè)數(shù)放入num中 正數(shù)的和放入sum中 正數(shù)的平均值為aver= sum/num,例li-count 求輸入的十個(gè)整數(shù)中正整數(shù)的個(gè)數(shù)及其和與平均值,#include void main() int i, n, num=0; f
21、loat sum=0,aver; printf(“請(qǐng)輸入10個(gè)數(shù):”); for(i=0;i<10;i++) scanf(%d, ,,if(n0) num++; sum+=n; else continue;,if(n0) num++; sum+=n; 行不?,注意:scanf的輸入格式是用12 45 69還是用12,45,69,for循環(huán)中scanf的輸入格式要用空格或回車,4.4 求1! + 2! + . + 100!,累乘求階乘,累加求和(循環(huán)100次) item = i ! sum = sum + item; 4.4.1 程序解析 計(jì)算 i 的階乘 4.4.2 嵌套循環(huán)
22、 用循環(huán)計(jì)算 i 的階乘以及階乘的和,#include double fact (int n); int main(void) int i; double sum; sum = 0; for(i = 1; i <= 100; i++ ) sum = sum + fact (i); printf(1! + 2! + 3! + + 100! = %en, sum); return 0; double fact (int n) int i; double result = 1; for (i = 1; i <= n; i++) result = result * i ; retu
23、rn result ; ,4.4.1 程序解析 求1! + 2! + . + 100!,4.4.2 嵌套循環(huán),求6!階乘 item = 1; for (j = 1; j <= 6; j++) item = item * j;,累加和 for(i = 1; i <= 100; i++) item = 1; for (j = 1; j <= i; j++) item = item * j; sum = sum + item; ,求階乘 1!=1 2!=1*2 =1!*2 3!=1*2*3=2!*3 j! = 1*2*.* j=(j-1)!*j,求階乘的和 1!
24、+ 2! + . + 100!,例4-6 源程序,#include void main() int i, j; double item, sum; /* item 存放階乘 */ sum = 0; for(i = 1; i <= 100; i++) item = 1; /* 每次求階乘都從1開始 */ for (j = 1; j <= i; j++) /* 內(nèi)層循環(huán)算出 item = i! */ item = item * j; sum = sum + item; printf(1! + 2! + 3! + + 100! = %en, sum);
25、,求階乘 1!=1 2!=1*2 =1!*2 3!=1*2*3=2!*3 j! = 1*2*.* j=(j-1)!*j,內(nèi)層循環(huán)的初始化,for(i = 1; i <= 100; i++) item = 1; for (j = 1; j <= i; j++) item = item * j; sum = sum + item; ,求1! + 2! + . + 100!,item = 1; for(i = 1; i <= 100; i++) for (j = 1; j <= i; j++) item = item * j; sum = sum + item;
26、,求1! + 1!*2! + + 1!*2!**100!,例lt4-star :根據(jù)輸入的邊長,輸出正方形,#include void main() int i,j,n; printf(input n: ); scanf(%d, ,例lt4-99 循環(huán)嵌套,輸出九九表,#include void main() int i,j; for(i=1;i<10;i++) printf(%4d,i); printf(n-----------------------------------n); for(i=1;i<10;i++) for(j=1;j<10;j++) printf((j=
27、=9)?%4dn:%4d,i*j); ,變量 i 控制行,變量 j 控制列 i=1, j 從19循環(huán),輸出 i*j i=2, j 從19循環(huán), 輸出 i*j,for(i=1;i<10;i++) for(j=1;j<10;j++) printf(%4d,i*j); printf(“n”); ,例lt4-99a 循環(huán)嵌套,輸出九九表,#include void main() int i,j; for(i=1;i<10;i++) printf(%4d,i); printf(n-----------------------------------n); for(i=1;i<10;i++)
28、 for(j=1;j<=i;j++) printf((j==i)?%4dn:%4d,i*j); ,變量 i 控制行,變量 j 控制列 i=1, j 從 1i 循環(huán),輸出 i*j i=2, j 從 1i 循環(huán), 輸出 i*j,for(i=1;i<10;i++) for(j=1;j
29、 for (j = 1; j <= i; j++) item = item * j; sum = sum + item; ,外層循環(huán)變量 i 的每個(gè)值 內(nèi)層循環(huán)變量 j 變化一個(gè)輪次; 內(nèi)外層循環(huán)變量不能相同 分別用 i 和 j,,,for (i = 1; i <= 100; i++) for (j = 1; j <= i; j++) printf (%d %dn, i, j );,4.5 循環(huán)程序設(shè)計(jì),循環(huán)程序的實(shí)現(xiàn)要點(diǎn): 歸納出哪些操作需要反復(fù)執(zhí)行? 循環(huán)體 這些操作在什么情況下重復(fù)執(zhí)行? 循環(huán)條件 選用合適的循環(huán)語句 for while do-while 循環(huán)具體實(shí)現(xiàn)時(shí)考慮(循
30、環(huán)條件): 事先給定循環(huán)次數(shù),首選for 通過其他條件控制循環(huán),考慮while或do-while,#include int main(void) int i, mark, max, n; printf(Enter n: ) ; scanf (%d, ,例4-7 輸入一批學(xué)生的成績,求最高分(for),,max,mark,,Enter n: 5 Enter 5 maks:67 88 73 54 82 Max = 88,Enter n: 0,#include void main() int mark, max; printf(“Enter marks:); scanf (%d, ,例4
31、-7 輸入一批學(xué)生的成績,求最高分(while),#include int main(void) int mark, max; max = -1; /* 給max賦一個(gè)小初值 */ printf(“Enter marks: ); do scanf (%d, ,例4-7 輸入一批學(xué)生的成績,求最高分(do-while),Enter marks: 67 88 73 54 82 -1 Max = 88,Enter marks: -1,例lt4-chicken: 現(xiàn)有100元,要求買100只雞,假定母雞每只3元,公雞每只2元,小雞每只5角。列出所有可能的買雞方案。設(shè)母雞個(gè)數(shù)為m,公雞個(gè)數(shù)
32、為g, 小雞個(gè)數(shù)為x。根據(jù)題意,有以下公式成立:0.5*x+2*g+m*2=100,#include void main() int x,g,m,n=0; for(m=0;m<=100;m++) for(g=0;g<=100;g++) x=100-m-g; if(0.5*x+2*g+m*3==100) n++; printf(“n第%d種方案是:” ,n); printf(“x=%d, g=%d, m=%dn”,x,g,m); ,#include void main() int x,g,m,n=0; for(x=0;x<=100;x++) for(g=0
33、;g<=100;g++) m=100-x-g; if(0.5*x+2*g+m*3==100) n++; printf(“n第%d種方案是:”,n); printf(“x=%d, g=%d, m=%dn”,x,g,m); ,優(yōu)化程序 1、各種雞至少買一只2、各種雞最多能買幾只,例4-10 求Fibonacci序列:1,1,2,3,5,8,13,的前10項(xiàng),1, 1, 2, 3, 5, 8, 13, x1 x2 x x1 x2 x,x1 = x2 = 1; x = x1 + x2; x1 = x2; x2 = x;,x1 = 1; x2 = 1; printf (%6d%6d, x1,
34、 x2 ); /* 輸出頭兩項(xiàng) */ for (i = 1; i <= 8; i++) /* 循環(huán)輸出后8項(xiàng) */ x = x1 + x2; /* 計(jì)算新項(xiàng) */ printf(%6d, x); x1 = x2; /* 更新x1和x2 */ x2 = x; ,求Fibonacci序列:1,1,2,3,5,8,13,的前n項(xiàng),例4-11 古典算術(shù)問題搬磚頭,某地需要搬運(yùn)磚塊,已知男人一人搬3塊,女人一人搬2塊,小孩兩人搬一塊。 問用45人正好搬45塊磚,有多少種搬法?,for (men = 0; men <= 45; men++) for (wo
35、men = 0; women <= 45; women++) for (child = 0; child <= 45; child++) if ((men+women+child==45) ,例4-11 源程序(2),for (men = 0; men <= 15; men++) for (women = 0; women <= 22; women++) child = 45 women men; if (men * 3 + women * 2 + child * 0.5 == 45) printf(men=%d women=%d child=%dn, men, women
36、, child); ,for (men = 0; men <= 45; men++) for (women = 0; women <= 45; women++) for (child = 0; child <= 45; child++) if ((men+women+child==45) ,比較循環(huán)次數(shù),4.5 循環(huán)程序設(shè)計(jì)習(xí)題,習(xí)題4-9 輸入一個(gè)整數(shù),從高位開始逐個(gè)數(shù)字輸出。,12345 /10000 = 1 12345 %10000 =2345 2345 /1000 = 2 2345%1000 =345 345 /100 = 3 345%100 =45 45 /10 = 4
37、 45%10 =5 5/1= 5 5%1=5,(1) 如何得到10000 找輸入數(shù)據(jù)對(duì)應(yīng)的冪 pow=1; temp = x; while (x != 0) pow = pow * 10; x =x /10; pow = pow /10; (2) 每次循環(huán)pow縮小1/10 (3) pow=0 結(jié)束,例4-8 將一個(gè)正整數(shù)逆序輸出,確定:循環(huán)條件和循環(huán)體(循環(huán)不變式),12345 5 4 3 2 1 12345 % 10 = 5 12345 / 10 = 1234 1234 % 10 = 4 1234 / 10 = 123 123 % 10 = 3 123 / 1
38、0 = 12 12 % 10 = 2 12 / 10 = 1 1 % 10 = 1 1 / 10 = 0 結(jié)束,循環(huán)不變式 x%10 x=x/10 循環(huán)結(jié)束條件 x==0,scanf( “%d”, ,用do-while實(shí)現(xiàn)?,例4-9 求500以內(nèi)的全部素?cái)?shù),每行輸出10個(gè),for (m = 2; m <= 500; m++) if (m是素?cái)?shù)) printf( %d, m);,n = sqrt(m); for(i = 2; i n) printf(yesn) else printf(non”);,for (m = 2; m n) printf(%d, m) ,例4-9 源程序,#include #include int main(void) int count, i, m, n; count = 0; for (m = 2; m n) /* 如果m是素?cái)?shù) */ printf(%6d, m); count++; if (count %10 == 0) printf(“n”); ,
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。