資料處理 第一章 認識電腦

Download Report

Transcript 資料處理 第一章 認識電腦

C# 物件導向程式設計
for ASP.NET
鄧姚文
http://www.ywdeng.idv.tw
1
課程簡介








C#的程式寫法
變數與型態 (Type & Abstract Data Type)
算式之運算符號 (Operator)
表示式(expression)
陳述式 (statements)
副程式及函數 (Function/Method)
內建函數 (Inner Function)
例外處理
2
Visual Studio .Net
共用整合式開發環境



方案 Solution
專案 Project
一個方案之中可以包含多個專案
3
程式的編譯與執行

主控台應用程式 Console Application


視窗應用程式


文字模式介面
Windows Form
網站

Web Form
4
程式範例:SayHello


請使用者輸入姓名並選擇性別
依照性別不同,向使用者打招呼時加上
『先生』或『小姐』

Console Application 版本


Web 版本



使用 Console.Read 和 Console.Write
使用 Label、 TextBox、 Button
事件驅動模式
IntelliSense 智慧型提示
5
C# 基本語法







識別字(Identifier)
保留字(Keyword)
資料型別
變數宣告
型別轉換
運算子(Operator)
敘述與運算式
6
C# 基本語法:識別字(Identifier)

識別字(Identifier)







必須以英文字母或底線開頭(中文字也可以)
不得包含空白
最大長度不得超過1023個字元
大小寫字母視為不同
不得使用保留字
以多個英文字組成識別字,中間以底線分隔,
或採用駱駝表示法
變數名稱的開頭建議以型別或類別簡寫表示

例如:txtName 、 lblPrompt
7
C# 基本語法:保留字/關鍵字
abstract
as
base
bool
break
byte
case
catch
char
checked
class
const
continue
decimal
default
delegate
do
double
else
enum
event
explicit
extern
false
finally
fixed
float
for
foreach
goto
if
implicit
in
int
interface
internal
is
lock
long
namespace
8
new
null
object
operator
out
override
params
private
protected
public
readonly
ref
return
sbyte
sealed
short
sizeof
stackalloc
static
string
struct
switch
this
throw
true
try
typeof
uint
ulong
unchecked
unsafe
ushort
using
virtual
volatile
void
while
C# 基本語法:保留字/關鍵字


關鍵字是對編譯器有特殊意義而預先定義
的保留識別項。
關鍵字必須具有一個前置的 @,才能做為
程式中的識別項。

例如,@if 是有效的識別項,但是 if 則不是,
因為 if 是一個關鍵字。
9
資料型別







整數型別(Integer)
浮點數型別(Floating Point)
decimal 型別(錢)
char 型別(字元)
bool 型別(布林、真假值)
object 型別(物件)
string 型別(字串)
10
整數型別
別名
類別
大小
值域(範圍)
(Byte)
sbyte
System.Sbyte
1
-128 ~ 127
byte
System.Byte
1
0 ~ 255
short
System.Int16
2
-31,768 ~ 31,767
ushort
System.UInt16
2
0 ~ 65,535
int
System.Int32
4
-2,147,483,648 ~ 2,147,483,647
uint
System.UInt32
4
0 ~ 4,294,967,295
long
System.Int64
8
-9,223,372,036,854,775,808 ~
9,223,372,036,854,775,807
ulong
System.UInt64
8
18,446,744,073,709,551,616
kilo, mega, giga, tera, peta, exa, zetta
11
浮點數型別
別名
類別
大小
(Byte)
有效
位數
值域(範圍)
float
System.Single
4
7
double
System.Double
8
15 ~ 16
float ratio = 1.5F
12
負值約-3.4x1038~-1.5x10-45
正值約-1.5x10-45~-1.5x1038
負值約-1.8x10308~-5.0x10-324
正值約-5.0x10-324~-1.8x10308
Decimal 型別
別名
類別
大小
有效
位數
(Byte)
decimal
System.Decimal
16 28~29
值域(範圍)
約1.0x10-28~7.9x10-28
相較於 double,
decimal 有效位數較多,值域較小,適合金融運算。
decimal ratio = 32.25M
13
Char 型別
別名
char
類別
System.Char
大小(Byte)
2
字元採 Unicode 編碼
'A' 是一個字元
'文' 也是一個字元
14
Bool 型別
別名
bool
類別
大小(Byte)
System.Boolean
只有 true 和 false 兩個值
bool thisOneIsBigger = thisOne > thatOne;
if (thisOneIsBigger) {
loadLargerOne(thisOne);
} else {
loadLargerOne(thatOne);
}
15
2
Object 型別
別名
object
類別
System.Object
System.Object 是一切類別的始祖
16
大小(Byte)
0或8
String 型別
別名
string
類別
大小(Byte)
System.String
至少20
字串採 Unicode 編碼
字串並不僅僅是字元的線性集合
"This is a book"
"這是第一行\n這是第二行\n目前路徑為C:\\Windows"
以 @ 括住的字串常值不處理逸出序列,
適用於Windows檔案名稱:
string fileName = @"c:\data\20091122.txt";
17
數值資料

整數(Integer)


浮點數(Floating Point)


'文'、'a'、'\u0061'、'\x0061'
字串(String)


2300,2.3E3
字元(Character)


十進位26,十六進位 0x1A,八進位032
"電腦"
跳脫字元(Escape Characters)

