• 1. 第二章 C# 基础知识
  • 2. 回顾.net平台的体系结构? C#语言的特点 CLR是什么? CTS是什么? JIT是什么? C#代码如何被执行? VS2005如何创建控制台应用程序?
  • 3. 目标C#代码基本结构及编程规则 在C#中定义变量和常量 使用C# 中的基本数据类型 理解装箱和拆箱的概念 使用C#中的运算符,选择结构和循环结构
  • 4. Helloworld例子/* * 这是使用C#编写的HelloWorld程序 */ using System; using System.Collections.Generic; using System.Text; namespace HelloWorld { /// /// 这是第一个类 /// class First { /// /// 程序入口 /// /// 命令行参数 static void Main(string[] args) { Console.WriteLine("这是HelloWorld程序"); //在控制台输出消息 } } }1:注释包括单行和多行注释、 xml注释 2:引入命名空间 3:“{“作用域的开始 4:“}”作用域的结束 5:语句以分号结束 6:大小写敏感 C#代码基本结构
  • 5. C#编程规则标示符规则 必须以一个字母或下划线开头,但可以包含数字字符: 不能把C#关键字用作标示符(关键字请参考C#高级编程P65) 名称大小写 Pascal,单词中的首字母都是大写,主要用在命名空间、类、类中的方法等 Camel,单词中除了首字母外,其他单词首字母都是大写。主要用在类中的私有成员、传递方法的所有参数。
  • 6. C#编程规则命名空间 微软建议使用如下的命名空间: 公司名称.技术名称.用户所在组(部门).类所在软件包名称,如handson.net.first.bank.entity根据下面的描述,请考虑如何命名空间? 微软公司.net技术研究院桌面应用部门vista项目
  • 7. C# 数据类型—值类型C# 数据类型大小默认值 示例 整型int有符号的 32 位整数 0int rating = 20;short有符号的 16 位整数 0short salary = 3400;byte无符号的 8 位整数 0byte gpa = 2;long有符号的 64 位整数 0Llong population = 23451900;浮点型float32 位浮点数,有效数字 7 位 0.0Ffloat temperature = 40.6F;double64位双精度浮点数,有效数字15位0.0DDouble tmp=658.2548785D;布尔型bool布尔值,true 或 false Falsebool IsManager = true;字符型Char 单个 Unicode 字符 ‘\0’char gender = ‘M’;转义符号字符\’单引号\’’双引号\0空\a警告\b退格\\反斜杠\n换行\r回车\t水平制表符\v垂直制表符
  • 8. 数据类型—引用类型C# 数据类型说明默认值 示例引用型object根类型nullobject obj=new object();stringUnicode字符串nullString str=“初始化”; string s1 = "第一个字符串"; string s2 = s1; Console.WriteLine(s1==s2); //结果是什么? s1 = "第二个字符串"; Console.WriteLine(s1 == s2); //结果是什么? Console.WriteLine("姓名\t 性别"); //可以包含转义字符 Console.WriteLine(@"姓名;'性别'"); //也可以这样转义 Console.WriteLine(@"姓名 '性别'"); //这样包含有换行符
  • 9. 变量 2-1语法: 访问修饰符 数据类型 变量名PublicPrivateProtectedintstringfloat……Int x=10; string tmp=“李玉春”; float grade=50.51f;变量用于存储特定数据类型的值xstrgrade……
  • 10. 演示变量 static void Main(string[] args) { // 声明布尔型、字符串型、整型、短整型和浮点型变量 bool test = true; short num1 = 19; int num2 = 14000; string val = "Jamie"; float num3 = 14.5f; // 显示变量值 Console.WriteLine ("布尔值 = " + test); Console.WriteLine ("短整型值 = " + num1); Console.WriteLine ("整型值 = " + num2); Console.WriteLine ("字符串值 = " + val); Console.WriteLine ("浮点值 = " + num3); }变量中存储的值取决于该变量的类型
  • 11. 常量 2-1语法: const 数据类型 常量名 = 常量值;PublicPrivateProtected常量用于在整个程序中将数据保持同一个值
  • 12. 常量 2-2static void Main(string[] args) { // PI常量PI const float _pi = 3.14F; // 由地球引力引起的加速度常量,单位为 cm/s*s const float _gravity = 980; // 钟摆的长度 int length = 40; // 钟摆的周期 double period = 0; // 钟摆周期的计算公式 period = 2 * _pi * Math.Sqrt(length / _gravity); Console.WriteLine ("钟摆的周期为 {0} 秒", period); }声明常量在表达式中使用常量const 关键字用于声明常量
  • 13. C# 的基本数据类型 3-1C# 中的数据类型分为两个基本类别 值类型 表示实际数据 只是将值存放在内存中 值类型都存储在堆栈中 int、char、结构 引用类型 表示指向数据的指针或引用 包含内存堆中对象的地址 为 null,则表示未引用任何对象 类、接口、数组、字符串
  • 14. C# 的基本数据类型 3-2static void Main(string[] args) { // 声明一个值类型的整型数据类型 int val = 100; Console.WriteLine("该变量的初始值为 {0}", val); Test(val); // 由于该数据类型属于值类型,所以将恢复其初始值 Console.WriteLine("该变量的值此时为 {0}", val); } static void Test(int getVal) { int temp = 10; getVal = temp * 20; }将 val 的初始值传递给 Test() 方法被传递的 val 在 Test() 方法内被改变不反映已经改变的 val 值,而保留原始值
  • 15. C# 的基本数据类型 3-3static void Main(string[] args) { DataTypeTest objTest = new DataTypeTest(); objTest.Val = 100; // 传递属于引用类型的对象 Test(objTest); // 由于该数据类型属于引用类型,所以会考虑新处理的值 Console.WriteLine("变量的值为 {0}", objTest.Val); } static void Test(DataTypeTest dataTest) { int temp = 10; dataTest.Val = temp * 20; }将 DataTypeTest 的引用传递给 Test() 被传递的 val 在 Test() 中改变不反映已经改变的 val 值,而保留原始值class DataTypeTest { public int Val; }
  • 16. 装箱和拆箱 2-1装箱是将值类型转换为引用类型 拆箱是将引用类型转换为值类型 利用装箱和拆箱功能,可通过允许值类型的任何值与 Object 类型的值相互转换,将值类型与引用类型链接起来
  • 17. 装箱和拆箱 2-2int val = 100; object obj = val; Console.WriteLine (“对象的值 = {0}", obj);int val = 100; object obj = val; int num = (int) obj; Console.WriteLine ("num: {0}", num);值类型引用类型拆箱装箱值类型引用类型值类型被装过箱的对象才能被拆箱
  • 18. 运算符和表达式 9-1 运算符和表达式Result=number*100变量变量常量操作数表达式操作数和运算符的组合运算符
  • 19. 运算符和表达式 9-2 类别运算符说明表达式算术运算符+执行加法运算(如果两个操作数是字符串,则该运算符用作字符串连接运算符,将一个字符串添加到另一个字符串的末尾) 操作数1 + 操作数2-执行减法运算 操作数1 - 操作数2*执行乘法运算操作数1 * 操作数2/执行除法运算操作数1 / 操作数2%获得进行除法运算后的余数 操作数1 % 操作数2++将操作数加 1 操作数++ 或++操作数--将操作数减 1 操作数-- 或--操作数
  • 20. 运算符和表达式 9-3类别运算符说明表达式三元运算符(条件运算符) ?:检查给出的第一个表达式 expression 是否为真。如果为真,则计算 operand1,否则计算 operand2。这是唯一带有三个操作数的运算符 表达式? 操作数1: 操作数2更多运算符请参考辅助教材第119页
  • 21. 问题 下面的运算结果是什么?  1、 27 % 5 =?  2、3%7=? 3、2<<3=?
  • 22. 运算符和表达式 9-4类别运算符说明表达式比较运算符>检查一个数是否大于另一个数 操作数1 > 操作数2<检查一个数是否小于另一个数 操作数1 < 操作数2>=检查一个数是否大于或等于另一个数 操作数1 >= 操作数2<= 检查一个数是否小于或等于另一个数 操作数1 <= 操作数2== 检查两个值是否相等 操作数1 == 操作数2!= 检查两个值是否不相等操作数1 != 操作数2
  • 23. 运算符和表达式 9-5类别运算符说明表达式成员访问运算符. 用于访问数据结构的成员 数据结构.成员 赋值运算符=给变量赋值 操作数1 = 操作数2逻辑运算符 && 对两个表达式执行逻辑“与”运算 操作数1 && 操作数2 ||对两个表达式执行逻辑“或”运算 操作数1 || 操作数2 !对两个表达式执行逻辑“非”运算! 操作数( ) 将操作数强制转换为给定的数据类型 (数据类型) 操作数
  • 24. 运算符和表达式 9-6赋值运算符 (=)变量 = 表达式; 例如: 身高 = 177.5; 体重 = 78; 性别 = “m”;
  • 25. 运算符和表达式 9-7一元运算符 (++/--) Variable ++; 相当于 Variable = Variable + 1; Variable --; 相当于 Variable = Variable - 1;
  • 26. 运算符和表达式 9-8运算符计算方法表达式求值结果(假定 X = 10)+=运算结果 = 操作数1 + 操作数2X += 5X = X + 515-=运算结果 = 操作数1 - 操作数2X -= 5X = X - 55*=运算结果 = 操作数1 * 操作数2X *= 5X = X * 550/=运算结果 = 操作数1 / 操作数2X /= 5X = X / 52%=运算结果 = 操作数1 % 操作数2X %= 5X = X % 50
  • 27. 优先级C# 运算符的优先级优先级(1 最高)说明运算符结合性1括号( )从左到右2自加/自减运算符++/--从右到左3乘法运算符 除法运算符 取模运算符* / %从左到右4加法运算符 减法运算符+ -从左到右5小于 小于等于 大于 大于等于< <= > >=从左到右6等于 不等于= !=从左到右 从左到右7逻辑与&&从左到右8逻辑或||从左到右9赋值运算符和快捷运算符= += *= /= %= -=从右到左
  • 28. 前置和后置自加/自减运算符表达式类型计算方法结果(假定 num1 的值为 5)num2 = ++num1;前置自加num1 = num1 + 1; num2 = num1;num2 = 6; num1 = 6;num2 = num1++;后置自加num2 = num1; num1 = num1 + 1;num2 = 5; num1 = 6;num2 = --num1;前置自减num1 = num1 - 1; num2 = num1;num2 = 4; Num1 = 4;num2 = num1--;后置自减num2 = num1; num1 = num1 - 1;num2 = 5; Num1 = 4;
  • 29. 问题计算结果: 1、 int i = 0; bool result = false result = (++i) + i == 2?true:false; result = true
  • 30. 算术运算符static void Main(string[] args) { // x2 的系数 int coefficient1 = 2; // x 的系数 int coefficient2 = -7; // 二次方程的常数值 int constant = 3; // 存放表达式 b2 - 4ac 的值 double expression = 0; double x1 = 0; double x2 = 0; Console.WriteLine("二次方程为: {0}x2 + {1}x + {2}", coefficient1, coefficient2, constant); expression = Math.Sqrt(coefficient2 * coefficient2 - (4 * coefficient1 * constant)); x1 = ((-coefficient2) + expression) / (2 * coefficient1); x2 = ((-coefficient2) - expression) / (2 * coefficient1); Console.Write("x = {0:F2} ", x1); Console.Write(" 或 "); Console.WriteLine("x = {0:F2}", x2); }将值赋给变量在表达式中使用的算术运算符
  • 31. 选择结构 3-1语法: if (<条件>) { <语句块> } else { <语句块> }选择结构用于根据表达式的值执行语句if … else
  • 32. 选择结构 3-2语法: switch (选择变量) { case 值1: … break; case 值2: … break; case 值3: … break; ... ... default : … }switch…case Case块中缺少breeak,编译会报错  
  • 33. switch…case 的其他特性选择结构 3-3各个 case 标签不必连续,也不必按特定顺序排列 default 标签可位于 switch…case 结构中的任意位置 default 标签不是必选的,但使用 default 标签是一个良好的编程习惯 每两个 case 标签之间的语句数不限
  • 34. 循环结构循环结构用于对一组命令执行一定的次数或反复执行一组命令,直到指定的条件为真。 循环结构的类型 while 循环 do 循环 for 循环 foreach 循环
  • 35. while 循环 2-1停车!车上有几个座位?检查!是!否!while (seat <= 25)
  • 36. while 循环反复执行指定的语句,直到指定的条件为真 语法 : while (条件) { // 语句 } break 语句可用于退出循环 continue 语句可用于跳过当前循环并开始下一循环 while 循环 2-2
  • 37. do…while 循环 2-1停车!车上有几个座位?检查!是!否!while (seat <= 25)do
  • 38. do…while 循环 2-2do…while 循环与 while 循环类似,二者区别在于 do…while 循环中即使条件为假时也至少执行一次该循环体中的语句。 语法 : do { // 语句 } while (条件)
  • 39. for 循环for 循环要求只有在对特定条件进行判断后才允许执行循环 这种循环用于将某个语句或语句块重复执行预定次数的情形 语法 : for (初始值; 条件; 增/减) { //语句 }
  • 40. foreach 循环计算总分计算分数对班上的每一个学生教 室
  • 41. foreach 循环 2-1foreach 循环用于遍历整个集合或数组 语法: foreach (数据类型 元素(变量) in 集合或者数组) { //语句 }
  • 42. foreach 循环static void Main(string[] args) { // 存放字母的个数 int countLetters = 0; // 存放数字的个数 int countDigits = 0; // 存放标点符号的个数 int countPunctuations = 0; // 用户提供的输入 string input; Console.WriteLine("请输入一个字符串 "); input = Console.ReadLine(); // 声明 foreach 循环以遍历输入的字符串中的每个字符。 foreach(char chr in input) { // 检查字母 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); }为所有计数器设置初始值接受输入对输入的每一个 字符都进行循环使用了所有输入的字符 之后,循环自动终止
  • 43. 总结 2-1变量是存放特定数据类型的值的容器,而常量也存放特定数据类型的值,但常量在整个程序中都保持一致 装箱是将值类型转换为引用类型,而拆箱则是将引用类型转换为值类型 C# 提供了以下类型的选择结构: if if…else switch…case
  • 44. 总结 2-2C# 提供了以下类型的循环结构: while 循环 do 循环 for 循环 foreach 循环 枚举是一组已命名的数值常量
  • 45. 作业在控制台打印出九九乘法表 打印出100以内的素数(素数是这样的整数,它除了能表示为它自己和1的乘积以外,不能表示为任何其它两个整数的乘积 ) 请编写一个计算个人所得税的程序,金额从控制台输入。相关材料如下: 应纳税额=应纳税所得额X适用税率—速算扣除数 。 =(工资总收入-2000)X税率-速算扣除数级数全月应纳税所得额税率(%)速算扣除数1不超过免税基数500元的502超过500元~2000元的部分10253超过2000元~5000元的部分151254超过5000元~20000元的部分203755超过20000元~40000元的部分2513756超过40000元~60000元的部分3033757超过60000元~80000元的部分3563758超过80000元~100000元的部分40103759超过100000元的部分4515375请注意: 2000元以下不收税