C#基础学习笔记—个人整理

学习笔记

第一章:c#基础

一、程序设计语言的发展及历史

    1、程序设计语言?

    通俗也叫编程语言,实现人与机器交互的工具

 

2、历史

    1)机器语言 : 0,1

    2)汇编语言 : 包含一些机器语言,同时增加了一些指令,便于理解

    3)C语言    :和我们的自然语言非常像

    4)C++        : 在C语言的基础上进行发展,增加了面向对象的特性

    5)Java        : SUN公司开发,被Oracle公司收购

    6)C#        :面向对象的程序设计语言

    7)易语言    : 源代码是使用中文来编写的

    ...

    注:不同的编程语言,应用场景是不一样的

    java、C#是面向企业级的应用开发

    机器语言(0,1) 汇编语言(Add 1,2) 高级语言(1+2)

    void main() {

        printf("我爱你的钱!") ;

    }

    

    3、编译器(翻译者)

    把源代码编译(翻译)成计算机能读懂的代码(0、1)

    

二、.NET框架(.NET Framework)

1、概述

    是所有.NET程序运行的平台

    C#、C++、F#……

        

    .NET版本目前最高版本是:4.7

    地球是所有生物生存的平台

    人、猫、狗...

    

2、组成

    通用语言运行库(CLR) : 运行程序的环境

    类库: .NET程序的工具集合

 

3、C#

    "面向对象"的程序设计语言

    微软公司研发的

    与Java语言竞争

 

4、Visual Studio(VS) : 开发软件的"集成"工具

5、第一个C#程序

第一:新建一个以.cs为后缀的文件

第二:编写源代码

using System ;

namespace Xxxx

{

    class Yyyy

    {

        static void Main()

        {

            //在此编写程序,实现功能

        }

    }

}

第三:把源代码编译成二进制的代码(机器代码、目标代码)

    csc Xxxxx.cs -> Xxxxx.exe

第四:运行程序

    Xxxxx

    注:Xxxxx表示CS文件名

 

6、.NET程序的编译机制(执行过程)

    .NET源代码 -> MSIL -> 机器代码

    两次编译

 

三、算法、指令、程序、软件的关系

算法:解决问题的步骤/过程

    指令:编写每一条代码

    程序:指令的集合

    软件:程序+数据的集合

 

四、C#语言的基本结构及其含意(重)

using System;

    namespace ch01

    {

        class HelloWorld

        {

            static void Main(string[] args)

            {

                Console.WriteLine("hello,world") ;

            }

        }

    }

    

    说明:

    1)C#程序必须以cs为后缀

    

    2)C#程序严格区分大小写

    

    3)标识符 : 是一个符号,用于命名。标识符的命名规则为:

        一般由字母、数字、下划线组成

        首字符必须使用字母或下划线

        命名有意义

        name、age、aGE123、

        a123b、_123A、123_C

    

    4)using System; : 使用命名空间

        命名空间:文件夹,用于组织和管理类

    

    5)namespace Ch01 : 自定义命名空间,语法如下:

        namespace 命名空间名称

        {

            ...

        }

        

    6)class Programe :自定类(类别),语法如下:

        class 类名称

        {

            ...

        }

        注:类名要首字母要大写

 

    7)static void Main(string[] args) :主函数,是程序的入口

 

        注:一个C#程序,至少要有一个Main方法

        static     : 静态

        void     : 空的

        string[] args : 传入参数

        

    8)Console.WriteLine("我爱你C#!") ;

      

        Console:

            是系统中的一个类,表示控制台

            此类在System这个命名空间

            因此,使用此类,必须using System ;

            或者:

            System.Console.WriteLine(".".") ;

            

        WriteLine("打印输出的内容")

            是一个输出函数,把双引号的内容,

            打印输出到屏幕

            双引号必须是英文状态下输入

    

    9)每一个语句必须以分号结束

    

    10)转义字符 -> 把特殊字符转换为对应意义的字符

        转义字符都是以\开始

        

        \\ -> \

        \" -> "

        \' -> '

        \t -> 一个制表位(8个空格)

        \n -> 换行

    

    11)注释 : 注释的代码不会被执行,便于程序员阅读或理解代码

    //单行注释

    

    /*

        多行注释

    */

    

    注:养成注释的习惯

    

五、输出函数(重)

1、Console.Write("内容")    :输出内容后,不换行

2、Console.WriteLine("内容") : 输出内容后,换行

 

"好好学习,天天向上"

 

3、占位符输出:

    {N},N从0开始,有多少个占位符,就有多少个数据

Console.Write("姓名:张三,年龄:18") ;

 

Console.Write("姓名:{0},年龄:{1}","张三",18) ;

 

六、.Net程序的类型

1、控制台程序

2、窗体程序

3、ASP.NET应用程序 -> web应用

 

七、程序的错误类型

1、语法错误(编译时错误)    

2、运行时错误

3、逻辑错误

        

第二章:数据类型

一、计算机的组成

    CPU、硬盘、主板、显示器、内存、键盘、鼠标、打印机

    显卡、网卡、电源、光驱....

    输入设备    : 输入数据

    输出设备    : 输出数据

    运算器        : 加工处理数据

    控制器        : 控制各部件有条不紊的工作

    存储器        : 存储数据

    

    外存(辅存) -> 硬盘、U盘、移动硬盘、光驱     -> 容量大、速度慢、成本低、永久存放数据

    内存(主存)                                      ->     容量小、速度快、成本高、断电后数据丢失

        CPU当前处理的数据存储在内存中

 