'\n'
18
跳脫字元
19
逸出序列 (Escape Sequence)
Newline
Horizontal tab
Vertical tab
Backspace
ASCII
Representation
NL (LF)
HT
VT
BS
ASCII
Value
10 or 0x0a
9
11 or 0x0b
8
Escape
Sequence
\n
\t
\v
\b
Carriage return
CR
13 or 0x0d
\r
FF
BEL
\
?
12 or 0x0c
7
92 or 0x5c
63 or 0x3f
\f
\a
\\
\?
Single quotation mark
'
39 or 0x27
\'
Double quotation mark
"
34 or 0x22
\"
Octal number
ooo
—
\ooo
Hexadecimal number
hhh
—
\xhhh
Null character
NUL
0
\0
Character
Formfeed
Alert
Backslash
Question mark
20
變數宣告



變數要先宣告才能使用
不可使用未經初始化的變數
浮點數的預設型別是 double,欲指定為
float 必須於數字尾加 f 或 F
int year = 2003, month = 2;
char yuan = '元';
float salary = 31255.6F;
string message = "恭賀新禧";
21
22
23
型別轉換

隱含轉換 Implicit Conversion


值域小的轉換成值域大的
強制轉換 Explicit Conversion


值域大的轉換成值域小的
不同值域間互換
int b = 400;
double x = b;
int z = (int)x;
24
型別轉換:字串轉數字

int n=int.Parse("1234");
double r=double.Parse("3.14");

事實上是:




int n=System.Int32.Parse("1234");
double r=System.Double.Parse("3.14");
物件轉成字串:

n.ToString();
25
常數符號宣告

文字式 Literal



3.1415
"視窗標題"
常數符號式 Symbolic


全部用大寫英文字母
兩個英文字之間加底線
const float PI = 3.1415F;
const double EXCHANGE_RATE = 32.65;
26
運算子 Operator







