郑州设计logo公司,首页关键词优化价格,公司手机版网站模板免费下载,ps制作网站首页界面最近在学习C#开发知识#xff0c;跟着传智播客的视频学习了一下#xff0c;感觉还不错#xff0c;整理一下学习笔记。 C#基础语法学习笔记 1.背景知识2.Visual Studio使用3.基础知识4.变量5.运算符与表达式6.程序调试7.判断结构8.循环结构9.常量、枚举类型10.结构体类型11.数…最近在学习C#开发知识跟着传智播客的视频学习了一下感觉还不错整理一下学习笔记。 C#基础语法学习笔记 1.背景知识2.Visual Studio使用3.基础知识4.变量5.运算符与表达式6.程序调试7.判断结构8.循环结构9.常量、枚举类型10.结构体类型11.数组12.方法13.outref用法14.常用方法 1.背景知识
/*
背景知识
背景.net是微软的
一、.net与C#
1. .net:又叫dotnet指.Net Framework框架.是一种技术一种平台
2. C#: C sharp(锋利的) 是一种编程语言(控制计算机和计算机进行交互的语言可以基于.net 平台进行开发应用关系: .net是一种平台在.net平台上可以用C#语言进行.net相关程序的开发
3.Java: Java即是一种技术又是一种语言二、.net能干什么
1.Winform: 在.net这个平台上开发的桌面应用程序叫做 Winform应用程序开发 桌面应用程序通过安装到桌面
2.ASP.NET: 在.net这个平台上开发的web(浏览器)应用程序(网站) 叫做ASP.NET web应用程序通过打开浏览器输入网址访问
3.wp7 windows phone 这.net这个平台上进行的手机嵌入式开发 嵌入式开发应用程序工业化控制设备两种服务模式
1.C/S 客户机Client/服务器Server :桌面应用程序 单机的不需要服务器的不算因为只有C没有S像QQ这种是C还需要S
2.B/S 浏览器Browser/服务器Server:一般是web应用程序 三、开发工具Visual Studio
是微软的一个IDEIntegrated Development集成开发环境也可以在记事本中写但是太麻烦了 工欲善其事必先利其器。MSDN开发工具的帮助文档*/2.Visual Studio使用
/* Visual Studio使用* * 一.创建项目* 文件-gt;新建-gt;项目-gt;选择要创建项目的类型目前一般是.net的控制台应用* * 项目名称* 项目位置* 解决方案解决方案包含项目,解决方案中可以包含多个项目意思是这些个项目是用于解决这个方案的* *二、界面排版** 1.菜单栏* 所有功能都会在菜单栏* 2.工具栏* 常用的工具功能便捷* * 3.解决方案资源管理器* * 解决方案中可以包含多个项目项目可以包含多个文件文件中是我们写的程序* 在文件中可以有命名空间定义命名空间前需要引用命名空间命名空间中可以包含类类中可以包含方法* 在C#中类文件是以.cs结尾的* * 程序的执行过程* Main方法是我们程序的入口方法当我们执行一个程序时会首先找到Main方法从Main的第一句开始执行* 当Main方法执行完成后即执行到Main方法的反大括号程序就结束了* 一般情况下一个项目只有一个Main方法或者也可以没有* * 4.重置开发环境* 可以使我们的开发工具恢复至默认状态* 菜单工具-gt;导入导出设置-gt;重置所有设置-gt;不保存当前所有设置-gt;C#开发设置-gt;完成 * * 一般的窗口不小心关闭了在视图中找* * 三、保存/打开项目* .sln 解决方案文件记录着解决方案中都有哪些项目* .csproj项目文件记录着项目中都有哪些文件* 项目在哪忘了右击解决方案-gt;在文件资源管理器中打开文件夹* * 1.打开项目* 先找到项目路径不要打开.cs文件直接双击打开.cs文件只是打开了一个类只能看不能运行右边也没有解决方案* 建议用vs打开.sln解决方案文件可以打开该解决方案下的所有项目也可以打开.csproj文件只能打开这一个项目* * 2.保存项目* Ctrls只保存当前界面下的文件* Ctrlshifts保存所有文件* * 四、设置vs的字体大小及行号显示* * 1.设置vs字体大小工具-gt;选项-gt;环境-gt;字体和颜色* 2.行号显示工具-gt;选项-gt;文本编辑器-gt;所有语言-gt;行号* * 五、在同一解决方案下创建多个项目* 直接从头打开vs创建项目话会再弄一个新的解决方案* 如果想在同一解决方案下创建多个项目需要先打开解决方案然后新建就会出现选项 或者打开解决方案后右击添加* * 六、启动项目设置* 当有多个项目时运行会运行右侧黑色加粗的项目* 想更改三种方法* ①工具栏有个选择框* ②在右侧找到要启动的项目右击设置为启动项目* ③在右侧右击解决方案选择属性-gt;启动项目-gt;单启动项目/当前选择是现在打开的项目* * 七、项目的加载与卸载* 同一解决方案下有时候打开着多个项目如果其他项目有错运行当前项目可能受影响。* 这时候可以右击其他项目选择卸载不是删除等需要时再重新加载即可。* */using System; //引用命名空间
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _2.Visual_Studio知识 //定义一个叫 _2.Visual_Studio知识 的命名空间
{class Program //定义了一个名称为Program的类{static void Main(string[] args) //这是一个方法叫Main{}}
}3.基础知识
/** 基础知识* * 一、框架及执行过程
using System; //引用命名空间namespace XXX //定义一个叫XXX的命名空间
{class XXXX //定义了一个名称为XXXX的类{static void Main(string[] args) //这是一个方法叫Main{//在这里编写程序}}
}* 程序的执行过程* Main方法是我们程序的入口方法当我们执行一个程序时会首先找到Main方法从Main的第一句开始执行由上往下一句一句执行* 当Main方法执行完成后即执行到Main方法的反大括号程序就结束了* 一般情况下一个项目只有一个Main方法或者也可以没有* * 二、输出* * 运行代码点击小绿按钮或者调试-gt;开始调试* 小技巧* 1vs有的会有智能提示回车或tab键会出来* 2输入cw再按两下tab键可以快速打出Console.WriteLine(); 语句* * 1.Console.WriteLine(大号); //在屏幕中换行输出* 2.Console.Write(111);//在屏幕中不换行输出* 3.Console.ReadKey();//当程序执行到Console.ReadKey();时程序会停到这里等待用户从键盘上键入一个键用户键入这个键之后程序才继续执行//如果没有这一句会一闪立马就关了* 4.Console.Clear();//对控制台输出的清屏* * * 总结* 1C#区分大小写* 2C#中每一个语句都必须以分号;结束* 3这个生成的程序在项目文件夹-gt;bin-gt;Debug-gt;.exe文件其他文件都是和调试相关的* 4程序要先 生成编译后运行直接点那个启动是把这两步和在一起了。生成是先看看对不对所以按F6经常生成一下F5是先 生成后运行* * 三、注释* 注释对写的程序进行解释是给人看的* * 1.单行注释 // * 2.多行注释 /*开始 *斜杠结束* 除了多行注释语句还可以用工具中的注释选中的行快捷键先ctrle再按一下c* 3.文档注释 ///* 用于对类和方法进行注释在类或方法前面连续输入三个/会自动生成一段注释* * 四、计算机使用的基本技巧* * 1.常用的定位快捷键:* 1Home键跳到这一行的最前面* 2End键跳到这一行的最后面* 3CtrlHome键跳到这一页的最前面* 4CtrlEnd键跳到这一页的最后面* 5PageUp键上翻页如果代码过多就不需要用鼠标了* 6PageDown键下翻页* 7shift键帮助选中多个字符和其他定位键组合使用光标经过的地方都会被选中不用再通过鼠标选中了* 2.一段文字的删除习惯* 不要一个一个的删再先选中再一起删 * 快速选中一行HomeshiftEnd * Backspace删除当前光标前面的* Delete删除当前光标后面的* * 3.全选/复制/粘贴/剪切* CtrlA/C/V/X* 注意对话框的内容的复制* * 4.插入、覆盖模式的困惑* 有时候误点了Insert会出现一个小黑框就是进入了覆盖模式右下角会出现一个OVR就是覆盖模式的意思* 再点一个Insert就会突出覆盖模式进入插入模式* * 5.学会使用CtrlZ的撤销操作* 6. ,.;()的全角还是半角问题* 敲代码都是在英文状态下的半角模式* * 7.遇到异常、报错不要慌* 按住F6出现编译错误不要慌先去看一下* * 8.#regin #endregion* 这对指令可以折叠一段代码前面会有一个号就可以折叠#regin后可以加注释*
#region 测试用
Console.WriteLine(你好世界);
Console.ReadKey();#endregion* * * 五、了解.net* .net是一种多语言的开发平台开发.net可以用多达几十种语言进行开发多语言、单平台但是可以跨微软的平台* Java:是一种单语言的平台但是可以跨平台单语言、多平台* * MSIL:微软中间语言 Microsoft Intermediate Language* CLR公共语言运行时 Common Language Runtime* CLS: 公共语言规范 Common Language Specification* CTS: 通用类型系统 Common Type System* JIT: 即时编译器 Just In Time*/using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace _3.基础知识
{/// summary/// 这个类中有一个Main方法是我们程序的入口方法/// /summaryclass Program{/// summary/// 程序运行时从这里开始执行代码/// /summary/// param nameargsstatic void Main(string[] args){Console.WriteLine(大号); //在屏幕中换行输出Console.Write(111);//在屏幕中不换行输出Console.WriteLine(你是大傻der);Console.ReadKey();//当程序执行到Console.ReadKey();时程序会停到这里等待用户从键盘上键入一个键用户键入这个键之后程序才继续执行//如果没有这一句会一闪立马就关了#region 测试用Console.WriteLine(你好世界);Console.ReadKey();#endregion}}
}4.变量
/** 变量* * 1、概念* 变量代表着一块内存空间我们可以通过变量名称向内存 存/取数据.有变量就不需要我们记忆复杂的内存地址* * 2、变量的定义(声明)* 数据类型 变量名* * 1数据类型* 数值类型 int 整型* double 浮点型* decimal 也是浮点型一般用于存储金钱 decimal money 1000.25m (后面有个m只是表示是decimal类型) * 非数值类型char 单个字符类型只能存储一个字符并且存储的这个字符要求用单引号引起来* string 字符串类型就是把0个或1个或多个字符连接起来要求用双引号引起来* 注意* ①在C#开发环境中直接写一个有小数点的数字这个数字是double类型的* ②在一个小数后面加一个m或者M就是告诉编译器这个数字是decimal类型* * 2变量的命名规则* 1°必须以 字母 _ 或 符号开头不能以数字开头* 2°后面可以跟任意字母、数字、下划线* 3°注意* ①变量名不能与C#中的关键字重复* ②在C#中是区分大小写的* ③在相同的作用域内同一变量名不能重复定义* 4°变量名要有意义见名知意 * 5°C#变量名编码规范——Camel命名法首个单词的首字母小写其余单词的首字母大写 例studentName* 6°Pascal命名规范每个单词的第一个字母都大写 例StudentName* 7°如果使用到英文单词的缩写全部用大写* * 3声明变量的三种方式* 变量一定要先定义再赋值后使用* ①先定义再赋值 int a; a3;* ②定义变量时直接赋值 int a3;* ③一次声明多个同类型的变量多个变量名称中间用逗号分隔最后以分号结束* int a,b,c; a1; b2; c3;* int a1,b2,c3;* * * * 3、变量的赋值输出* 变量名 值* * 1赋值符* 赋值运算符和赋值表达式* a a 1;* 注意* ①这里的 等号时赋值运算符赋值的意思而不是数学意义上的相等* ②变量可以重复赋值一旦给一个变量赋了新值那么变量中的老值就不复存在了* * 2连接符* 号在C#中有两种意义* ①加法两边参与运算的是数值类型则表示是数学中的加法运算* ②连接可以连接两个字符串这里的表示连接的意思字符串变量 相当于 字符串变量.Tostring()
连接的两个变量如果一边是字符串另一边会自动调动字符串.Tostring()方法* * 3占位符* 占位符由{数字}组成数字由0开始编号* 在Console.WriteLine()中第一个变量/字符串可以使用占位符* 注意* ①索引(从0开始)必须大于或等于0且小于参数列表 的大小* ②用逗号分开的叫参数Console输出的永远是第一个参数的内容后面的参数只是用于替换前面占位符的值* * 4、例借助第三变量交换变量* int t;//定义第三变量t a;a b; b t;* * 5、字符串类型* 1Console.ReadLine();* 作用用于接收用户的输入* 注意* 用于让用户从键盘上输入一句话让程序执行到下面这句话就会暂停按回车程序将继续执行* 输入的数据默认是字符串类型所以要定义一个字符串变量来存储用户输入的值* 2字符串转义* 1°什么时候用* 当我们需要在字符串中输入一些特殊字符时比如半角引号、换行、退格就需要使用转义字符* 2°概念* 转义字符是一个字符它是由一个\和一个字母来组成具有特殊意义的一个字符* 3°常用的转义字符* \n 换行* \b backspace 退格* \t tab键 制表符由多个空格组成的一个字符具有行与行之间的对齐功能* \\ :表示一个\* :在字符串前面加一个符号有两种意义* ①字符串中如果有\ ,则不再理解为转义符* ②使字符串可以换行* 如果字符串前面加了符号在字符串上用两个双引号代表一个双引号*/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 变量
{internal class Program{static void Main(string[] args){}}
}5.运算符与表达式 /** 运算符与表达式* * 一、算术运算符与算术表达式* * 1、算术运算符* ① 加* ② - 减* ③ * 乘* ④ / 除 整除* ⑤ % 取余、取模 取余数* 注意* 它们是二元运算符要求参与运算的两个操作数的类型必须相同并且经过运算后的结果与操作数的类型相同* :自增1 有前加和后加* -- :自减1 有前减和后减* 这两个是一元运算符 如何区分一元还是二元看有几个操作数 左右有两个操作数所以是二元旁边只有一个操作数所以是一元 * 在C#中一般情况下一元运算符的优先级大于二元运算符* * 例
c a: 先将 a 赋值给 c再对 a 进行自增运算
c a: 先将 a 进行自增运算再将 a 赋值给 c
c a--: 先将 a 赋值给 c再对 a 进行自减运算
c --a: 先将 a 进行自减运算再将 a 赋值给 c * 2、算术表达式* 由算术运算符连接起来的式子* 3、优先级* 先算乘除后算加减有括号先算括号里的相同级别的从左至右运算* 如果要改变计算的优先级用小括号小括号可以无限制套用但是一定要成对出现* 在C#中一般情况下一元运算符的优先级大于二元运算符* * * 4、类型转换* 1自动类型转换隐式转换* 1°发生隐式转换的条件* ①两种类型兼容参与运算的两个数据类型必须相兼容例int和double兼容都是数值类型* ②目标类型大于源类型必须一边的数据类型表示范围小一边的表示范围大并且把小的转向大的不丢失精度从int到double* * 2°注意* 在自动转换中转换不会都是丢失精度的如果丢失精度那么这个转换肯定不会自动完成* 常见到参与运算的两个操作数一个是int一个是double那么int类型会自动转换成double类型* 所以两个int类型的运算想得到double类型*1.0就可以了* * 2强制类型装换显式转换* 1°背景* 当需要丢失精度的转换,系统是不会帮我们自动转换的需要程序员来写代码完成转换就是强制类型转换* (如double3.14到int3的转换会丢失0.14的精度)* 2°语法* (数据类型名) 待转换的值* 例* int b (int)3.14* * 3°条件* 强制类型转换数据类型一定要相兼容兼容的意思只都是数值类型比如字符串和数值就不兼容* * 3字符类型的转换——借助类方法*方式一 Convert不再仅是内存级别的转换而是考虑数据意义的转换。Convert是一个加工、改造的过程* ①Convert.ToInt32(待转字符串) 将字符串变成整数* ②Convert.ToDouble(待转字符串)将字符串变成浮点数* ③Convert.ToString() 一切类型都可以转换成string类型
方式二将字符串类型装换为对应的数值类型
Console.Parse(String);
int.Parse(String)
double.Parse(String)
例string s 123;//int a Convert.ToInt32(s);int a int.Parse(s);* 二、复合运算符* a3 等价于 aa3* - * * * /* %* 注意: 大于等于号中间不能有空格** 三、关系运算符和关系表达式* 1、关系运算符* 在C#中有6个关系运算符用于比较两个事物之间的关系所以为二元运算符* * * 等于* ! 不等于* * * * 2、关系表达式* 由关系运算符连接起来的式子* 3、bool类型布尔* 1bool值有两个* 真true* 假false* 2关系运算的结果是布尔类型的* * * 四、逻辑运算符和逻辑表达式** 1、逻辑运算符* ① 并且逻辑与两边都是真才是真 * ② || 或者逻辑或两边只要有一个真才是真* ③ 取反逻辑非真变假假变真*是一元运算符 ||是二元运算符** 2、逻辑表达式* 有逻辑运算符连接起来的式子* */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 运算符与表达式
{internal class Program{static void Main(string[] args){int a 5, b 6;int c a * --b;// bb-1 (b是前减 )// ca*b (相乘赋值给c )// aa1 (a是后加)Console.WriteLine(c);Console.ReadKey();}}
}6.程序调试
/** 程序调试* debug能力才是最重要的* * 编译错误一般是语法错误编译器通不过会直接提示以后通不过多读需要经验积累* 运行错误逻辑错误能编译通过但是自己敲到代码不符合需求逻辑需要找出错误地方就需要程序调试* * 对于运行错误有以下两种调试方法**1利用编辑器自带调试功能:三步走* ①设置断点:在最前面的灰色处点一下就可以设置。断点当程序运行到我们设置的断点处程序就会停止* ②单步运行点击启动调试按F10一步一步执行观察变量* F10是逐过程遇到方法时不会进入方法体中执行* F11是逐语句遇到方法时能够进入方法体中执行* 跳出可以跳出正在执行的方法* F5继续不会调试当前语句直接跳到下一条语句* * ③观察变量观察的是左下的变量列表也可以选中一块右击快速监视*2输出大法推荐* 利用输出语句在认为错误的代码块中加输出语句如果输出不符说明这块代码不对用于确定错误位置**注意
写代码时尽量不要重现一大段重复代码这就是叫代码冗余
尽量不要让代码冗余
标志旗帜法 经常用来解决代码冗余
例string username;string password;do{Console.WriteLine(请输入用户名:);username Console.ReadLine();Console.WriteLine(请输入密码:);password Console.ReadLine();if (username ! admin || password ! 888888){Console.WriteLine(用户名或密码错误请重新输入);}} while (username ! admin||password!888888);Console.WriteLine(登录成功);Console.ReadKey();修改后string username;string password;bool flag false;do{flag false;Console.WriteLine(请输入用户名:);username Console.ReadLine();Console.WriteLine(请输入密码:);password Console.ReadLine();if (username ! admin || password ! 888888){Console.WriteLine(用户名或密码错误请重新输入);flagtrue;}} while (flag);Console.WriteLine(登录成功);Console.ReadKey(); */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 程序调试
{class Program{static void Main(string[] args){int i 1;while(i10){Console.WriteLine(i);i;}Console.ReadKey();}}
}7.判断结构
/** 判断结构分支结构语句在满足条件下执行* * 一、if单分支* 1、形式* if(条件)* {* 语句1;* 语句2;* 语句3;* }* * 2、执行过程* 首先判断条件的结果如果条件为true,则执行语句.如果条件为false则跳过语句执行后面的语句* * 3、注意:* (1)if后面括号中的条件(是关系、逻辑表达式)要能计算成一个bool类型的值* (2)和if语句有关系的语句只有后面大括号中的内容* * 二、if-else双分支* 1、形式* if(条件)* {* 语句; //1* }* else* {* 语句;//2* }* * 2、执行过程* 如果条件结果为true,执行if后语句1否则条件为false执行else后语句2* 根据判断条件结果总要执行一个* * * 三、if-else-if多分支* 1、形式* if(条件1)* {* //1* }* else if(条件2)* {* //2* }* else* {* //3* }* 2、执行流程* 第一个条件不成立才会进入下一个一旦有一个条件成立就会执行当前后的语句执行完跳判断* 3、注意* 判断语句也可以进行嵌套* if()* {* if()* {* * }* else* {* * } * }* * 四、switch-case语句* * 1、形式* * switch(表达式)* {* case 值1:* 语句1;* break;* * case 值2:* 语句2;* break;* * //...* * default:* 语句;* break;* }* * 2、执行过程* 首先计算表达式然后根据计算结果匹配case后面的值* 如果有匹配项则执行匹配后面的语句知道break语句跳出判断* 如果所有的case值都不匹配那么有default则执行default后面的语句直到break结束* 如果没有default,则跳出switch-case什么都不执行* * 3、if-else-if与switch-case语句的比较* 1相同点* 都可以实现分支结构* 2不同点* switch-case:一般只能用于等值比较* if-else-if可以处理范围* * * 4、例
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 第三题
{internal class Program{static void Main(string[] args){Console.WriteLine(请输入俩数和一个运算符); int aConvert.ToInt32(Console.ReadLine()); //输入int bConvert.ToInt32(Console.ReadLine());string cConsole.ReadLine();switch(c) {case : Console.WriteLine(a b); break;case -:Console.WriteLine(a - b);break;case *:Console.WriteLine(a * b);break;case /: if (b 0){Console.WriteLine(0不能做除数);}else{Console.WriteLine(a/ b);}break;default:Console.WriteLine(不能识别运算符);break;}Console.ReadKey();}}
}* * * 五、三元表达式* 1、作用可以代替if-else有时使用更简便* 2、形式* 表达式1 ? 表达式2: 表达式3* 例* int a100,b20;* int max ab? a:b* Console.WriteLine(max);* * 3、执行过程* 首先计算表达式1表达式1应该是一个能够计算成bool类型的值 相当于if后的条件* 如果表达式1的值为true则表达式2的值作为整个表达式的值* 如果表达式1的值为false则表达式3的值作为整个表达式的值* 4、注意* 表达式2和表达式3的类型一定要相同或者相容能够发生自动转换* */using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 判断
{internal class Program{static void Main(string[] args){}}
}8.循环结构
/** 循环结构语句在满足条件下执行多次* * 一、while循环* 1.特点先判断再执行* 2.形式
while(循环条件)
{循环体;
}* 3.执行过程* 先判断循环条件如果条件为true则执行循环体循环体执行完再去执行循环条件* 如果条件为false则跳出循环循环结束* * 二、do-while循环 * 1.特点先执行再判断* 2.形式
do
{循环体
}while(循环条件);* * 3.执行过程* 先执行循环体* 执行完循环体再判断循环条件是否成立如果条件为true则执行循环体如果条件为false则跳出循环* * 注意* 假如循环条件一开始就不成立对于while循环一次都不会执行对于do-while循环体会执行一次* 所以do-while循环体至少会执行一次while循环体可能一次都不会执行* 所以一般要求先输入一次的循环一般都考虑用do-while循环 * * 扩展 * 1try-catch的使用* 1.作用检测异常可以用try-catch来调试代码块* 2.格式
try //检测
{//有可能出现异常的代码
}
catch
{//出错后的处理
}**3.执行过程*如果try中的代码没有出现异常则不会执行catch中的代码*如果try中的代码出现异常则程序立即跳到catch中*4.常用于输入出现异常时*例
try
{int age Convert.ToInt32(Console.ReadLine()); Console.WriteLine(你刚刚输入的年龄为age);
}
catch {Console.WriteLine(输入错误);
}
Console.ReadLine(); ***2通过循环限制只能输入某些值
例
while(answer!yanswer!n)
{Console.WriteLine(只能输入y和n请重新输入);answerConsole.ReadLine();
}** 三、for循环* 1.特点一般用于已知循环次数的循环* 2.形式
for(1循环初始化;2循环条件;3用于改变循环变量的值)
{4循环体;
}* * 3.执行过程* 首先执行1循环变量初始化用于定义循环变量和对循环变量赋初值* 然后执行2循环条件如果为true执行4循环体如果为false跳出循环* 然后4循环体执行完再去执行3用于改变循环变量的值* 然后再执行2循环条件依次类推* * 注意1 2 3 4都可以省略,如果省略2循环条件将是一个死循环* * 4.循环的嵌套* 例输出九九乘法表for (int i 1; i 9; i)//外层循环循环9次{//写在这里的代码属于外层循环for (int j 1; j i; j) //内层循环外层循环每执行1次内层循环执行i次{//写在这里的代码属于内层循环}//写在这里的代码属于外层循环}* 总结* 三种循环可以相互转化没有说用哪个循环对错只能说用哪个循环更方便一些、逻辑更清晰一些* 已知循环次数的一般用for循环* 循环条件比较复杂跟循环次数无关的一般用while和do-while循环* * 四、break和continue 跳转语句* 1.break* (1)可以用于switch-case判断中用于跳出switch* (2)用于循环中立即跳出(终止)break所在的循环一般和if配合使用* 2.continue* 用于循环中结束本次循环继续下一次循环* 3.goto:* 不建议使用来回跳因为会破坏结构不便于阅读要慎重使用* * */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 循环
{class Program{static void Main(string[] args){//格式1//for(int i1;i9;i) //i控制行//{// for(int j1;ji;j) //j控制列// {// Console.Write({0}*{1}{2} , j,i,i*j);// }// Console.WriteLine();//}//Console.ReadKey();//格式2//for(int i 1; i 9; i) //外层循环i控制行数//{// for (int j i; j 9; j) //内层循环j控制列数表示第i行的第j个式子// {// Console.Write({0}*{1}{2} , i, j, i * j);// }// Console.WriteLine();//}//Console.ReadKey();}}
}9.常量、枚举类型
/** 常量、枚举类型* * 一、常量* 常量与变量对应常量是指值不可以改变的(变)量* 1、定义* const 数据类型 常量名 常量值;* 和变量定义形式很像只是在前面加上了一个const修饰符* * 例* const double PI 3.14; //定义常量赋初值PI 3.1415;//错误* * 注意* 在定义时赋值在其他时候不允许修改这个值* * 2、常量的作用* ①可以重复使用* ②在写程序的时候可以防止被恶意的修改掉* * 二、枚举类型* * 1、概念* 枚举类型可以自己重新定义一种类型在定义这种类型的时候一起定义了这种类型所有的值* * 2、定义
enum 自己起的类型名称
{值1值2...值n};* 注意* 枚举的定义一般和类的定义在同一个级别这样在同一个命名空间下的所有类就都可以使用这个枚举了。方法中/类中也可以* * 3、作用* ①限制用户不能随意赋值只能在定义枚举时列举的值中选择枚举变量 枚举类型名.值* ②不需要死记每一个值是什么只需要选择相应的值在vs中使用枚举类型先点空格会提示作用方便程序员使用* * 4、注意* ①枚举类型内的值不需要加双引号* ②定义枚举类型时,其中的值不能是int类型* ③枚举类型都可以强制转换成int类型* ④枚举类型的值在定义时是有一个默认编号的依次从0开始* sex Gender.女; Console.WriteLine(sex);Console.WriteLine((int)sex);* 注意可以在枚举类型中的值中修改编号修改一个值的编号后面的会是前面的编号1但是尽量出现重复编号* enum Gender{男0, //编号是0 女, //编号是1a1, //编号是1尽量不要出现这种情况b //编号是2}** ⑤如何把一个字符串转换成字符类型* //枚举类型 枚举变量 (自枚)(Enum.Parse(typeof(自枚),待转换的字符串);* 注意如果让用户输入枚举的值最好使用try-catch防止输入的不是枚举列表中的值* * */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 常量_枚举
{/// summary/// 定义了一个类型叫Gender的枚举类型他的值有两个男和女/// /summaryenum Gender{男, //枚举类型内的值不需要加双引号女}internal class Program{static void Main(string[] args){Gender sex; //定义Gender类型的变量变量名叫sexConsole.WriteLine(请输入你的性别);//sex Gender.女; //赋值,不能赋枚举之外的值//Console.WriteLine(sex);//Console.WriteLine((int)sex);//枚举类型 枚举变量 (自枚)(Enum.Parse(typeof(自枚),待转换的字符串);string s Console.ReadLine();try{sex (Gender)(Enum.Parse(typeof(Gender), s));switch(sex){case Gender.男:Console.WriteLine(男性);break;case Gender.女:Console.WriteLine(女性);break;}}catch{Console.WriteLine(你输入的性别有误上); }Console.ReadKey();}}
}10.结构体类型
/** 结构体类型* 注意C#中的结构比C语言中的结构体扩展了很多用法只看C的结构体的话就局限了* C#中的结构体成员不仅可以是变量还可以是方法* * 1.作用* 可以解决* ①比如为了存储一个人的信息要声明一组变量当我们要存储n个人的信息时就要声明n组变量 的问题* 解决了变量名重复定义的问题* ②存储一个信息的这几个变量间没有关系容易记乱* 不会再把变量记混了* * 2.定义 * * 访问修饰符 struct 自己起的结构体类型名称* {* //定义结构成员可以是变量也可以是方法* //注意定义结构体成员前也要加访问修饰符* * } //{}后没有分号;* * 定义好一个结构后就可以直接声明相应的变量了* 声明好变量后通过变量名.成员名 来访问结构的成员* * 3、扩展——计算机的单位* 0~255 一共256个数 2的八次方256 是一个字节* * 二进制表示 0 和 1 * 计算中的最小单位叫 “位” bit 比特 0101就是4个比特 b* 一个一个位处理太慢了就把8个二进制位分成一组那么8个二进制位叫做字节Byte B B是计算机能够处理的处理的最小单位* 1KB(千字节) 1024B* 1MB(兆字节) 1024KB* 1GB(吉字节 1024MB* 1TB(太字节 1024GB* * Bps 传输速度 bit per second* */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 结构
{public enum Gender{男,女,}public struct Person{public string name;public Gender sex;public int age;}class Program{static void Main(string[] args){Person onePerson;onePerson.name zhangsan;onePerson.age 20;onePerson.sex Gender.男;Person secPerson;secPerson.name lisi;secPerson.age 26;secPerson.sex Gender.女;Console.WriteLine(随意输出一个{0}, secPerson.name);Console.ReadKey();} }
}11.数组
/** 数组* * 一、数组的作用* ①可以帮我们一次声明多个同类型的变量* ②这些变量在内存中是连续存储的* * 二、数组的声明(定义)、赋值与取值、遍历、输出* * 1、形式* ① 数据类型[] 数组名 new 数据类型[数组长度]* 例int[] score new int[5]; //声明了一个长度为5的数组数组名叫score* 通俗点说声明了一个数组里面包含了5个int类型的变量数组名叫score里面5个int类型的变量叫做数组的元素* 并且对这5个元素从0依次开始编号到4 score[0]~score[4]* 注意* int、double、decimal等类型的数值数组一旦声明里面的每一个元素都被初始化成0* 而char类型的字符数组、string类型的字符串数组编译器不会对其进行初始化为Null空int[] score new int[5]; //声明了一个长度为5的数组数组名叫scorescore[0] 10;score[4] 20;Console.WriteLine(score[0]);Console.WriteLine(score[4]);Console.WriteLine(score[3]);Console.ReadKey();* * ② 数据类型[] 数组名 {下标为0的元素值,下标为1的元素值......}; //中间元素用逗号,隔开* 例int[] score {1,3,8}; //score数组长度为3其中score[0]1,score[1]3,score[2]8* string[] names{zhangsan,lisi,wangwu};* * ③ 数据类型[] 数组名 new 数据类型[]{} 例int[] score new int[]{1,3,8};* 数据类型[] 数组名 new 数据类型[数组长度]{下标0,下标1...} 例int[] score new int[3]{1,3,8};* 例 int[] score new int[5]{1,2,3}//错误* * 2、如何访问数组* 通过下标(索引)来访问数组数组名[下标]下标从0开始* 例score[0] 10;* 注意* 数组长度通过 数组名.Length 可以获得数组的长度即数组中有几个元素* * 3、数组的赋值与取值* for(int i0;iscore.length;i)* {* console.writeline(请输入第{0}个人的成绩,i);* score[i]Convert.ToInt32(Console.ReadLine());//对数组中的元素进行赋值* sumscore[i];// 遍历数组求数组中所有元素的和* }* 4、数组的遍历* for(int i0;iscore.length;i)* 三、数组的应用* 1、前后交换* inttemp;* tempa[i];* a[i]a[a.Length-1-i];* a[a.length-1-i]temp; * * 2、冒泡排序* (1)思路* 让数组中的n个元素依次进行两两比较(第i个数与第i1个数比较)* 经过n-1趟的两两比较第t趟的比较次数是n-t每趟比较完都让当前最值排到当前最后* 核心点* ①* 趟数n个数需要排n-1趟* 每趟次数第t趟的比较次数是n-t次(趟数i是从0开始数所以ti1* ②要从大到小排序两两比较的时候使用;从小到大排序用* * (2)模板:* for(int i0;in.length-1;i)// 控制比较趟数共n-1趟(i1表示当前是第几趟)* { * for(int j0;jn.Length-(i1);j)//控制每趟的两两比较次数每趟比较 n-t次t表示当前是第t趟因为i是从0开始数ti1* {* if(n[j]n[j1]) // 从大到小用从小到大用* {* //交换变量* int temp n[j];* n[j]n[j1];* n[j1]temp;* } * }* }* * 四、二维数组* int[,] a new int[3, 4] //二维数组初始化{{ 100,90,80,70},{ 90,90,80,60 },{ 50,70,40,80},};for(int i0; i 3; i) //求和遍历二维数组并且输出平均值{int sum 0;for(int j0;j4;j){sum a[i, j];}Console.WriteLine({0}班的平均分是{1},i1,sum/4.0); //除以4.0防止精度缺失}Console.ReadKey();}* */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 数组
{internal class Program{static void Main(string[] args){//int[] score new int[5]; //声明了一个长度为5的数组数组名叫score//score[0] 10;//score[4] 20;//Console.WriteLine(score.Length);//Console.WriteLine(score[0]);//Console.WriteLine(score[4]);//Console.WriteLine(score[3]);//Console.ReadKey();int sum 0;//定义数组int[] score new int[10]; //对数组中的元素进行赋值for(int i0;iscore.Length;i) {Console.WriteLine(请输入第{0}个人的成绩,i1);score[i] Convert.ToInt32(Console.ReadLine());//sumscore[i]; }//遍历数组求数组中所有元素的和for (int i 0; i score.Length; i) {sum score[i];}//输出输出数组中的每一个元素的值for (int i 0; i score.Length; i) {Console.WriteLine(第{0}个人学生的成绩为{1}分, i 1, score[i]);}Console.Clear(); //清屏//输出平均成绩Console.WriteLine({0}个人的平均成绩为:{1}, score.Length, sum / score.Length);Console.ReadKey();}}
}12.方法
/** 方法、参数、返回值* * 一、方法函数* 在C#中函数、方法统一称为方法有的人称静态为函数非静态的为方法在这我们统一称为方法* 方法就一堆代码进行重用的一种机制。方法就是一段代码这段代码可能有输入的数据叫做参数可能会有返回的执行结果叫做返回值* * 1、作用* 用来复用代码的当我们在一个程序中反复的写了同样的代码那一般情况下我们可以把需要重复写的代码定义在一个方法中用的时候只需要调用就行了* 比如Console.WriteLine();就是一个方法* * 2、定义* [访问修饰符] [static] 返回值类型 方法名([参数列表]) //[]内的表示可以省略* {* 方法体;* [return 返回值];* }* * 注意* 1方法一般要定义在类中一般写在Main()方法后面* 2如果方法没有返回值则返回值类型写void* 3方法的命名规则方法名开头大写参数名开头小写参数名、变量名要有意义* 4如果方法没有参数()不能省略* * 3、方法的调用* 1对于静态方法有static修饰的都是静态方法* ①不在同一个类中通过 类名.方法名();调用* ②如果是在本类中调用本类的方法可以只写方法名(); 也可以通过类名.方法名();调用* * 4、return可以立即退出本方法* * 二、参数* 1、变量的作用域声明周期* 在方法中定义的变量成为局部变量其作用域从定义开始到其所在的大括号语句块结束为止* 注意* ①字段一个变量一旦定义在方法外类的里面就叫做类的字段这个变量就可以被本类的所有方法所访问* 但是要注意静态方法只能访问静态字段* ②由const修饰的常量不能定义为静态的* * 2、在一个方法中想要访问另一个方法中的变量怎么办* 通过 参数和返回值* * 3、形参和实参 * 在方法名后面的括号内定义变量叫作这个方法的参数这里定义的变量用于接收调用者传过来的数据* 注意* ①如果一个方法一旦有参数那么调用者就必须传参数并且传参数的个数、类型与对应位置上的个数、类型必须一致* ②参数的作用域就是下面的方法体中* ③当形参是数组的时候我们传数组名* * 三、返回值* 当调用者想访问我们方法中的变量时可以通过返回值返回* 只要在方法中使用了返回值那么在调用方法中前面就应该用一个变量来接收方法的返回值* 例* string s Console.Readline();* int x Convert.ToInt32(32);* * 注意* ①一个方法可以多个参数但是只能有一个返回值也可以没有* ②一旦一个方法有返回值那么在这个方法中就必须通过return语句返回一个值并且这个值要与返回值类型是相同的* * 四、例ReadInt()用法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace ReadInt__用法
{internal class Program{static void Main(string[] args){Console.WriteLine(请输入一个数);int x ReadInt();Console.WriteLine(x);Console.ReadKey();}public static int ReadInt(){int number 0;do{try{number Convert.ToInt32(Console.ReadLine());return number;}catch{Console.WriteLine(输入有误请重新输入);}}while (true);}}
}* * * 五、方法的重载* 一般在同一个类中方法名相同但方法的参数的个数不同或者对应位置上的参数类型不同才能构成方法的重载* 注意* 方法重载和返回值没有关系* * * * * */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace 方法
{internal class Program{static void Main(string[] args){//string s 123;int a Convert.ToInt32(s);//int a int.Parse(s);//调用者Add1(10, 20); //实参int b Add2(10, 20);Console.WriteLine(b);Console.ReadKey();}//被调用者public static void Add1(int a, int b) //形参{Console.WriteLine(ab{0}, a b);}public static int Add2(int a, int b){return a b;}}
}13.outref用法
/** * out的用法 * 作用当一个方法想返回多个值的时候可以通过out实现 * 例下方代码* 实现步骤* 1在方法的参数类型前加out那么传参数的时候也必须在number前加out* 表明这个参数不是传入的而是用来传出值的* * 2如果参数是以out形式传入的那么在传入前可以不赋初值* * 3在方法中对于由out修饰的参数必须赋值并且必须在使用前赋值* * out和ref* out用于传出值方法中必须对out修饰的传数进行赋值* ref可以理解成双向的既可以传入又可以传出* 在传参数的过程中如果参数有out或ref修饰的话那么改变方法中的参数变量的值调用者方法中的变量的值也会相应的改变* */using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace outref用法
{internal class Program{static void Main(string[] args){int number;int result Test(out number);Console.WriteLine(number{0} result{1}, number, result);Console.ReadKey();}static int Test(out int a) {a 10;a a 1;return 200;}}
}14.常用方法
/* * 常用类和方法;* 1、Math类 * Math.Round(); //四舍五入函数 * Math.Sqrt(); //开平方函数 * 例1输入等边三角形的边长求面积,保留2位小数
using System; namespace 求等边三角形面积
{ class Program { static void Main(string[] args) { Console.WriteLine(请输入等边三角形的边长); string aConsole.ReadLine(); //输入边长为字符串类型 double x Convert.ToDouble(a); //转化为浮点型 double ans Math.Round(x * x * Math.Sqrt(3) / 4.0 , 2); //计算面积公式并保留两位小数 Console.WriteLine(ans); //输出面积 Console.ReadKey(); } }
}
*
* 例2编一个程序输入一个正数对该数进行四舍五入到个位数的运算。
* 例如实数12.56经过四舍五入运算得到结果13而12.46经过四舍五入运算得到结果12。
using System;
namespace 第六题
{ internal class Program { static void Main(string[] args) { double aConvert.ToDouble(Console.ReadLine()); //输入 Console.WriteLine(Math.Round(a,0)); //四舍五入到个位输出 Console.ReadKey(); } }
}
* 2、Random类 随机数
* 例编写一个掷骰子100次的程序并输出各个点数出现的次数
using System;
namespace 第6题
{ internal class Program { static void Main(string[] args) {int[] a new int[7]; Random random new Random(); //定义随机数对象 for(int i0;i100;i) { int resrandom.Next(1,7); //能随机生成[1,7)范围内的数注意不会到7即区间范围是[1,6] a[res]; //利用桶的思想 } Console.WriteLine(掷骰子100次后); for(int i1;i6;i) { Console.WriteLine({0}出现的次数为{1}, i, a[i]); } Console.ReadKey(); } } }
*/