二、计算机的执行过程

编写C#语言程序的目的为了"处理数据"

    C#语言中处理的数据都是从主存(内存)中获取

 

三、变量、常量 -> 内存中开辟的某个空间,用于存储程序即将处理的数据(变量)

    1.概念:

        变量--可以改变的量

        常量--一旦赋值,就不能改变

        变量名/常量名 -> 用于指定内存空间的名称,方便操作内存空间中的数据

 

    2.标识符 -> 是一个符号,用于命名(变量、命名空间、类、方法...)

        在C#语言中,标识符具有以下命名规则

        1)由字母、数字、下划线组成,且第一个字符必须是字母或下划线

        2)严格区分大小写

        3)不能使用关键字(关键字[保留字]:已经具体特殊意义且被程序设计语言占用)

        4)取名要有意义

        

        命名规范

        1)Pascal规则(帕斯卡命名):每个单词开头的字母大写(如:TestCounter).

            命名空间、类、方法名

 

        2)Camel规则(大驼峰和小驼峰命名):除了第一个单词外的其他单词的开头字母大写. 如. testCounterHello.

            变量名

            userAge

            

        3)Upper规则:仅用于一两个字符长的常量的缩写命名,超过三个字符长度应该应用Pascal规则

            常量

            PI -> 圆周率

        

    3.变量的定义

        1)语法如下

        [访问修饰符] 数据类型 变量名 ;

        注:访问修饰符->控制访问变量的权限

        

        2)赋值 -> 给变量对应的内存空间存放数据

        变量名 = 值 ;

        

        3)其它用法

        [访问修饰符] 数据类型 变量名1,...,变量名n ;

        int a,b,c,d        ;

        

        在定义变量的同时,给变量赋值

        [访问修饰符] 数据类型 变量名 = 值 ;

        

可以通过输入方法给变量赋值

        string 变量 = Console.ReadLine() ;

        注:

        变量在同一个范围中,只能定义一个

        在使用局部变量之前,必须给变量赋值

        

4.常量的定义(基本同变量)

    [访问修饰符] const 数据类型 常量名 = 值 ;

    

    注:

        使用const关键字声明常量

        在定义常量的时候,必须赋值

 

四、数据类型 - 具体数据的分类(归类),指定内存空间存放数据的种类

    1.好处

        增加安全性

        规范化数据

        

    2.数据类型的种类

     1.1)整型(整数):默认是int

            A.sbyte,byte 字节

            B.short,ushort

            C.int,unit

            D.long,ulong

            

        1.2)浮点数型(实型、小数)

            A.单精度浮点型 -> float -> F

            B.双精度浮点型 -> double -> 默认

            C.财务专用类型 -> decimal -> M

            注:(数值型)整数和浮点数都能表示某个范围的数据

            溢出:超出类型所示的范围

            

            3.14

            3.14F

            3.14M

            

            sbyte age = 130 ; //报错,溢出

        

        1.3)布尔类型(逻辑) - bool

            true

            false

        

        1.4)字符型 -> char

            注:

                字符型数据必须使用单引号;

                同时,字符型数据和整型数据可以相互转换(ASCII表)

                

                'a' -> 97

                'A' -> 65

                '张'(2个字符)

        

        1.5)字符串型 - string

            0个或多个字符的序列

            注:

                字符串型数据必须使用双引号;

                

            string name ;

            name = "张三" ;

            string cls ;

            cls = "s1s148" ;

                

     旅馆 - 内存

        房间1 -     变量1    

        房间2 -     变量2

        房间3    -     变量3

        ...

        房间N - 变量N

        

        房间号 = 变量名

        

        房间类型 = 数据类型

        总统套房

        单间

        双间

        钟点

        

        消毒间            常量

        机房

        

五、输入数据

    Console.ReadLine() : 返回输入的字符串

    

    注:+号运算符有两种运算法则

    1、+号左右两边的数据如果有一边是字符串,则进行字符串连接运算

        "Abc" + 100 = "Abc100"

        3.14 + "AAA" = "3.14AAA"

        "555" + "AAA" = "555AAA"

        

    2、+号左右两边的数据都是数值型数据,则进行算术运算

        100 + 200 = 300

        100 + 3.14 = 103.14

    

六、类型转换

    1.为什么需要类型转换

        1)数据进行运算时,得不到我们想要的结果

        "1" + "2" = "12" ;

        

        2)相同类型的数据,才可以进行正常的运算

        1 + 3.14 = 4.14 ;

    

2.隐式转换(小 -> 大)

        也叫自动转换,遵循的原则是:

        小的数据类型自动的向大的数据转换

     1 + 3.14 = 4.14 ;

        int + double = double ;

        3 + 3.14F = 6.14F ;

        int + float = float ;

    

    3.显式转换(大 -> 小)

        也叫强制类型转换,语法如下:

        数据类型 变量 = (数据类型)数据 ;

        或

        数据类型 变量 = (数据类型)(表达式) ;

     int a = (int)3.14 ;

        注:强制类型转换可能会丢失精度