指定 Assignment Operator
算術 Arithmetic Operator
關係 Relational Operator
邏輯 Logical Operator
字串 String Operator
複合指定
位元運算 Bitwise Operator
27
運算子 Operator (cont'd)

一元運算(Unary)


i++
二元運算(Binary)

x+y
運算子(Operator)
運算元(Operand)
28
指定運算子
Assignment Operator

將等號右邊的值指定給等號右邊的變數
sum = n1 + n2;
sum = 0, count = 1, index = 100;
3 = x + y;
29
算術運算子
Arithmetic Operator
30
關係運算子
Relational Operator
31
邏輯運算子
Logical Operator
32
字串運算子
String Operator

關係運算子也適用於字串
33
複合指定
34
位元運算子
Bitwise Operator






AND &
OR |
XOR ^
補數 ~
右移 >>
左移 <<
35
Bitwise Operator 練習一 AND

判斷某一個整數是奇數還是偶數?
Console.Write("判斷奇數/偶數\n請輸入一個整數:");
int n = Int32.Parse(Console.ReadLine());
const int MASK = 0x1;
bool isEven = (n & MASK) == 0;
if (isEven) {
Console.WriteLine("{0} 是一個偶數", n);
} else {
Console.WriteLine("{0} 是一個奇數", n);
}
36
Bitwise Operator 練習一 OR

將一個整數的第 4 個 bit 設成 1
Console.Write("請輸入一個二進位數字:");
string line = Console.ReadLine();
int binary = Convert.ToInt32(line, 2);
int mask = Convert.ToInt32("1000", 2);
int result = binary | mask;
Console.WriteLine("設定第四位元後:" +
Convert.ToString(result, 2));
37
Bitwise Operator 練習一 AND

將一個整數的第 4 個 bit 設成 0
38
範例:計算三角形面積


三角形三邊長為 a, b, c
其面積 A 為 A  d ( d  a )( d  b )( d  c )
d 
abc
2

試寫一程式讀入三角型的三邊長,輸出其
面積

任意兩邊的和必須大於第三邊
39
列舉型別 enum
[accessmodifier] enum name [: integertype]
{
membername1 [= expression1],
membername2 [= expression2],
...
membernameN [= expressionN]
}
40
enum MyWeekDays : byte
{
Sunday,
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday
}
型別資訊運算子
(as、is、typeof、sizeof)


as 運算子的語法為「運算式/物件 as 型別
」常用於物件型別降轉
is 運算子的語法為「運算式/物件 is 型別」


typeof 運算子的語法為「typeof(型別)」


"abc" is string 會傳回 true,"abc" is int 傳回
false。
typeof(string) 會傳回 System.String。
sizeof 運算子的語法為「sizeof(實值型別)」

sizeof(byte) 會傳回 1。
41
網頁表單 Web Form

屬性








BackColor 背景顏色
Font 字型
ForeColor 前景顏色
Text 標題或內容文字
Height/Width 控制項的高度/寬度
Visible 控制項是否顯現
Enabled 控制項是否啟用
ReadOnly 控制項是否『不可編輯』?
42
屬性
43
網頁表單 Web Form

事件
事件






Init 頁面初始化時
Load 載入頁面時
DataBinding 繫結資料時
PreRender 頁面呈現前
Click 被滑鼠左鍵按一下時
TextChanged 內文改變時
44
Label(標籤)


顯示僅供讀取的文字
屬性




(ID) 物件名稱
Text 顯示的文字
Font 字型
BorderStyle 外框形狀
45
TextBox 文字方塊


請使用者輸入資料
屬性




Text 控制項中的文字
PasswordChar 輸入密碼時顯示的文字(輸入之
文字不顯示實際內容)
ReadOnly 唯讀
TextMode 單行、多行、密碼輸入

多行則由 Rows 屬性設定行數
46
Button 按鈕


傳送表單
屬性與事件


Text 顯示文字
Click 按一下
47
變數的命名
名稱
Array
縮寫
arr
Button
btn
ChechBox
chk
Label
lbl
ListBox
lst
Object
obj
RadioButton
rdb
TextBox
txt
XML
xml
48
範例:登入畫面

設計一登入畫面




以一個 TextBox 作為帳號輸入
以一個 TextBox 作為密碼輸入
表單載入後輸入焦點自動切到帳號輸入
驗證規則:若輸入之帳號內容與密碼內容相同,
則顯示"登入成功!",否則顯示"帳號或密碼錯
誤!"
49
決策敘述



if {}
if {} else {}
switch case
50
if
運算式
tru e
敘述區塊
fa ls e
51
if {} else {}
運算式
fa ls e
敘述區塊2
tru e
敘述區塊1
52
三元運算子 ? :
int x, y, z;
int x, y, z;
...
...
if (x > y) {
z = (x > y) ? x : y;
z = x;
} else {
z = y;
}
53
範例:百分計分轉等第計分

百分計分法轉等第計分法


輸入一介於 0 與 100 之間的分數
輸出其等第計分
54
In p u t a
a > 100 ?
否
a > = 80 ?
否
a > = 70 ?
否
a > = 60 ?
否
是
a > = 50 ?
是
否
是
a< 0 ?
是
否
是
是
不合理
的輸入
甲 等 (A )
乙 等 (B )
丙 等 (C )
55
丁 等 (D )
不合理
的輸入
戊 等 (E )
switch … case

適合判斷選項
switch (運算式) {
case 常數1:
敘述方塊1;
break;
case 常數2:
敘述方塊2;
break;
case ...
default:
敘述方塊n;
break;
}
56
Console.WriteLine("百分計分轉等第計分");
Console.Write("請輸入分數:");
double n = Double.Parse(Console.ReadLine());
if ((n > 100) | (n < 0)) {
Console.WriteLine("輸入的分數不合理");
}
string grade = null;
switch ((int)n / 10) {
case 10:
case 9:
case 8:
grade = "甲等(A)";
break;
case 7:
grade = "乙等(B)";
break;
case 6:
grade = "丙等(C)";
break;
case 5:
grade = "丁等(D)";
break;
default:
grade = "戊等(E)";
break;
}
57
Console.WriteLine(n.ToString()+" 分相當於"+grade);
範例:星座對照表


輸入出生日期
輸出星座名稱
58
十二星座日期對照表
星座
日期
英文名稱
山羊座(魔羯座)
12.21~01.20
Capricorn
水瓶座
01.21~02.19
Aquarius
雙魚座
02.20~03.20
Pisces
白羊座
03.21~04.19
Aries
金牛座
04.20~05.20
Taurus
雙子座
05.21~06.21
Gemini
巨蟹座
06.22~07.22
Cancer
獅子座
07.23~08.22
Leo
處女座
08.23~09.22
Virgo
天秤座
09.23~10.23
Libra
天蠍座
10.24~11.21
Scorpio
人馬座(射手座)
11.22~12.20
Sagittarius
59
迴圈敘述

重複執行特定工作


while / do
for loop
60
while/do 迴圈
while (運算式)
{
敘述區塊;
}
do
{
敘述區塊;
} while (運算式);
61
for 迴圈
for([ 控制變數=起始值];[迴圈運算式];[改變控制變數])
{
[ 敘述區塊 1; ]
[ break; ]
[ continue; ]
[ 敘述區塊 2; ]
}
62
break and continue


break 使迴圈立即中斷
continue 使迴圈立即回頭
63
陣列的宣告

語法:





資料型態 變數名稱
資料型態[] 變數名稱 = new 資料型態[陣列大小];
資料型態[,] 變數名稱 = new 資料型態[列大小, 行大小];
資料型態[][] 變數名稱 = new 資料型態[陣列大小] [陣列大小];
例子:



int[] arrDate = new int[7];
string[,] arrParams = new string[6,8];
int[][] arrJagged = new int[3][];




arrJagged[0] = new int[7];
arrJagged[1] = new int[3];
arrJagged[2] = new int[6];
string[] arrColors = {"red", "blue", "white"} ;
64
一維陣列
int []
int []
A[0] =
A[1] =
A[2] =
A;
A = new int[3];
10;
20;
30;
亦可寫成
int [] A = {10, 20, 30};
亦可寫成
int [] A = new int[3] {10, 20, 30};
65
foreach 迴圈


用於陣列或其他集合物件的處理
語法
foreach (type Item in Collection) {
…= item …
}
66
練習:N筆成績
求平均、最高分、最低分
<%@ Page Language="C#" %>
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
int[] Scores = {85, 60, 54, 91, 100, 77};
int MaxScore = 0, MinScore = 100;
foreach (int Item in Scores)
if (Item > MaxScore)
MaxScore = Item;
foreach (int Item in Scores)
{
if (Item < MinScore)
MinScore = Item;
}
Response.Write("最高分為" + MaxScore + "<br>");
Response.Write("最低分為" + MinScore);
}
</script>
67
程式範例:數字轉國字



將0123456789
轉換成 零壹貳參肆伍陸柒捌玖
讀取阿拉伯數字,轉換成國字輸出
68
多維陣列
69
try 陳述式 (1/2)

語法一
try {
程式碼
}
catch (類別型別識別項){
程式碼
}
finally {
程式碼
}

語法二
try {
程式碼
}
catch (類別型別識別項){
程式碼
}

