c#期末复习

994 阅读26分钟

经典编程题

1. 控制台输入用户名和密码,判断用户名和密码是否正确,如果用户名和密码正确…..,否则如果用户名错误……,否则密码错误……(if语句)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _1
{
    //if语句
    class Program
    {
        static void Main(string[] args)
        {
            string useName;
            string passWord;
            Console.WriteLine("请输入您的用户名和密码:");
            useName = Console.ReadLine();
            passWord = Console.ReadLine();
            if(useName=="admin"&&passWord=="123456")
            {
                Console.WriteLine("输入正确");
            }
            else
            {
                Console.WriteLine("输入错误!!!");
            }
            Console.ReadKey();
        }
    }
}

2. 输入几门课程成绩求总成绩和平均成绩,定义方法实现如果输入的成绩不是整数,则重新输入(方法)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _2
{
    class Program
    {
        public static bool isintNum(string str)
        {
            int num = 0;
            bool flag = int.TryParse(str, out num);
            return flag;
        }
        static void Main(string[] args)
        {
            int[] scores = new int[9];
            double avg;
            int sum = 0;
            string str;
            for (int i = 0; i < scores.Length; i++)
            {
                Console.Write("请输入第{0}门课的成绩:", i + 1);
                str = Console.ReadLine();
                bool flag = isintNum(str);
                if (flag == true)
                {
                    scores[i] = int.Parse(str);
                    sum += scores[i];
                }
                else
                {
                    Console.WriteLine("你输入的不是整数,请重新输入!\n");
                    while (true)
                    {
                        Console.Write("请输入第{0}门课的成绩:", i + 1);
                        str = Console.ReadLine();
                        flag = isintNum(str);
                        if (flag == true)
                        {
                            break;
                        }
                    }
                }
            }
            avg = sum * 1.0 / scores.Length;
            Console.WriteLine("总成绩是:{0}分,平均分是:{1}分", sum, avg);
            Console.ReadKey();
        }
    }
}

3. 求100以内的所有整数和,奇数和和偶数和(for循环和while循环),判断奇数和偶数
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace _3.1
    {
        //while循环求100以内整数和,奇数和,偶数和
        class Program
        {
            static void Main(string[] args)
            {
                int sum1 = 0;
                int sum2 = 0;
                int sum3 = 0;
                int i = 1;
                while (i <= 100)
                {
                    if (i <= 100)
                    {
                        sum1 = sum1 + i;
                    }
                    if (i % 2 == 0)
                    {
                        sum2 = sum2 + i;
                    }
                    if (i % 2 != 0)
                    {
                        sum3 = sum3 + i;
                    }
                    i++;
                }
                Console.WriteLine("1-100之间整数之和为{0},偶数之和为{1},奇数之和为{2}", sum1, sum2, sum3);
                Console.ReadKey();
            }
        }
    }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _3.2
{
    //for循环求100以内整数和,奇数和,偶数和
    class Program
    {
        static void Main(string[] args)
        {
            int sum1=0;
            int sum2=0;
            int sum3=0;
            for(int i=1;i<=100;i++)
            {
                sum1 += i;
            }
            for (int j = 1; j <= 100; j++)
            {
                if(j%2==0)
                {
                    sum2 += j;
                }
                
            }
            for (int k = 1; k <= 100; k++)
            {
                if(k%2==1)
                {
                    sum3 += k ;
                }               
            }
            Console.WriteLine("100以内的所有整数和:{0},偶数和:{1},奇数和:{2}",sum1,sum2,sum3);
            Console.ReadKey();
        }
    }
}
4. 定义方法求解圆形的周长和面积(方法)
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _4
{
    //定义方法求解圆形的周长和面积
    class Program
    {
        public static double circleArea(int r)
        {
            return 3.14 * r * r;
        }
        public static double circleLength(int r)
        {
            return 2 * 3.14 * r;
        }
        static void Main(string[] args)
        {
            double circlearea = circleArea(5);
            double cireclelenght=circleLength(2);
            Console.WriteLine("圆的面积为{0},周长为{1}",circlearea,cireclelenght);
            Console.ReadKey();
        }
    }
}
5. 九九乘法表和水仙花数(for循环)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _5
{
    //九九乘法表
    class Program
    {
        static void Main(string[] args)
        {
            for(int i=1;i<=9;i++)
            {
                for(int j=1;j<=i;j++)
                {
                    Console.Write("{0}*{1}={2}\t",j,i,j*i);
                    
                }
                Console.WriteLine();
            }
            Console.ReadKey();
        }
    }
}

