河北对口计算机高考C#笔记(2026高考适用)---持续更新~~~~
C#笔记
C#发展史
- 1998年,C#发布第一个版本。
- 2002年,visual studio开发环境推出
C#的特点
1.语法简洁,不允许直接操作内存,去掉了指针操作
2.彻底面向对象设计。
3.与Web紧密结合。
4.强大的安全机制,语法错误提示,引入垃圾回收器机制。
5.兼容性。
6.完善的错误,异常处理机制。
.NET(平台)
面向网络支持各种用户终端的开发环境
- 公共语言运行时(CLR): 中间语言代码,负责将不同的编程语言的编译结果统一。
- 类库:系统封装好的工具包,可以直接拿来使用。
.NET发展
- 2000 比尔盖茨提出构想
- 2002 微软发布了.NET Framework1.0
- 2003 微软发布了.NET Framework1.1
- 2005 微软发布了.NET Framework2.0
- 2006 微软发布了.NET Framework3.0
- 2010 微软发布了.NET Framework4.0
- 2020 .Net5.0发布
Visual Studio项目管理
1.解决方案:包含多个不同类型的项目,是一个项目集合,大的文件夹。
.Net中常见的文件类型
.sln:解决方案文件
.csproj:项目文件
.cs:C#源码文件
.resx:资源文件
.aspx:网页文件
.asmx:XML Web文件
.config:配置文件
.suo:解决方案用户选项
命名空间(namespace):命名控件在C#中起到组成程序的作用,也可以作为外部程序调用的凭证。
类:class为类的关键字,每个对象都属于一个类,类是对象的模板。
关键字:系统提前赋予特定意义的一些单词。
标识符
开发过程中,需要自定义命名的,如变量名,常量名,对象名,方法名,函数名等都属于标识符。
命名规则:由字母、下划线、数字组成,且数字不能开头,不能使用关键字。
Main方法(程序入口)
C#程序中的Main方法必须声明为static,并且区分大小写
static void Main(string[] args){//程序代码} /*static:静态修饰符 void:表示无返回值 string[] args:表示参数为数组*/
注释语句
功能:注释起解释代码的作用,不会参与代码的编译工作
- 行注释:以“//”开头,将一整行代码注释掉
- 块注释:以“/* ”开头,中间包含注释内容,以“ */”结尾
输入方法和输出方法
输入方法:Console.Readline() ------从键盘获取一行字符串
Console.Read() -------从键盘获取一个字符
输出方法:Console.WriteLine() -----将数据输出至屏幕并且加上一个换行符
Console.Write() -----将数据输出至屏幕
注意:
1.同一行代码可以书写多条语句。
int a; int b; int c;
2.将一条语句拆分成多行书写。
Console.WriteLine ("你好");
数据类型
值类型
简单类型
整数类型
类型标识符 说明 占用位数 取值范围 sbyte 带符号字节型 8 -27~27-1 byte 无符号字节型 8 0~2^8-1 short 带符号的短整型 16 -215~215-1 ushort 无符号的短整型 16 0~2^16-1 int 带符号的整型 32 -231~231-1 uint 无符号整型 32 0~2^32-1 long 带符号的长整型 64 -263~263-1 ulong 无符号的长整型 64 0~2^64-1 实数类型
类型标识符 说明 占用位数 精度 float 单精度浮点数 32 6~7位 double 双精度浮点数(取值范围最大) 64 15~16位 decimal 固定精度浮点数(精度最高) 128 28~29位 注意:
1.包含小数点的数值会被默认位double类型。
2.在数值后边加F或f可以强制指定为float类型。
3.在数值后边加M或m可以强制指定为decimal类型。
Double double1 = 3.14; float float1 = 3.14f; decimal decimal1 = 3.1415926m;
字符类型
采用Unicode编码格式,每个字符占用两个字节。
定义字符类型使用char关键字,值使用单引号(‘’)括起来。
char chr1 = 'a'; char chr2 = '你';
注意:
1.如果使用双引号,即使包含一个字符也会认定为字符串类型,字符类型是基本数据类型,字符串类型为用引用类型。
布尔类型
Boolean flag1 = true; Boolean flag2 = false;
注意:
布尔类型不能直接转换为int类型。
复杂类型
结构类型
将分散简单变量整合为一体,体现数据之间的内在联系。
//定义语法 struct 结构名称 {数据类型 字段名1;数据类型 字段名2;...}//定义一个具有姓名和年龄的结构类型Student struct Student {public string name;public int age;public char sex; }
枚举类型
指程序中某个变量具有一组确定的值,通过枚举可以将其值一一列出来。
//定义枚举 enum 枚举名{枚举成员1,枚举成员2,... }enum season {spring,summer,autumn,winter }
引用类型
object类型
object类型是所有类型(值类型和引用类型)的基类,C#中所有的类型都是直接或者间接继承object,一个 object类型的变量可以赋任何类型的值。
int x = 100; object obj; obj=x; Object obj2 = "你好"; Console.WriteLine(obj); Console.WriteLine(obj2);
string类型
字符串对象,表示一个Unicode字符序列。String和string都能定义字符串变量
String str = "Hello World"; string str2 = "你好"; Console.WriteLine("{0},{1}",str,str2);
值类型与引用类型的区别
值类型:栈
引用类型:堆
类型转换
隐式转换
不需要加以声明就可以进行的转换,原类型取值范围包含在目标类型中,就可以实现隐式转换。
小--------->大
int a = 12345; long b = a;
显示转换(强制转换)
//(类型标识符)表达式 float a = 123.45f; Console.WriteLine((int)a); //实数类型转换为整数类型通常辉出现精度丢失问题
使用方法进行数据类型转换
1.Parse方法:可以将字符串转换为数值型。
//语法:数值类型名称.Parse(字符串表达式) int a = int.Parse("123456"); Console.WriteLine(a);int pwd = int.Parse(Console.ReadLine()); Console.WriteLine(pwd);
2.Convert类的方法:将一种基本数据类型转换为另一种基本数据类型
//语法:Convert.转换方法(值) int a; a = Convert.ToInt32("123"); Console.WriteLine(a);int pwd; pwd = Convert.ToInt32(Console.ReadLine()); Console.WriteLine(pwd);
装箱与拆箱
实现值类型与引用类型的相互转换。
装箱转换(将一个值类型的数据转换为对象类型的数据)
int i = 10; object obj = i;
拆箱转换(将一个引用类型的数据转换为值类型数据)
int i = 10; object obj = i; int j = (int)obj;
变量与常量
常量
概念:在程序运行过程中,其值不会改变的量。
分类:
直接常量(一个固定值)
1.整型常量:16,28L 2.浮点常量:3.14,4.25f,8.997m 3.字符常量:'a','0' 4.字符串常量:"abc","HelloWorld" 5.布尔常量:true,false
符号常量
//定义语法:常量名全大写 //const 数据类型 常量名 = 常量值 const float PI = 3.14;/*注意: 1.const是定义常量的关键字 2.常量名推荐全部大写 3.常量一旦赋值,不可修改 4.常量的赋值只能适用常量和常数,不能使用变量 */
变量
概念:在程序运行过程中其值可以不断改变的量。
变量名:
- 只能使用数字、字母、下划线组成,且数字不能开头
- 不能使用关键字
- 严格区分大小写
- 如果使用关键字作为变量名,开头需加@
变量的定义
//语法: //数据类型 变量名[ = 值]; //可以再定义变量时直接赋值,也可以后期赋值。 int a = 13; int b; b = 3+5;
变量的作用域(定义变量的适用范围)
- 成员变量:在类体中定义的变量称为成员变量,在整个类体中都能用。
- 局部变量:在类的方法中定义的变量,只能在方法内部使用。
运算符与表达式
算数运算符
符号 意义 示例 结果 + 加法运算 12+34 46 - 减法运算 88-23 65 * 乘法运算 3*2 6 / 除法运算
(运算符左右都为整型,做整除运算)10/3.0 3.33333 % 取余 10%3 1 自增与自减运算符
自增运算(++)使操作数的值加1
自减运算(–)使操作数的值减1
int i = 1; i++; Console.Writeline(i); //i=2 i-- Console.Writeline(i); //i=1
位置规则:
前置形式:先进行自增或自减再进行运算
后置形式:先进行运算再进行自增或自减
int a = 5, b, c;b = a++;Console.WriteLine(a); //a=6 b=5c = ++a; //c=7Console.WriteLine(a); //a=7Console.WriteLine(b); //b=5Console.WriteLine(c); //c=7
字符串运算符
+:拼接字符串,合并成新字符串。
String a = "123";int b = 465;Console.WriteLine(a + b); //123456
赋值运算符
/*变量名 = 值/表达式 =:赋值运算符,将等号右边的值赋值给等号左边的变量或者常量*/string a; a = "Hello World"; int i; i = (int)12.3;**赋值复合运算符**| 符号 | 意义 | 示例 | | ------ | ------------ | ----------------------------- | | **+=** | **加赋值** | **a+=b 等同于 a=a+b** | | **-=** | **减赋值** | **a-=b 等同于 a=a-b** | | ***=** | **乘赋值** | **a'**='b 等同于 a=a*'*'b** | | **/=** | **除赋值** | **a/=b 等同于 a=a/b** | | **%=** | **取模赋值** | **a%=b 等同于 a=a%b** | | <<= | 左移赋值 | a<<=b 等同于 a=a<<b | | >>= | 右移赋值 | a>>=b 等同于 a=a>>b | | &= | 与赋值 | a&=b 等同于 a=a&b | | ^= | 异或赋值 | a^=b 等同于 a=a^b | | \|= | 或赋值 | a\|=b 等同于 a=a\|b |
关系运算符
概念:比较两个运算数的关系,结果为true和false
符号 意义 < 小于 <= 小于等于 > 大于 >= 大于等于 == 等于 != 不等于 逻辑运算符
符号 意义 示例 ! 逻辑非(取反) !(2<3)------>false && 逻辑与(同时为真结果为真,否则为假) 3>2 && 5<7 ------->true || 逻辑或(有一个为真最终结果即为真) 8<9 || 9=10 ------->true //闰年的判断:闰年年份可以被4整除并且不能被100整除,或者能被400整除 year%4==0 //能被4整除 year%100!=0 //不能被100整除 year%400==0 //能被400整除 year%4==0 && year%100!=0 || year%400==0
条件运算符|三目运算符|三元表达式|行状判断语句
格式:表达式1?表达式2:表达式3
逻辑:表达式结果为真,执行表达式2,为假执行表达式3.
int a,b,c; a = 16; b = 19; a>b?c=a?c=b;
运算符优先级
运算符类别 运算符 优先级 单目运算 ++、–、! 1 算数运算符 *、/、% 2 +、- 3 关系运算符 >、>=、<、<= 4 ==、!= 5 逻辑运算符 && 6 || 7 条件运算符 ?: 8 赋值运算 = 9
控制结构
顺序结构
输入语句:
Console.Read(); //返回用户从控制台上输入数据的首字符的ASCII码 Console.ReadLine(); //将用户输入的一行信息用string类型的字符串返回
输出语句:
Console.WriteLine(); //输出后自动换行 Console.Write(); //输出后不换行
分支结构
单分支
/*语法:if(判断表达式){代码块 }*///输入一个年龄,判断是否成年Console.Write("请输入年龄:");int age = int.Parse(Console.ReadLine());if (age >= 18) {Console.WriteLine("成年");}Console.ReadKey();
双分支
/*语法: if(判断表达式){代码块1 }else{代码块2 } *///输入一个年龄,判断是否成年 Console.Write("请输入年龄:"); int age = int.Parse(Console.ReadLine()); if (age >= 18) {Console.WriteLine("成年"); } else {Console.WriteLine("未成年"); }Console.ReadKey();
多分支1
/* if(判断表达式1){代码块1 }else if(判断表达式2){代码块2 }...else{代码块N } */ //输入一个年龄,如果年龄在0~18岁为儿童,19~60成年人,60以上为老人Console.Write("请输入年龄:");int age = int.Parse(Console.ReadLine());if (age >= 0 && age <= 18){Console.WriteLine("儿童");}else if (age > 18 && age <= 60){Console.WriteLine("成人");}else if (age > 60){Console.WriteLine("老人");}else {Console.WriteLine("输入有误");}Console.ReadKey();
多分支结构2
/* 语法:switch(表达式){case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;...default:语句n;break; } *///输入学生成绩,判断改成绩处于哪个阶段,100以上为满分,90以上为优,80分以上为良好,60以上为及格,否则为不及格。Console.Write("请输入成绩:");int score = int.Parse(Console.ReadLine());switch (score/10) {case 10:Console.WriteLine("满分");break;case 9:Console.WriteLine("优秀");break;case 8:Console.WriteLine("良好");break;case 7: //case 7中没有break语句,程序不会跳出 结构,直接转入下一个分支case 6:Console.WriteLine("及格"); break;default:Console.WriteLine("不及格");break;}Console.ReadKey(); }
总结:
- if判断后的表达式结果为布尔类型,switch判断后的表达式为整型。
- 分支结构只会执行一个分支
- switch…case语句中不加break,程序不会跳出判断结构。、
- 多分支结构中注意判断条件的顺序。
循环结构
for循环
/*语法: for(循环变量初始化;判断语句;循环变量的更新){循环体 } 执行顺序: 1.初始化循环变量 2.判断循环条件是否满足 3.满足 不满足 4.执行循环体 跳出循环 5.更新循环变量 6.判断循环条件是否满足 .... */ for(int i=0;i<=10;i++){Console.WriteLine(i); }/*注意: 1.for循环中三个表达式都可以省略,分号不可以省略 2.如果在循环结构中省略变量初始化,那么需要将变量初始化放在循环结构前边,否则报错 3.如果在循环结构中省略判断条件,那么会陷入死循环,无法自动中止。 4.如果在循环结构中省略变量更新,也会陷入死循环。 5.如果循环结构中的所有表达式都省略,也会陷入死循环。 */ //打印1~100之间所有的奇数//1~100所有数字找到for (int i = 1; i <= 100; i++){//判断当前的数字是否为奇数?if (i % 2 == 0){Console.WriteLine(i);}}//计算10的阶乘 1*2*3*4*5*6*7*8*9*10 //计算1~100之间所有的奇数之和? 1+3+5+7+9...
while循环
/*语法: while(循环条件){循环体 } 执行逻辑:循环条件为真执行循环体,循环条件为假不执行循环体(先判断后执行) */ //使用while实现登录系统,重新输入账户密码操作//登陆系统string user="root&