int a = (int)3.14 + 2.5 ; //错误

        int a = (int)3.94 + (int)2.5 ; //5

        int a = (int)(3.914+2.5) ;        //6

        注:强制类型转换一般用于数值型数据

    

    4.特殊方法转换

    1)数据类型.Parse(string): 把字符串类型转化为其他类型

        string s1 = "100" ;

        int a = int.Parse(s1) ;

        double d = double.Parse(s1) ;

2)Convert.ToXxx():其中Xxx是你要转换的数据

3)ToString():将其它类型的数据转换为字符串

 

C#字符串的大小写转换

using System;

namespace g

{

    class g

    {

        static void Main()

        {

            string c="H";

            string d="e";

d=d.ToUpper();//把小写的a转换成大写的A,再赋值给str1,这时候str1就是大写的A了。

            c=c. ToLower();//把大写的B转换成小写的b,再赋值给str2,这时候str2就是小写的b了。

            Console.WriteLine("c={0},d={1}",c,d);

        }

    }

}

 

第三章:选择(if和swich)

加工处理

    1.C#程序的基本结构

    using System ;

    namespace Xxx

    {

        class Yyy

        {

            static void Main()

            {

                //在此处编写代码,实现具体的功能

            }

        }

    }

    

2.输入/输出

    Console.ReadLine() ;

    Console.Write() ;

    Console.WriteLine() ;

    Console是一个类

    使用Console类必须引用Console类所在的命名空间(System)

    命名空间是组织和管理类的地方

    在使用某个类之前,必须using相关的命名空间

 

3.变量、数据类型

    数据类型 : 指定内存空间存放数据的种类

        int,unit

        short,ushort

        long,ulong

        sbyte,byte

     float,double,decimal

        bool

        char,string

    变量 : 变量是内存中开辟空间

    

    4.类型转换

    1)隐式转换,自动转换 : 小 -> 大

    2)显式转换,强制转换 : 大 -> 小

        数据类型 变量名 = (数据类型)变量/数据/表达式 ;

    3)特殊方法

        数据类型.Parse() ;

        Convert.ToXxxx() ;

        数据.ToString() ;

 

一、表达式 - 由数据和运算符号组成的式子

    1、概念

     1 + 1

        a + 2

        "100" + c + 3.14

        10 * 10 - 20

    

2、作用

        加工处理数据

计算表达式要遵循两个法则:

        1)优先级

            算术运算符 > 关系运算符 > 逻辑运算符

        2)结合方向

            a * b * c/2

    

3、运算符 :

        运算的符号,它结合表达式,用于对数据进行加工处理

        +-*/...

二、运算符--加工处理

    1.运算符的分类:

        1)单目运算符:只有一个操作数

        2)双目运算符:有两个操作数

        3)三目运算符:有三个操作数

        1 + 1

        a++ ;

        a ? "aa" : "bb"

    

2.赋值运算符 : 给变量赋值

        分类:

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

        要点:

            1)把右边的数据,赋值给左边的变量

            2)左边必须是变量

            3)左边变量的数据类型必须大于或等于右边数据的类型

            int a ;

            a = 100 ;        //正确,类型相同

            float a ;

            a = 100 ;        //正确,类型大于

            float a ;

            a = 3.14 ;        //错误,类型小于

            100 = 100 ;        //错误,左边不是变量

            int a = 1 ;

            a += 100 ; ==> a = a + 100 ;

            a *= 100 ; ==> a = a * 100 ;

            a += 100*2 ==>

    

3.算术运算符

        + - * / % ++ --

        注:/ : 表示除,如果两个操作数都为整数,

                则进行整除运算,小数点部分直接舍弃

                5 / 2 = 2

                如果要计算正常的小数,则需要其中一个操作数变成浮点数

 

        ++ : 自增1

        -- : 自减1

        有两种形式:

            前缀++ -> ++ 变量 ; 前缀++,先运算后取值

            后缀++ -> 变量 ++ ; 后缀++,先取值后运算

            前缀-- -> -- 变量 ;

            后缀-- -> 变量-- ;

            

        1++ ? ==> 1 = 1 + 1 ;    //错误

            

        int a = 1 ;

        a ++ ; //2 ==> a = a + 1 ;

        

        int a = 1 ;

        ++a ; //2 ==> a = a + 1 ;

            

        int a = 1 ;

        int b = a++ + 1 ;        //b=2,a=2

        Console.Write(a) ;

        Console.Write(b) ;

        

        int a = 1 ;

        int b = ++a + 1 ;        //b=3,a=2

        Console.Write(a) ;

        Console.Write(b) ;

        

        int a = 1 ;

        int b = a-- + 1 ;        //b=2,a=0

        Console.Write(a) ;

        Console.Write(b) ;

            

        int a = 1 ;

        int b = --a + 1 ;        //b=1,a=0

        Console.Write(a) ;

        Console.Write(b) ;

        

        1 + 1 = 2

                

    4.关系(比较)运算符:用于比较两个数

        分类:> 、 < 、 >= 、<= 、 != 、==

        运算结果:要么真(成立)->true,要么假(不成立)->false

            

        1 > 1 = false

        

        100 > 2 = true

        

        100 == 100 = true

        

        100 != 100 = false

        

        注意:

        int a == 100 ; //错误,赋值运算符是=

    

    5.逻辑运算符

        运算结果:

            逻辑运算符和关系运算符运算的结果一样。

            要么真(成立)->true,要么假(不成立)->false

      

        分类:

            1)逻辑与:&&

            true && true = true ;

            false && true = false ;

            true && false = false ;

            false && false = false ;

            总结:

            两个操作数同时为真,结果为真。否则,为假

            例子:

            100>2 && 20>2 ==> true

            

            100>2 && 20<2 ==> false

                

            2)逻辑或:||

            true || true = true ;

            true || false = true ;

            false || true = true ;

            false || false = false ;