語法三
try {
程式碼
}
finally {
程式碼
}
70
try 陳述式 (2/2)
try{
lblQuotient.Text = (Convert.ToDecimal(txtDividend.Text) /
Convert.ToDecimal(txtDivisor.Text)).ToString(".00");
}
catch (DivideByZeroException ex){
lblQuotient.Text = ex.Message;
}
catch (OverflowException ex){
lblQuotient.Text = ex.Message;
}
(a)
(b)
(c)
71
副程式及函數(1/3)

副程式的語法:
void 副程式名稱(參數1的資料型態 參數1, 參數2的資料型態 參數2, …){
程式碼
}

如果副程式沒有參數,則語法中第一行要改成
void 副程式名稱()
72
副程式及函數(2/3)
<script language="C#" runat="server">
void ComputeAverage(object obj, EventArgs e){
decimal Sum, Average;
Sum = Convert.ToDecimal(tbChinese.Text)
+ Convert.ToDecimal(tbEnglish.Text)
+ Convert.ToDecimal(tbMathematics.Text);
Average = Sum / 3;
lblMessage.Text = "平均成績為" + Average;
}
</script>
<html> <body>
<form runat="server">
請輸入下列成績<br />
國文:<asp:TextBox id="txtChinese" runat="server" /><p>
英文:<asp:TextBox id="txtEnglish" runat="server" /><p>
數學:<asp:TextBox id="txtMathematics" runat="server" /><p>
<asp:Button id="Button1" OnClick="ComputeAverage" runat="server" Text="傳送"
/><p>
<asp:Label id="lblMessage" runat="server" />
</form>
</body></html>
73
副程式及函數(3/3)

函數的語法:
資料型態 函數名稱(參數1的資料型態 參數1, 參數2的資料型態 參數2,…){
程式碼
}
<script language="C#" runat="server">
bool IsBetween0And100(decimal num){
使用者輸入資料介於0~100則傳回TRUE
if (num >= 0 && num <= 100)
return true;
不符合則傳回TRUE
else
return false;
}
74
變數的宣告與有效範圍
if (...) {
int i = 17; ...
}
System.out.println("The value of i = " + i); // error
原則:區塊外的可以進到區塊內,區塊內的不能出到區塊外。
75
練習:攝氏轉華氏
<%@ Page Language="C#" %>
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
double DegreeC = 25;
double DegreeF = ConvertToF(DegreeC);
Response.Write("攝氏" + DegreeC + "度等於華氏" + DegreeF + "度");
}
double ConvertToF(double C)
{
return C * 1.8 + 32;
}
</script>
76
參數 - 傳值呼叫
01:<%@ Page Language="C#" %>
02:<script runat="server">
03: void Page_Load(object sender, EventArgs e)
04: {
05: int Num = 1;
06: Increase(Num);
07: Response.Write("方法執行完畢後原參數值為" + Num + "<br>");
08: }
09:
10: void Increase(int Result)
11: {
12: Response.Write("方法剛被呼叫時的參數值為" + Result + "<br>");
13: Result += 1;
14: Response.Write("方法執行完畢後的參數值為" + Result + "<br>");
15: }
16:</script>
77
參數 - 傳值呼叫
78
參數 - 傳址呼叫
將 第06、10行改寫成傳址呼叫:
06:Increase(ref Num);
…
10:void Increase(ref int Result)
Internet Programming Ch.2
79
傳遞陣列給方法
<%@ Page Language="C#" %>
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
StudentScores("小丸子", "90", "80", "缺席", "70"); //呼叫方法
}
void StudentScores(string Name, params string[] Scores)
{
Response.Write(Name + "的分數如下:" + "<br>");
for (int i = 0; i <= Scores.GetUpperBound(0); i++)
Response.Write(Scores[i] + "<br>");
}
Internet Programming Ch.2
80
從方法傳回陣列
<%@ Page Language="C#" %>
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
int[] ReturnArray;
ReturnArray = ExpValue(10);
foreach (int Item in ReturnArray)
Response.Write(Item + "<br>");
}
int[] ExpValue(int A)
{
int[] X = new int[3];
X[0] = A;
X[1] = A * A;
X[2] = A * A * A;
return X;
}
</script>
81
區域變數 vs. 全域變數
01:<%@ Page Language="C#" %>
02:<script runat="server">
03: void Page_Load(object sender, EventArgs e)
04: {
05: Response.Write(i);
06: }
07:
08: void MySub()
09: {
10: int i = 1; //區域變數
11: Response.Write(i);
12: }
13:</script>
01:<%@ Page Language="C#" %>
02:<script runat="server">
03: int i = 1; //全域變數
04: void Page_Load(object sender, EventArgs e)
05: {
06: Response.Write(i);
07: }
08:
09: void MySub()
10: {
11: Response.Write(i);
12: }
13:</script>
82
靜態變數
\Ch05\Prac5-11.aspx
<%@ Page Language="C#" %>
<script runat="server">
static int Result = 0;
void Page_Load(object sender, EventArgs e)
{
Add();
Add();
}
void Add()
{
Result = Result + 1;
Response.Write(Result + "<br>");
}
</script>
83
遞迴方法
<%@ Page Language="C#" %>
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
int Result = 1;
for (int i = 1; i <= 5; i++)
Result *= i;
Response.Write("5! = " + Result);
}
</script>
<%@ Page Language="C#" %>
<script runat="server">
void Page_Load(object sender, EventArgs e)
{
Response.Write("5! = " + F(5));
}
int F(int N)
{
/*當N=0, F(N) = N! = 0! = 1 */
if (N == 0)
return 1;
/* N != 0, F(N)=N!= N*(N - 1)! = N*(N - 1)
*/
else
return N * F(N – 1);
}
</script>
84
內建函數


