練習15:取得字串陣列中最長的字
1
2
3
4
5
6
7
8
9
10
11
12
13
| string[] names = { "馬蓋先", "關羽", "雷吉米勤", "科比布萊恩特" };
Console.WriteLine(GetLongest(names));
Console.ReadKey();
static string GetLongest(string[] names)
{
string max = names[0];
for (int i = 0; i < names.Length; i++)
{
if (names[i].Length > max.Length) max = names[i];
}
return max;
}
|
練習16:計算整數陣列的平均值
要求:計算結果如果有小數,則顯示小數點後兩位(四捨五入)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| int[] nums = { 1, 2, 3, 65, 77, 879, 5, 43 };
decimal avg = Convert.ToDecimal(GetAvg(nums).ToString("0.00"));
Console.WriteLine(avg);
Console.ReadKey();
static decimal GetAvg(int[] nums)
{
decimal sum = 0;
for (int i = 0; i < nums.Length; i++)
{
sum += nums[i];
}
return sum / nums.Length;
}
|
練習17:使用冒泡排序對整數陣列實現升序排序
{1,5,3,90,2,4,6,8,10}
Array.Sort()升序Array.Reverse反轉
工作用
1
2
3
4
5
6
7
8
| int[] nums = { 1, 5, 3, 90, 2, 4, 6, 8, 10 };
Array.Sort(nums); //升序
Array.Reverse(nums); //反轉
//輸出看結果
for (int i = 0; i < nums.Length; i++) {
Console.WriteLine(nums[i]);
}
|
筆試用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| int[] nums = { 1, 5, 3, 90, 2, 4, 6, 8, 10 };
for (int i = 0; i < nums.Length - 1; i++)
{
for (int j = 0; j < nums.Length - 1 - i; j++)
{
//跟後一位比
if (nums[j] > nums[j + 1])
{
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
}
}
//輸出看結果
for (int i = 0; i < nums.Length; i++) {
Console.WriteLine(nums[i]);
}
|
練習18:給陣列隨機賦值並計算平均
使用一個陣列儲存30個學生的考試成績,並給每個陣列元素指定一個1-100的隨機值,然後計算平均成績
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| int[] scores = new int[30];//宣告長度為30的整數陣列,用來存放學生的考試成績
Random r = new Random();//建立產生隨機數物件
//通過循環給每一個元素賦值
for (int i = 0; i < scores.Length; i++) {
scores[i] = r.Next(1,101);//1-100的隨機值
}
//計算平均成績
decimal sum = 0;
for (int i = 0; i < scores.Length; i++)
{
sum += scores[i];
}
decimal avg = sum / scores.Length;
avg = Convert.ToDecimal(avg.ToString("0.00"));
Console.WriteLine(avg);
Console.ReadKey();
|
練習19:統計字串出現的次數&位置
有如下字元串:【”患者:“大夫,我咳嗽得很重。” 大夫:“你多大年記?” 患者:“七十五歲。” 大夫:“二十歲咳嗽嗎”患者:“不咳嗽。” 大夫:“四十歲時咳嗽嗎?” 患者:“也不咳嗽。” 大夫:“那現在不咳嗽,還要等到什麼時咳嗽?””】。 需求:
- 請統計出該字元中“咳嗽”一詞的出現次數,以及每次“咳嗽”出現的索引位置。
- 擴展(*):統計出每個字元的出現次數。
IndexOf找不到會返回-1
1
2
3
4
5
6
| 第一次出現"咳嗽"的索引位置:8
第二次找的時候,要從第9個索引開始找:8+1 => index+1
所以,每一次要找的時候,都要從上一次的索引值加1開始找
找不到的時候,index會返回-1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| string s = "患者:“大夫,我咳嗽得很重。” 大夫:“你多大年記?” 患者:“七十五歲。” 大夫:“二十歲咳嗽嗎”患者:“不咳嗽。” 大夫:“四十歲時咳嗽嗎?” 患者:“也不咳嗽。” 大夫:“那現在不咳嗽,還要等到什麼時咳嗽?";
int index = s.IndexOf("咳嗽"); //第一次出現"咳嗽"的索引位置
Console.WriteLine($"第一次出現\"咳嗽\"的索引位置 {index}"); //8, 第二次找的時候要從第9個索引開始找8+1 => index+1
int i = 1; //記錄找的次數,因為前面己經找過一次所以i=1
while (index != -1) //找不到index會返回-1
{
i++; //每找一次i就加1
index = s.IndexOf("咳嗽", index + 1); //從上一次出現的index+1開始找,找完之後,再重新賦值給index
if (index == -1) break; //-1是代表找不到了
Console.WriteLine($"第{i}次找到「咳嗽」的位置是 {index}");
}
Console.ReadKey();
|
1
2
3
4
5
6
7
8
| 第一次出現"咳嗽"的索引位置 8
第2次找到「咳嗽」的位置是 46
第3次找到「咳嗽」的位置是 55
第4次找到「咳嗽」的位置是 68
第5次找到「咳嗽」的位置是 80
第6次找到「咳嗽」的位置是 93
第7次找到「咳嗽」的位置是 103
第8次找到「咳嗽」的位置是 -1
|
-1是說明找不到「咳嗽」了,所以要加這段 if (index == -1) break; //-1是代表找不到了
練習20:字串處理Trim()、Split、string.Join()
將字元串” hello world,你 好 世界 ! “兩端空格去掉,並且將其中的所有其他空格都替換成一個空格,輸出結果為:”hello world,你 好 世界 !”
使用到三個方法: Trim() Split string.Join()
1
2
3
4
5
6
7
8
9
10
| string s = " hello world,你 好 世界 ! ";
s = s.Trim(); //兩端空格去掉
//先把全部的空格去掉
string[] sNew = s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
//把分隔符空格放到陣列sNew裡面去
string strNew = string.Join(" ", sNew);
Console.WriteLine(strNew);
Console.ReadKey();
|
練習21:接收連續輸入姓名,quit結束後,計算總數和輸出每個姓名
製作一個控制台小程式。要求:用戶可以在控制台輸入每個學生的姓名,當用戶輸入quit(不區分大小寫)時,程式停止接受用戶的輸入,並且顯示出用戶輸入的學生的個數,以及每個學生的姓名。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| //儲存用戶輸入的姓名
List<string> list = new List<string>();
while (true)
{
Console.WriteLine("請輸入學生姓名,輸入quit退出");
string name = Console.ReadLine();
if (name.ToLower() == "quit") break; //當用戶輸入quit跳出循環
list.Add(name);
}
Console.WriteLine($"你一共輸入了:{list.Count}個學生,姓名分別為:");
foreach (var item in list) {
Console.WriteLine(item);
}
Console.ReadKey();
|
練習22:承上,顯示姓王的同學的個數
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| //儲存用戶輸入的姓名
List<string> list = new List<string>();
while (true)
{
Console.WriteLine("請輸入學生姓名,輸入quit退出");
string name = Console.ReadLine();
if (name.ToLower() == "quit") break; //當用戶輸入quit跳出循環
list.Add(name);
}
Console.WriteLine($"你一共輸入了:{list.Count}個學生,姓名分別為:");
//記錄姓王的同學個數
int count = 0;
foreach (var item in list)
{
if (item[0] == '王') count++;
Console.WriteLine(item);
}
Console.WriteLine($"姓王的同學有{count}個");
|
練習23:字串陣列內容反轉(不能用Reverse())
請將字符串數組{ “中國”, “美國”, “巴西”, “澳大利亞”, “加拿大” }中的內容反轉。然後輸出反轉後的數組。不能用數組的Reverse()方法。
要自己動手寫的話,需要透過循環,反轉需要Length/2次 (冒泡排序)
1
2
3
4
5
6
7
8
9
10
11
12
13
| string[] names = { "中國", "美國", "巴西", "澳大利亞", "加拿大" };
for (int i = 0; i < names.Length / 2; i++) //反轉需要Length/2次
{
string temp = names[i];
names[i] = names[names.Length - 1 - i];
names[names.Length - 1 - i] = temp;
}
//轉出看結果
foreach (var item in names) {
Console.WriteLine(item);
}
Console.ReadKey();
|
練習24:物件導向-繼承、屬性、重寫、virtual方法
創造一個Person類,其包含:屬性: 姓名、性別、年齡,方法:SayHi()。
再創造一個Employee類繼承Person類,擴展屬性Salary,重寫SayHi()方法
- 要能重寫方法,必須要標記為虛方法
virtual或是抽象方法abstract
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
| //創造一個Person類,其包含:屬性: 姓名、性別、年齡,方法:SayHi()。
public class Person
{
public string Name { get; set; }
public char Gender { get; set; }
public int Age { get; set; }
public virtual void SayHi() //標記為virtual
{
Console.WriteLine($"父類打招呼");
}
}
//再創造一個Employee類繼承Person類,擴展屬性Salary,重寫SayHi()方法
public class Employee : Person
{
public decimal Salary { get; set; }
public override void SayHi()
{
Console.WriteLine("子類重寫父類方法-員工打招呼");
}
}
|
冒泡排序