总结:

            两个操作数同时为假,结果为假。否则,为真。    

            例子:

            100<2 || 20<2 ==> false

            

            100>2 || 20<2 ==> true

            

            逻辑非:!

                真的为假,假的为真

                !true = false ;

                !false = true ;

            例子:

                100<2 || !(20<2) ==> true

             100>2 || 20<2     ==> true

    

        补充:逻辑运算符 -> 短路运算

        

        100 < 0 && 1 > 0 ==> false

        

        int a = 10 ;

        (a=3)<=10 && (a=2)<=2 ==> false

        a = 3

        

        总结:

        短路运算:进行逻辑与运算时,如果左边操作数为假,结果为假。

        而右边的操作数据不需要运算。

        

        int a = 10 ;

        (a=3)<=10 || (a=2)<=2 ==> true

        a = 3

        

        int a = 10 ;

        (a=3)>=10 || (a=2)<=2 ==> true

        a = 2

        

        总结:

        进行逻辑或运算时,如果左边操作数为真,结果为真。

        而右边的操作数据不需要运算。

    

6.逗号运算符 , -> 分隔,减少篇幅

    int a = 10 , b = 20 ;

    

    int a = 10 ;

    int b = 20 ;

    

    7.三目运算符 -> ? : (x>y?1:2) x>y为真输出1,反之为2

        

三、程序控制(语句)

    控制程序语句执行的顺序(流程)

1.概念

    去银行办卡

    第一:拿身份证,打扮一下

    第二:坐603

    第三:吉大站下车

    第四:走到银行

    第五:按号、办卡

    第六:回家

    

    第一:拿身份证,打扮一下

    第二:坐603

    如果603被打劫了,并且被抢伤了

    去医院

    第三:吉大站下车

    第四:走到银行

    第五:按号、办卡

    第六:回家

 

    2.分类:

    1)顺序语句 : 程序代码,从上往下,一行代码一行的执行

    2)条件语句 :根据满足某个条件,执行相关的代码

    3)循环语句 :重复的执行相关代码

    

四、条件语句

    1、if ... else

2、三目运算符 : 功能同if...else...

        条件?表达式1:表达式2 ;

3、switch语句    

        switch(表达式/变量)

        {

            case 常量表达式1:语句1 ;

            case 常量表达式2:语句2 ;

            case 常量表达式3:语句3 ;

            case 常量表达式n:语句n ;

            default:语句n+1

        }

 

        注:

        1)break表示退出switch语句,一般在各个case后面都加break

        2)default语句可以放在switch语句的任意位置,但一般放在最后面,且不需要加break语句

        3)常量表达式必须是一个常量值,数据类型必须和switch后面的表达式一致

        4)case后面的常量表达式的值必须不一样, 不允许重复

        5)多个case语句可以共用一组执行语句(不写break语句)

        6)case后面的语句可以是多条,可不用{}括起来。

 

第四章:循环(for和while)

一、作用

    重复做某些操作->循环

    

    举例在生活中,重复做的事情?

    人活的每一天

    追女孩

    吃饭、睡觉

    编写程序,在控制台中,打印输出10个你好!

    

二、循环的四个要素

    1.循环变量(i,j,k)

        1)控制循环的次数

        2)表示要处理的数据

    

    2.循环条件:

        控制是否要重复做某些操作(循环)

    

    3.递增/递减循环变量->控制循环能正常的结束

        避免死循环

        使循环变量发生改变,进而使用循环条件为假,

        从而结束循环

        

    4.循环体

        重复要做的事情

 

三、循环的三个语句-实现

    1.while

    

    语法如下:

    while(条件)

    {

        语句块 ;

    }

 

注:

    1>条件一般是关系运算或逻辑运算或两个的混合

    2>语法有点类似if语句if

        if(条件)

        {

            语句块 ;

        }

    3>执行过程

    当条件为真的时候,执行大括号的语句块

    语句块执行完后,回到条件继续判断

    如果为真,则继续执行大括号中的语句块

    直到条件为假时,while语句结束

    

2.do...while

    

