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.排序(难点)
升序:小->大
降序:大->小
实现排序的算法有:
- 冒泡排序
数据的个数: 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() ;
C#基础学习笔记(个人整理)的更多相关文章
- iOS学习笔记-精华整理
iOS学习笔记总结整理 一.内存管理情况 1- autorelease,当用户的代码在持续运行时,自动释放池是不会被销毁的,这段时间内用户可以安全地使用自动释放的对象.当用户的代码运行告一段 落,开始 ...
- iOS学习笔记总结整理
来源:http://mobile.51cto.com/iphone-386851_all.htm 学习IOS开发这对于一个初学者来说,是一件非常挠头的事情.其实学习IOS开发无外乎平时的积累与总结.下 ...
- 基础学习笔记之opencv(6):实现将图片生成视频
基础学习笔记之opencv(6):实现将图片生成视频 在做实验的过程中.难免会读视频中的图片用来处理,相反将处理好的图片又整理输出为一个视频文件也是非经常常使用的. 以下就来讲讲基于opencv的C+ ...
- java学习笔记系列整理说明
java学习笔记系列整理说明 陆陆续续也巩固学习java基础也有一段时间了,这里整理了一些我认为比较的重要的知识点,供自己或者读者以后回顾和学习.这是一个学习笔记系列,有自己的整理重新撰写的部分, ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- 【C#编程基础学习笔记】4---Convert类型转换
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]4---Convert类型转换 ...
- 【C#编程基础学习笔记】6---变量的命名
2013/7/24 技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com [C#编程基础学习笔记]6---变量的命名 ----- ...
- 1.C#基础学习笔记3---C#字符串(转义符和内存存储无关)
技术qq交流群:JavaDream:251572072 教程下载,在线交流:创梦IT社区:www.credream.com ------------------------------------- ...
- Java基础学习笔记总结
Java基础学习笔记一 Java介绍 Java基础学习笔记二 Java基础语法之变量.数据类型 Java基础学习笔记三 Java基础语法之流程控制语句.循环 Java基础学习笔记四 Java基础语法之 ...
- Mysql数据库基础学习笔记
Mysql数据库基础学习笔记 1.mysql查看当前登录的账户名以及数据库 一.单表查询 1.创建数据库yuzly,创建表fruits 创建表 ) ) ,) NOT NULL,PRIMARY KEY( ...
随机推荐
- (转)shell脚本输出带颜色字体
shell脚本输出带颜色字体 原文:http://blog.csdn.net/andylauren/article/details/60873400 输出特效格式控制:\033[0m 关闭所有属性 ...
- 案例49-crm练习获取客户列表带有分页和筛选功能
1 案例分析 2 书写步骤 1.封装PageBean 2.书写Action 3.书写Service 4.书写Dao 注意清空之前设置的聚合函数 dc.setProjection(null); 5 ...
- redis要注意的一些知识
除了存取数据,redis还可以支持mq等操作,这里面有些小细节,需要注意一下: ---------------------------------------- 1.事务处理 大家都说redis支持事 ...
- jQuery源代码学习笔记_工具函数_noop/error/now/trim
jQuery源代码学习笔记_工具函数_noop/error/now/trim jquery提供了一系列的工具函数,用于支持其运行,今天主要分析noop/error/now/trim这4个函数: 1.n ...
- ssh设置别名
通常我们在 Termianl 下用 ssh 链接远程主机的时候,每次都需要输入一长串的用户名加主机地址,是不是觉得很麻烦? 我们知道在 /etc/ssh/ 目录下通常都会有 ssh_config 和 ...
- REST面向资源架构 RESTful架构
REST基础概念: 在REST中的一切都被认为是一种资源. 每个资源由URI标识. 使用统一的接口.处理资源使用POST,GET,PUT,DELETE操作类似创建,读取,更新和删除(CRUD)操作. ...
- Java并发包concurrent类简析
1.ConcurrentHashMap ConcurrentHashMap是线程安全的HashMap的实现. 1)添加 put(Object key , Object value) Concurren ...
- Linux yum apt-get 方式
Linux 大致可以分两大类 RedHat分支 redhat, centos ,mandrake,mandriva,国产的红x等 1 常见的安装包格式 rpm包,安装rpm包的命令是“rpm -参 ...
- webpack打包将配置文件单独抽离不压缩打包
webpack.config.js: plugins: [ //提取公共模块 new webpack.optimize.CommonsChunkPlugin({ name: 'vendors', ch ...
- MySQL(五)
一.视图 视图是一个虚拟表(非真实存在),其本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用名称即可获取结果集,可以将该结果集当做表来使用. 使用视图我们可以把查询过程中的临时表摘 ...