vs新版3章節課件_第1頁
vs新版3章節課件_第2頁
vs新版3章節課件_第3頁
vs新版3章節課件_第4頁
vs新版3章節課件_第5頁
已閱讀5頁,還剩106頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

主講教師:本課學時:聯系方式:C#程序設計教程第三章C#編程基礎

本章主要內容介紹

3.1分支語句

3.2循環語句

3.3跳轉語句

3.4數組

3.5字符串

3.6函數

3.7綜合應用實例

3.8小結CONTENT本章的學習目標在C#中使用分支結構掌握各種分支結構的區別在C#中使用循環語句掌握循環語句的相同和區別了解和掌握數組掌握函數的應用知道和學會怎樣用字符串3.1分支語句期末過后,班主任要將百分成績轉換為等級制,需要進行等級判斷,90~100分為A,80~89為B,70~79為C,60~69為D,60分以下為E。這時必須轉移或改變程序的執行的順序。而用分支語句,能夠容易地實現這一功能。生活例子:3.1分支語句

if語句

switch語句

三元運算符If語句語法:

if(<條件>){<語句塊>}else{<語句塊>}選擇結構用于根據表達式的值執行語句if…elseif語句

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace@if{classEvenOdd{publicstaticvoidMain(){inta;a=Int32.Parse(Console.ReadLine());if(a%2==0)Console.WriteLine("Thisiseven\n");elseConsole.WriteLine("Thisisodd\n");Console.ReadKey();}}}輸出結果:Switch語句語法:switch(選擇變量){

case值1: … break;

case值2: … break; case值3: … break; ... ... default: …}switch…caseswitch…case的其他特性各個case標簽不必連續,也不必按特定順序排列default標簽可位于switch…case結構中的任意位置default標簽不是必選的,但使用default標簽是一個良好的編程習慣每兩個case標簽之間的語句數不限switch…case語法:switch(選擇變量){

case值1: … break;

case值2: … break; case值3: … break; ... ... default: …}例usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace@switch._._.@case{classProgram{staticvoidMain(string[]args){inti;for(i=0;i<10;i++)switch(i){case0:Console.WriteLine("iiszero");break;case1:Console.WriteLine("iisone");break;case2:Console.WriteLine("iistwo");break;case3:Console.WriteLine("iisthree");break;case4:Console.WriteLine("iisfour");break;default:Console.WriteLine("iisfiveormore");break;}Console.ReadKey();}}}Switch語句輸出結果:三元運算符

condition?first_expression:second_expression;

如果條件為true,則計算第一表達式并以它的計算結果為準;如果為false,則計算第二表達式并以它的計算結果為準。只計算兩個表達式中的一個三元運算符usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace三元運算符{classMainClass{staticdoublesinc(doublex){returnx!=0.0?Math.Sin(x)/x:1.0;}staticvoidMain(string[]args){Console.WriteLine(sinc(0.2));Console.WriteLine(sinc(0.1));Console.WriteLine(sinc(0.0));Console.ReadKey();}}}輸出結果:三元運算符使用條件運算符,可以更簡潔、雅觀地表達那些否則可能要求if-else結構的計算。3.2循環語句每位同學在登入學生信息管理系統是,需要輸入個人信息,包括用戶名和密碼等。若輸入錯誤,則提示重新輸入,直到輸入正確才允許登入。而循環語句就是在條件滿足時,完成某一功能的語句。生活例子:循環語句循環語句用于對一組命令執行一定的次數或反復執行一組命令,直到指定的條件為真。循環語句的類型while語句do語句for語句foreach語句While語句while循環的語法格式:while(條件){

需要循環執行的語句;}在講解while循環的使用之前,先和if語句做一個比較:

while(條件){

需要循環執行的語句;}if(條件){

條件成立時執行的語句;}while循環的流程圖:條件每次循環執行的語句繼續后面的語句假真前面的語句

while循環停車!車上有幾個座位?檢查!是!否!while(seat<=25)while循環反復執行指定的語句,直到指定的條件為真break

語句可用于退出循環continue