语法如下:

    do

    {

        循环体 ;

    }

    while(条件) ;

    

    while(条件)

    {

        循环体 ;

    }

    

    区别:

        1)语法格式不相同

        2)执行过程不相同

            当循环条件为假时,while循环的循环体一次都不执行

            当循环条件为假时,do...while循环中的循环体会被执行一次

    

    执行过程:

        先执行循环体,然后判断条件

        如果条件为假,则循环结束,循环体被执行了一次

        

        如果条件为真,则继续的执行循环体

        循环体执行完后,继续判断循环条件,...

        直到循环条件为假时,整个循环结束

 

    注:

        do...while语句后面的分号不能省略    

        而while语句后面不要加分号

        

    3.for

    

    语法如下:

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

    {

        循环体 ;

    }

    

    执行过程:

    首先,执行表达式1(定义循环变量,给循环变量赋值),表达式只执行一次

    然后,执行表达式2,表达式2是循环条件,判断是否为真

        如果为假,循环结束

        如果为真,则执行循环体

        循环体执行后,则执行表达式3(递增/递减循环变量)

    接着,执行表达式3后,则执行的判断循环条件(表达式2)

    ...

    注:

    1)

        表达式1:定义循环变量,并给循环变量赋初值,且只执行一次

        表达式2:循环条件,就是while后面的条件

        表达式3:递增/递减循环变量

 

    2)表达式1可以省略,则一般在for语句之前编写

    

    3)表达式3也可以省略,则一般在for语句之内编写

    

    4)当表达式1和表达式3省略,则等同于以下内容:

        for(;i<=3;)

        {

            printf("你好\n") ;    

            i++ ;

        }

        

        while(i<=3)

        {

            printf("你好\n") ;    

            i++ ;

        }

    

    5)表达式2也可以省略,则此for语句就成了死循环

        for(表达式1;;表达式3)

        {

        

        }

        

        for(;;)

        {

        

        }

        

四、特殊语句-break,continue

 

    1.break:只能使用在switch语句或循环语句内(跳出)

        1)switch:表过退出switch语句

        2)循环:表达终止(退出)循环

        

    2.continue:只能在循环语句内容使用(跳过)

        表示退出本次循环,继续下一次循环

    注:break和continue语句,不能独立存在!

        

五、死循环

    循环条件永远为真

    

    在开发中,要避免死循环

    

    在开发过程中,我们有时候也要使用死循环,常用的形式有:

    

    while(true)

    {

        //1.生成密码

        //2.匹配

    }

    

    for( ; ; )

    {

    

    }

    

    do

    {

    

    }while(true) ;

    

六、嵌套循环(难点)

1、定义 : 在循环内部,嵌套地使用循环。

 

2、分类:根据嵌套的层数,分为双重循环、三重循环、四、五...

 

3、双重语法:

for(;;)

{

    for(;;)

    {

    

    }

}

 

for(;;)

{

    while()

    {

    

    }

}

 

for(;;)

{

    do

    {

    

    }

    while() ;

}

 

....

共九种

 

 

4、三重循环

 

//注:以下是双重循环

for(;;)

{

    for(;;)

    {

    

    }

    

    for(;;)

    {

    

    }

}

 

for(;;)

{

    for(;;)

    {

        for(;;)

        {

            

        }

    }

}

 

 

5、双重循环的执行过程

注:

双重循环,可以实现二维表格的效果

外循环用于控制行

内循环用于控制列,且在内循环下要换行

 

从外循环到内循环进行执行,

当外循环执行结束后,双重循环才结束

 

金字塔代码:

using System;

namespace jzt

{

    class f

    {

        static void Main()

        {

            int n=4;//表示有多少层

            for(int i=1;i<=n;i++)

            {

            //找出规律

            //1->3 2->2 3->1 4->0找出空格

                for(int k=1;k<=n-i;k++)

                {

                    Console.Write(" ");

                }

            //打印*

            //1->1 2->3 3->5 4->7找出星的规律

                for(int j=1;j<=(i-1)*2+1;j++)

                {    

                    Console.Write("*");

                }

            Console.WriteLine();//换行

            }

        }

    }

}

 

第五章:数组(foreach)

一、回顾数据类型

    1.作用:指定内存空间存放数据的种类

    

    2.分类:

        1)基本数据类型

            整型

                sbyte,byte

                short,ushort

                int(默认),uint

                long,ulong

            浮点型

                float

                double(默认)

                decimal

            布尔型 -> true/false

                bool

            字符型 -> ''

                char

                

            字符串型 -> ""

                string

      

        2)构造数据类型(对象类型) :

            依赖基本类型,根据实际需求,

            用户构造的特殊的数据类型

            (数组)

 

二、概念

    数组:数据的集合,数据类型相同,有序的

    double[] cj = new double[3] ;

    多个相同数据类型的有序集合    

    

    数组是一个特殊的数据类型,由用户根据需求构造出来的新的数据类型

    数组依赖基本数据类型

            

三、为什么要使用数组

    方便开发者对数据进行操作、管理

 

四、数组定义的语法

    

    数据类型[] 数组名 ;

    

    注:

        1)数据类型可以为任意的基本数据类型或构造类型

        2)数组名的命名必须严格符合标识符的命名规范

 

五、数组的操作步骤

    1.定义(声明)数组             ->    定义变量

        数据类型[] 数组名 ;

        double[] cj ;

        

        数据类型 变量名 ;

        int age ;

        

        注:声明数组,且声明数组中各元素的数据类型

    

    2.创建数组:在内存中,开辟连续的空间                

        数组名 = new 数据类型[长度] ;

        

        注:一般在开发中,第一步和第二步可以合并一起

        也就是说,在声明数组的同时创建数组,语法如下:

        数据类型[] 数组名 = new 数组类型[长度] ;

    

    3.初始化数组(给数组赋值)     -> 给变量赋值,age = 10 ;

        语法如下:

        数组名[下标索引] = 值 ;

        

        例如:

        数组名[0] = 值1 ;

        ...

        数组名[n] = 值n ;

            

        或:在声明数组的同时,给数组赋值

        

        数据类型[] 数组名 = {值1,...,值n} ;

 