using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _6
{
    class Program
    {
        //水仙花数
        static void Main(string[] args)
        {
            int i;
            int b;//百位
            int s;//十位
            int g;//个位
            int sum = 0;
            for (i = 100; i <= 999; i++)//用for循环依次遍历100到999中的所有数 
            {
                b = i / 100;//获取百位数
                s = i % 100 / 10;//获取十位数
                g = i % 10;//获取个位数
                sum = b * b * b + s * s * s + g * g * g;
                if (sum == i)
                {         //判断水仙花数
                    Console.WriteLine("水仙花数有:" + i);
                }
            }
            Console.ReadKey();
        }
    }
}
6. 方法的综合练习
6.1输入两个数字,且第一个数小于第二个数字,最终输出符合条件的两个数字之和。
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _6
{
    //方法的综合练习
    class Program
    {
        public static void Main(String[] args)
        {
            Console.WriteLine("请输入第一个数字");
            string str1 = Console.ReadLine();
            int num1 = GetNumber(str1);
            Console.WriteLine("请输入第二个数字");
            string str2 = Console.ReadLine();
            int num2 = GetNumber(str2);

            //第一个数字必须要小于第二个数字
            JudgeNumber(ref num1, ref num2);

            //求两数字的和
            int sum = GetSum(num1, num2);
            Console.WriteLine(sum);
            Console.ReadLine();
        }
        public static int GetNumber(string s)
        {
            while (true)
            {
                try
                {
                    int number = Convert.ToInt32(s);
                    return number;
                }
                catch
                {
                    Console.WriteLine("输入有误,请重新输入");
                    s = Console.ReadLine();
                }
            }
        }

        public static void JudgeNumber(ref int n1, ref int n2)
        {
            while (true)
            {
                if (n1 < n2)
                {
                    return;//输入数据符合题意
                }
                else
                {
                    Console.WriteLine("第一个数字不能大于第二个数字,请重新输入第一个数字");
                    string str1 = Console.ReadLine();
                    n1 = GetNumber(str1);
                    Console.WriteLine("请重新输入第二个数字");
                    string str2 = Console.ReadLine();
                    n2 = GetNumber(str2);
                }
            }
        }
        public static int GetSum(int n1, int n2)
        {
            int sum = 0;
            for (int i = n1; i <= n2; i++)
            {
                sum += i;
            }
            return sum;
        }

    }
}

7. 一维数组最大值,最小值,总和和平均数
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _7
{
    //一维数组的最大值,最小值,总和和平均值
    class Program
    {
        static void Main(string[] args)
        {
            
            int sum = 0;
            int[] a = {1,9,5,8,100,0,6 };
            Array.Sort(a);
            for(int i=0;i<a.Length;i++)
            {
                sum+=a[i];
            }
            int average = sum / a.Length - 1;
            Console.WriteLine("一维数组的最大值为{0},最小值为{1},总和为{2},平均数为{3}",a[a.Length-1],a[0],sum,average);
            Console.ReadKey();
            
        }
    }
}

8. 冒泡排序

using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _8
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] array = { 1, 5, 0, 100, 95, 65, 8, 15 };
            int temp;
            for(int i=0;i<array.Length-1;i++)
            {
                for(int j=0;j<array.Length-i-1;j++)
                {
                    if(array[j]>array[j+1])
                    {
                        temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                    }
                }
            }
            Console.WriteLine("冒泡排序后:");
            for(int i=0;i<array.Length;i++)
            {
                Console.WriteLine(array[i]);
            }
            Console.ReadKey();
        }
    }
}

## C#程序设计复习串讲知识点****

第三章

3.1.1标识符命名规范p23

标识符是用来识别类、变量、函数或任何其它用户定义的项目。在 C# 中,类的命名必须遵循如下基本规则:

    • 标识符必须以字母、下划线或 @ 开头,后面可以跟一系列的字母、数字( 0 - 9 )、下划线( _ )、@。
    • 标识符中的第一个字符不能是数字。
    • 标识符必须不包含任何嵌入的空格或符号,比如 ? - +! # % ^ & * ( ) [ ] { } . ; : " ' / \。
    • 标识符不能是 C# 关键字。除非它们有一个 @ 前缀。 例如,@if 是有效的标识符,但 if 不是,因为 if 是关键字。
    • 标识符必须区分大小写。大写字母和小写字母被认为是不同的字母。
    • 不能与C#的类库名称相同。
3.2.1,3.2.2.值类型和引用类型分别有哪些,几种常见数据类型(int,double,string,decimal)的含义p25

在 C# 中,变量分为以下几种类型:

(1)值类型(Value types) 值类型变量可以直接分配给一个值。它们是从类 System.ValueType 中派生的。 值类型直接包含数据。比如 int、char、float,它们分别存储数字、字符、浮点数。当您声明一个 int 类型时,系统分配内存来存储值。

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

eg:

(2)引用类型(Reference types)

引用类型不包含存储在变量中的实际数据,但它们包含对变量的引用。

换句话说,它们指的是一个内存位置。使用多个变量时,引用类型可以指向一个内存位置。如果内存位置的数据是由一个变量改变的,其他变量会自动反映这种值的变化。内置的 引用类型有:objectdynamic 和 string

对象(Object)类型

对象(Object)类型 是 C# 通用类型系统(Common Type System - CTS)中所有数据类型的终极基类。Object 是 System.Object 类的别名。所以对象(Object)类型可以被分配任何其他类型(值类型、引用类型、预定义类型或用户自定义类型)的值。但是,在分配值之前,需要先进行类型转换。

3.2.3数据类型转换的方法,装箱,拆箱p29-31

当一个值类型转换为对象类型时,则被称为 装箱;另一方面,当一个对象类型转换为值类型时,则被称为 拆箱

3.3.2 变量的赋值和变量的作用域p34