語句可用于跳過當前循環并開始下一循環while循環使用while循環來計算給定整數的數量級

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace@while{classProgram{staticvoidMain(string[]args){intnum;intmag;num=435679;mag=0;Console.WriteLine("Number:"+num);while(num>0){mag++;num=num/10;}Console.WriteLine("Magnitude:"+mag);Console.ReadKey();}}}輸出結果:do…while循環停車!車上有幾個座位?檢查!是!否!while(seat<=25)dodo…while循環do…while循環與while循環類似,二者區別在于do…while循環中即使條件為假時也至少執行一次該循環體中的語句。語法:do{//語句}while(條件)do…while循環(續)下圖顯示了do...while和while循環結構的區別。FalsedowhileFalseTrue執行循環的主體評估條件True執行循環的主體評估條件whiledo…while循環(續)usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace@do._._.@while{classTestDoWhile{staticvoidMain(string[]args){intx=0;do{Console.WriteLine(x);x++;}while(x<5);Console.ReadKey();}}}輸出結果:for循環for循環要求只有在對特定條件進行判斷后才允許執行循環

這種循環用于將某個語句或語句塊重復執行預定次數的情形

語法:for(初始值;條件;增/減){

//語句}for循環(續)下圖顯示了完整的for循環結構的執行順序。TrueFalse初始化評估條件循環主體退出循環增量/減量在for循環里計算一個階乘

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespacefor循環{classProgram{staticvoidMain(string[]args){longTotal=1;longi=1;longnum=Int64.Parse(Console.ReadLine());for(i=1;i<=num;i++)Total*=i;Console.WriteLine("{0}!is{1}",num,Total);Console.ReadKey();}}}輸出結果:

另一種忽略初始化的選擇usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespacefor循環{classProgram{staticvoidMain(string[]args){longTotal=1;longi=1;longnum=Int64.Parse(Console.ReadLine());for(;i<=num;i++)Total*=i;Console.WriteLine("{0}!is{1}",num,Total);Console.ReadKey();}}}輸出結果:

另一種改變是把++操作符移到內含語句中:

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespacefor循環{classProgram{staticvoidMain(string[]args){longTotal=1;longi=1;longnum=Int64.Parse(Console.ReadLine());for(;i<=num;)Total*=i++;Console.WriteLine("{0}!is{1}",num,Total);Console.ReadKey();}}}輸出結果:foreach循環計算總分計算分數對班上的每一個學生教室foreach循環的基本語法foreach

循環用于自動遍歷整個集合或數組

語法:

foreach(數據類型變量in集合或者數組){

//語句

}遍歷過程中,每一次都把集合中的元素賦給該變量是一個只讀的局部變量foreach循環foreach

循環用于遍歷整個集合或數組

語法:

foreach(數據類型元素(變量)in集合或者數組){

//語句

}foreach循環應用staticvoidMain(string[]args){

//存放字母的個數

intcountLetters=0;

//存放數字的個數

intcountDigits=0;

//存放標點符號的個數

intcountPunctuations=0;

//用戶提供的輸入

stringinput;

Console.WriteLine("請輸入一個字符串");

input=Console.ReadLine();

//聲明

foreach循環以遍歷輸入的字符串中的每個字符。

foreach(charchrininput) {

//檢查字母

if(char.IsLetter(chr))

countLetters++;

//檢查數字

if(char.IsDigit(chr))

countDigits++;

//檢查標點符號

if(char.IsPunctuation(chr))

countPunctuations++; }

Console.WriteLine(“字母的個數為:{0}",countLetters);

Console.WriteLine(“數字的個數為:{0}",countDigits);

Console.WriteLine(“標點符號的個數為:{0}",countPunctuations);Console.ReadLine();}為所有計數器設置初始值接受輸入對輸入的每一個字符都進行循環遍歷了所有輸入的字符之后,循環自動終止輸出結果:3.3跳轉語句

當你在銀行辦理業務時,你拿順序票等待。倘若你是VIP用戶,你可以跳出等待循環,直接去辦理業務。如果你是普通用戶,則必須繼續等待。直到輪到你的順序票。而跳轉語句可以實現這樣的跳躍性。生活例子:3.3跳轉語句

breakcontinuereturnContinue語句Continue語句用于結束本次循環(即跳過本次循環尚未執行的語句),執行下一次循環。要會區分continue和breakcontinue語句

usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace@continue{classmycouter{publicstaticvoidMain(){inti=0,total=0;while(i<100){i++;if(i%2==0)continue;total+=i;}Console.ReadKey();}}}Break語句在執行循環時有時,可能希望在循環體執行到一半時就退出循環,而不是整個循環體執行完畢,等循環條件判斷完畢才退出。此時,可以應用一個關鍵字——break。

Break語句usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace@break{classmycouter{publicstaticvoidMain(){for(intcounter=1;counter<=1000;counter++){if(counter==10)break;Console.WriteLine(counter);Console.ReadLine();}}}}Return語句return是的返回啊!1:如果是靜態函數void的話就可以不用返回了,也可以返回空值return;2:如果是有返回值的函數那么就要返回和寫的函數一樣的返回類型的值啊;例如:publicstaticintFun(inta){return2*a;}這里就是返回與int一樣類型的數,在return的后面可以直接返回某一個參數,也可以是表達式的求值3:return也可以在其他函數或方法中使用,使整個語句塊跳出。return(續)return1;

returna;

returna+b;

returnAdd(a+b);

return;3.4數組

動物園要對動物的種類做簡單的分析,分別統計不同種類動物的數量。這時動物的種類相當于數組,而數量相當于數組的長度。不同的種類代表不同的數組名。因而使用數組可以更直觀的描述數據。生活例子:3.4數組

所有數組元素必須為同一類型數組的元素是有序的,其索引從0開始數組元素的表示數組的定義數組類型數據類型[]數組聲明步驟聲明數組(不用指定其大小)用new關鍵字進行實例化(需要指定大小,可以用變量)數組的初始化new時初始化用{,,}列表的方式完成初始化默認初始化new時,如果沒有初始化,則編譯器會根據數組元素的類型,對元素進行默認的“初始化”數值型=0bool型=false引用型=null數組的默認初始化int[]a=newint[3];地址:0x1000

0a[0]

0a[1]

0a[2]

0x1000a數組元素的訪問訪問單個數組元素可以采用這種格式:數組名[下標]如:Math[1]=80;Console.writeLine(math[1]);數組的應用78(0)67(1)89(2)92(3)66(4)JoeTomLeeJimBill23.518.927.321.429.6學生分數的整數數組職員姓名的字符串數組室溫的浮點數組數組位置數組的應用staticvoidMain(string[]args){

intcount;

Console.WriteLine("請輸入您要登記的學生人數");

count=int.Parse(Console.ReadLine());

//聲明一個存放姓名的字符串數組,其長度等于提供的學生人數

string[]names=newstring[count];

//用一個

for循環來接受姓名

for(inti=0;i<count;i++) {

Console.WriteLine(“請輸入學生{0}的姓名",i+1);

names[i]=Console.ReadLine(); }

Console.WriteLine("已登記的學生如下:");

//用

foreach循環顯示姓名

foreach(stringdispinnames) {

Console.WriteLine("{0}",disp); }

Console.ReadLine();}數組聲明初始化數組元素的循環顯示輸出的循環輸出結果:例題:建立一個有7個元素的整數數組array,輸出奇數和偶數個數.usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace數組_2_{classForeachDemo{staticvoidMain(string[]args){intodd=0,even=0;int[]array=newint[]{0,1,2,3,5,8,13,18};foreach(intiinarray){if(i%2==0)even++;elseodd++;}Console.WriteLine("{0},{1}",odd,even);Console.ReadLine();}}}輸出結果:C#中數組的特點C#中的數組繼承自System.Array類常用屬性Length數組中元素的個數常用方法:Sort 對數組元素進行排序(靜態)Clear 將元素設置為默認輸出值0或null(靜態)Clone 創建數組的拷貝(返回object)GetLength 獲取數組指定維的元素個數IndexOf某個值在數組中首次出現的索引(靜態)Sort方法usingSystem;usingSystem.Collections;publicclassSamplesArrayList{publicclassmyReverserClass:IComparer{//CallsCaseInsensitiveComparer.Comparewiththeparametersreversed.intIComparer.Compare(Objectx,Objecty){return((newCaseInsensitiveComparer()).Compare(y,x));}}publicstaticvoidMain(){//CreatesandinitializesanewArrayList.ArrayListmyAL=newArrayList();myAL.Add("The");myAL.Add("quick");myAL.Add("brown");myAL.Add("fox");myAL.Add("jumps");myAL.Add("over");myAL.Add("the");myAL.Add("lazy");myAL.Add("dog");//DisplaysthevaluesoftheArrayList.Console.WriteLine("TheArrayListinitiallycontainsthefollowingvalues:");PrintIndexAndValues(myAL);//SortsthevaluesoftheArrayListusingthedefaultcomparer.myAL.Sort();Console.WriteLine("Aftersortingwiththedefaultcomparer:");PrintIndexAndValues(myAL);//SortsthevaluesoftheArrayListusingthereversecase-insensitivecomparer.IComparermyComparer=newmyReverserClass();myAL.Sort(myComparer);Console.WriteLine("Aftersortingwiththereversecase-insensitivecomparer:");PrintIndexAndValues(myAL);Console.Readline();}publicstaticvoidPrintIndexAndValues(IEnumerablemyList){inti=0;foreach(ObjectobjinmyList)Console.WriteLine("\t[{0}]:\t{1}",i++,obj);Console.WriteLine();}}輸出結果:Indexof方法usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;publicclassSamplesArray{publicstaticvoidMain(){//CreatesandinitializesanewArraywiththreeelementsofthesamevalue.ArraymyArray=Array.CreateInstance(typeof(String),12);myArray.SetValue("the",0);myArray.SetValue("quick",1);myArray.SetValue("brown",2);myArray.SetValue("fox",3);myArray.SetValue("jumps",4);myArray.SetValue("over",5);myArray.SetValue("the",6);myArray.SetValue("lazy",7);myArray.SetValue("dog",8);myArray.SetValue("in",9);myArray.SetValue("the",10);myArray.SetValue("barn",11);//DisplaysthevaluesoftheArray.Console.WriteLine("TheArraycontainsthefollowingvalues:");PrintIndexAndValues(myArray);//Searchesforthefirstoccurrenceoftheduplicatedvalue.StringmyString="the";intmyIndex=Array.IndexOf(myArray,myString);Console.WriteLine("Thefirstoccurrenceof\"{0}\"isatindex{1}.",myString,myIndex);//SearchesforthefirstoccurrenceoftheduplicatedvalueinthelastsectionoftheArray.myIndex=Array.IndexOf(myArray,myString,4);Console.WriteLine("Thefirstoccurrenceof\"{0}\"betweenindex4andtheendisatindex{1}.",myString,myIndex);//SearchesforthefirstoccurrenceoftheduplicatedvalueinasectionoftheArray.myIndex=Array.IndexOf(myArray,myString,6,5);Console.WriteLine("Thefirstoccurrenceof\"{0}\"betweenindex6andindex10isatindex{1}.",myString,myIndex);Console.ReadLine();}publicstaticvoidPrintIndexAndValues(ArraymyArray){for(inti=myArray.GetLowerBound(0);i<=myArray.GetUpperBound(0);i++)Console.WriteLine("\t[{0}]:\t{1}",i,myArray.GetValue(i));}}輸出結果:Clone方法usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;

classDrawBase:System.Object,ICloneable

{

publicstringname="jmj";

publicDrawBase()

{

}

publicobjectClone(){

returnthisasobject;//引用同一個對象

returnthis.MemberwiseClone();//淺復制

returnnewDrawBase()asobject;//深復制

}}

classProgram

{

staticvoidMain(string[]args){

DrawBaserect=newDrawBase();

Console.WriteLine();DrawBaseline=rect.Clone()asDrawBase;

="a9fs3";

Console.WriteLine();

DrawBaseploy=line.Clone()asDrawBase;="lj";

Console.WriteLine();

Console.WriteLine(object.ReferenceEquals(line,ploy));

Console.ReadLine();

}

}

輸出結果:3.5字符串字符串類System.String字符串的種類及其定義規則字符串[格式]:string字符串變量名[=字符串初值];逐字字符串逐字字符串由@字符后跟雙引號括起來的零個或多個字符組成。

[格式]:string字符串變量名[=@字符串初值];字符串的基本操作構造一個string的最簡單方法是使用字符串直接量,例如,下面的str是一個string類型的引用變量,給定了一個指向字符串直接量的引用。stringstr=“C#stringsarepowerful”;字符串的基本操作(續)usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace字符串{classStringDemo{publicstaticvoidMain(){char[]charray={'A','','s','t','r','i','n','g','.'};stringstr1=newstring(charray);stringstr2="Anothorastring";Console.WriteLine(str1);Console.WriteLine(str2);Console.ReadLine();}}}輸出結果:字符串關系比較規則

1.任何字符串(包括空字符串(“”))的比較結果都大于空引用

2.兩個空引用的比較結果為相等

3.兩個字符串一直比較到一個字符串的末尾時還相等,而另一個字符串仍有剩余字符,則帶有剩余字符的字符串被認為較大。返回值為執行最后一次比較所得的結果。

字符串查找

字符串復制publicintIndexOf(charvalue)publicintIndexOf(stringvalue)返回第一次出現value字符串的位置,從0算起。返回第一次出現value字符的位置,從0算起。publicintLastIndexOf(charvalue)

返回最后出現value字符的位置,從0算起。

publicintLastIndexOf(stringvalue)返回最后出現value字符串的位置,從0算起。創建一個與指定的string具有相同值的string

的新實例。staticstringCopy(stringstr)字符串查找的用途通過字符串查找功能,可以快速的查詢指定字符或字符串的位置,方便用戶瀏覽。字符串轉換Convert類提供了字符串轉換數值的靜態方法publicstaticintToInt32(stringvalue);將數值字符串value轉換為整數返回。publicstaticdoubleToDouble(stringvalue);將數值字符串value轉換為雙精度浮點型數返回。字符串其他方法publicstringTrim();將字符串對象前后空格符移除后返回。

字符串轉換的用途通過將字符串轉換為特定的類型,可以完成程序中指定類型的操作,提高了程序的可讀性字符串與charString是Char的有序的只讀的集合,用于表示文本字符串。String類的索引器是Char對象在String中的位置3.6函數函數是類中用于執行計算或其他行為的成員,它包含一系列的代碼塊,在C#中每個執行指令都是在方法的代碼中完成的。分為兩類:一.實例函數(不用static關鍵字定義)二.靜態函數(用static關鍵字定義)函數聲明:[訪問修飾符]返回類型方法名([形式化參數表]){語句塊或空語句的分號}函數的調用實例函數的調用:對象名.方法名([實際參數列表])靜態函數的調用:類名.方法名([實際參數列表])函數的返回值函數可以返回各種形式的值。常用的格式是:staticreturn-typefunction-name(){returnreturn-data;}函數的參數它是一種變量,用來控制隨其變化而變化的其他的量。函數參數類型C#2008中函數的參數有四種類型:值參數,不包含任何修飾符。輸入引用參數,以ref修飾符聲明。輸出引用參數,以out修飾符聲明。數組型參數,以params修飾符聲明。值參數當利用值參數向方法傳遞參數時,編譯程序會把參數值復制一份傳遞給函數。所以果函數的作用不會作用在實際參數上。代碼中演示了值參數類型函數的使用。例usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace值類型{classStringEqual{staticvoidMain(string[]args){TestMethodm=newTestMethod();inti=1,j=2;m.Swap(i,j);Console.WriteLine("i={0},j={1}",i,j);Console.ReadLine();}

}classTestMethod{publicvoidSwap(intx,inty){inttemp=x;x=y;y=temp;}}}值參數輸出結果:輸入引用參數引用參數并不開辟新的內存區域,當利用引用型參數向方法傳遞形參時,編譯程序將把實際值在內存中的地址傳遞給方法。ref關鍵字后應跟與形參的類型相同的類型聲明。代碼演示了輸入引用類型的函數。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace引用參數{classStringEqual{staticvoidMain(string[]args){TestMethodm=newTestMethod();inti=1,j=2;m.Swap(refi,refj);Console.WriteLine("i={0},j={1}",i,j);Console.ReadLine();}}classTestMethod{publicvoidSwap(refintx,refinty){inttemp=x;x=y;y=temp;}}}輸出結果:輸出型參數與輸入型參數引用重載不同的是,雖然也不開辟新的內存區域,但在調用方法前無需對變量進行初始化。out關鍵字后應跟隨與形參的類型相同的類型聲明。在方法調用前不會被初始化,可是在方法返回后,傳遞的變量必須被初始化。代碼演示了輸出型的函數。數組型參數在C#2008中,當參數個數不定時,可以使用params關鍵字來定義。參數數組可以簡化代碼,因為不必從調用代碼中傳遞數組,而可以傳遞可在函數中使用的一個數組中相同類型的幾個參數。代碼演示了數組型的函數的使用。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace數組型參數{classText{staticvoidF(paramsint[]args){Console.Write("Arrayconstains{0}elements:",args.Length);foreach(intiinargs){Console.Write("{0}",i);Console.WriteLine();}Console.ReadKey();}staticvoidMain(string[]args){int[]arr={1,2,3};F(arr);F(10,20,30,40);F();}}}輸出結果:

變量的作用域變量的作用域,決定了變量的可見性和生命周期。下面將一一介紹各種類型的變量的作用域。usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace局部變量{classProgram{staticvoidWrite(){stringmyString="StringdefindedinWrite()";Console.WriteLine("NowinWrite()");Console.WriteLine("myString={0}",myString);}

staticvoidMain(string[]args){stringmyString="StringdefinedinMain()";Write();Console.WriteLine("\nNowinmain()");Console.WriteLine("myString={0}",myString);Console.ReadLine();}}}局部變量輸出結果:usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;namespace全局變量{classProgram{staticstringmyString;staticvoidWrite(){stringmyString="StringdefindedinWri

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論