4.使用            ->    使用变量

        数组名[下标]

        

    注:

        1)引用数组时,下标从0开始,最大值为长度-1

        2)Length属性:返回数组的长度大小

        3)数组中的数据,称之为元素

        4)遍历数组:循环

        foreach循环是针对数组和集合的遍历操作

        foreach(元素类型 迭代变量名 in 数组名称或集合名称)

        {

            ...

        }

    

六、算法实现

    1.最大值、最小值

    

    2.求和、平均值

    

    3.搜索数据

    

    4.排序(难点)

        升序:小->大

        降序:大->小

 

        实现排序的算法有:

  1. 冒泡排序

数据的个数:            5

        比较的轮数:            1    2    3    4

        每轮比较的次数:        4 3    2    1

        谁跟谁比:                相邻的两个数进行比较

 

            2)选择排序

            3)插入排序

七、多维数组

 

最大值,最小值,总和,平均举例:

using System;

namespace f

{

    class g

    {

        static void Main()

        {

            float[] num=new float[10];

            float sum=0;

            float avg=0;

            for(int i=0;i<num.Length;i++)

            {

                Console.Write("请输入第{0}个数:",i+1);

                num[i]=float.Parse(Console.ReadLine());

                if(num[i]>=0&&num[i]<=100)

                {

                        sum+=num[i];

                        continue;

                }

                else

                {

                    Console.Write("输入不合法,请重新输入第{0}个数:",i+1);

                    num[i]=int.Parse(Console.ReadLine());

                }

            }

            Array.Sort(num);

            foreach(int m in num)

                Console.WriteLine(m+"\t");

            avg=sum/10;

            float max=num[0];

            for(int i=1;i<num.Length;i++)

            {

                if(max<num[i])

                    max=num[i];

            }

            float min=num[0];

            for(int i=1;i<num.Length;i++)

            {

                if(min>num[i])

                    min=num[i];

            }

            Console.WriteLine("最高分为:{0},最低分为:{1},总分为:{2},平均分为:{3}",max,min,sum,avg);

        }

    }

}

    

冒泡举例:

using System ;

namespace Test01

{

    class Programe

    {

        static void Main()

        {

            int[] arr = {23,90,9,25,16,1,8,7,6,5} ;

            

            int t ;

            

            

            Console.WriteLine("排序前") ;

            foreach(int a in arr)

            {

                Console.Write("{0}\t",a) ;

            }

            

            for(int i=0;i<arr.Length-1;i++)    //轮数

            {

                for(int j=0;j<arr.Length-1-i;j++)    //每轮的次数

                {

                    if(arr[j]<arr[j+1])

                    {

                        t = arr[j] ;

                        arr[j] = arr[j+1] ;

                        arr[j+1] = t ;

                    }

                }

            }

            

            Console.WriteLine("排序后") ;

            foreach(int a in arr)

            {

                Console.Write("{0}\t",a) ;

            }

Console.ReadKey();

            

        }

    }

}

 

第六章:类与对象

一、编程思想 :编写程序的指导思想(方法、思路、模式)

    面向过程 VS 面向对象

    

    面向过程:把各种操作步骤,封装为相应的方法(函数)(C语言)

        取号

        排队

        填表

        办理

        回去

        

        

    面向对象:通过描述某个对象的属性和行为进行各种各样的操作(c#与java)

     张三

            1.属性->描述对象的特征

            心情

            姓名

            身份证

            手机号码

        

            2.行为->描述对象的动作、功能(能力)、业务

            取号

            排队

            填表

            办理

            回去

            

    与现实要符合

    更容易理解、维护、扩展

            

二、类与对象(重点、难点)    

1、类是对象的抽象(抽取、概括、归纳)->抽取有用的、本质的、共同的信息 -> 形成的一个类别(概念)

    类是模糊的、不具体的、抽象的

    

    类中包含三个部分内容:

    1)属性 : 描述对象的特征

    2)行为 : 描述对象的功能、技能、动作

    3)事件

    

    类是对象的模板,对象是这个模板的实例

 

2、对象是具体的类,是类的实例(实际的例子)

    对象是具体的,实际存在的、清晰的

    

    世界万物都是对象

    