3.4.1 算术运算里的除法和模运算p36,自增和自减运算符p37,条件运算符p40

int a = 10, b = 5, c = 2;  
int result = a + b * c;  // 先计算乘法,再计算加法  
Console.WriteLine(result);  // 输出20  
  
result = (a + b) * c;     // 先计算加法,再计算乘法  
Console.WriteLine(result);  // 输出30  
  
a += b * c;               // 先计算乘法,再执行加法赋值  
Console.WriteLine(a);       // 输出20
bool a = true, b = false, c = true;  
bool result = a || b && c;  // 先计算与运算,再计算或运算  
Console.WriteLine(result);  // 输出true  
  
result = (a || b) && c;     // 先计算或运算,再计算与运算  
Console.WriteLine(result);  // 输出true  
  
result = a || (b && c);     // 先计算与运算,再计算或运算  
Console.WriteLine(result);  // 输出true
int a = 10, b = 5;  
string result = a > b ? "a大于b" : "a不大于b";  // 先判断大小关系,再执行条件语句  
Console.WriteLine(result);  // 输出"a大于b"

第四章*

4.3.1 if语句,典型实例程序-----判断一个数是否奇数(偶数)、控制台对用户名和密码的验证程序p46-50

switch 语句必须遵循下面的规则:
    • switch 语句中的 expression 必须是一个整型或枚举类型,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型。
    • 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值和一个冒号。
    • case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量。
    • 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。
    • 当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句后的下一行。
    • 不是每一个 case 都需要包含 break。如果 case 语句为空,则可以不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止。
    • C# 不允许从一个 case 部分继续执行到下一个 case 部分。如果 case 语句中有已经执行,则必须包含 break 或其他跳转语句。
    • 一个 switch 语句可以有一个可选的 default 语句,在 switch 的结尾。default 语句用于在上面所有 case 都不为 true 时执行的一个任务。default 也需要包含 break 语句,这是一个良好的习惯。
    • C# 不支持从一个 case 标签显式贯穿到另一个 case 标签。如果要使 C# 支持从一个 case 标签显式贯穿到另一个 case 标签,可以使用 goto 一个 switch-case 或 goto default。#### 4.3.2 Switch语句的特点p52
  
namespace DecisionMaking  
{  
     
    class Program  
    {  
        static void Main(string[] args)  
        {  
            /* 局部变量定义 */  
            char grade = 'B';  
  
            switch (grade)  
            {  
                case 'A':  
                    Console.WriteLine("很棒!");  
                    break;  
                case 'B':  
                case 'C':  
                    Console.WriteLine("做得好");  
                    break;  
                case 'D':  
                    Console.WriteLine("您通过了");  
                    break;  
                case 'F':  
                    Console.WriteLine("最好再试一下");  
                    break;  
                default:  
                    Console.WriteLine("无效的成绩");  
                    break;  
            }  
            Console.WriteLine("您的成绩是 {0}", grade);  
            Console.ReadLine();  
        }  
    }  
}

4.4.2 While循环和do-whie循环的区别,典型实例程序-----用户从控制台输入用户名和密码p54-56

while与do while的区别: 在初始值不满足循环条件时:while循环一次都不执行,do while会先循环一次

2006年培养学员80000人,每年增长25%,请问按此增长速度,到哪一年培训学员人数将达到20万人?
    double student = 80000;
                int year = 2006;
     
                while(student<=200000)
                {
                    student *= 1.25;
                    year++;
                }
                Console.WriteLine("{0}年一共有{1}学员",year,student);
                Console.ReadKey();
要求用户输入用户名和密码,只要不是admin,999999就一直提示用户名或者密码错误,请重新输入
do
            {
                Console.WriteLine("请输入账号:");
                name = Console.ReadLine();
 
                Console.WriteLine("请输入密码:");
                password = Console.ReadLine();
 
                if(name!="admin"||password!="88888")
                {
                    Console.WriteLine("用户名或者密码错误,重新输入");
                }
 
            } while (name != "admin" || password != "88888");
 
           
            
            Console.WriteLine("登陆成功");
            
            Console.ReadKey();

4.4.3 for语句,典型实例程序-----1-100间所有数求和,所有奇数求和,所有偶数求和,九九乘法表,水仙花数等p56-57

见经典编程题eg2,3,4

4.4.3 Foreach语句对于数组遍历的含义p59

foreach (var item in collection)
{
    // 循环
}
{
    static void Main(string[] args)
    {
        int[] fibarray = new int[] { 0, 1, 1, 2, 3, 5, 8, 13 };
        foreach (int element in fibarray)
        {
            System.Console.WriteLine(element);
        }
        System.Console.WriteLine();


        // 类似 foreach 循环
        for (int i = 0; i < fibarray.Length; i++)
        {
            System.Console.WriteLine(fibarray[i]);
        }
        System.Console.WriteLine();


        // 设置集合中元素的计算器
        int count = 0;
        foreach (int element in fibarray)
        {
            count += 1;
            System.Console.WriteLine("Element #{0}: {1}", count, element);
        }
        System.Console.WriteLine("Number of elements in the array: {0}", count);
    }
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] a = { 152, 32, 0, 100, 99, 3, 5 };
            foreach(int item in a)     //遍历数组      var :int                                                //collection:a(数组)  item:输出的变                                        //量
            {
                Console.WriteLine(item);
            }
            
            Console.ReadKey();
        }
    }
}