Math 物件的數學函數
Strings 物件的字串函數




DateTime 日期物件






Substring 函數
ToCharArray 函數
Split 函數
Add 函數
Substract 函數
ToString 函數
自訂日期格式
數值資料型態的 ToString 函數
資料型態轉換函數
85
Math 數學函數(1/3)
函數格式
說明及結果
E
自然對數,Math.E=2.71828182845905。
PI
π,Math.PI=3.14159265358979。
Abs(x)
算x的絕對值,例Math.Abs(-5)的結果為5。
Acos
反餘弦函數,例Math.Acos(0.5)=1.0471975511966≒π/3。
Asin(x)
反正弦函數,例Math.Asin(0.5)=0.523598775598299≒π/6。
Atan(x)
算x弧度的反正切函數值,例Math.Atan(1) 的結果為0.785弧度即約π/4。
BigMul(a, b)
32位元的乘法,結果是64位元的數字。
Ceiling(x)
大於等於x的最小整數,x的資料型態可以是Decimal或Double。
Cos(x)
算x弧度的餘弦函數值,例Math.Cos(1.047),因為1.047≒π/3,故結果約為0.5。
Cosh(x)
算x弧度的hyperbolic cosine。
DivRem(a, b, r)
32位元的除法,a是被除數,b是除數,r是餘數,Math.DivRem(a, b, r)本身是商。a和b是輸
入,r和DivRem(a, b, r)是結果。
Exp(x)
自然對數e的x次方,例Math.Exp(2),即e2約為7.389。
Floor(x)
小於等於x的最大整數,x的資料型態可以是Decimal或Double。
86
Math 數學函數(2/3)
函數格式
說明及結果
IEEERemainder
ANSI/IEEE Std 754-1985所定義的兩數相除的餘數。
Log(x)
以e為底的自然對數,例Math.Log(Math.Exp(2)) 的結果為2。
Log10(x)
以10為底的對數,例Math.Log10(100) 的結果為2。
Max(a, b)
多載函數,Math.Max(a, b)傳回a和b兩數中的較大者。
Min(a, b)
多載函數,Math.Min(a, b)傳回a和b兩數中的較小者。
Pow(a, b)
傳回a的b次方,a和b的資料型態為Double,例Math.Pow(5, 2)=25。
Round(x)
將x根據第一位小數四捨五入成整數。
Sign(x)
取得x的正負號,-1、0、1分別表示x為負、0、正。
Sin(x)
x弧度的正弦函數值,例Math.Sin(3.14159/2) 的結果約為0.99999。
Sinh(x)
x弧度的hyperbolic sine值。
Sqrt(x)
x的平方根,例Math.Sqrt(256) 的結果為16。
Tan(x)
x弧度的正切函數值。
Tanh(x)
x弧度的hyperbolic tangent值。
Trancate(x)
取x的整數部份。
87
Math 數學函數(3/3)
<script language="C#" runat="server">
void Page_Load(object obj, EventArgs e){
Response.Write("64的平方根是:" + Math.Sqrt(64));
}
</script>
88
String 字串處理函數(1/2)
名稱
說明
Compare(字串1, 字串2)
兩個字串的lexical比較,例:String.Compare("abcd", "dcba"),回傳的值為:1表示字串1較大,0為二
字串相等,-1表示字串1較小。此例的回傳值為-1。
CompareTo(字串)
例:string s="server",s.CompareTo("abcd"),回傳值同Compare,此例的回傳值為1。
Concat
多個字串的串接,例:String.Concat("abc", "de", "fg")的結果為"abcdefg"
EndsWith
判斷字串的結尾是否和給定的子字串相同,例:string s="server",則s.EndsWith("er")為true。
IndexOf(子字串,start, end)
此函數判斷字串中是否有給定的子字串,為overload。例s.IndexOf("ve", 2)的意思為從s的第2個字
元起判斷"ve"出現的位置。若s="server",s.IndexOf("ve", 2)的值為3。
Insert(index, 子字串)
將子字串插進index所指的位置,例如:"abc".Insert(2, "XYZ") 的傳回值是 "abXYZc"。
LastIndexOf(子字串,start, end)
此函數判斷給定的子字串在字串中最後出現的位置,例如:"server".LastIndexOf("er")的值為4。
Length
傳回字串長度,例如:string s="server",則s.Length=6。
PadLeft(總長度, char)
在字串左邊加入char,使得字串的長度成為總長度。例如:"abc".PadRight(8, '.') 的傳回值是
"…..abc"。
PadRight(總長度, char)
在字串左邊加入char,使得字串的長度成為總長度。例如:"abc".PadRight(8, '.') 的傳回值是
"abc….."。
89
String 字串處理函數(2/2)
名稱
說明
Remove(index, length)
從index開始,刪掉指定長度的子字串。例如:"abcde".Remove(2, 2) 的傳回值是 "abe"。
Replace(char1, char2)
將字串中的char1換成char2,char1和char2可以是字元或字串。例如:"server".Replace('e', 'a') 的傳回
值是 "sarvar."。
Split
見表後的說明。
StartsWith
判斷字串的開始是否和給定的子字串相同,例:string s="server",則s.StartsWith("er")為false。
Substring
見表後的說明。
ToCharArray
見表後的說明。
ToLower
將字串改為小寫。例如:"serVEr".ToLower() 的傳回值是 "server"。
ToString
將值轉換成字串。
ToUpper
將字串改為大寫。例如:"serVEr".ToUpper() 的傳回值是 "SERVER"。
Trim
去除字串左右兩方的空白,例如:" server ".Trim() 的傳回值是 "server"。
TrimEnd
去除字串右方的空白,例如:" server ".TrimEnd() 的傳回值是 " server"。
TrimStart
去除字串左方的空白,例如:" server ".TrimStart() 的傳回值是 "server "。
90
Substring 函數

