c#期末复习资料.docx
c#期末复习资料 ,计算机高级语言复习提纲 第一章 C#概述 1. 了解计算机语言的作用。了解计算机语言与人类语言的区别。 2. 了解机器语言、汇编语言和高级语言。最早的高级语言是什么_Fortran_?C#是属于_? 计算机能够直接执行的是_机器语言_语言的程序? 3. C#语言由_Microsoft (或微软)_公司发明?C#语言的源文件扩展名是_cs_? C#开发的可执行程序需要安装_.NET Framework_才可以运行? 注意:不是.NET Framework SDK。这个是进行开发的编译工具,不是运行的环境。 第二章 简单的C#程序设计 1. C#从一个类的名为_Main_的方法开始运行 注意大小写 2. 掌握最简单的C#程序的框架,能够输出指定的字符串内容 class Hello static void Main 对于控制台应用程序,通常为了方便使用控制台Console的功能,会使用using System; 语句引入所需的命名空间。 要输出内容,可以使用WriteLine语句。 例:Console.WriteLine("Apple"); 3. C#程序的两种添加注释的方法,程序注释的作用 练习:以下程序的输出结果是: using System; class Hello static void Main / Console.WriteLine("Apple"); /* China */ Console.WriteLine("England"); C#中的注释有两种,采用/开头只行末的部分,或者使用 /* */括起来的部分。一般,/适合单行注释,而 /* */适合多行注释 4. C#中标识符的命名规则。能够判断给定的字符串是否合法的标识符 练习:以下可以作为合法的自定义标识符的是: Abc A100 _1_ 200M _400 注意根据标识符的命名规则判别:第一个字符只能是字母或者下划线,后面的可以是字母、数字或者下划线 5. 掌握常见的C#关键字。注意:关键字不能作为普通的标识符使用。另外,可以看到C#中所有关键字都是全部小写的 练习:以下是C#关键字的是: Main if main using System break 6. 掌握使用Console.WriteLine输出字符串、数字、表达式的值的方法 7. 掌握使用Console.WriteLine按指定格式输出多个数值的方法 8. 掌握使用Console.ReadLine输入字符串的方法 9. 掌握使用Console.ReadLine输入数值数据的方法 10. 掌握Console.Read的功能,并掌握输入单个字符的方法 第三章 数据类型、运算符、表达式 1. 掌握常见的数据类型(int, long, float, double, char, bool, string) 能够表示的数据范围、表示精度。 2. 掌握定义简单变量的方法,并能够根据变量的取值范围和精度要求选择恰当的变量类型 3. 常量定义的方法 练习:定义一个常量 G,值为 9.82 const double G=9.8; 注意:常量定义的格式是: const 常量类型 常量名 = 常量值; 4. 掌握如何将包含四则运算的数学表达式写成等价的C#表达式。正确地使用括号来改变运算的顺序 5. 掌握常见的运算符的运算优先级次序。 6. 掌握整数相除的运算规则,整数相除和小数相除的不同点 练习:17/5 的结果是多少?17%5的结果是多少? 3 2 练习:17/5*2.0的结果是多少?8+15%4的结果是多少? 6 11 注意:如果是 17*2.0/5,结果将会不同。因为17*2.0计算就会变为小数,小数除以整数就按照小数消除的规则进行了 7. 掌握几个常用数学函数和常量的使用方法:Math.Sqrt, Math.Pow, Math.PI, Math.Log, Math.Log10 8. 掌握赋值语言的功能,在赋值语句中使用变量。赋值语句与数学等式的区别 9. 自增运算符,+i 和 i+的区别和共同点 10. 字符串类型 string所能表示的信息,字符串连接运算 掌握字符串常量的表示方法 练习: 如果输出以下字符串常量,显示内容是什么? A) "Programer" B) "Prognram" C) "Prognram" D) "Prog"ram" E) "Prog""" 11. 布尔类型。要求掌握简单的数学比较式子的布尔运算结果,以及使用 &&,|,!来组合简单布尔表达式的运算结果: 练习:如果 (1+3=5) | (2<3) 的运算结果是_ A: true B: false C: 都不是 D: 无法确定 注意:因为 2<3的结果是true,而|运算只要一个为true,结果也为true,所以整个式子结果为true 练习: 已知a是bool类型的变量,则与逻辑表达式 !a等效的逻辑表达式是 A: a=true B: a!=true C: a=false D: a!=false 12. 简单的二进制位运算的规则 练习:6|4 6&4 的结果是什么? 注意:位运算的方法是先将数字转换为二进制数字,在逐位运算。事实上,计算机在保存数字的时候已经是二进制数字了。 6 写成二进制=> 0000 0110 4 写成二进制=> 0000 0100 - | 位或 0000 0110 => 写成十进制 6 & 位与 0000 0100 => 写成十进制 4 13. 复合赋值运算符与普通的运算符 练习:写出等价的赋值运算式子: a += 3; a = a+3 练习:写出等价的复合赋值运算: b = b 5; b -= 5; 14. 隐式类型转换。哪些类型转换可以隐式进行? 一般上,表示范围小的类型向表示范围大的类型转换,可以隐式进行。 第四章 结构化程序设计 1. if语句的语法格式,符合语句的应用 练习:以下程序的输出结果是? using System; class Test static double f(double x) / 根据汇款金额计算手续费 double ret = 0.0; ret = x * 0.01; if (ret < 1.0) ret = 1.0; else if (ret > 50.0) ret = 50.0; return ret; static void Main Console.WriteLine("f(80)=0" , f(80); Console.WriteLine("f(5000)=0" ,f(5000); 注意:按照if语句的规则进行分析判断。 练习2:编写一个密码判别程序。如果用户输入的是字符串 "hello",则显示“密码正确”,否则显示“密码错误” 核心参考代码: string pwd; pwd = Console.ReadLine; if( pwd = "hello") Console.WriteLine("密码正确"); else Console.WriteLine("密码错误"); 2. switch语句的使用 注意: 1 case 后面只能接“常量表达式”,不要出现包含变量的式子 2 case 后面不能是小数类型的式子 3 每个case分支后的语句应该有break语句。 3. while, do-while, for, for-each语句的语法格式 练习: for(int a=0; a<=10; a+) Console.Write(a); 语句的循环次数是_11_ 练习: for(int i=0; i<10; i+) Console.WriteLine(i); 语句的循环次数是_10_ 练习: for(int i=1; i<10; i+) Console.WriteLine(i); 语句的循环次数是_9_ 注意:尽量熟悉常见的for循环形式的循环次数,和循环体内循环变量的取值范围 练习:以下程序段的输出结果是_ int a=3; int b=0; while(a<20) a=a+3; b += a; Console.WriteLine(b); 练习:以下程序段的输出结果是_ int a=3; int b=0; while(a<20) a=a+3; b += a; Console.WriteLine(b); 以下for语句的循环次数是_ int k; for(k=5; k<12; k+) Console.WriteLine(2*k + 3); 以下语句的运行结果是什么? int k; for(k=5; k<12; k+); Console.WriteLine(2*k + 3); 4. break 和continue语句的用法。 注意:在每个switch-case分支中必须有break语句。 5. 单重循环的使用 练习:编程计算 1+2+3+.+N的值,其中N由用户输入 核心代码: int sum = 0; for(int i=1; i<=N; i+) sum += i; 练习:编程计算 1+2+4+8+.+512的值,使用循环语句 核心代码: int sum = 0; for(int i=1; i<=512; i*=2) sum += i; 练习:编程1到200之中,所有不被11整除的整数的和 int sum = 00 for(int i=1; i<=200; i+) if(i%11 != 0) sum += i; 6. 简单两重循环的使用 练习:编程输出正方形的九九乘法表 for(int i=1; i<=9; i+) for(int j=1; j<=9; j+) Console.Write("0*1=2", i, j, i*j); Console.WriteLine; 注意:WriteLine等方法只能逐行输出,不能随意定位来输出。另外注意上面程序中大括号的使用。如果没有这个大括号,外层的for语句将不包括Console.WriteLine语句,而没有正确分行 练习:以下程序输出结果是什么? using System; class Welcome static void Main int i, j; for (i = 1; i < 4; i+) for (j = 0; j < 7-2*i; j+) Console.Write("*"); Console.WriteLine; 7. 练习:编程输出九九乘法表 1*1=1 2*1=2 2*2=2 . 9*1=9 9*2=18 . 9*9=81 for(int i=1; i<=9; i+) for(int j=1; j<=i; j+) Console.Write("0*1=2", i, j, i*j); Console.WriteLine; 掌握利用试除法判断指定的整数是否素数的办法 练习1:写出一个程序,要求读取用户输入的一个整数,然后判断该整数是否素数,并输出判断结果 using System; class Test static bool isPrime(int n) if (n <= 1) return false; for (int i = 2; i < n / 2; i+) if (n % i = 0) return false; return true; public static void Main int x; x = int.Parse(Console.ReadLine); if (isPrime(x) Console.WriteLine("0 是一个素数", x); else Console.WriteLine("0不是一个素数", x); 注意:方法的参数和返回类型需要合理设计,一般应该遵循将运算结果返回,而不要直接显示的原则。至于返回值用作何种用途,应由调用者决定 8. 异常处理语句:C#中,使用try-catch语句捕获并处理异常 第五章 数组、结构和枚举 1. 掌握一维数组的使用 在 int b = 2,3,4,5,6; 中,数组元素 b3的值是_5_ 注意:数组第一个元素的下标为0 2. 了解二维数组的使用 3. 掌握至少一种简单的数组排序算法 练习1:写出对以下数据进行从小到大排序的C#程序: double data=2.3, 5.6, 7.4, 1.8, 7.0, 9.2, 5.3, 1.5; 练习2:从控制台输入8个整数到数组 dd,并对数组元素进行从大到小拍序: 练习3:计算并输出数组中的最大值,以及最大值所在的元素下标 4. 结构数据类型的定义 结构成员的访问方法: 练习:有结构类型定义 struct student public int m1; public string m2; ; 则以下语句正确的有: student = 1, 2; student = 1, "abc" student s1=1, "abc" student s1; s1 = 1, "abc" student s1; s1.m1 = 200; student s1; s1.m1 = "abc" student s1; s1.m2 = "abc" 5. 枚举类型的定义和使用 练习:定义一个表示季节的枚举类型 第六章 C#的面向对象程序设计 1. 类和对象的含义 练习:在用class 定义的类中,如果一个成员没有指定它的私有或者公有属性,那么它是_private_ 2. 类定义和对象定义 练习:定义一个表示学生的类Student,包含学号、姓名等信息。在Main方法中定义并生成一个Student类型的对象 class Student int id; string name; 定义并生成对象: Student s1 = new Student; 注意:熟悉包含数据成员、方法成员的类定义的一般格式 对象需要在类定义之后使用 new 来生成。 Stduent s1 = new Student; 实际上相当于两个语句: Student s1; 这个语句定义了一个Student 类型的引用变量。当定义时,该变量为空引用 s1 = new Student; new 语句可以生成相应的对象,并返回该对象的引用。这个赋值语句将生成的对象的引用保存到 s1中,以后可以通过s1 来“使用”这个对象。 s1是引用,在某个时候可以被重新赋值来重新“引用”另外的对象。 3. 构造函数和析构函数的定义和功能 注意:构造函数在生成对象时自动调用;析构函数在回收对象时被自动调用 4. 方法的定义 已知类Test 的一个方法 m2的方法头如下: public string m2(int x) 则在该方法中,以下返回返回语句是正确的: return 2*x; return ""+2*x; return "100" return 'a' 注意:return 后的表达式必须可以转换为返回类型。上题中,返回类型是 string, 上面有两个类型符合。 练习1:编写一个判断输入参数是否为素数的方法,要求输入参数为素数时,返回true,否则返回false。 注意:参见实验指导书中相应的参考答案。一般使用试除法即可。 5. 方法的参数传递规则: 根据参数传递的方式,可以分为三种:值参数,引用参数,输出参数 练习:比较以下程序的区别和输出结果,并分析原因: using System; class Program static void c(int x) x = x + 10; static void Main int x = 10; Console.WriteLine(x); c(x); Console.WriteLine(x); using System; class Program static void c(ref int x) x = x + 10; static void Main int x = 10; Console.WriteLine(x); c(ref x); Console.WriteLine(x); 注意:参数中如果有ref关键字修饰,是引用参数。使用引用参数时,实参可以看作和形参完全相同,即在方法中修改形参的值,也会引起实参的改变;out关键字修饰的是输出参数,与ref参数类似,不过要求在方法中必须对out 修饰的形参进行赋值。如果没有ref, out修饰,则为值参数。值参数传递的时候,形参相当于实参的复制品。 练习:类X中有f方法的方法头 static void f(int a, ref int b),要使用x, y作为参数调用方法f,调用形式为: (x, y均为 int 类型变量) _f(x, ref y)_ 注意:如果在定义时有ref或者out关键字,则调用的时候也需要有相同的关键字。 定义方法的时候,需要指明每一个参数的类型,但在调用的时候,不要写参数的类型,直接写参数的式子即可 6. 了解局部变量、静态成员变量、非静态成员变量的定义方法,使用方法,以及访问优先级。 注意:局部变量定义在方法内,成员变量定义在类内。静态成员定义时,前面有static 关键字;非静态成员则没有static。静态的成员属于类;而非静态的成员属于对象 7. 递归算法 练习1:根据以下算法写出C#的递归算法程序 1 n=1 f(n)= 2f(n-1) n>1时 核心算法: void int f(int n) if(n=1) return 1; else return 2*f(n-1); 练习2:写出以下算法的递归程序 2 n=0 Fii(x) = 3Fii(x-1) n>0时 练习3:计算Feibonacci数列(0, 1, 1, 2, 3, 5, .)并显示前30项的程序 规律:Feibonacci(1) = 0 Feibonacci(2) = 1 Feibonacci(n) = Feibonacci(n-1) + Feibonacci(n-2), 当n>=2时 核心代码段: void int f(int n) if(n=0) return 0; else if(n=1) return 1; else return f(n-1)+f(n-2); 注意:递归定义的问题,可以利用简单的 if分支语句,相当直接的转换为相应的递归方法。 8. 掌握string 类型的基本用法,常见的string 方法的功能 练习:字符串定义如下: string ss = "ABCDE" 则 ss3的值是: _'D'_ 注意:使用可以取字符串指定位置上的字符。注意:位置从0算起 练习:以下程序运行结果是: using System; class Test public static void Main string str1 = "Program" string str2 = str1.Replace("a", "d"); string str3 = str1.ToUpper; Console.WriteLine(str2); Console.WriteLine(str3); Progrdm PROGRAM 注意:常用的string 类的方法有Replace, Substring, ToUpper, ToLower等 9. 掌握Math类的常见方法的使用,了解Random类的功能 注意:System.Random 类用于产生随机数 第七章 继承 1. 继承的基本知识 2. 方法覆盖 3. 多态性概述 4. 虚方法 5. 多态性的实现 第九章 C#的文件操作 1. 2. 3. 利用Directory进行文件夹操作 利用File进行文件的创建、打开、复制、删除、移动 对FileStream对象进行字节的读写 练习:要使用FileStream 类,需要引入哪个命名空间? System.IO 4. 利用StreamReader类进行文本文件读取 练习:要定义一个StreamReader类对象,并打开磁盘文件abc.txt,应该调用_StreamReader f=new StreamReader("abc"); 5. 利用StreamWriter类进行文本文件写入 练习:编程,生成一个文本文件 abc.txt,内容包括文本内容:HelloWorld