image.png

4.4.4跳转语句- Continue和break的功能p60

  • break语句直接退出整个循环。
  • continue语句:立即终止本次循环,但不会继续执行下一次循环。
  • goto语句:跳出循环到已标记好的位置上。
  • return语句:退出循环和循环所在的函数。

第五章:

5.2 类的声明及类的成员(字段,属性,方法等)p68,类的访问修饰符(internal,public,private,protected)含义p69
1.字段

字段是程序开发中常见的常量或者变量,它是类的一个构成部分,使得类可以封装数据。 image.png

2.属性

属性经常与字段连用,属性的作用是对字段赋值时加以限制。定义属性需要类型和名字。属性包含get块和set块。访问属性时,当取得属性值时,会调用get块,当设置属性值时,会调用set块。

3.方法
  • 方法的重载:在同一个作用域内,可以声明几个功能类似的同名函数。调用时根据不同的实参列表选择相应的函数。
  • 重载的特点:函数名相同,参数列表不同。
  • 参数列表不同主要体现在参数个数或参数的数据类型不同。在调用重载的方法时系统是根据所传递参数的不同判断调用的是哪个方法。
类的访问修饰符
  • public:同一程序集和和引用该程序集的所有代码都可访问。public成员可访问级别由该类型本身的级别决定。
  • private:只有同一类中的成员可以访问
  • protected:同一类和派生类中的代码可以访问
  • internal:同一程序集中的代码可以访问。
5.3构造函数的特征p74

类的构造函数是类的一个特殊的成员函数,当创建类的新对象时执行。

构造函数的名称与类的名称完全相同,它没有任何返回类型。

下面的实例说明了构造函数的概念:

namespace LineApplication
{
   class Line
   {
      private double length;   // 线条的长度
      public Line()
      {
         Console.WriteLine("对象已创建");
      }

      public void setLength( double len )
      {
         length = len;
      }
      public double getLength()
      {
         return length;
      }

      static void Main(string[] args)
      {
         Line line = new Line();    
         // 设置线条长度
         line.setLength(6.0);
         Console.WriteLine("线条的长度: {0}", line.getLength());
         Console.ReadKey();
      }
   }
}
5.4.1方法的定义和调用p79
  1. 定义方法

下面的代码片段显示一个函数 FindMax,它接受两个整数值,并返回两个中的较大值。它有 public 访问修饰符,所以它可以使用类的实例从类的外部进行访问。

{  
   public int FindMax(int num1, int num2)  
   {  
      /* 局部变量声明 */  
      int result;  
  
      if (num1 > num2)  
         result = num1;  
      else  
         result = num2;  
  
      return result;  
   }  
   ...  
}

3. 调用方法

  
namespace CalculatorApplication  
{  
   class NumberManipulator  
   {  
      public int FindMax(int num1, int num2)  
      {  
         /* 局部变量声明 */  
         int result;  
  
         if (num1 > num2)  
            result = num1;  
         else  
            result = num2;  
  
         return result;  
      }  
      static void Main(string[] args)  
      {  
         /* 局部变量定义 */  
         int a = 100;  
         int b = 200;  
         int ret;  
         NumberManipulator n = new NumberManipulator();  
  
         //调用 FindMax 方法  
         ret = n.FindMax(a, b);  
         Console.WriteLine("最大值是: {0}", ret );  
         Console.ReadLine();  
      }  
   }  
}
最大值是: 200
5.4.2方法的参数:值参数的传值及程序的执行结果,引用参数的调用和赋值,输出参数的赋值p81-83

image.png

namespace CalculatorApplication  
{  
   class NumberManipulator  
   {  
      public void swap(int x, int y)  
      {  
         int temp;  
           
         temp = x; /* 保存 x 的值 */  
         x = y;    /* 把 y 赋值给 x */  
         y = temp; /* 把 temp 赋值给 y */  
      }  
       
      static void Main(string[] args)  
      {  
         NumberManipulator n = new NumberManipulator();  
         /* 局部变量定义 */  
         int a = 100;  
         int b = 200;  
           
         Console.WriteLine("在交换之前,a 的值: {0}", a);  
         Console.WriteLine("在交换之前,b 的值: {0}", b);  
           
         /* 调用函数来交换值 */  
         n.swap(a, b);  
           
         Console.WriteLine("在交换之后,a 的值: {0}", a);  
         Console.WriteLine("在交换之后,b 的值: {0}", b);  
           
         Console.ReadLine();  
      }  
   }  
}
在交换之前,a 的值:100
在交换之前,b 的值:200
在交换之后,a 的值:100
在交换之后,b 的值:200
(以上并不能成功交换两个数的值)

引用参数是一个对变量的内存位置的引用。当按引用传递参数时,与值参数不同的是,它不会为这些参数创建一个新的存储位置。引用参数表示与提供给方法的实际参数具有相同的内存位置。

在 C# 中,使用 ref 关键字声明引用参数。下面的实例演示了这点:

namespace CalculatorApplication  
{  
   class NumberManipulator  
   {  
      public void swap(ref int x, ref int y)  
      {  
         int temp;  
  
         temp = x; /* 保存 x 的值 */  
         x = y;    /* 把 y 赋值给 x */  
         y = temp; /* 把 temp 赋值给 y */  
       }  
     
      static void Main(string[] args)  
      {  
         NumberManipulator n = new NumberManipulator();  
         /* 局部变量定义 */  
         int a = 100;  
         int b = 200;  
  
         Console.WriteLine("在交换之前,a 的值: {0}", a);  
         Console.WriteLine("在交换之前,b 的值: {0}", b);  
  
         /* 调用函数来交换值 */  
         n.swap(ref a, ref b);  
  
         Console.WriteLine("在交换之后,a 的值: {0}", a);  
         Console.WriteLine("在交换之后,b 的值: {0}", b);  
   
         Console.ReadLine();  
  
      }  
   }  
}
在交换之前,a 的值:100
在交换之前,b 的值:200
在交换之后,a 的值:200
在交换之后,b 的值:100
(以上成功交换两个数的值)
```
5.4.3方法重载的含义p85
5.4.4类中静态和非静态成员的含义p86

访问标识符 指定了对类及其成员的访问规则。如果没有指定,则使用默认的访问标识符。类的默认访问标识符是 internal,成员的默认访问标识符是 private。 数据类型 指定了变量的类型,返回类型 指定了返回的方法返回的数据类型。 如果要访问类的成员,你要使用点(.)运算符。 点运算符链接了对象的名称和成员的名称。

namespace BoxApplication  
{  
    class Box  
    {  
       public double length;   // 长度  
       public double breadth;  // 宽度  
       public double height;   // 高度  
    }  
    class Boxtester  
    {  
        static void Main(string[] args)  
        {  
            Box Box1 = new Box();        // 声明 Box1,类型为 Box  
            Box Box2 = new Box();        // 声明 Box2,类型为 Box  
            double volume = 0.0;         // 体积  
  
            // Box1 详述  
            Box1.height = 5.0;  
            Box1.length = 6.0;  
            Box1.breadth = 7.0;  
  
            // Box2 详述  
            Box2.height = 10.0;  
            Box2.length = 12.0;  
            Box2.breadth = 13.0;  
             
            // Box1 的体积  
            volume = Box1.height * Box1.length * Box1.breadth;  
            Console.WriteLine("Box1 的体积: {0}",  volume);  
  
            // Box2 的体积  
            volume = Box2.height * Box2.length * Box2.breadth;  
            Console.WriteLine("Box2 的体积: {0}", volume);  
            Console.ReadKey();  
        }  
    }  
}
    Box1 的体积: 210
    Box2 的体积: 1560
5.5.1属性的get和set方法的含义p89
    public    数据类型    属性名
{
    get
    {
        获取属性的语句块;
        return 值;
    }
    set
    {
        设置属性得到语句块;
    }
}
  1. get{}访问器:用于获取字段的值,需要使用return返回字段的值。在面向对象设计中,对应的是字段内容的读取。
  2. set{}访问器:用于设定字段的值,需要使用一个特殊的值,这个值就是在面向对象设计中,对字段设置的值。
eg:
以下对Book属性的定义中,id 和 name都是字段,用于类的内部数据交互,使用get,set语句定义了属性Id和Name,属性可以通过在类的实例化后进行对字段进行操作。
namespace code\_1
{
class Book
{
private int id;     //这个是字段
private string name;  //这个是字段

        public int Id     //设置图书编号属性
        {
            get
            {
                return id;
            }
            set
            {
                id = value;
            }
        }
        
        public string Name    //设置图书名称属性(只读)
        {
            get
            {
                return name;
            }
        }
        
    }

}
第七章
7.1.1静态字符串:字符串的本质可以看作是只读的一维字符数组,对于字符串中每个字符的访问,掌握String.Compare(),Equals(),IndexOfAny()和LastIndexOfAny(),subString()(书上没有,特殊强调讲例题)等常用方法.p118-124
1	public static int Compare( string strA, string strB )
比较两个指定的 string 对象,并返回一个表示它们在排列顺序中相对位置的整数。该方法区分大小写。
2	public static int Compare( string strA, string strB, bool ignoreCase )
比较两个指定的 string 对象,并返回一个表示它们在排列顺序中相对位置的整数。但是,如果布尔参数为真时,该方法不区分大小写。
3	public static string Concat( string str0, string str1 )
连接两个 string 对象。
4	public static string Concat( string str0, string str1, string str2 )
连接三个 string 对象。
5	public static string Concat( string str0, string str1, string str2, string str3 )
连接四个 string 对象。
6	public bool Contains( string value )
返回一个表示指定 string 对象是否出现在字符串中的值。
7	public static string Copy( string str )
创建一个与指定字符串具有相同值的新的 String 对象。
8	public void CopyTo( int sourceIndex, char[] destination, int destinationIndex, int count )
从 string 对象的指定位置开始复制指定数量的字符到 Unicode 字符数组中的指定位置。
9	public bool EndsWith( string value )
判断 string 对象的结尾是否匹配指定的字符串。
10	public bool Equals( string value )
判断当前的 string 对象是否与指定的 string 对象具有相同的值。
11	public static bool Equals( string a, string b )
判断两个指定的 string 对象是否具有相同的值。
12	public static string Format( string format, Object arg0 )
把指定字符串中一个或多个格式项替换为指定对象的字符串表示形式。
13	public int IndexOf( char value )
返回指定 Unicode 字符在当前字符串中第一次出现的索引,索引从 0 开始。
14	public int IndexOf( string value )
返回指定字符串在该实例中第一次出现的索引,索引从 0 开始。
15	public int IndexOf( char value, int startIndex )
返回指定 Unicode 字符从该字符串中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。
16	public int IndexOf( string value, int startIndex )
返回指定字符串从该实例中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。
17	public int IndexOfAny( char[] anyOf )
返回某一个指定的 Unicode 字符数组中任意字符在该实例中第一次出现的索引,索引从 0 开始。
18	public int IndexOfAny( char[] anyOf, int startIndex )
返回某一个指定的 Unicode 字符数组中任意字符从该实例中指定字符位置开始搜索第一次出现的索引,索引从 0 开始。
21	public static string Join( string separator, string[] value )
连接一个字符串数组中的所有元素,使用指定的分隔符分隔每个元素。
22	public static string Join( string separator, string[] value, int startIndex, int count )
连接一个字符串数组中的指定位置开始的指定元素,使用指定的分隔符分隔每个元素。
23	public int LastIndexOf( char value )
返回指定 Unicode 字符在当前 string 对象中最后一次出现的索引位置,索引从 0 开始。
24	public int LastIndexOf( string value )
返回指定字符串在当前 string 对象中最后一次出现的索引位置,索引从 0 开始。
25	public string Remove( int startIndex )
移除当前实例中的所有字符,从指定位置开始,一直到最后一个位置为止,并返回字符串。
26	public string Remove( int startIndex, int count )
从当前字符串的指定位置开始移除指定数量的字符,并返回字符串。
27	public string Replace( char oldChar, char newChar )
把当前 string 对象中,所有指定的 Unicode 字符替换为另一个指定的 Unicode 字符,并返回新的字符串。
28	public string Replace( string oldValue, string newValue )
把当前 string 对象中,所有指定的字符串替换为另一个指定的字符串,并返回新的字符串。
29	public string[] Split( params char[] separator )
返回一个字符串数组,包含当前的 string 对象中的子字符串,子字符串是使用指定的 Unicode 字符数组中的元素进行分隔的。
30	public string[] Split( char[] separator, int count )
返回一个字符串数组,包含当前的 string 对象中的子字符串,子字符串是使用指定的 Unicode 字符数组中的元素进行分隔的。int 参数指定要返回的子字符串的最大数目。
34	public string ToLower()
把字符串转换为小写并返回。
35	public string ToUpper()
把字符串转换为大写并返回。

7.2.1一维数组的声明及初始化,数组中元素的访问方式,典型实例程序-----一维数组最大值最小值,总和和平均值

见经典编程题 eg7

7.2.5冒泡排序的含义及比较轮数和每轮比较次数p138

算法步骤

1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

3 针对所有的元素重复以上的步骤,除了最后一个。

4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

bubbleSort.gif

选择排序

算法步骤

  1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。

  2. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到未排序序列的起始位置。

  3. 重复第二步,直到所有元素均排序完毕。 20200629172829794.gif 第九章

    1.Button、Label、TextBox、RadioButton、CheckBox控件的常用属性(注意属性的大小写)
Button:
1)Text 属性:用于显示按钮上显示的文本。eg:某个按的Text属性设置为"&Display",则程序运行时会显示为"Display"。
    (2)Image 属性:用来设置显示在按钮上的图像。
    (3)FlatStyle 属性:用来设置按钮的外观。默认为:Standard。
Label:
1)Text 属性:用来设置或返回标签控件中显示的文本信息。
     (2)AutoSize 属性:用来获取或设置一个值,该值指示是否自动调整控件的大小以完整显示其内容。取值为true 时,控件将自动调整到刚好能容纳文本时的大小,取值为false 时,控件的大小为设计时的大小。默认值为false。
      (3)Anchor 属性:用来确定此控件与其容器控件的固定关系的。所谓容器控件指的是这样一种情况:往往在控件之中还有一个控件,例如最典型的就是窗体控件中会包含很多的控件,像标签控件、文本框等。这时称包含控件的控件为容器控件或父控件,而父控件称为子控件。这时将遇到一个问题,即子控件与父控件的位置关系问题,即当父控件的位置、大小变化时,子控件按照什么样的原则改变其位置、大小。Anchor 属性就规定了这个原则。对于Anchor 属性,可以设定TopBottomRightLeft 中的任意几种,设置的方法是在属性窗口中单击Anchor 属性右边的箭头,将会出现如图9-6 的窗口,通过它可设置Anchor 属性值。图9-6 中选中变黑的方位即为设定的方位控制,即图中所示的为LeftRightBottom。此时,如果父窗口变化,子窗口将保证其左边缘与容器左边的距离、上边缘与容器上边的距离、底边与容器底边的距离等不变,效果如图9-7 所示。可见随着窗体的大小变化, Label 控件也会随着变。而不变的则是Archor 中所规定的边缘与相应的父控件边缘的距离。

        (4)BackColor 属性:用来获取或设置控件的背景色。当该属性值设置为Color.Transparent 时,标签将透明显示,即背景色不再显示出来。

        (5)BorderStyle 属性:用来设置或返回边框。有三种选择:

BorderStyle.None 为无边框(默认),BorderStyle.FixedSingle 为固定单边框,BorderStyle.Fixed3D 为三维边框。

        (6)TabIndex 属性:用来设置或返回对象的Tab 键顺序。(7)Enabled 属性:用来设置或返回控件的状态。值为true 时允许使用控件,值为false 时禁止使用控件,此时标签呈暗淡色,一般在代码中设置。图9-8 边框效果图另外,标签还具有Visible、ForeColor、Font 等属性,具体含义请参考窗体的相应属性。
TextBox:
1Text 属性:Text 属性是文本框最重要的属性,因为要显示的文本就包含在Text 属性中。默认情况下,最多可在一个文本框中输入2048 个字符。如果将MultiLine 属性设置为true,则最多可输入32KB 的文本。Text 属性可以在设计时使用【属性】窗口设置,也可以在运行时用代码设置或者通过用户输入来设置。可以在运行时通过读取Text 属性来获得文本框的当前内容。

(2)MaxLength 属性:用来设置文本框允许输入字符的最大长度,该属性值为0时,不限制输入的字符数。

(3)MultiLine 属性:用来设置文本框中的文本是否可以输入多行并以多行显示。值为true时,允许多行显示。值为false 时不允许多行显示,一旦文本超过文本框宽度时,超过部分不显示。

(4)HideSelection 属性:用来决定当焦点离开文本框后,选中的文本是否还以选中的方式显示,值为true,则不以选中的方式显示,值为false 将依旧以选中的方式显示。

(5ReadOnly 属性:用来获取或设置一个值,该值指示文本框中的文本是否为只读。值为true 时为只读,值为false 时可读可写。

(6)PasswordChar 属性:是一个字符串类型,允许设置一个字符,运行程序时,将输入到Text 的内容全部显示为该属性值,从而起到保密作用,通常用来输入口令或密码。

(7) ScrollBars 属性: 用来设置滚动条模式, 有四种选择: ScrollBars.None (无滚动条), ScrollBars.Horizontal(水平滚动条),ScrollBars.Vertical(垂直滚动条),ScrollBars.Both(水平和垂直滚动条)。

注意:只有当MultiLine 属性为true 时,该属性值才有效。在WordWrap 属性值为true 时,水平滚动条将不起作用

(8)SelectionLength 属性:用来获取或设置文本框中选定的字符数。只能在代码中使用,值为0 时,表示未选中任何字符。

(9)SelectionStart 属性:用来获取或设置文本框中选定的文本起始点。只能在代码中使用,第一个字符的位置为0,第二个字符的位置为1,依此类推。

(10)SelectedText 属性:用来获取或设置一个字符串,该字符串指示控件中当前选定的文本。只能在代码中使用。

(11)Lines:该属性是一个数组属性,用来获取或设置文本框控件中的文本行。即文本框中的每一行存放在Lines 数组的一个元素中。

(12)Modified:用来获取或设置一个值,该值指示自创建文本框控件或上次设置该控件的内容后,用户是否修改了该控件的内容。值为true 表示修改过,值为false 表示没有修改过。

(13)TextLength 属性:用来获取控件中文本的长度。

(14)WordWrap:用来指示多行文本框控件在输入的字符超过一行宽度时是否自动换行到下一行的开始,值为true,表示自动换到下一行的开始,值为false 表示不自动换到下一行的开始。

RadioButton:

1)Checked 属性:用来设置或返回单选按钮是否被选中,选中时值为true,没有选中时值为false。

(2)AutoCheck 属性:如果AutoCheck 属性被设置为true(默认),那么当选择该单选按钮时,将自动清除该组中所有其他单选按钮。对一般用户来说,不需改变该属性,采用默认值(true)即可。

(3)Appearance 属性:用来获取或设置单选按钮控件的外观。当其取值为Appearance.Button 时,将使单选按钮的外观像命令按钮一样:当选定它时,它看似已被按下。当取值为Appearance.Normal 时,就是默认的单选按钮的外观。

(4Text 属性:用来设置或返回单选按钮控件内显示的文本,该属性也可以包含访问键,即前面带有“&”符号的字母,这样用户就可以通过同时按Alt 键和访问键来选中控件。

CheckBox:

1)TextAlign 属性:用来设置控件中文字的对齐方式,有9 种选择,如图9-16 所示。从上到下、从左至右分别是:ContentAlignment.TopLeft、ContentAlignment.TopCenter、ContentAlignment.TopRight、ContentAlignment.MiddleLeft、ContentAlignment.MiddleCenter、ContentAlignment.MiddleRight、ContentAlignment.BottomLeft、ContentAlignment.BottomCenter和ContentAlignment.BottomRight。该属性的默认值为ContentAlignment.MiddleLeft,即文字左对齐、居控件垂直方向中央。

(2)ThreeState 属性:用来返回或设置复选框是否能表示三种状态,如果属性值为true 时,表示可以表示三种状态—选中、没选中和中间态(CheckState.Checked、CheckState.Unchecked和CheckState.Indeterminate),属性值为false 时,只能表示两种状态——选中和没选中。

(3)Checked 属性:用来设置或返回复选框是否被选中,值为true 时,表示复选框被选中,值为false 时,表示复选框没被选中。当ThreeState 属性值为true 时,中间态也表示选中。

(4)CheckState 属性:用来设置或返回复选框的状态。在ThreeState 属性值为false 时,取值有CheckState.Checked 或CheckState.Unchecked。在ThreeState 属性值被设置为True时,CheckState 还可以取值CheckState.Indeterminate,在此时,复选框显示为浅灰色选中状态,该状态通常表示该选项下的多个子选项未完全选中。
2.窗体的显示与隐藏方法,窗体的加载事件p170-171
窗体:
1)Name 属性:用来获取或设置窗体的名称,在应用程序中可通过Name 属性来引用窗体。

(2) WindowState 属性: 用来获取或设置窗体的窗口状态。取值有三种: Normal (窗体正常显示)、Minimized(窗体以最小化形式显示)和Maximized(窗体以最大化形式显示)。

(3)StartPosition 属性:用来获取或设置运行时窗体的起始位置。

(4)Text 属性:该属性是一个字符串属性,用来设置或返回在窗口标题栏中显示的文字。

(5)Width 属性:用来获取或设置窗体的宽度。

(6)Height 属性:用来获取或设置窗体的高度。

(7Left 属性:用来获取或设置窗体的左边缘的x 坐标(以像素为单位)。

(8)Top 属性:用来获取或设置窗体的上边缘的y 坐标(以像素为单位)。

(9)ControlBox 属性:用来获取或设置一个值,该值指示在该窗体的标题栏中是否显示控制框。值为true时将显示控制框,值为false 时不显示控制框。

(10)MaximizeBox 属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最大化按钮。值为true 时显示最大化按钮,值为false 时不显示最大化按钮。

(11)MinimizeBox 属性:用来获取或设置一个值,该值指示是否在窗体的标题栏中显示最小化按钮。值为true 时显示最小化按钮,值为false 时不显示最小化按钮。

(12)AcceptButton 属性:该属性用来获取或设置一个值,该值是一个按钮的名称,当按Enter 键时就相当于单击了窗体上的该按钮。

(13)CancelButton 属性:该属性用来获取或设置一个值,该值是一个按钮的名称,当按Esc 键时就相当于单击了窗体上的该按钮。

(14)Modal 属性:该属性用来设置窗体是否为有模式显示窗体。如果有模式地显示该窗体,该属性值为true;否则为false。当有模式地显示窗体时,只能对模式窗体上的对象进行输入。必须隐藏或关闭模式窗体(通常是响应某个用户操作),然后才能对另一窗体进行输入。有模式显示的窗体通常用做应用程序中的对话框。

(15)ActiveControl 属性:用来获取或设置容器控件中的活动控件。窗体也是一种容器控件。

(16)ActiveMdiChild 属性:用来获取多文档界面(MDI)的当前活动子窗口。

(17)AutoScroll 属性:用来获取或设置一个值,该值指示窗体是否实现自动滚动。如果此属性值设置为true,则当任何控件位于窗体工作区之外时,会在该窗体上显示滚动条。另外,当自动滚动打开时,窗体的工作区自动滚动,以使具有输入焦点的控件可见。

(18)BackColor 属性:用来获取或设置窗体的背景色。

(19)BackgroundImage 属性:用来获取或设置窗体的背景图像。

(20)Enabled 属性:用来获取或设置一个值,该值指示控件是否可以对用户交互作出响应。如果控件可以对用户交互作出响应,则为true;否则为false。默认值为true。

(21)Font 属性:用来获取或设置控件显示的文本的字体。

(22)ForeColor 属性:用来获取或设置控件的前景色。

(23)IsMdiChild 属性:获取一个值,该值指示该窗体是否为多文档界面(MDI)子窗体。值为true 时,是子窗体,值为false 时,不是子窗体。

(24)IsMdiContainer 属性:获取或设置一个值,该值指示窗体是否为多文档界面(MDI)中的子窗体的容器。值为true 时,是子窗体的容器,值为false 时,不是子窗体的容器。

(25)KeyPreview 属性:用来获取或设置一个值,该值指示在将按键事件传递到具有焦点的控件前,窗体是否将接收该事件。值为true 时,窗体将接收按键事件,值为false 时,窗体不接收按键事件。

(26)MdiChildren 属性:数组属性。数组中的每个元素表示以此窗体作为父级的多文档界面(MDI)子窗体。

(27)MdiParent 属性:用来获取或设置此窗体的当前多文档界面(MDI)父窗体。

(28)ShowInTaskbar 属性:用来获取或设置一个值,该值指示是否在Windows 任务栏中显示窗体。

*29)Visible 属性:用于获取或设置一个值,该值指示是否显示该窗体或控件。值为true时显示窗体或控件,为false 时不显示。*30)Capture 属性:如果该属性值为true,则鼠标就会被限定只由此控件响应,不管鼠标是否在此控件的范围内。