Substring 函數的語法:Substring( 起始位置 , 長度) //idx = 0, 1, …

範例:WebPage0212.aspx
<script language="C#" runat="server">
void Page_Load(object obj, EventArgs e){
string str = "012wxyz789";
Response.Write(str.Substring(3) + "<br>");
Response.Write(str.Substring(3, 4));
}
</script>
wxyz789
wxyz
91
ToCharArray 函數

ToCharArray函數的語法: ToCharArray( 起始位置, 長度)

範例: WebPage0213.aspx
<script language="C#" runat="server">
void Page_Load(object obj, EventArgs e){
char[] arr = "012wxyz789".ToCharArray(3, 4);
Response.Write("Each letter in arr is:<br>");
foreach (char c in arr) Response.Write(c + "<br>");
}
</script>
arr[0]
arr[1]
arr[2]
arr[3]
w
x
y
z
92
Split 函數

Split函數的語法: Split( 切割字元陣列, 切割份數 )

範例: WebPage0214.aspx
<script language="C#" runat="server">
void Page_Load(object obj, EventArgs e){
string delimStr = " ,.:";
char [] delimiter = delimStr.ToCharArray();
string words = "one two,three:four.";
string [] spilt = null;
Response.Write("The delimiters are -" + delimStr + "-<br>");
for (int x = 1; x <= 5; x++) {
split = words.Split(delimiter, x);
Response.Write("<br>count = " + x + " ..............<br>");
foreach (string s in split) Response.Write("-" + s + "-<br>");
}
}
</script>
93
DateTime 日期函數(1/2)
函數名稱
說明
Date
取得該日之日期,並將時間設為上午 12:00:00。
DayOfWeek
該日在該周之名稱,例如當天是2004/8/11 下午 02:08:44,則DateTime.Now.DayOfWeek就是Wednesday。
DayOfYear
該日是該年之第幾天,例如當天是2004/8/11 下午 02:08:44,則DateTime.Now.DayOfYear就是224。
MaxValue
DateTime.MaxValue為最大的日期,即9999/12/31 下午 11:59:59。
MinValue
DateTime.MinValue為最小的日期,即0001/1/1 上午 12:00:00。
Now
取得當天的完整日期及時間,例如撰寫這段說明時的DateTime.Now是2004/8/11 下午 02:08:44。
Year,Month,Day,Hour,Minute,
Second
Year是取得該日之年份,Month是取得該日之月份,其餘類推。例如當天是2004/8/11 下午
02:08:44,則DateTime.Now.Day就是11。
TimeOfDay
取得當天的完整時間(不含日期),包含millisecond。
Add
見表後之說明。
AddDays,AddHours,AddMinutes,
AddMonths,AddSeconds,AddYears
AddYears、AddMonths、AddDays、AddHours、AddMinutes和AddSeconds分別表示要加的年、月、日、時、
分和秒數,例如DateTime.Now.AddDays(36)表示目前的日期加上36天,其餘類推。
94
DateTime 日期函數(2/2)
函數名稱
說明
Compare(日期1, 日期2)
DateTime.Compare(日期1, 日期2),日期1和日期2相比。日期1大則傳回1,相等則傳回0,否則傳
回-1。
CompareTo
一個日期和另一個日期比較,aDay.CompareTo(DateTime.Now),表示aDay要和目前的時間比較,其
中aDay是一個日期。此函數的回傳值同Compare。
DaysInMonth(年, 月)
傳回該月份中的天數。
Equals(日期1, 日期2)
比較兩個日期是否相等,相等則傳回true,否則傳回false。
IsLeapYear(年)
該年是否為閏年,是則傳回true,否則傳回false。
Subtract
見表後之說明。
ToLongDateString()
將日期轉換成字串,英文會含有該日期值的星期名稱、月份名稱、月份數字天數和年份,
例如:Thursday, August 12, 2004。中文則只有年月日,例如:2004年8月12日,見4.1.1節之說明。
ToLongTimeString()
將時間轉換成字串,例如英文的環境:12:23:17 PM。中文的環境:下午 12:24:24。
ToShortDateString()
將年月日期轉換成字串,英文:8/12/2004,中文:2004/8/12。
ToShortTimeString()
將時間轉換成字串,英文:12:30 PM,中文:下午 12:30。
ToString()
見表2.8之說明。
95
DateTime: Add函數 (1/3)

範例: WebPage0215.aspx
<script language="C#" runat="server">
void Page_Load(object obj, EventArgs e){
DateTime today =DateTime.Now;
TimeSpan duration = new TimeSpan(36, 0, 0, 0);
DateTime answer = today.Add(duration);
Response.Write("當天的時間是" + today + "<br>");
Response.Write("要加上的時間是" + duration + "<br>");
Response.Write("結果的時間是" + answer);
}
</script>
96
DateTime: Add函數 (2/3)

