C#语言-cs

终端调用

以下命令行
csc /t:library acme.cs
编译example.cs 时,可以使用编译器的 /r 选项引用 acme.dll 程序集:
csc /r:acme.dll example.cs
输出
100
10
1

下载
dotnet-sdk-2.2.401-osx-gs-x64.pkg
https://download.visualstudio.microsoft.com/download/pr/1045a7f9-5585-49b6-a138-34717f2a7e9f/bd24b2ba41dfcd0a8ec8271caa6f38e4/dotnet-sdk-2.2.401-osx-gs-x64.pkg
运行终端
➜  c# git:(master) ✗ dotnet                     

Usage: dotnet [options]
Usage: dotnet [path-to-application]

Options:
  -h|--help         Display help.
  --info            Display .NET Core information.
  --list-sdks       Display the installed SDKs.
  --list-runtimes   Display the installed runtimes.

path-to-application:
  The path to an application .dll file to execute.
➜  c# git:(master) ✗ dotnet new console -o myApp
Welcome to .NET Core!
Processing post-creation actions...
Running 'dotnet restore' on myApp/myApp.csproj...
  Restore completed in 164.02 ms for /Users/tianzi/Desktop/时间复杂度/c#/myApp/myApp.csproj.

Restore succeeded.

➜  c# git:(master) ✗ cd myApp
➜  myApp git:(master) ✗ dotnet run
Hello World!
Hello World!
The current time is 2019/9/9 上午11:48:55
➜  c# git:(master) ✗ 
mac环境变量
操作步骤:1、打开Terminal(终端)
            2、输入:vi ~/.bash_profile
            3、设置PATH:export PATH=<the_path>:$PATH
依样画葫芦,<the_path>填刚刚安装完提示给你的那个路径。以:$PATH结尾

假定示例的源代码存储在 acme.cs 文件中

此类的完全限定的名称为 Acme.Collections.Stack。 此类包含多个成员:一个 top 字段、两个方法(Push 和 Pop)和一个 Entry 嵌套类。 Entry 类还包含三个成员:一个 next 字段、一个 data 字段和一个构造函数。

using System;
namespace Acme.Collections
{
    public class Stack
    {
        Entry top;
        public void Push(object data) 
        {
            top = new Entry(top, data);
        }

        public object Pop() 
        {
            if (top == null)
            {
                throw new InvalidOperationException();
            }
            object result = top.data;
            top = top.next;
            return result;
        }
        
        class Entry
        {
            public Entry next;
            public object data;
            public Entry(Entry next, object data)
            {
                this.next = next;
                this.data = data;
            }
        }
    }
}

如果程序存储在文件 example.cs

using System;
using Acme.Collections;
class Example
{
    static void Main() 
    {
        Stack s = new Stack();
        s.Push(1);
        s.Push(10);
        s.Push(100);
        Console.WriteLine(s.Pop());
        Console.WriteLine(s.Pop());
        Console.WriteLine(s.Pop());
    }
}

C#开发环境搭建

C# 简介

C# 是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由 Ecma 和 ISO 核准认可的。 C# 是由 Anders Hejlsberg 和他的团队在 .Net 框架开发期间开发的。 C# 是专为公共语言基础结构(CLI)设计的。CLI 由可执行代码和运行时环境组成,允许在不同的计算机平台和体系结构上使用各种高级语言。 下面列出了 C# 成为一种广泛应用的专业语言的原因: 现代的、通用的编程语言。 面向对象。 面向组件。 容易学习。 结构化语言。 它产生高效率的程序。 它可以在多种计算机平台上编译。 .Net 框架的一部分。

C# 强大的编程功能

虽然 C# 的构想十分接近于传统高级语言 C 和 C++,是一门面向对象的编程语言,但是它与 Java 非常相似,有许多强大的编程功能,因此得到广大程序员的亲睐。 下面列出 C# 一些重要的功能: 布尔条件(Boolean Conditions) 自动垃圾回收(Automatic Garbage Collection) 标准库(Standard Library) 组件版本(Assembly Versioning) 属性(Properties)和事件(Events) 委托(Delegates)和事件管理(Events Management) 易于使用的泛型(Generics) 索引器(Indexers) 条件编译(Conditional Compilation) 简单的多线程(Multithreading) LINQ 和 Lambda 表达式 集成 Windows

C# 环境

C# 是 .Net 框架的一部分,且用于编写 .Net 应用程序。因此,在讨论运行 C# 程序的可用工具之前,了解一下 C# 与 .Net 框架之间的关系。

.Net 框架(.Net Framework)