三、面向对象的实现    

    第一:定义类

    [访问修饰符] class 类名 {

        1.字段 -> 表示具体的数据,访问修饰符一般是private

        [访问修饰符] 数据类型 字段名称 ;    

      

        2.属性 -> 封装字段,设置和访问数据(字段) ,访问修饰符一般使用public

        [访问修饰符] 数据类型 属性名称

        {

            get{return 字段名称;}

            set{字段名称=value;}

        }

        说明:

            set : 设置数据,并可以对数据进行验证处理

            get : 获取数据

            set、get根据情况可以省略不写

            属性的访问修饰符一般是public

            如果字段没有初始化,那么字段会有相应的默认值

            属性名称和字段名称一般相同,但要使用帕斯卡命名规则

        

        3.构造方法 -> 对象的初始化,在创建对象的同时,初始化对象;在构造方法中,可以对数据进行合法性判断

        [访问修饰符] 构造方法名([参数列表])

        {

            构造方法体 ;

        }

          

        

        4.方法 -> 描述对象的动作、功能(操作) -> 成员方法(四种形式)

        [访问修饰符] 数据类型 方法名([参数列表]) {

            方法体 ;

            [return 数据;]        

        }    

    }

    

    说明:

    1)访问修饰符 : 控制修饰内容的访问权限,分类:

        public         : 公有访问,不受任何访问限制,公开的

        protected     : 保护访问,只能在本类或子类中访问

        private     : 私有访问,只能在本类内访问

        internal    : 内部访问,只能在本项目内访问

        

        对于类来说,默认的访问修饰符是internal,但一般使用public;

        对于类成员来说,默认的访问修饰符是private

        

    2)命名

        类名、属性名使用帕斯卡命名法

        字段名使用驼峰命名法

        

        

    3)自动属性 -> .Net Framework2.0之后新的特性,方便简单

        public class 类名

        {

            public 数据类型 属性名1{get;set;}

            ...

            public 数据类型 属性名N{get;set;}

        }

        

        说明:

            不需要定义属性对象的字段

            get,set简写了,但必须同时存在get,set

            无法对数据进行验证

            

    4)构造方法 -> 在创建对象的同时,初始化对象

        访问修饰符一般使用public

        

        构造方法名称必须与类名相同

        

        参数列表表示要给对象初始化的数据,可以省略,在构造方法内指定具体的数据

        语法:数据类型 参数名1,...,数据类型 参数名n

        

        this表示当前对象

        

        在创建对象(new)的时候,构造方法会被自动的调用

      

        在类的内部,如果用户没有自定义构造方法,则类的内部会默认定义一个无参构造方法,形式如下:

        public 构造方法名()

        {

        

        }

        

        字段如果没有被初始化,则不同类型的字段会有相应的默认值

        数值型默认为0

        布尔型默认为False

        字符串默认为""

        字符型默认为''

    

    第二:创建对象(实例化对象)

    类名 对象名 = new 类名([参数]) ;

    

    注:

        new后面的是"构造方法",而参数就是初始化的具体数据

        

    第三:初始化对象

    方法一:

        对象名.属性 = 值

        

    方法二:

        ... = new 类名(值1,...,值n) ;

    

    第四:操作(方法)

    访问属性:

        [数据类型 变量名 = ]对象名.属性名 ;

    访问方法:

      

        [数据类型 变量名 = ]对象名.方法名称([实参列表]) ;

 

四、编写程序的四个基本步骤

第一:定义变量 -> 开辟内存空间

 

第二:初始化,给变量赋值 -> 把数据添加到变量对应的内存空间

 

第三:加工处理(核心)

 

第四:打印输出

 

例子一:变量+数据类型的使用 -> 一个空间一个空间地开辟

int age ;

age = 100 ;

age = age + 1 ;

Console.WriteLine("年龄:{0}",age) ;

 

例子二:数组+数据类型的使用 -> 可以一次开辟多个空间(数据类型一样)

数组是一个构造类型,依赖基本类型构造的新的类型

 

float[] score = new float[100] ;

score[0] = 120 ;

..

score[99] = 135 ;

 

score[0] = score[0] + 20 ;

 

Console.WriteLine("分数1:{0}",score[0]) ;

...

Console.WriteLine("分数N:{0}",score[99]) ;

 

例子三:类+数据类型的使用

类和数组一样,也是构造类型->可以开辟多个空间,且数据类型可以不一样

第一:定义类 -> 创建新的数据类型

class Student

{

    //1.字段

    private string name ;

    int age ;

    float weight ;

    

    ....

    public string Name

    {

        set{name = value;}

        get{return name ;}

    }

}

 

第二:创建对象 -> 本质上就是定义变量

 

Student stu = new Student() ;

 

第三:初始化对象

对象名.属性 = 值 ;

stu.Name = "aaa" ;

 

第四:加工处理/操作

 

第五:打印输出

 

第七章:方法

一、类与对象(重点、难点)    

1、类是对象的抽象(抽取、概括、归纳)->抽取有用的、本质的、共同的信息 -> 形成的一个类别(概念)

    类是模糊的、不具体的、抽象的

    

    类中包含三个部分内容:

    1)属性 : 描述对象的特征

    2)行为 : 描述对象的功能、技能、动作

    3)事件

    

    类是对象的模板,对象是这个模板的实例

 

2、对象是具体的类,是类的实例(实际的例子)

    对象是具体的,实际存在的、清晰的

    

    世界万物都是对象

    

二、面向对象的实现    

    第一:定义类

    [访问修饰符] class 类名 {

        1.字段 -> 表示具体的数据,访问修饰符一般是private

        

        2.属性 -> 封装字段,设置和访问数据(字段) ,访问修饰符一般使用public

        

        3.构造方法 -> 对象的初始化,在创建对象的同时,初始化对象;在构造方法中,可以对数据进行合法性判断

        

        4.方法 -> 描述对象的动作、功能(操作) -> 成员方法(四种形式)

        

        5.事件

    }

    

    人类

        字段+属性(特征):年龄、身高、体重、姓名....

        特征表示对象是一个什么东西

        对象的属性表示对象封装的数据集合

        

        方法(行为、功能、业务):吃、喝、拉、撤、睡...

        方法表示对象能做什么

        

    英雄

        智力、力量、敏捷

        

    第二:创建对象(实例化对象)

    

    第三:初始化对象

    

    第四:操作(方法)

    