TimeSpan 物件中常用的 properties和methods (1/2)
名稱
說明
Days
取得TimeSpan變數的整數天數。例如:myTimeSpan.Days,其中myTimeSpan是一個TimeSpan變數。
Hours
取得TimeSpan變數的整數時數。
Milliseconds
取得TimeSpan變數的整數毫秒數。
Minutes
取得TimeSpan變數的整數分鐘數。
Seconds
取得TimeSpan變數的整數秒數。
Ticks
取得TimeSpan變數的整數Tick(即最小刻度)數。
TotalDays、TotalHours、
TotalMilliseconds、TotalMinutes、
TotalSeconds
取得TimeSpan變數的對應的小數天、時、毫秒、分、秒數。例如:myTimeSpan.TotalDays除了原來
的天數之外,還會將其餘的時間(如:時分秒)轉換成小數點的天數。
Add
TimeSpan變數的相加,例如:myTimeSpan.Add(addTimeSpan)的意思是,將addTimeSpan的變數值加進
myTimeSpan之中,其中myTimeSpan也是一個TimeSpan變數。
Compare
比較兩個TimeSpan值,前者較小則為-1,兩者相等則為0,前者較大則為1,例如:
TimeSpan.Compare(myTimeSpan, addTimeSpan)。
97
DateTime: Add函數 (3/3)

TimeSpan 物件中常用的 properties和methods (2/2)
名稱
說明
CompareTo
將某一TimeSpan變數和另一TimeSpan變數比較,也是傳回-1、0或1,例如:
addTimeSpan.CompareTo(myTimeSpan)。
Duration
傳回TimeSpan變數的刻度值,例如:myTimeSpan.Duration。
Equals
比較兩個TimeSpan值是否相等,回傳值為true或false,例如:TimeSpan.Equals(myTimeSpan, addTimeSpan)。
FromDays、FromHours、
FromMilliseconds、FromMinutes、
FromSeconds、FromTicks
傳回指定參數的TimeSpan值,例如:TimeSpan.FromHours(36)的結果是1.12:00:00。
Substract
TimeSpan變數的相減,例如:myTimeSpan.Subtract(addTimeSpan)的意思是,將addTimeSpan的變數值從
myTimeSpan之中減掉,其中myTimeSpan也是一個TimeSpan變數。
ToString
將TimeSpan變數的值轉換成字串。
98
DateTime: Substract函數

範例: WebPage0216.aspx
<script language="C#" runat="server">
void Page_Load(object obj, EventArgs e){
DateTime date1 = new DateTime(2004, 8, 8, 22, 15, 0);
DateTime date2 = new DateTime(2004, 11, 11, 13, 2, 0);
DateTime date3 = new DateTime(2004, 10, 10, 8, 42, 0);
// diff1 gets 94 days, 14 hours, and 47 minutes.
TimeSpan diff1 = date2.Subtract(date1);
Response.Write(diff1 + "<br>");
// date4 gets 7/7/2004 5:55:00 PM.
DateTime date4 = date3.Subtract(diff1);
Response.Write(date4 + "<br>");
// diff2 gets 32 days 4 hours and 20 minutes.
TimeSpan diff2 = date2 - date3;
Response.Write(diff2 + "<br>");
// date5 gets 7/7/2004 5:55:00 PM.
圖2.20 瀏覽WebPage0214.aspx
DateTime date5 = date1 - diff2;
Response.Write(date5);
}
</script>
99
DateTime: ToString函數 (1/2)

日期格式描述符號 (1/2)
格式符號
說明
d
簡短日期之格式,例:DateTime.Now.ToString("d")的結果是2004/9/1。 。
D
完整日期之格式,例:DateTime.Now.ToString("D")的結果是2004年9月1日。
f
完整日期簡短時間之格式,例:DateTime.Now.ToString("f")的結果是2004年9月1日 下午 04:01。
F
完整日期時間之格式,例:DateTime.Now.ToString("F")的結果是2004年9月1日 下午 04:02:28。
g
簡短日期簡短時間之格式,例:DateTime.Now.ToString("g")的結果是2004/9/1 下午 04:03。
G
簡短日期完整時間之格式,例:DateTime.Now.ToString("G")的結果是2004/9/1 下午 04:03:42。
M或m
月日之格式,例:DateTime.Now.ToString("m")的結果是9月1日。
R或r
RFC1123之格式,例:DateTime.Now.ToString("r")的結果是Wed, 01 Sep 2004 16:04:44 GMT。
s
ISO 8601區域時間之格式,例:DateTime.Now.ToString("s")的結果是2004-09-01T16:05:12。
t
簡短時間之格式,例:DateTime.Now.ToString("t")的結果是下午 04:05。
100
DateTime: ToString函數 (2/2)