.Net 框架是一个创新的平台,能帮您编写出下面类型的应用程序: Windows 应用程序 Web 应用程序 Web 服务 .Net 框架应用程序是多平台的应用程序。框架的设计方式使它适用于下列各种语言:C#、C++、Visual Basic、Jscript、COBOL 等等。所有这些语言可以访问框架,彼此之间也可以互相交互。 .Net 框架由一个巨大的代码库组成,用于 C# 等客户端语言。下面列出一些 .Net 框架的组件: 公共语言运行库(Common Language Runtime - CLR) .Net 框架类库(.Net Framework Class Library) 公共语言规范(Common Language Specification) 通用类型系统(Common Type System) 元数据(Metadata)和组件(Assemblies) Windows 窗体(Windows Forms) ASP.Net 和 ASP.Net AJAX ADO.Net Windows 工作流基础(Windows Workflow Foundation - WF) Windows 显示基础(Windows Presentation Foundation) Windows 通信基础(Windows Communication Foundation - WCF) LINQ 如需了解每个组件的详细信息,请参阅微软(Microsoft)的文档。 C# 的集成开发环境(Integrated Development Environment - IDE) 微软(Microsoft)提供了下列用于 C# 编程的开发工具: Visual Studio 2010 (VS) Visual C# 2010 Express (VCE) Visual Web Developer 后面两个是免费使用的,可从微软官方网址下载。使用这些工具,您可以编写各种 C# 程序,从简单的命令行应用程序到更复杂的应用程序。您也可以使用基本的文本编辑器(比如 Notepad)编写 C# 源代码文件,并使用命令行编译器(.NET 框架的一部分)编译代码为组件。 Visual C# Express 和 Visual Web Developer Express 版本是 Visual Studio 的定制版本,且具有相同的外观和感观。它们保留 Visual Studio 的大部分功能。

一个 C# 程序主要包括以下部分: 命名空间声明(Namespace declaration) 一个 class Class 方法 Class 属性 一个 Main 方法 语句(Statements)& 表达式(Expressions) 注释 让我们看一个可以打印出 “Hello World” 的简单的代码:

using System; 
namespace HelloWorldApplication 
{ 
class HelloWorld 
{ 
static void Main(string[] args) 
{ 
/* 我的第一个 C# 程序*/ 
Console.WriteLine(“Hello World”); 
Console.ReadKey(); 
} 
} 
} 

当上面的代码被编译和执行时,它会产生下列结果: Hello World 让我们看一下上面程序的各个部分: 程序的第一行 using System; - using 关键字用于在程序中包含 System 命名空间。 一个程序一般有多个 using 语句。 下一行是 namespace 声明。一个 namespace 是一系列的类。HelloWorldApplication 命名空间包含了类 HelloWorld。 下一行是 class 声明。类 HelloWorld 包含了程序使用的数据和方法声明。类一般包含多个方法。方法定义了类的行为。在这里,HelloWorld 类只有一个 Main 方法。 下一行定义了 Main 方法,是所有 C# 程序的 入口点。Main 方法说明当执行时 类将做什么动作。 下一行 // 将会被编译器忽略,且它会在程序中添加额外的 注释。 Main 方法通过语句 Console.WriteLine(“Hello World”); 指定了它的行为。 WriteLine 是一个定义在 System 命名空间中的 Console 类的一个方法。该语句会在屏幕上显示消息 “Hello, World!”。 最后一行 Console.ReadKey(); 是针对 VS.NET 用户的。这使得程序会等待一个按键的动作,防止程序从 Visual Studio .NET 启动时屏幕会快速运行并关闭。 以下几点值得注意: C# 是大小写敏感的。 所有的语句和表达式必须以分号(;)结尾。 程序的执行从 Main 方法开始。 与 Java 不同的是,文件名可以不同于类的名称

编译 & 执行 C# 程序

如果您使用 Visual Studio.Net 编译和执行 C# 程序,请按下面的步骤进行: 启动 Visual Studio。 在菜单栏上,选择 File -> New -> Project。 从模板中选择 Visual C#,然后选择 空项目。 为您的项目制定一个名称,然后点击 OK 按钮。 新建一个类 新项目会出现在解决方案资源管理器(Solution Explorer)中。 在代码编辑器(Code Editor)中编写代码。 点击 Run 按钮或者按下 F5 键来运行程序。会出现一个命令提示符窗口(Command Prompt window),显示 Hello World。

也可以使用命令行代替 Visual Studio IDE 来编译 C# 程序:

打开一个文本编辑器,添加上面提到的代码。 保存文件为 helloworld.cs。 打开命令提示符工具,定位到文件所保存的目录。 键入 csc helloworld.cs 并按下 enter 键来编译代码。 如果代码没有错误,命令提示符会进入下一行,并生成 helloworld.exe 可执行文件。 接下来,键入 helloworld 来执行程序。 您将看到 “Hello World” 打印在屏幕上。

