zoukankan      html  css  js  c++  java
  • C# 基础(2)

           打开一个解决方案,以.sin后缀名,.csproj是项目文件的后缀名。 

    Console.WriteLine("这是我的第二个项目!");你想显示的内容
    
    Console.ReadKey(); 
    

       当程序执行到Console.ReadKey(); 时,程序会停到这里,等待用户从键盘上键入一个键,用户键入这个键后,程序才继续执行。

     

    在C#中,每一句都必须以分号结束。

     

    WriteLineWrite的区别是有没有换行。

     

    设置VS环境中的字体与行号 :工具->选项

     

    C#中注释符:对我们写的程序进行解释,注释是给人看的。有三种:

    ① 单行注释,以//开始到本行结束

    ② 多行注释,以/*开始,以*/结束

    ③ 文档注释,用于类和方法进行注释,在类和方法签名连续输入3 /

     

    常用键:HOME END PageUP  PageDown DELT

     

    下面一对指令,可以折叠一堆代码

    #region #endregion

     

    .NET是一种多语言的开发平台,开发.NET可以用多达十几种语言进行开始。

     

    .NET框架平台包括 语言 VC++、C#、VB.NET

                      .NET FrameWork 类库(FCL

                       公共语言运行库(CLR

    操作系统:

    C#通过C#编译器,编译成MSIL(微软中间语言)->CLR(公共语言运行库),代码被执行。

     

     

     

    变量:

     

    计算机使用内存(RAM Random access momory)来储存数据,内存用于存储计算机正在运行的数据,断电后后面的数据丢失。保存数据之后就将数据从内存转到硬盘中。

     

    运行中,计算机给内存编址,变量代表着一块内存空间,我们可以通过变量名向内存存/取数据,有变量就不需要我们记忆复杂的内存地址。

     

        

     

    去宾馆登记入住 

     

     

     

    要在计算机中存一个数据1000,需要2句话。

     

    申请一块内存空间,考虑类型

     

      int number;

     

       number = 1000; 其中=赋值运算符,将数值1000放入内存空间。

     

     

     

                  数值(整数int、非整数即小数(doubledecimal))

     

                   

     

    数据类型    

     

     

     

                  非数值(charstring

     

     

     

    Double 小数精度1516

     

    Char   字符型 只能存储一个字符,并且存储的这个字符用单引号引起来.’A’

     

    String  字符串类型,就是把0个或1个或多个字符连接起来,要求用双引号引起来。”string”

     

    Decimal 精度2829位,主要用于财务上。

     

     

     

    C#开发环境中,直接写一个有小数点得数字,这个数字就是double类型。在此小数后面加一个m/M,这就是告诉编译器,此小数是decimal类型。

     

     

     

    变量声明的方法,有3种:

     

    ① 先声明,后赋值;

     

    ② 定义变量时,直接赋值;

     

    ③ 可以一次声明多个同类型的变量,多个变量名称之间用逗号隔开,最后以分号结束。

     

    注:变量要先声明,后赋值,最后使用(取值或调用这个变量或写这个变量)。

     

     

     

    变量的命名规则:

     

    1、 必须以“字母”_ @符号开头(不能以数字开头)

     

    2、 后面可以跟任意的“字母”、数字和下划线。

     

    注意:

     

    1、 变量名不予系统中的关键字重复

     

    2、 在C#中,大小写敏感

     

    3、 同一个变量名不允许重复定义

     

    定义的变量名要有意义。

     

     

     

    C#中变量命名编码规范,有两种:

     

    Camel命名法:首个单词的首字母小写,其余单词的首字母大写。在Main()方法中的定义变量采用Camel命名法。

     

    Pascal命名法:每个单词的首字母均大写。

     

    如果使用大英语单词的缩写,全部要用大写。

     

     

     

    赋值运算符(=)和赋值表达式

     

    优先级最低的

     

    a= a+1

     

    先把a取出来,相加再赋值

     

    注:变量可以重复赋值,一旦给一个变量附了新值,那么变量中的老值就不存在了。

     

    一般情况下,变量只能定义一次,但可以多次赋值,再次赋值是,会把变量中的值给覆盖掉了。

     

     

     

    +”在C#中有两种意义:

     

     1)是数学中的加法;两边参与加法运算的是数值类型

     

     2)是连接的意思,如果两边参与的是“+”运算的数据,有一个是字符串类型。

     

                                            整理于2012-02-27 

     

    C#中数据类型包括两种,一种是值类型,一种是引用类型,值类型是直接存储值,而引用类型存储的是值得引用。

     

    引用类型的变量又称为对象,可存储对实际数据的引用。Classinterfacedelegate都可以用于声明引用类型。

     

    C#中有两个内置的引用类型,object类型和string 类型,

     

    1)object类型

     

    object类型在.NET中是Object的别名,在C#中,所有的类型,都可以直接或间接从Object继承。可以将任何类型的值赋给object变量。

     

     

     

     class ObjectClass

     

        {

     

            public int i = 60;

     

        }

     

        class Program

     

        {

     

            static void Main(string[] args)

     

            {

     

                object a = 1;

     

                Console.WriteLine(a);

     

                Console.WriteLine(a.GetType ());//取得当前的类型

     

                Console.WriteLine(a.ToString ());

     

                Console.WriteLine();

     

                a = new ObjectClass();//重新实例化变量a

     

                ObjectClass classRef;

     

                classRef = (ObjectClass)a;//引用调用

     

                Console.WriteLine(classRef.i); 

     

                Console.Read();

     

            }

     

        }

     

     

     

    string 类型表示Unicode字符的字符串,它是.NET中的String别名,字符串是不可改变的,字符串对象一旦被创建,其内容就不能更改。

     

      string a = "hello";

     

                string c = "h";

     

                c = c + "ello";

     

                Console.WriteLine(a==c);

     

                Console.WriteLine((object )a==(object )c);//ac引用的不是同一个字符串实例

     

                int i=  Console.Read();

     

                Console.WriteLine(i);

     

               // Console.WriteLine(Console.ReadKey() );

     

                Console.WriteLine();

     

                Console.ReadKey();

     

     

     

     

     

    装箱与拆箱

     

    装箱是将值类型转换为引用类型object,这使得值类型可以存储在垃圾回收堆中,而拆箱是从对象中提取值类型。

     

    相对于简单的赋值而言,装箱和拆箱过程需要进行大量的计算,对值类型进行装箱时,必须分配并构造一个全新的对象,而拆箱过程的强制转换也需要进行大量的计算,因此装箱和拆箱会对程序的执行性能有影响。

     

                 int i = 99;

     

                 object o = (object )i;//装箱

     

                 Console.WriteLine(o);

     

                 Console.WriteLine(o.GetType());

     

                // Console.WriteLine (o.GetHashCode());哈希运算一个数学方程式,

     

                //它可用文本(如电子邮件信息)来生成称为信息摘要的代码。

     

                //著名的哈希函数如:MD4MD5SHS。 用于数字鉴别的哈希函数必须有特定的属性,

     

                //使它在密码使用方面有足够的安全性。

     

                 o = 123;

     

                 i = (int)o;//拆箱

     

                 Console.WriteLine(i);

     

                 Console.WriteLine(i.GetType ());

     

                 Console.ReadKey();

     

    Sbyte 八位有符号整数 

     

    Byte 八位无符号整数

     

     

     

    ??操作符

     

                int ? x = null;

     

                //y=x,如果x=nully=-1

     

                int y = x ??-1;

     

                Console.WriteLine("y{0}",y);

     

     

     

    New运算符

     

    New 运算符用于创建一个新的类型实例,它有以下3种形式:

     

    1)对象创建表达式,用于创建一个类类型或值类型的实例。

     

    2)数组创建表达式,用于创建一个数组类型的实例。

     

    3)代表创建表达式,用于创建一个代表类型的实例。

     

     

     

    Typeof运算符

     

    Typeof运算符用于获得系统原型对象的类型,即type对象。Type类型包含关于值类型和引用类型的信息,Typeof运算符可以在C#语言中的各种位置使用,以找出关于引用类型和值类型的信息。

     

     Type myType = typeof (int );

     

     Console.WriteLine(myType );

     

     

     

    占位符

     

    Console.WriteLine(""),第一个变量或字符串可以使用占位符。

     

    占位符由{数字}组成,数字由0开始编号

     

    1个占位符:{0}

     

    2个占位符:{1}

     

    3个占位符:{2}

     

    ......

     

    0取第一个变量,1取第二个变量,占位符可以重复使用。

     

    Console .WriteLine ("我叫{0},今年岁了,我的工资是{2}",name,age,salary );

     

     

     

    占位符

     

    Console .WriteLine()有多个参数时,输出都是第一个参数中的内容,从第二个参数开始时,都是用来替换第一个参数中的占位符的值,所以从第二个参数开始,要不要输出,就要看第一个参数有没有相关的占位符。(?)

     

     

     

    字符串类型

     

     

     

    Console.ReadLine( );

     

    用于让用户从键盘上输入一句话,当程序执行到上面的一句话,就会暂停,然后等待用户从键盘上输入一句话,按回车程序将继续执行。如果想得到用户输入的内容,就需要定义一个string类型的变量,写在上面一句话的前面,接收用户输入的内容。接收用户输入的内容,必须定义一个字符串来接收。

     

    string  input = Console.ReadLine( );

     

     

     

    字符串的转义

     

    转义字符:什么时候用转义字符?

     

    当我们需要字符串中输入一些特殊字符时,比如半角引号、换行、退格。

     

    转义字符是一个字符,它由一个和一个字母来组成,并且有特殊意义的一个字符。常用转义字符有:

     

     换行

     

     baskspace 退格

     

     tab键,由多个空格组成的字符,具有行与行之间的对齐功能。

     

    表示一个扛

     

    "表示一个"

     

     

     

    在字符前面加一个@有两种意义:

     

    ⑴字符串中如果有,则不再理解为转义符;

     

    (2)使字符串可以换行

     

    如果在字符串前面加了@符号,在字符串中用两个双引号代表一个引号。

     

     

     

    算数运算符及算数表达式

     

    算数运算符:+ - * / %(取余或取模)

     

    算数表达式:由算数运算符连接起来的式子。

     

     

     

    C#中,有5个运算符,+ - * / %它们均是二元运算符,要求参与的两个操作数的类型必须相同,并且经过运算的结果也与操作的类型相同。

     

     

     

    优先级:先乘除,后加减,有括号先运算括号内的,先算里层的括号,再算外层的括号,相同级别从左至右运算,小括号可以无限制使用,注意的是,一定要成对出现。

     

     

     

    类型自动转换规则:

     

    参与运算(算数运算和赋值运算)的操作数和结果类型必须一致,当不一致时,满足下面条件时,系统会自动完成类型转换。

     

    1)两种类型兼容;比如int类型和double 类型

     

    2)目标类型大于源类型;比如double >int ,小的转向大的,且数据不丢失。

     

    3)对于表达式

     

       如果一个操作数为double类型,则整个表达式将提升为double类型。

     

     

     

    在自动转换过程中,是不丢失精度的,经常遇到的是,参与运算的两个操作数,一个是int类型,一个是double类型,那么int 类型将自动转换为double类型。

     

    如果精度丢失,则自动转换不会进行。

     

     

     

    强制类型转换:

     

    语法:

     

    (数据类型名)待转换的值

     

    强制类型转换,数据一定要相互兼容。

     

    字符串说法通过强制类型转换成数字类型,因为强制转换要求待转换的类型和目标类型必须都为数字。

     

                string age = Console.ReadLine();

     

                int age1= Convert.ToInt32 (age);

     

    Convert 不再是内存级别的转换,而是考虑数据含义的转换。Convert是一个加工、改造的过程。

     

    一切类型都可以转换为String 类型。

     

     

     

     

     

    Try-catch

     

    Try  

     

    {

     

        有可能出现错误的代码在在这里

     

    }

     

    Catch

     

    {

     

         出错后的处理

     

    }

     

    如果try中的代码没有出错,则程序正常运行try中的内容,不会执行catch中的内容。

     

    如果try中的代码一旦出现错误,程序立即停止,跳入catch部分进行执行。

     

     

     

    自加自减

     

    一元表达式 

     

    ++ 有前加和后加

     

    -- 有前减和后减

     

    Int age = 18 

     

    Int sum = age++ - 10 

     

    上面代码在进行运算时,age++age原值进行运算,所以sum= 8;

     

    就相当于

     

    Int age = 18 

     

    Int sum = age - 10 

     

    Age = age +1 

     

    Int  age = 18;

     

    Int sum = ++age -10 ;

     

    在运算时,++ageage加一后的新值参与运算,故sum= 9

     

    就相当于

     

    Int age = 18;

     

    Age = age + 1;

     

    Int sum = age -10;

     

    总之,不管是++age,还是age++age的值都进行了加一运算。

     

     

     

    c#中,一元运算符的优先级比二元运算符的优先级高。

     

    复合运算符

     

    +=  age +=3 就等价于age = age +3,理解为在age的原值上直接加3

     

    -=

     

    *=

     

    /=

     

    %=

     

    C#中,能改变变量中的值有:

     

    =++--+=-=*=/=%=

     

     

     

    关系运算符(比较运算)

     

    >  <  ==  != >= <=

     

    C#中,6个关系运算符,用于比较两个事物之间的关系。

     

    关系表达式的运算结果为bool类型,BOOL类型只有两个值,一个是True一个是Flase,如果关系表达式成立,则这个表达式的值为True,否则为False

     

     

     

    逻辑运算符(&& || !

     

     

     

    1)逻辑与运算符(&&)

     

    表达式1

    表达式2

    逻辑与结果

    True

    True

    True

    Flase

    True

    Flase

    True

    Flase

    Flase

    Flase

    Flase

    Flase

     

     

     

    逻辑与(&&)连接的两个表达式要能求解成BOOL类型,一般情况下都是关系表达式,整个逻辑与运算结果也是BOOL类型

     

    BOOL isRight = 表达式1 &&表达式2

     

    先进行关系运算,再进行与运算。

     

     

     

    2)逻辑或运算(||

     

    只要有一个为True,其运算结果就为True

     

     

     

    3)逻辑非(!)(取反)  这是一个一元运算

     

     用法:

     

     !(布尔类型的表达式即关系表达式)

     

    作用,真变假,假变真

     

     

     

    &&逻辑与 第一个条件为false时,第2个表达式不执行

     

    ||逻辑或   第一个条件为true时,第2个表达式不执行

     

     

     

    优先级:

     

     

     

    If 结构

     

    If(条件条件时关系表达式或逻辑表达式

     

    {

     

        语句1

     

    }

     

    执行过程:

     

    首先判断条件的结果,如果条件为true,则执行语句1,如果条件为False,则跳过语句1,执行后面的语句。

     

    注意:

     

    1)if后面括号中的条件要能计算为一个bool类型;

     

    2)默认情况下,if语句只能带一句话,即和if语句有关的语句只有语句1

     

     

     

    If - else 结构

     

    语法

     

    If(条件)

     

    {

     

        语句块1

     

    }

     

    Else 

     

    {

     

    语句块2

     

    }

     

    如果大括号去掉,则只带一句话。

     

    执行过程:

     

    如果条件为true,则执行语句块1,并且跳过else所带的语句块

     

    如果条件为False,则跳过if所带的语句块1,执行else带的语句块

     

    上面两个语句块,根据条件结果为truefalse,总有一个语句块被执行。

     

     

     

    If - elseif -else

     

    语法

     

    If(条件1

     

    {

     

        语句块1

     

    }

     

    elseIf(条件2

     

    {

     

    语句块2

     

    }

     

    elseIf(条件3

     

    {

     

    语句块3

     

    }

     

     

     

    。。。。。。

     

    Else

     

    {

     

       语句块;

     

    }

     

     

     

    if-elseif结构中只有当上一条件不成立时,才会进入下一个elseif 语句,并进行后面的条件判断,一旦elseif后面的条件为true,则执行elseif所带的语句块,执行完成后,程序跳出if-elseif结构,如果所有的if都不成立,如果有else,则执行else后面所带的语句,否则什么都不执行。

     

    Else 永远和最近的if语句配对。

     

     

     

    Ctrl+K+F 自动排版功能。

     

     

     

     

     

    Switch-case语句

     

    语法:

     

     Switch(表达式)其结果是一个值

     

    {

     

      Case : 

     

      语句块1

     

      Break

     

      Case : 

     

      语句块2

     

      Break

     

      Case : 

     

      语句块3

     

      Break

     

    。。。。。。

     

      Default :

     

      语句块3

     

      Break

     

     

     

    }

     

    执行过程:

     

    首先计算表达式,然后根据计算的结果,去匹配case后面的值,如果有匹配项,则执行匹配项后面的语句,知道该语句后面的break语句,跳出switch-case语句,如果与所有的case后面的值都不匹配,如果有default,则执行default,则执行default后面的语句,如果没有default语句,则跳出switch-case,什么都不执行。

     

     

     

    注意:

     

    直接搜索匹配项,与default位置无关,只有和匹配项有关,只有当没有匹配项的时候,才执行default后面的语句。

     

    但多种类型输出的结果相同时,可以合写。

     

     

     

    If - elseif -else和 Switch-case语句

     

    相同点:

     

    都可以实现多分支结构:

     

    不同点:

     

    Switch-case语句一般情况下只能用于等值比较

     

    If - elseif -else语句可以处理范围

     

     

     

    目前,我们学习的程序结构有3种:

     

    顺序结构

     

    分支结构

     

    循环结构

     

     

     

    While循环的语法

     

    While(循环条件)结果是bool类型,是true或是false

     

    {

     

       循环体;及要循环执行的N条语句

     

    }

     

     

     

    执行过程:

     

    1)先判断循环条件,如果条件为True,则转向2),如果条件为false,则转向3);

     

    2)执行循环体,循环体执行结束后,转向1);

     

    3)跳出循环,循环结束。

     

     

     

    注意:

     

    在循环体中一定要有改变循环条件中的每个变量的值得语句,使循环条件终有一天为False

     

     

     

    N此循环,如果i0开始,则循环条件为i<n

     

     

     

    特点:是先判断,后执行。

     

     

     

    Do -while 循环

     

    语法:

     

    Do

     

    {

     

    循环体;

     

    }

     

    While(条件)

     

     

     

    执行过程:

     

    1)先执行循环体,执行完循环体,转向2);

     

    2)判断条件是否成立,如果条件为True,转向1),如果条件为False,则转向3

     

    3)跳出循环。

     

     

     

    加入循环条件开始就不成立,对于while循环,一次都不会执行循环体,而对于do-while循环,会执行一次循环体。

     

     

     

     

     

    Try-catch语句

     

    检测异常

     

    Try

     

    {

     

        有可能出现异常的代码

     

    }

     

    Catch

     

    {

     

          出现异常后的处理

     

    }

     

     

     

    如果try语句真的代码没有出现异常,则不会执行Catch中的代码,如果try中的代码出现异常,则程序立即跳到catch中。

     

    如果语句有异常,则不会执行异常语句下面的语句。

     

     

     

    程序调试

     

    程序错误一般有两种错误:语法错误和逻辑错误。

     

    3种方法:

     

    1)单步运行

     

    2)观察变量

     

    3)设置断面

     

    F10  F11 单步运行

     

     

     

    For 循环

     

    用于已知循环次数:

     

    语法:

     

    For(表达式1;表达式2;表达式3)

     

    {

     

         循环体;

     

    }

     

     

     

    执行过程:

     

    1)先计算表达式1,转向2);

     

    2)判断表达式2(即为循环条件),如果表达式2的值为True,转向3),如果表达式2的值为False,转向5);

     

    3)执行循环体,转向4);

     

    4)执行表达式3,转向2);

     

    5)跳出循环,循环结束。

     

     

     

    一般情况下,表达式1用于循环变量和对循环变量附初值;

     

                表达式2为循环条件;

     

                表达式3用于改变循环变量的值。

     

     

     

     

     

    跳转语句

     

    Break语句,用于循环中,退出当前循环。Break一般与if语句配合使用

     

     

     

    While

     

    {

     

    ........

     

    Break;跳出循环

     

    随后的语句不执行

     

     

     

     

     

    }

     

     

     

    注:

     

    1)用于Switch-case结构中,用于跳出switch

     

    2)用于循环中,跳出循环,终止循环。

     

    用于循环中,跳出的是break所在的循环。

     

     

     

    标志位 flag  定义为bool类型

     

     

     

    Continue 语句

     

    While(  ) 

     

    {

     

         Continue;继续进行下一次循环。

     

    }

     

     

     

    Continue:

     

    用于循环中,程序一旦执行到continue语句,立即结束本次循环,就是不再执行循环体中下面的语句,直接进行下一次循环。

     

    对于do-while/while循环,直接进行下一次循环条件的判断,如果成立,进入下一次循环。

     

    对于for循环,先执行表达式3,再判断条件是否成立。

     

     

     

     

     

    三元表达式

     

    表达式1?表达式2:表达式3

     

    执行过程:

     

    首先计算表达式1,应该是一个能够计算成BOOL类型的值,如果BOOL类型的表达式为True,则表达式2的值为整个表达式的值,如果表达式1的值为False,则表达式3的值作为整个表达式的值。

     

                                                        

     

     

     


                                                                                                                                                                           于2012- 03-02早晨

     

     

     

     

     

     

  • 相关阅读:
    poj1417(带权并查集+背包DP+路径回溯)
    poj1182(带权并查集)
    hdoj3038(带权并查集)
    poj1611(并查集简单应用)
    poj2236(并查集)
    莫队板子,例题
    离散化二维坐标
    P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
    树链剖分板子
    P2486 [SDOI2011]染色 区间合并+树链剖分(加深对线段树的理解)
  • 原文地址:https://www.cnblogs.com/sly-tongtong/p/3688216.html
Copyright © 2011-2022 走看看