日期格式描述符號 (2/2)
格式符號
說明
T
完整時間之格式,例:DateTime.Now.ToString("T")的結果是下午 04:06:12。
u
ISO 8601全球時間之格式,例:DateTime.Now.ToString("u")的結果是2004-09-01 16:06:37Z。
U
全球時間之格式,例:DateTime.Now.ToString("U")的結果是2004年9月1日 上午 08:07:05。
Y或y
年月之格式,例:DateTime.Now.ToString("y")的結果是2004年9月。
101
自訂日期格式
參數名稱
例子
dddd, MMMM dd yyyy
例:DateTime.Now.ToString("dddd, MMMM dd yyyy")的結果是星期三, 九月 01 2004。
ddd, MMM d "'"yy
例:DateTime.Now.ToString("ddd, MMM d "'"yy")的結果是星期三, 九月 1 '04。
dddd, MMMM dd
例:DateTime.Now.ToString("dddd, MMMM dd")的結果是星期三, 九月 01。
M/yy
例:DateTime.Now.ToString("M/yy")的結果是9/04。
dd-MM-yy
例:DateTime.Now.ToString("dd-MM-yy")的結果是01-09-04。
102
自訂日期格式

範例: WebPage0217.aspx
<%@ Page Language="C#" culture="en-us" %>
<script runat="server">
void Page_Load(object obj, EventArgs e){
Response.Write(DateTime.Now.ToString("d") + "<br />");
Response.Write(DateTime.Now.ToString("dd") + "<br />");
Response.Write(DateTime.Now.ToString("ddd") + "<br />");
Response.Write(DateTime.Now.ToString("dddd") + "<br />");
Response.Write("<br />");
Response.Write(DateTime.Now.ToString("M") + "<br />");
Response.Write(DateTime.Now.ToString("MM") + "<br />");
Response.Write(DateTime.Now.ToString("MMM") + "<br />");
Response.Write(DateTime.Now.ToString("MMMM") + "<br />");
Response.Write("<br />");
Response.Write(DateTime.Now.ToString("y") + "<br />");
Response.Write(DateTime.Now.ToString("yy") + "<br />");
Response.Write(DateTime.Now.ToString("yyy") + "<br />");
Response.Write(DateTime.Now.ToString("yyyy") + "<br />");
}
</script>
103
數值資料型態 ToString Method

自訂數字格式描述:變數.ToString(參數) 或 數值.ToString(參數)
格式符號
說明
0
在數字之前或小數點之後補0,例:75.48.ToString("000.000")的結果為075.480。
#
表示數字,通常搭配其他符號使用。7548.ToString("#,#.00")的結果為7,548.00。
.
小數點,通常搭配其他符號使用。
,
一個逗點等於除1000,兩個逗點等於除1000000,例:75480000.ToString("0,,")的結果為75。。
%
印出百分比符號,例:0.48.ToString("#%")的結果為48%。。
E+0,E-0,e+0或e-0
以科學符號表示,例:75.48.ToString("#.###e+0")的結果為7.548e+1。
格式符號
說明
C或c
貨幣之格式,例:25000.ToString("c")之結果為NT$25,000.00。
D或d
十進位之格式,例:25000.ToString("d")之結果為25000。
E或e
科學符號之格式,例:25000.ToString("e")之結果為2.500000e+004。
F或f
Fixed-point之格式,例:25000.ToString("f")之結果為25000.00。
G或g
一般之格式,例:25000.ToString("g")之結果為25000。
N或n
數字有逗點之格式,例:25000.ToString("n")之結果為25,000.00。
P或p
百分比之格式,例:25000.ToString("p")之結果為2,500,000.00%。
X或x
十六進位之格式,例:25000.ToString("x")之結果為61a8。
104
資料型態轉換函數Convert Class (1/2)
名稱
說明
DBNull
表示資料庫資料行缺少資料的一個常數;也就是,資料庫為Null。
ChangeType
傳回指定型別且其值等於指定物件的Object,見表後之說明。 ChangeType (x, typeof(v))
FromBase64CharArray
將由base 64格式數字所組成的Unicode字元的指定陣列子集,轉換為相等的8位元不帶正負號
的整數(Unsigned Integer)的陣列。參數指定輸入陣列中的元素位移(Offset)和數目。
FromBase64String
將所指定的由base 64數字所組成之值的String表示轉換為相等的8位元不帶正負號的整數陣
列。
GetTypeCode
傳回指定物件的TypeCode。
IsDBNull
傳回指定物件是否屬於型別DBNull。
ToBase64CharArray
將8位元不帶正負號的整數陣列子集的值,轉換為由base 64格式數字所組成的Unicode字元陣
列相等子集。參數指定子集為輸入和輸出陣列的位移,以及輸入陣列中的元素數目。
ToBase64String
將8位元不帶正負號的整數陣列的值,轉換為由base 64數字所組成的相等String表示。
ToBoolean
將指定的值轉換為相等的布林值。
ToByte
將指定的值轉換為8位元不帶正負號的整數。
ToChar
將指定的值轉換為Unicode字元,例如:Convert.ToChar(65)的結果為A。
ToDateTime
將指定的值轉換為DateTime。
ToDecimal
將指定的值轉換為Decimal數字。
ToDouble
將指定的值轉換為雙精度浮點數。
105
資料型態轉換函數Convert Class (2/2)
名稱
說明
ToInt16
將指定的值轉換為16位元帶正負號的整數,例如:Convert.ToInt16('A')的結果為65。
ToInt32
將指定的值轉換為32位元帶正負號的整數。
ToInt64
將指定的值轉換為16位元帶正負號的整數。
ToSByte
將指定的值轉換為 8 位元帶正負號的整數。
ToSingle
將指定的值轉換為單精度浮點數。
ToString
將指定的值轉換為字串。
ToUInt16
將指定的值轉換為16位元不帶正負號的整數。
ToUInt32
將指定的值轉換為32位元不帶正負號的整數。
ToUInt64
將指定的值轉換為64位元不帶正負號的整數。
Internet Programming Ch.2
106
ChangeType資料型態轉換函數

範例:WebPage0219.aspx
<script language="C#" runat="server">
void Page_Load(object obj, EventArgs e)
//將d的值轉換成整數
{
Double d = -2.345; int i = (int)Convert.ChangeType(d, typeof(int));
Response.Write("<p>The double value " + d +
" when converted to an int becomes " + i);
string s = "09/08/07";
DateTime dt = (DateTime)Convert.ChangeType(s, typeof(DateTime));
Response.Write("<p>The string value " + s +
" when converted to a Date becomes " + dt);
}
</script>
107
練習:加總、平均、最大、最小

以TextBox取得使用者輸入的一串數字


數字之間以空格或逗點分隔
以 Split 將 TextBox.Text 字串中的數字取出
,計算其總和、平均、最大值、最小值

以 Convert.ToDouble 轉換型別
108