第一章:c#基础

C# 中的关键组织结构概念包括程序命名空间类型成员程序集。 C# 程序由一个或多个源文件组成。 程序声明类型,而类型则包含成员,并被整理到命名空间中。 类型示例包括类和接口。 成员示例包括字段、方法、属性和事件。 编译完的 C# 程序实际上会打包到程序集中。 程序集的文件扩展名通常为 .exe.dll,具体取决于实现的是应用程序还是

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

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#……

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)取名要有意义

命名规范

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

命名空间、类、方法名

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

变量名

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

常量,PI -> 圆周率

3、变量的定义

1)语法如下

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

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

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

变量名 = 值 ;

3)其它用法

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

int a,b,c,d;

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

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

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

string 变量 = Console.ReadLine() ;

注:

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

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

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

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

注:

使用const关键字声明常量

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

四、数据类型

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

1、好处

增加安全性

规范化数据

2、数据类型的种类

1)整型(整数)

默认是int

A、sbyte,byte 字节

B、short,ushort

C、int,unit

D、long,ulong

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

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

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

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

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

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

3.14

3.14F

3.14M

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

3)布尔类型(逻辑)

bool

true

false

4)字符型

char

注:

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

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

‘a’ -> 97

‘A’ -> 65

‘张’(2个字符)

5)字符串型

string

0个或多个字符的序列

注:

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

string name ;

name = “张三” ;

string cls ;

cls = “s1s148” ;

五、输入数据

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 ;

3、算术运算符

1)+ - * / % ++ –

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

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

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) ;

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

3)逻辑非:!

真的为假,假的为真

!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)

一、作用

重复做某些操作->循环

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

人活的每一天

追女孩

吃饭、睡觉

二、循环的四个要素

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

1)控制循环的次数

2)表示要处理的数据

2、循环条件

控制是否要重复做某些操作

3、递增/递减循环变量

控制循环能正常的结束

避免死循环

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

从而结束循环

4、循环体

重复要做的事情

三、循环的三种写法

1、while

语法如下:

while(条件)

{

语句块 ;

}

注:

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

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

if(条件)

{

语句块 ;

}

3>执行过程

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

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

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

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

2、do…while

语法如下:

do

{

循环体 ;

}

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++ ;

}

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();//换行

}

}

}

回到顶部

第五章:数组

一、回顾数据类型

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

2、分类

1)基本数据类型

整型

sbyte,byte

short,ushort

int(默认),uint

long,ulong

浮点型

float

double(默认)

decimal

布尔型

bool

字符型

char

字符串型

string

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

依赖基本类型,根据实际需求,用户构造的特殊的数据类型(数组)

二、概念

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

double[] cj = new double[3] ;

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

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

数组依赖基本数据类型

三、为什么要使用数组

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

四、数组定义的语法

数据类型[] 数组名 ;

注:

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

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

五、数组的操作步骤

1、定义(声明)数组

数据类型[] 数组名 ;

double[] cj ;

数据类型 变量名 ;

int age ;

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

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

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

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

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

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

3.初始化数组(给数组赋值)

语法如下:

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

例如:

数组名[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、语法:
[访问修饰符] 数据类型 方法名([参数列表])
{
方法体 -> 此方法具体功能的实现
[return 返回值;]
}
注:
数据类型表示返回值的数据类型(注:数据类型要大于或等于返回值的类型)
数据类型使用void表示方法没有返回值

2、两个角色

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

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

3、方法四要素

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

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

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

4)方法名

4、参数

1)语法:

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

2)分类:

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

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

5、方法调用

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

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

6、方法的分类

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

1)无参无返

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

{

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

}

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

2)无参有返

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

{

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

return 返回值 ;

}

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

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

3)有参无返

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

{

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

}

4)有参有返

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

{

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

return 返回值 ;

}

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

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

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

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

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

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

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

{

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

[return 返回值;]

}

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

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

3)特殊方法

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

A)方法名与类名相同

B)构造方法没有返回值

重载方法

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

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() ;

end

https://www.cnblogs.com/xdzy/p/9457738.html
C#基础学习笔记
https://blog.csdn.net/qq_34659777/article/details/82820583
C#入门笔记
https://docs.microsoft.com/zh-cn/dotnet/csharp/whats-new/csharp-version-history
c# 官方文档必看
https://docs.microsoft.com/zh-cn/dotnet/csharp/tour-of-csharp/index
https://docs.microsoft.com/zh-cn/dotnet/csharp/tour-of-csharp/program-structure
例子

https://dotnet.microsoft.com/learn/dotnet/in-browser-tutorial/1
.NET浏览器内教程

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