三、方法 -> 对象能做什么、实现具体的功能、业务 -> 提高代码重用性、维护性

1.语法:

    [访问修饰符] 数据类型 方法名([参数列表])

    {

        方法体 -> 此方法具体功能的实现

        [return 返回值;]

    }

 

注:

    数据类型表示返回值的数据类型(注:数据类型要大于或等于返回值的类型)

    数据类型使用void表示方法没有返回值

 

2.两个角色

    主调方法 : 调用被调方法所在方法(地方) - Main

    被调方法 : 被调用的方法 - kai

 

3.方法四要素

    1)参数    : 主调方法向被调方法传递的数据,参数的个数:0个或多个

    2)返回值 : 被调方法向主调方法返回的数据,返回值的个数:0个或1个 (注:返回多个 -> 数组或集合)

    3)方法体-功能(业务)的实现->变量、表达式、程序控制语句

    4)方法名

 

4.参数

    1)语法:

        数据类型 参数名1,...,数据类型 参数名n

        

    2)分类:

        形参(形式参数) : [定义时]形式意义的表示(代表) -> int du, string where

        实参(实际参数) :[调用时]实际传递的数据  -> 18,"后面"

    

5.方法调用

    [数据类型 变量 = ][对象名.]方法名([参数列表]) ;

 

    注:必须通过对象(实例)来调用的方法,叫实例方法

 

张健广(对象)

    开空调

 

课堂练习:

    长方形:长和宽

    要求:

        1)定义一个方法,计算长方形的面积

        2)定义一个方法,计算长方形的周长

 

6.方法的分类

1、根据参数、返回值,方法分为以下四类

1)无参无返

    [访问修饰符] void 方法名()

    {

        方法体 -> 此方法具体功能的实现

    }

 

    注:无返回值方法,数据类型使用void声明

 

2)无参有返

 

    [访问修饰符] 返回值的数据类型 方法名()

    {

        方法体 -> 此方法具体功能的实现

        return 返回值 ;

    }

 

    注:有返的方法,一般在方法内直接把结果返回,不会做过多的处理

        在调用有返的方法时,一般需要定义变量,接收返回值

 

3)有参无返

    [访问修饰符] void 方法名(数据类型 参数名1,...,数据类型 参数名n)

    {

        方法体 -> 此方法具体功能的实现

    }

 

 

4)有参有返

    [访问修饰符] 返回值的数据类型 方法名(数据类型 参数名1,...,数据类型 参数名n)

    {

        方法体 -> 此方法具体功能的实现

        return 返回值 ;

    }

 

编写一个方法,实现两个数的和!

编写一个方法,实现两个数的相除(四种形式)! -> 除数不能为0

编写一个方法,实现两个数的+ - * / !

 

2、根据方法的调用,分为以下两类

    A)实例方法 : 必须通过对象(实例)调用的方法

    类名 对象名 = new 类名([...]) ;

    对象名.方法([参数列表]) ;

 

B)静态方法 : 不需要通过对象调用,而直接通过类名调用的方法

    a>定义 -> 使用static声明的方法,就是静态方法

        [访问修饰符] static 数据类型 方法名([参数列表])

        {

            方法体 -> 此方法具体功能的实现

            [return 返回值;]

        }

    

    b>调用 -> 直接通过类名调用

        类名.方法名([参数列表])

 

3)特殊方法

    构造方法 -> 创建对象 + 初始化对象

        1)方法名与类名相同

        2)构造方法没有返回值

    

    重载方法

        方法名相同 && (方法参数的个数不同 || 方法参数的数据类型不同)

        public int sum(int a,int b)

{

return a + b;

}

        

        public int sum(int a,int b,int c)

{

return a + b + c;

}

        

        public double sum(double a,double b)

{

return a + b;

}

        

        public double sum(int a,double b)

{

return a + b;

}

        

        public double sum(double a,int b)

{

return a + b;

}

        

        //出错

        public double sum(int b,int a)

{

return a + b;

}

        

        //出错

        public double sum(int a,int b)

{

return a + b;

}

        

        ----------------------------------------------------

        

        public static int sum(int a,int b)

{

return a + b;

}

        

        public static int sum(int a,int b,int c)

{

return a + b + c;

}

        

        注:静态方法也可以重载

        

        -------------------------------------------------------

        class Animal

        {

            ...

            public Animal(){}

            

            public Animal(string name)

            {

                this.name = name ;

            }

            

            public Animal(string name,int age)

            {

                this.name = name ;

                this.age = age ;

            }

            public Animal(int age)

            {

                this.age = age ;

            }

            ...

        }

        注:构造方法也可以重载

        

        如何调用重载方法呢?

            方法名

            方法参数的个数

            方法参数的数据类型

        

4)根据方法的定义,分为以下两类

    用户自定义方法

    系统方法

        Console.WriteLine() ;

猜你喜欢

转载自www.cnblogs.com/xdzy/p/9457738.html