C#编程基础笔记1.docx
《C#编程基础笔记1.docx》由会员分享,可在线阅读,更多相关《C#编程基础笔记1.docx(84页珍藏版)》请在冰豆网上搜索。
![C#编程基础笔记1.docx](https://file1.bdocx.com/fileroot1/2023-1/10/b092d76d-3ee1-467a-b16e-c75418b1167e/b092d76d-3ee1-467a-b16e-c75418b1167e1.gif)
C#编程基础笔记1
C#编程基础笔记
Winform
解决方案中可以包含多个项目,项目可以包含多个文件,文件中是我们写的程序。
认识程序:
一段程序代码最前面几行类似“usingsystem;”的,是引用命名空间。
定义命名空间,用“namespace”。
格式:
namespace命名空间的名称
定义类,用“class”.
在cs文件中,命名空间中可以包含类,类中可包含方法,方法中可以是程序。
在C#中,类文件是以cs为扩展名的。
重置开发环境:
“工具”—“导出和导入”,可以使开发工具恢复初始状态。
功能面板不小心关闭了,在视图中找。
main方法是我们程序的入口方法,当我们执行一个程序时,会首先找到
main方法,从main方法的第一句程序开始执行,当main方法执行完成后,程序就结束了。
所以,我们初学者写程序,就先写在main方法中。
在VS中,右键单击“方案”,选择“在windows资源管理器中打开“可以打开保存该解决方案的目录。
目录中扩展名是”.sln“的文件就是解决方案的文件。
项目文件夹中扩展名是”.csproj“的文件就是项目文件。
要想编辑,一般就是打开解决方案文件。
这样,其中包含的多个项目就可以一次性全部打开。
第一句程序:
Console.WriteLine(“HelloWorld!
”);//向屏幕输出
Line表示输出一个换行。
后面再输出的内容会另起一行显示。
第二句程序:
Console.ReadKey();
//当程序执行到Console.ReadKey();时,程序会停到这里,等待用户从键盘上键入一个键。
用户键入这个键之后,程序才会结束运行。
在C#中,每一个程序语句都以分号结束。
设置VS中的字体、行号:
工具-选项
创建多个项目——右键点解决方案—添加—新的项目
启动项目的设置:
当解决方案中有多个项目时,如果想运行其中一个项目,就右键单击它,选择“设为启动项“即可,这时项目名称会以粗体显示。
项目的加载与卸载:
右键单击项目,选择“卸载项目“即卸载了该项目。
再次右键单击这个项目,选择”加载“就会重新加载这个项目。
C#中的注释符:
单行注释:
以//开始,它只影响本行
多行注释:
以/*开始,以*/结束,它们之间的多行内容都被注释。
文档注释:
用于对类和方法进行注释,在类或方法前面,连续输入三个/。
编写程序,要养成善于写注释的好习惯。
技巧:
复制对话框中的文字——Ctrl+c
撤销快捷键:
Ctrl+z
下面的指令可以折叠一段代码:
#region和#endregion——用法:
把被折叠的代码放入它们中间即可。
.NET是一种多语言的平台,开发.NET可以用多达几十种语言进行开发。
Java是一种单语言的平台。
一种语言多种平台
MSIL,微软中间语言
在VS中,输入“Console.WriteLine();”时,有快捷的方法:
即输入cw后,再敲tab键,就会自动把这个语句补充完整。
变量
计算机使用内存来存储数据。
内存用于正在运行的程序数据
变量代表着一块内存空间,我们可以通过变量名称向内存存取数据,有了变量就不需要我们记忆复杂的内存地址了。
声明变量就是向内存申请一块内存空间
声明变量的语法格式:
数据类型变量名
intnumber//声明变量number,整数类型叫int。
赋值:
变量名=值
如:
number=1000;
数据类型:
int整型
long长整型
double浮点型,用于存储小数
char字符型:
只能存储一个字符,并且存储的这个字符要求用单引号引起来。
转义字符也属于char类型。
string字符串类型:
就是把0个或1个或多个字符连接起来,字符串要求用双引号连起来。
decimal类型:
decimal关键字表示128位数据类型。
同浮点型相比,decimal类型具有更高的精度和更小的范围,这使它适合于财务和货币计算。
注:
在VS中,将鼠标放在数据类型的关键字上,按下F1键,即可调出关于这种数据类型的详细信息。
在C#开发环境中,直接写一个有小数点的数字,则这个数字是double类型的。
如果想将有小数点的数值赋给decimal类型的变量,就要在这个数值的后面加一个字母M或者小写m,以表示此小数是decimal类型而不是double类型。
如
decimalmoney;
money=1000.25m;
变量的声明
语法格式:
数据类型变量名称;
变量的声明的三种方法:
⑴、声明后再赋值:
intage;
age=18;
⑵、声明时直接赋值:
intage=18;
⑶、可以一次声明多个相同类型的变量,变量名之间用逗号分隔:
stringzsName,lsName,wwName;
intzsAge=18,lsAge=20,wwAge=22;
变量一定要先声明后赋值,然后才能使用(取值、调用或写这个变量名)
写程序时注意错误和警告提示,要把警告当错误对待,以防止程序出错或浪费内存空间。
赋值运算符和赋值表达式
a=a+1;这里的=号是赋值运算符,不是数学意义上的相等。
变量可以重复赋值,但是,一旦给一个变量赋了新值,那么变量中的老值就不存在了。
变量的命名规则:
⑴、必须以“字母”、_或@符号开头;字母二字加双引号意思是,可以是以字母开头也可以是中文或其它国家语言符号开头。
不能以数字开头。
⑵、后面可以跟任意“字母”、数字、下划线;
注意:
①、变量名不要丐C#系统中的关键字重复;
②、在C#中,大小写是敏感的;即区分大小写,也就是大小写被认为是不同的变量。
③、同一个变量名不允许重复定义(说法不严谨)。
在相同范围内不能重复定义。
定义变量时,变量名要有意义。
C#变量命名编码规范——Camel命名法:
首个单词的首字母小写,其余单词的首字母大写。
Pascal命名规范:
每一个单词第一个字母都大写。
如果使用到英文单词的缩写,全部用大写!
在方法中定义变量,要使用Camel命名法。
点位符的使用{0}{1}{2}
交换两个变量的值,如下:
inta=10;
intb=5;
inttemp;
temp=a;
a=b;
b=temp;
再学习一句话:
Console.ReadLine();
用于接收用户的输入,要定义一个字符串变量用来接收存储用户输入的值。
当程序执行到这句话时,就会暂停,然后等待用户从键盘上输入内容,敲回车程序将继续执行。
如果想得到用户输入的内容,就需要在语句Console.ReadLine();前面定义一个string类型的变量,用来接收用户输入的内容。
语句写法:
stringinput;//这个变量必须是字符串型
input=Console.ReadLine();
Console.WriteLine(“刚才输入的内容是:
{0}”,input);
Console.ReadKey();
凡是用户输入的内容都将被当作字符串来处理,所以用来接收用户输入的内容的变量,不能定义成int型,而只能定义成字符串型即string。
如果希望把用户输入的内容用作数字来参与运算,则可以使用类型转换,先把它转换成int型。
stringinput;
input=Console.ReadLine();
可以连起来直接写成一句:
stringinput=Console.ReadLine();
练习1:
Console.WriteLine(“请输入你喜欢吃的水果:
”);
stringinput=Console.ReadLine();
Console.WriteLine(“这么巧呀,我也喜欢吃{0}”,input);
练习2:
Console.WriteLine(“请问你叫什么名字?
”);
stringname=Console.ReadLine();
Console.WriteLine(“你好!
{0}。
”,name);
转义字符
当我们需要在字符串中输入一些特殊字符时,比如半角引号、换行、退格,就需要使用转义字符。
转义字符是一个字符,由一个\加一个字母来组成具有特殊意义的一个字符。
如:
Console.WriteLine(“C#中的字符要用引号\”\”引起来”);
Console.ReadLine();
常用的转义字符:
\n:
表示换行
\b:
表示退格backspace
\t:
tab键,由多个空格组成的一个字符,具有行与行之间的对齐功能
Console.WriteLine(“1\t2\t3\t4\t5”);
Console.WriteLine(“11\t223\t1236\t25\t698”);
\\:
表示输出一个\
\”:
在字符串前加一个@符号有两种意义:
①字符串中如果有\,则不再理解为转义符。
即表示不转义。
②使字符串可以换行。
如:
Console.WriteLine(@”D:
\myDocuments\C#\sql\”);//\照常输出
Console.WriteLine(@”D:
\myDocum
ents\C#\sql\”);//字符串被换行,运行时仍然正常。
如果字符串前面加了@符号,在字符串上用两个双引号代表一个双引号。
算术运算符及算术表达式
算术运算符:
+-*/%(取余数,取模),都是是二元运算符。
算术表达式:
由算术运算符连接起来的式子,如:
1+1、a*b-c(变量acb在前面已声明并赋值)
参与运算的两个操作数的数据类型必须相同,并且经过运算后的结果也与操作数的类型相同。
优先级:
先乘除后加减,有括号先算括号里的,相同级别的从左至右运算。
小括号可以无限嵌套使用,但一定要成对出现。
练习:
两数相除,求结果和余数:
inta=10,b=3;
intmod=a%b;
doublequo=a/b;//两个int类型数值运算的结果必然也是int类型,因此结果是3而不是3.333
Console.WriteLine(mod);因此这样会丢失精度,即舍去了小数部分数值
Console.WriteLine(quo);
Console.ReadKey();
求两个数的和:
intnum1=10;
intnum2=20;
intsum=num1+num2;
Console.WriteLine(”10和20的和是:
”);//语句1
Console.WriteLine(sum);//语句2
Console.ReadKey();
注意:
语句1和语句2可以合起来写成一句:
Console.WriteLine(”10和20的和是:
{0}”,sum);
求半径为5的圆的面积:
doubler=5;
doublePI=3.14;
doubles=r*r*PI;//如果把半径定义为int类型也行,则系统会先自动转换成double型再运算。
Console.WriteLine(”这个圆的面积是:
{0}”,s);
Console.ReadKey();
计算总共应付多少钱及打折后应付的钱数:
doubletixu=35;
doubleduzi=120;
doublemoney=tixu*3+kuzi*2;//实现自动类型转换
doubledismoney=money*0.88
Console.WriteLine(“总共应付{0}元钱,打折后应付:
{1}元”,money,dismuney);
Console.ReadLine();
类型自动转换(隐式转换)
参与运算(算术运算和赋值运算)的手操作数和结果类型必须一致,当不一致时,满足下面条件时,系统自动完成类型转换:
①参与运算的两个数据类型必须相兼容,如:
int和double兼容。
这两者都是数值型,兼容。
②必须一边的数据类型表示范围小,另一边的表示范围大,并且把小的转向大的不丢失精度。
目标类型大于源类型,如:
double>int
凡是会丢失精度的都不会自动转换。
在表达式中,如果有一个操作数是double类型,则整个表达式的运算结果为double型,如前面购物打折的计算。
再如:
inta=10,b=3;doublequo=(1.0*a)/b;,在a/b前面加上个double型数1.0。
注意这里为了便于阅读和理解,加上了小括号。
这是一种好习惯。
这个语句也可以写成:
doublequo=((double)a)/b;
注意:
赋值运算符或算术运算符在进行运算时,要参与运算的操作数的类型必须相同,并且其运算结果也与操作数的类型相同。
doublequo=a/b;右边的运算结果仍是int型,
系统在默认情况下,存在以下预定义隐式转换的情况:
①、从int到long、float、double、decimal的预定义隐式转换。
②、从sbyte、byte、short、ushort、char到int的预定义隐式转换。
在自动转换中,是不会丢失精度的。
如果会丢失精度,则此转换不会自动进行。
经常见到的就是,参与运算的两个操作数,一个是int,一个是double,那么,int类型会自动转换成double类型。
强制类型转换
涉及丢失精度的类型转换,系统不会自动完成,需要人工书写代码来完成。
语法:
(数据类型名)待转换的值
如:
intb=(int)3.14;
强制类型转换时,数据类型一定要相兼容。
比如都是数值型。
注意,下面的两种转换是错误的,因为强制类型转换要求待转换的类型和目标类型必须都为数字。
stringage=(int)Console.ReadLine();
inta=(int)”33”;
Console.ReadLine();接收的数据是字符串类型,因此它不能转换为int类型。
类型转型
将字符串类型转换成数值类型——Convert.ToInt32()
语法格式:
int变量=Convert.ToInt32(待转换的字符串);
上面语法意义:
把待转字符串转换成int类型后赋给变量。
Convert不再仅是内存级别的转换,而是考虑数据意义的转换。
Convert是一个加工、改造的过程。
另,Convert.ToString--每种类型都还有ToString()方法。
一切类型都可以转换成string类型。
如果想把int类型的变量a转换成字符串类型有两种形式:
①、Convert.ToString(a);
②、a.ToString();
例:
Console.WriteLine(“请输入你的年龄:
”);
strings=Console.ReadLine();//把用户输入的内容赋值给字符串变量s。
intage=Convert.ToInt32(s);//把字符串s转换成int32类型再赋给int型变量age。
intyear=2011-age;
Console.WriteLine(“你是{0}年出生的。
”,year);
字符串类型无法参与数据计算,
例:
下面计算的结果不是两个数的和,而是两个字符串的连接:
Console.WriteLine(“请输入语文成绩:
”);
stringChinese=Console.ReadLine();
Console.WriteLine(“请输入数学成绩:
”);
stringmath=Console.ReadLine();
Console.WriteLine(“你的总成绩为:
{0}”,Chinese+math);
Console.ReadKey();
下面计算的是两个数值的和:
Console.WriteLine(“请输入语文成绩:
”);
stringchinese=Console.ReadLine();
Console.WriteLine(“请输入数学成绩:
”);
stringmath=Console.ReadLine();
intchineseScore=Convert.ToInt32(chinese);
intmathScore=Convert.ToInt32(math);
Console.WriteLine(“你的总成绩为:
{0}”,ChineseScore+mathScore);
Console.ReadKey();
简写法:
Console.WriteLine(“请输入语文成绩:
”);
intchinese=Convert.ToInt32(Console.ReadLine());
Console.WriteLine(“请输入数学成绩:
”);
intmath=Convert.ToInt32(Console.ReadLine());
Console.WriteLine(“你的总成绩为:
{0}”,Chinese+math);
Console.ReadKey();
“+”号的意义:
①、作为运算符进行数值运算;
②、连接字符串。
如果“+”号两边是数值型,则是运算意义,如果两边至少有一边是字符串,则是连接意义。
Console.WriteLine(“张三的年龄为:
”+age);
//上面语句括号中,加号可以连接两个字符串,加号两边只要有一块是字符串类型,加号起到的就是连接作用,系统会自动把其它类型转换成字符串类型,在这里,一切数据类型都可以自动转换为字符串类型。
try-catch的使用(简单用法)
try-catch用于捕获程序运行时的错误。
语法格式:
try
{
有可能出现错误的代码写在这里;
}
catch
{
出错后的处理;如果try中的代码出现异常,则进入catch中
}
如果try中的代码没有出错,则程序正常运行完try中的内容后,不会执行catch中的内容。
如果try中的代码一旦出错,程序立即跳入catch中去执行代码,那么try中出错的代码后面的代码就不再执行了。
例如:
try
{
Console.WriteLine(“请输入语文成绩:
”);
intchinese=Convert.ToInt32(Console.ReadLine());//此处有可能会出现用户输入错误
Console.WriteLine(“请输入数学成绩:
”);
intmath=Convert.ToInt32(Console.ReadLine());//此处有可能会出现用户输入错误
Console.WriteLine(“你的总成绩为:
{0}”,Chinese+math);
}
catch
{
Console.WriteLine(“你刚刚输入的数据导致程序出错,请重新运行本程序!
”);
}
Console.ReadKey();
练习:
写程序之前要先设计算法,保证自己先知道怎么算
1、让学生输入其姓名和语文、数学、英语的成绩,编程求总分和平均分,并在屏幕上显示:
××,你的总分数为××分,平均分为××分。
Console.WriteLine(“请输入你的姓名:
”);
stringname=Console.ReadLine();
Console.WriteLine(“请输入你的语文成绩:
”);
doublechinese=Convert.ToInt32(Console.ReadLine());
Console.WriteLine(“请输入你的数学成绩:
”);
doublemath=Convert.ToInt32(Console.ReadLine());
Console.WriteLine(“请输入你的英语成绩:
”);
doubleenglish=Convert.ToInt32(Console.ReadLine());
doubletotalScore=chinese+math+english;//此步骤可以直接写到下面的输出语句中
doubleaverage=totalScore/3;//此步骤可以直接写到下面的输出语句中
Console.WriteLine(“{0},你的总分数为{1}分,平均分为{2}分”,name,totalScore,average);
Console.ReadKey();
2、编程实现计算用户输入的天数(如46天)是几周零几天。
Console.WriteLine(“请输入要计算的天数:
”);
intdays=Convert.ToInt32(Console.ReadLine());
intweeks;
weeks=days/7;
intmod=day%7;
Console.WriteLine(“{0}天中有{1}周零{2}天”,day,week,mod);
Console.ReadKey();
3、编程实现:
计算用户输入的天数是几月几周零几天。
假设一个月按30天。
方法一:
Console.WriteLine(“请输入要计算的天数:
”);
intdays=Convert.ToInt32(Console.ReadLine());
intmonth=days/30;//整除得出days中有几个月
intweek=(days-month*30)/7;//得出剩下的天数中有几周
intday=days–month*30–week*7;//得出去掉月数和周数剩下的天数
Console.WriteLine(“{0}天中共有{1}月{2}周零{3}天”,days,month,week,day);
Console.ReadKey();
方法二:
Console.WriteLine(“请输入要计算的天数:
”);
intdays=Convert.ToInt32(Console.ReadLine());
Console.WriteLine(“{0}天中共有{1}月{2}周零{3}天”,days,days/30,days%30/7,days%30%7);
Console.ReadKey();
4、编程实现:
计算107653秒是几天几小时几分钟几秒。
intseconds=107653;
intdays=seconds/(3600*24);//计算seconds中有多少天
intmod=seconds%(3600*24);//除去上面的天数还剩多少秒
inthours=mod/3600;//计算剩余秒数中有多少小时
mod=mod%3600;//取余计算上面剩下的秒数中再除去小时后还剩下多少秒
intminute=mod/60;//计算剩余的秒数中有几个60秒,就是有多少分钟
intsec=mod%60;//取余计算除去分钟数最后还剩下多少秒
Console.WriteLine(“{0}秒中共有{1}天{2}小时零{3}分{4}秒”,seconds,days,hours,minute,sec);
Console.ReadKey();
注意:
语句mod=mod%3600;中变量mod的用法,理解mod参与运算后把结果再次赋给mod。
如果希望让用户输入一个秒数,则只需要在前面程序的基础上做如下改动:
把第一个语句修改成:
Console.WriteLine(“请输入要计算的秒数:
”);
intseconds=Convert.ToInt32(Console.Re