Download presentation
Presentation is loading. Please wait.
1
第二章 C# 基础知识
2
目标 在C#中定义变量和常量 使用C# 中的基本数据类型 理解装箱和拆箱的概念 使用C#中的运算符,选择结构和循环结构
定义和使用数组,了解结构和枚举 了解C#中的预处理指令 理解C#中常用的字符串处理方法
3
C# 数据类型 C# 数据类型 大小 默认值 示例 int 有符号的 32 位整数 int rating = 20; float
int rating = 20; float 32 位浮点数,精确到小数点后 7 位 0.0F float temperature = 40.6F; byte 无符号的 8 位整数 byte gpa = 2; short 有符号的 16 位整数 short salary = 3400; long 有符号的 64 位整数 0L long population = ; bool 布尔值,true 或 false False bool IsManager = true; string Unicode 字符串 - string color = “Orange” Char 单个 Unicode 字符 ‘\0’ char gender = ‘M’;
4
变量 2-1 变量用于存储特定数据类型的值 int Public string Private Protected float …… 语法:
访问修饰符 数据类型 变量名 int Public string Private Protected float ……
5
变量 2-2 变量中存储的值取决于该变量的类型 static void Main(string[] args) {
// 声明布尔型、字符串型、整型、短整型和浮点型变量 bool t = false; short n1 = 30; int n2 = 1200; string str = "jeny"; float n3 = 23.1f; // 显示变量值 Console.WriteLine ("布尔值 = " + t); Console.WriteLine ("短整型值 = " + n1); Console.WriteLine ("整型值 = " + n2); Console.WriteLine ("字符串值 = " + str); Console.WriteLine ("浮点值 = " + n3); } 变量中存储的值取决于该变量的类型
6
常量 2-1 常量用于在整个程序中将数据保持同一个值 语法: const 数据类型 常量名 = 常量值;
7
常量 2-2 const 关键字用于声明常量 声明常量 在表达式中使用常量 static void Main(string[] args)
{ // PI常量PI const float _pi = F; // 由地球引力引起的加速度常量,单位为 cm/s*s const float _gravity = 980; // 钟摆的长度 int length = 60; // 钟摆的周期 double period = 0; // 钟摆周期的计算公式 period = 2 * _pi * Math.Sqrt(length / _gravity); Console.WriteLine ("钟摆的周期为 {0} 秒", period); } 声明常量 在表达式中使用常量
8
C# 的基本数据类型 3-1 C#中的数据类型分为两个基本类别 值类型 表示实际数据 只是将值存放在内存中 值类型都存储在堆栈中
int、char、结构 引用类型 表示指向数据的指针或引用 包含内存堆中对象的地址 为 null,则表示未引用任何对象 类、接口、数组、字符串
9
C# 的基本数据类型 3-2 static void Main(string[] args) { // 声明一个值类型的整型数据类型
int value = 130; Console.WriteLine("该变量的初始值为 {0}", value); Test(value); // 由于该数据类型属于值类型,所以将恢复其初始值 Console.WriteLine("该变量的值此时为 {0}", value); } static void Test(int byVal) int t = 20; byVal = t* 30; 将value的初始值传递给Test()方法 不反映已经改变的val值,而保留原始值 被传递的value在 Test() 方法内被改变
10
将 DataTypeTest 的引用传递给 Test()
C# 的基本数据类型 3-3 class DataType { public int Value; } static void Main(string[] args) { DataType objTest = new DataType (); objTest.Value = 130; // 传递属于引用类型的对象 Test(objTest); // 由于该数据类型属于引用类型,所以会考虑新处理的值 Console.WriteLine("变量的值为 {0}", objTest.Value); } static void Test(DataType data) int t = 20; data.Val = temp * 30; 将 DataTypeTest 的引用传递给 Test() 反映已经改变的value值 被传递的value在Test()中改变
11
装箱和拆箱 2-1 装箱是将值类型转换为引用类型 拆箱是将引用类型转换为值类型
利用装箱和拆箱功能,可通过允许值类型的任何值与 Object 类型的值相互转换,将值类型与引用类型链接起来
12
装箱和拆箱 2-2 装箱 拆箱 int value = 130; object o = value;
值类型 int value = 130; object o = value; Console.WriteLine (“对象的值 = {0}", o); 引用类型 拆箱 值类型 int value = 130; object o = value; int number = (int) o; Console.WriteLine ("num: {0}", number); 引用类型 值类型 注:被装过箱的对象才能被拆箱
13
Result = number 10 * 运算符和表达式 9-1 运算符 运算符和表达式 表达式 操作数 变量 变量 常量
操作数和运算符的组合 操作数
14
运算符和表达式 9-2 算 术 运 符 类别 运算符 说明 表达式 +
执行加法运算(如果两个操作数是字符串,则该运算符用作字符串连接运算符,将一个字符串添加到另一个字符串的末尾) 操作数1 + 操作数2 - 执行减法运算 操作数1 - 操作数2 * 执行乘法运算 操作数1 * 操作数2 / 执行除法运算 操作数1 / 操作数2 % 获得进行除法运算后的余数 操作数1 % 操作数2 ++ 将操作数加 1 操作数++或++操作数 -- 将操作数减 1 操作数-- 或--操作数 ~ 将一个数按位取反 ~操作数
15
运算符和表达式 9-3 类别 运算符 说明 表达式 三元运算符(条件运算符) ?:
检查给出的第一个表达式 expression 是否为真。如果为真,则计算 operand1,否则计算 operand2。这是唯一带有三个操作数的运算符 表达式? 操作数1: 操作数2
16
运算符和表达式 9-4 类别 运算符 说明 表达式 比较运算符 > 检查一个数是否大于另一个数 操作数1 > 操作数2 <
检查一个数是否小于另一个数 操作数1 < 操作数2 >= 检查一个数是否大于或等于另一个数 操作数1 >= 操作数2 <= 检查一个数是否小于或等于另一个数 操作数1 <= 操作数2 == 检查两个值是否相等 操作数1 == 操作数2 != 检查两个值是否不相等 操作数1 != 操作数2
17
运算符和表达式 9-5 类别 运算符 说明 表达式 成员访问运算符 . 用于访问数据结构的成员 数据结构.成员 赋值运算符 = 给变量赋值
操作数1 = 操作数2 逻辑运算符 && 对两个表达式执行逻辑“与”运算 操作数1 && 操作数2 || 对两个表达式执行逻辑“或”运算 操作数1 || 操作数2 ! 对两个表达式执行逻辑“非”运算 ! 操作数 ( ) 将操作数强制转换为给定的数据类型 (数据类型) 操作数
18
运算符和表达式 9-6 赋值运算符 (=) 变量 = 表达式; 例如: 身高 = 177.5; 体重 = 78; 性别 = “m”;
19
运算符和表达式 9-7 一元运算符 (++/--) Variable ++; 相当于 Variable = Variable + 1;
一元运算符 (++/--) Variable ++; 相当于 Variable = Variable + 1; Variable --; Variable = Variable - 1;
20
运算符和表达式 9-8 运算符 计算方法 表达式 求值 结果(设 X = 10) += 运算结果 = 操作数1 + 操作数2 X+= 2
12 -= 运算结果 = 操作数1 - 操作数2 X-= 2 X=X-2 8 *= 运算结果 = 操作数1 * 操作数2 X*= 2 X=X*2 20 /= 运算结果 = 操作数1 / 操作数2 X/= 2 X=X/2 5 %= 运算结果 = 操作数1 % 操作数2 X%= 2 X=X%2
21
运算符和表达式 9-9 C# 运算符的优先级 优先级 说明 运算符 结合性 1 括号 ( ) 从左到右 2 自加/自减运算符 ++/--
从右到左 3 乘法运算符 除法运算符 取模运算符 * / % 4 加法运算符 减法运算符 + - 5 小于 小于等于 大于 大于等于 < <= > >= 6 等于 不等于 = != 7 逻辑与 && 8 逻辑或 || 9 赋值运算符和快捷运算符 = += *= /= %= -= C# 运算符的优先级
22
前置和后置自加/自减运算符 表达式 类型 计算方法 结果(假定 num1 的值为 10) num2 = ++num1; 前置自加
前置自减 num1 = num1 - 1; num2 = 9; Num1 = 9; num2 = num1--; 后置自减
23
问题 true 计算结果: 1、 int i = 0; bool result = true;
result = (++i) + i == 2?true:false; result = true
24
算术运算符 将值赋给变量 在表达式中使用的算术运算符 static void Main(string[] args) { // x1 的系数
int co1 = 3; // x2 的系数 int co2 = -5; // 二次方程的常数值 int constant = 8; // 存放表达式 b2 - 4ac 的值 double exp = 0; double x1 = 0; double x2 = 0; Console.WriteLine("二次方程为: {0}x2 + {1}x + {2}", co1, co2, constant); exp = Math.Sqrt(co2 * co2 - (4 * co1 * constant)); x1 = ((-co2) + exp) / (2 * co1); x2 = ((-co2) - exp) / (2 * co1); Console.Write("x = {0:F2} ", x1); Console.Write(" 或 "); Console.WriteLine("x = {0:F2}", x2); } 将值赋给变量 在表达式中使用的算术运算符
25
选择结构 3-1 选择结构用于根据表达式的值执行语句 if … else 语法: if (<条件>) { <语句块>
} else
26
选择结构 3-2 switch…case 语法: switch (选择变量) { case 值1: … break; case 值2:
... default : }
27
选择结构 3-3 switch…case 的其他特性 各个 case 标签不必连续,也不必按特定顺序排列
default 标签可位于 switch…case 结构中的任意位置 default 标签不是必选的,但使用 default 标签是一个良好的编程习惯 每两个 case 标签之间的语句数不限
28
循环结构 循环结构用于对一组命令执行一定的次数或反复执行一组命令,直到指定的条件为真。 循环结构的类型 while 循环 do 循环
for 循环 foreach 循环
29
while 循环 while 循环反复执行指定的语句,直到指定的条件为真 语法 : while (条件) { // 语句 }
break 语句可用于退出循环 continue 语句可用于跳过当前循环并开始下一循环
30
do…while 循环 do…while 循环与 while 循环类似,二者区别在于 do…while 循环中即使条件为假时也至少执行一次该循环体中的语句。 语法 : do { // 语句 } while (条件)
31
for 循环 for 循环要求只有在对特定条件进行判断后才允许执行循环 这种循环用于将某个语句或语句块重复执行预定次数的情形 语法 :
{ //语句 }
32
foreach 循环 2-1 语法: foreach 循环用于遍历整个集合或数组
foreach (数据类型 元素(变量) in 集合或者数组) { //语句 }
33
foreach 循环2-2 为所有计数器设置初始值 接受输入 使用了所有输入的字符 之后,循环自动终止 对输入的每一个 字符都进行循环
static void Main(string[] args) { // 存放字母的个数 int Letters = 0; // 存放数字的个数 int Digits = 0; // 存放标点符号的个数 int Punctuations = 0; // 用户提供的输入 string instr; Console.WriteLine("请输入一个字符串 "); instr = Console.ReadLine(); // 声明 foreach 循环以遍历输入的字符串中的每个字符。 foreach(char ch in instr) // 检查字母 if(char.IsLetter(ch)) Letters++; // 检查数字 if(char.IsDigit(ch)) Digits++; // 检查标点符号 if(char.IsPunctuation(ch)) Punctuations++; } Console.WriteLine(“字母个数为: {0}", Letters); Console.WriteLine(“数字个数为: {0}", Digits); Console.WriteLine(“标点符号个数为: {0}", Punctuations); 为所有计数器设置初始值 接受输入 使用了所有输入的字符 之后,循环自动终止 对输入的每一个 字符都进行循环
34
数组 2-1 数组是同一数据类型的一组值 数组属于引用类型,因此存储在堆内存中
数组元素初始化或给数组元素赋值都可以在声明数组时或在程序的后面阶段中进行 语法: 数据类型[元素个数] 数组名称; int[6] arrayHere;
35
数组 2-2 数组声明 初始化数组元素的循环 显示输出的循环 static void Main(string[] args) {
int count; Console.WriteLine(“请输入准备登机的乘客人数 "); count=int.Parse(Console.ReadLine()); // 声明一个存放姓名的字符串数组,其长度等于乘客人数 string[] names = new string[count]; // 用一个 for 循环来接受姓名 for(int i=0; i<count; i++) Console.WriteLine(“请输入第 {0} 个乘客的姓名 ",i+1); names[i]=Console.ReadLine(); } Console.WriteLine(“已登机的乘客有: "); // 用 foreach 循环显示姓名 foreach(string disp in names) Console.WriteLine("{0}", disp); 数组声明 初始化数组元素的循环 显示输出的循环
36
所有与 Student 关联的详细信息都可以作为一个整体进行存储和访问
结构 自定义数据类型 可以在其内部定义方法 无法实现继承 属于值类型 主要结构: struct student { public int stud_id; public string stud_name; public float stud_marks; public void show_details() //显示学生详细信息 } 数据成员 struct structEx { public int structDataMember; public void structMethod1() //structMethod1 实现 } 方法 所有与 Student 关联的详细信息都可以作为一个整体进行存储和访问
37
枚举 枚举(Enum,Enumerator 的缩写)是一组已命名的数值常量 用于定义具有一组特定值的数据类型 枚举以 enum 关键字声明
public class ColorTest { public enum Color Red, Blue, Green, Black, Yellow } public void SetColor (Color c) //处理颜色 static void Main() ColorTest c = new ColorTest(); c.SetColor (ColorTest.Color.Red); Red = 0
38
枚举(续) C# 中的枚举包含与值关联的数字 默认情况下,将 0 值赋给枚举的第一个元素,然后对每个后续的枚举元素按 1 递增
在初始化过程中可重写默认值 public enum Color { Red=1, Blue=2, Green=3, Black=4, Yellow=5 }
39
C#的预处理指令2-1 预处理指令是C#编译器在词法分析阶段读取的语句。这些语句可以指示编译器包含或不包含某些代码,甚至可以根据预处理指令的值终止编译。 预处理指令由字符#标识,并且字符#必须是该行的第一个非空字符。 预处理指令最常见的三个用途是:完成条件编译、增加诊断来报告错误和警告、定义代码域。
40
C#的预处理指令2-2 C#预处理命令 说明 #define #undef
用于定义一个符号,后取消对一个符号得定义。如果定义了一个符号,那么在#if指令中使用时这个符号计算为true。 #if #elif #else #endif 类似C#中得if、elseif和else语句 #line 改变行好序列,并且可以标识该行得源文件 #region #endregion 用于指定一个代码块,使用Visual studio.NET的大纲特性时可以展开或折叠这个代码块 #error 导致编译器报告一个致命错误 #warming 导致编译器报告一个警告,并继续处理
41
String常用方法 回顾:Java 中常用的字符串处理方法? C# 中常用的字符串处理方法:
Equals() :比较两个字符串的值是否相等 Join():连接字符串 Split():分割字符串 IndexOf():查找某个字符在字符串中的位置 SubString():从字符串中截取子字符串 ToLower():将字符串转换成小写形式 Trim():去掉字符串两边的空格 …… 这些方法大多数在Java课程中已经讲过了
42
String 常用方法应用1 已有如下代码,按要求增加功能: static void Main(string[ ] args) {
string ; // 电子邮件地址 Console.WriteLine("请输入你的邮箱:"); = Console.ReadLine(); Console.WriteLine("你的邮箱是 {0}", ); } 需实现的功能: 1、 输入 yes 时,程序循环执行 2、 兼容以下各种形式 yes(YES、yes、 YeS …..) 3、 提取邮箱的用户名 该示例主要是帮助学员回顾在Java中已经学习过的字符串处理方法
43
String 常用方法应用2 输入一个字符串,输出每个单词,重新用下划线连接输出 使用 Split() 方法分割字符串
使用 Join() 方法连接字符串 该示例使用的两个方法是新接触的,要比上一个例子讲得更详细
44
代码分析 关键代码: Split()方法——分割字符串 splitStrings = inputString.Split(' ');
返回值为 字符串数组 字符串变量名 参数:分隔符(char型) Join()方法——连接字符串 // 将分割后的字符串使用下划线连接在一起 joinString = string.Join("_", splitStrings); 参数1:连接符 参数2:字符串数组 返回字符串 静态方法
45
Format() 方法 两种输出字符串的方式: string name = "李四";
Console.WriteLine(“My name is " + name + ",I am" + 18); string name = "李四"; Console.WriteLine(" My name is {0} ,I am {1} ", name,18); 格式字符串 变量列表 Format()方法是字符串这部分的重点 String 类的 Format() 方法用来格式化字符串
46
代码分析 关键代码: record = string.Format( "姓名:{0}\n出生年月:{1}\n身高:{2}\n
name, birthday, height, bloodType, planet, favourFood); Console.WriteLine("\n这是你的个人档案:"); Console.WriteLine(record); 参数与 WritLine() 方法相似
47
Format() 的语法小结 string myString = string.Format("格式字符串", 参数列表);
包括占位符{x} 代表 主要让学员理解占位符和参数列表的对应关系 string myString = string.Format ("{0} 乘以 {1} 等于 {2} ", 2, 3, 2*3); 2乘以3等于6 格式字符串 参数列表
48
小结 补充下划线处的占位符,输出五个成语 string yi = "一"; string er = "二";
string san = "三"; string word = string.Format( "独 _ 无 _,_ 心 _ 意,垂涎 _ 尺,略知 _ _,举_ 反 _", yi, er, san); Console.WriteLine(word); string yi = "一"; string er = "二"; string san = "三"; string word = string.Format( "独{0}无{1},{2}心{1}意,垂涎{2}尺,略知{0}{1},举{0}反{2}", yi, er, san); Console .WriteLine(word);
49
总结 2-1 变量是存放特定数据类型的值的容器,而常量也存放特定数据类型的值,但常量在整个程序中都保持一致
装箱是将值类型转换为引用类型,而拆箱则是将引用类型转换为值类型 C# 提供了以下类型的选择结构: if if…else switch…case
50
总结 2-2 C# 提供了以下类型的循环结构: while 循环 do 循环 for 循环 foreach 循环
数组是可将同一类型的多个数据元素作为单个实体存放的一种数据结构 C# 中的结构可以在其内部定义方法并可包括一个构造函数 枚举是一组已命名的数值常量
Similar presentations