接觸C#的第8天(do-while&for語句語法講解)
“最後一點就是堅持,有時候寫這些東西真的很痛苦,很讓人抓狂,但是你一旦你堅持下去,久而久之,你會看到自己的進步,某一天你回過頭去看自己以前寫的文章,當你能夠說出:“寫得真他媽菜”,那麼恭喜你,已經你升級了“。
—— “程式設計師應該堅持寫技術部落格”原文連結:https://blog.csdn.net/d6619309/article/details/52727326
C#:
21. (20)編一個程式,用do-while迴圈語句來計算PI = 4 *(1-1 / 3 + 1/5 + ... + 1 / n),要求當1 / n <0.000001時停止計算。
double pi, s = 0, x;//宣告變數 double n = 1//賦初值 do//dowhile語句 { x = Math.Pow(-1, n + 1) / (2 * n - 1); s = s + x; n++; } while (1 / n >= 0.000001);//while條件跟if一樣,記得加括號 pi = s * 4;//計算公式 Console.WriteLine("pi的值為:{0}", pi);///輸出 Console.ReadKey();//此句不解釋
do-while執行過程示意圖:第一次執行完做語句塊後代入,而條件表示式進行判斷,判斷結果為假則繼續返回執行做的語句塊,否則輸出。
22. (20)編一個程式,從鍵盤上輸入二個實數,使用Math類中Max()和Min()方法,求出它們中的最大數和最小數。
double d1, d2, max, min;//宣告變數 Console.WriteLine("請輸入兩個實數:");//字串輸出 d1 = double.Parse(Console.ReadLine());//將輸入的字元轉化為雙精度型別 d2 = double.Parse(Console.ReadLine()); max = Math.Max(d1, d2);//math類的max方法,返回兩個值中的較大值 min = Math.Min(d1, d2);//math類的max方法,返回兩個值中的較小值 Console.WriteLine("最大值為{0},最小值為{1}", max, min);//輸出結果 Console.ReadKey();
此題較為簡單,直接使用數學類的最大值(取最大值)和最小(取最小值)的方法。
標準流程:宣告變數 - 輸出文字提示 - 讀取輸入的字串並用解析方法轉化為相應的資料型別並賦值給已經宣告的變數 - 利用最大和最小方法進行篩選並賦值 - 將結果輸出。
23. (20)編一個程式,利用while迴圈語句和Math類中的Pow()方法,求出1到10的各個數的平方之和。
double i = 1, s = 0;//宣告變數並賦初值
do//dowhile語句一般格式
{
s = s + Math.Pow(i, 2);
i++;//i=i+1
}
while (i <= 10);//迴圈停止的條件,記得加括號
Console.WriteLine("1~10每個數的平方和為{0}", s);//輸出運算結果
Console.ReadKey();
24.(20)編一個程式,打印出所有的“水仙花數”,所謂“水仙花數”是指一個三位數,其各位數字立方和等於該數本身。例如,153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 3,所以153是“水仙花數”。
int num,i, j, k;//宣告變數
for (num = 100; num < 1000; num++)//for(初始值,表示式,更新值)
{
i = num % 10;//十位數
j = num % 100 / 10;//個位數
k = num / 100;//百位數
if (num == Math.Pow(i, 3) + Math.Pow(j, 3) + Math.Pow(k, 3))//三次方
Console.WriteLine(num + "是水仙花數");//輸出運算結果
}
Console.ReadLine();//
對於語句的標準寫法,對於(初始值。表示式,更新值)。對於語句和dowhile和而語句不同,為語句是按照規定的迴圈次數執行的迴圈體。找水仙花數是個有趣的程式題,下次將寫一個小專題來總結一下我想到的幾種演算法。
25. (20)編寫一個程式,用而語句,求出1+(1 + 2)+(1 + 2 + 3)+ ... +(1 + 2 + 3 + ... + 10)之和。
int i = 1, j = 1, s = 0, s1 = 0;//宣告變數
while (j <= 10)//當每個小括號內的尾項小於10的時候迴圈執行
{
while (i <= j)//每個下括號內的數依次累加
{
s += i;//s=s+i
i++;//i=i+1
}
s1 += s;//每個小括號的和之和
j++;//j=j+1
}
Console.WriteLine("1+(1+2)+(1+2+3)+...+(1+2+3+...+10)求和的計算結果是{0}", s1);
Console.ReadKey();
26. (20)編一個程式,輸入二個正整數,求出它們的最大公約數。
int i, j, k;//宣告變數
Console.WriteLine("請輸入第一個正整數:");
i = int.Parse(Console.ReadLine());//將讀取的字元轉化為整數
Console.WriteLine("請輸入第二個正整數:");
j = int.Parse(Console.ReadLine());
k = i < j ? i : j;//三目運算,把i和j兩者中較小的數賦值給k
while (!(i % k == 0 && j % k == 0))//用k去整除i和j,如果餘數都為零,則結束,否則執行k--
k--;
Console.WriteLine("以上兩個數的最大公約數為{0}", k);
Console.ReadKey();
知識點:(三元運算子)
條件表示式?表示式1:表示式2;
執行過程:先求條件表示式,為True時呼叫表示式1,為False的時候呼叫表示式2
27. (20)編一個程式,用while迴圈語句,從鍵盤輸入10個數,要求找出最大數和次大數。
int i = 1, max = 1, max1 = 1;
int s;//宣告變數
Console.WriteLine("請依次輸入10個數:");//輸出字串
while (i <= 10)//迴圈次數為10次
{
s = int.Parse(Console.ReadLine());
if (s > max)
{
max1 = max;//如果輸入的數比最大值的初值大,就把最大值賦值給次大值
max = s;//把輸入的數賦值給最大值
}
else if (s > max1)
{
max1 = s;//如果輸入的數在最大值和次大值之間,就把輸入的值賦給max1
}
i++;
}
Console.WriteLine("最大值為{0},次大值為{1}", max, max1);
Console.ReadLine();
28. (40)編一個程式,要求使用而語句,輸入使用者名稱和密碼,實現使用者登入程式的功能,至多允許輸入三次,超過三次不允許登入。
const string UserName = "admin";
const string PassWord = "123456";
string username, password;
int i=1;
while(i<=3)
{
Console.WriteLine("請輸入使用者名稱");
username = Console.ReadLine();
Console.WriteLine("請輸入密碼");
password = Console.ReadLine();
if (username == UserName && password == PassWord)
break;
else
Console.WriteLine("你輸入的使用者名稱或者密碼錯誤,請重新輸入使用者名稱和密碼");
i++;
}
if (i <= 3)
{
Console.WriteLine("Loading...正在登入系統");
}
else
Console.WriteLine("Warning:不能登入系統!");
29. (20)
有關係式1 * 1 + 2 * 2 + 3 * 3 + ... + k * k <2000,編一個程式,求出滿足此關係式的k的最大值。
int k = 1, s = 0;
while (s < 2000)
{
s = s + k * k;
k++;
}
Console.WriteLine("k的值為{0}", k - 2);
Console.ReadKey();
30. (20)編寫一個程式,要求用while迴圈語句,列印1到100的正整數,每行列印5個數,每列右對齊。
int i = 1;
while (i <= 100)
{
Console.Write("{0,10:d}", i);//{佔位符,輸出長度:d表示十進位制}
if (i % 5 == 0)
Console.WriteLine();//當i對5的餘數剛好為0時輸出一個換行
i++;
}
Console.ReadKey();
換行的寫法已經註釋,不再贅述。while的迴圈基本模式都是差不多的,多寫幾個想必就能有更清楚的認識了!