我的ASP.NET学习笔记010C#语言基础
cSharp_1_概述
名词描述
C#
是一门语言,语法与javascript、C、C++、java相近,这些语言都是比C语言的语系中发展而来。
.net framework
(Framework是框架的意思)asp.net软件的编译和运行平台,计算机必须安装了这个软件才可以运行我们编写的C#应用程序。不过windows7.0以后的操作系统都要自动安装了这个软件。
mono是由第三方团队开发的让C#程序代码运行于多平台的一个框架。相当于另一个.net framework
新建一个软件项目
在.net中程序软件是项目的形式的存在的,一个项目就是包含软件中所有的代码、图片、样式、等等所有资源文件的集合。
新建一个C#控制台应用程序项目
“文件”菜单 à 新建 à 项目 à 在弹出的“新建项目”窗口中依次选择 à visual C# à 控制台应用程序 à 添加项目名称 à 选择项目的存储位置 à 选择建立新的解决方案à 还是要添加到当前已经打开的解决方案中
完成“控制台应用程序”的创建之后。就可以在“解决方案”面板中看到当前项目的所有文件了。
Mian主函数
其中,program.cs文件中的main主函数就是程序的入口函数,包括其中的代码,会被自动执行,而写在mian主函数之外的代码则没不会被执行,除非在main中对其进行调用。
Main注意 M 大写
修饰为static
返回值为void或int
参数为字符串数组(C#中可选)
应用程序开始执行的地方
扩展名.cs
C#程序代码文件的扩展名就是.cs
编译执行源代码
F5:启动调试
Ctrl+F5:开始执行(不调试)
控制台输入输出语句
输出语句
控制台的相关操作都通过Console这个类完成,包括输入与输出操作
常用输出方法介绍
Console.Write(…)不换行输出
Console.WriteLine(…)换行输出,在输出内容的末尾加一个换行符
常用参数使用语法
Console.WriteLine("您传入的第一个参数为:"+ss); Console.WriteLine("您传入的第二个参数为:{0}", args[1]);
占位符
Console.WriteLine中的占位符写法{0}、{1},其概念就好像是在字符串中留一个填空题中的空,由后面的参数来填。
控制台输入
程序一般有零到多个输入,有些输入是执行时由用户输入的
使用Console.ReadXXX()系列的方法可以完成接收用户输入的操作
常用方法
Console.Read():一次返回一个字符(ASCII码)
Console.ReadLine():返回用户在控制台输入的一行字符串,按回车结束。
注释
单行注释 //
多行注释 /* */
通过快捷键来注释
选中需要注释的代码 à Ctrl+k Ctrl+c
通过快捷键来取消注释
选中需要取消注释的代码 à Ctrl+k Ctrl+u
练习:
1、在vs中创建一个控制台应用程序,用户手动输入男方姓名,输入女方姓名,输出信息“恭喜XX先生和XX女士,百年好和、白头偕老”。
2、在vs中创建一个控制台应用程序,模拟一个atm取款的功能,假设帐户原本有一千元,让用户输入一个数字,原帐户金额减去取款金额,将还剩多少钱显示出来。( C#中的字符串转整数 int.Parse(字符串)、声明整数类型是 int i = 1 ; )
C#中的数据类型
C#是一门强类型的编程语言,而javascript是一门弱类型的编程语言。
强类型语言是指该语言中的变量必须严格遵循类型的限制。就是说一个变量被声明之后,永远只能存储指定类型的数据。
C#中的整数类型
类型标识符 |
描述 |
可表示的数值范围 |
sbyte |
8位有符号整数 |
-128 ~ +127 |
Byte字节 (bit位代表一个二进数) |
8位无符号整数 |
0 ~ 255 |
Short短整型 |
16位有符号整数 |
-32768 ~ +32767 |
ushort |
16位无符号整数 |
0 ~ 65535 |
int 整型 |
32位有符号整数 |
-2147483648 ~ +2147483647 |
uint |
32位无符号整数 |
0 ~ 4294967295 |
long |
64位有符号整数 |
-9223372036854775805 ~ +9223372036854775807 |
ulong |
64位无符号整数 |
0 ~ 264-1 |
Char有时可以被当做整型来看待。
C#中变量的定义
C#中声明一个变量必须要同时声明这个变量的类型。
数据类型 变量名=变量值
比如:int i =10;
浮点类型
用于存储实数,浮点的数据类型包含两种:
单精度浮点型(float)
float类型是32位
取值范围:在+ 1.5×10-45 ~ 3.4×1038之间,精度为7位数。
双精度浮点型(double)
double类型是64位宽。
取值范围:为+5.0×10-324 ~ 1.7×10308之间,精度为15~16位数
注意:float和double不适合用于进行高精度且频繁的运算,否则在处理小数的位数限制的最后一位时会自动的四舍五入,造成精度的损失。
小数类型(decimal)
占16个字节(128位),主要为了满足高精度的金融、科学运算等领域。
小数类型数据的取值范围和精度如下:
取值范围在+ 1.0×10-28 ~ 7.9×1028之间,精度为29位数。
数值类型的表示方法
在C#中如果只写一个整数数字而不带代表的类型标识,那么这个整数数字会被自动自定为int类型。如果写一个带有小数的实数数字而不带代表的类型标识,那么这个实数数字会被自动自定为double类型。
可以用如下代码来证明:
Console.WriteLine((12).GetType().ToString()); Console.WriteLine((12.01).GetType().ToString());
通过类型标识符来定义数值的类型
123f 代表float类型数值123.0
518u 代表uint类型的数值518
36897123ul 代表ulong类型的数值36897123
22.1m 代表decimal类型的数值22.1
12.68 代表double类型的数值12.68
36 代表int类型的数值36
字符类型
在计算机中,一切数据最终都会被转换为二进制,字符也不例外,但是二进制只能用来存储数字,因此Char类型中存储的是一个字符在unicode码表中的位置编号。
字符类型的定义:
char 变量名 = ‘单个字符’ ;
注意:
1、 char类型的值必须用单引号括起来。
2、 单引号内的有效字符必须且只能是一个。
3、 值不能是单引号或反斜杠。
C#中的转义字符
Bool布尔类型
布尔类型只有两个值true和false
bool c = 5>6; c = true ; Console.WriteLine(c);
GetType()方法
用于获取一个变量或数值的类型,示例:
float i = 100f; Console.WriteLine(i.GetType().ToString());
Int16代表short
Int32代表int
Int64代表long
Singel代表flaot
引用类型
String字符串类型
用于保存字符和文本数据。String类型的值是包含在一对双引号之间的。
在c#中string 的本质是一个char类型的数组。
String可以直接被当成char类型的数组来用。
string i = "This is 665"; Console.WriteLine(i[1]);
Char类型的数组同样可以被转换为字符串
char[] cArr = {'H','e','l','l','o' }; string cStr = new string(cArr); Console.WriteLine(cStr);
逐字字符串@
逐字字符串@用以避免书写转义字符串,将字符串中的特殊符号当成字符来对待。
string cStr = @"this is \n 665"; Console.WriteLine(cStr);
其写法就是在字符串前面加上一个@符号。
Object类型
在C#中所有的对象、变量、类型,我们都可以称之为是object的子类。
对于任何一个变量、对象、类型,我们都可以将其存储在object类型的变量之中。
object obj = "this is \n 665"; obj = 123; obj = true; Console.WriteLine(obj);
练习:
编写程序实现下图效果:
使用合适的数据类型定义相关变量(255以下用byte、小数是float、身份证qq号可以用string)
输出输入的结果
C#中的类型转换
数据类型在一定条件下是可以相互转换的。
C#允许使用两种转换的方式:隐式转换和显式转换。
隐式转换
隐式转换是自动完成的、不需要用户手动声明就可以完成的转换过程。
这种转换一般是“向上转换”,即由占存储空间小的数据类型向占存储空间大的数据类型转换。
示例:
byte bNum = 255; short sNum = bNum; int iNum = sNum; long lNum = iNum; float fNum = lNum; double dNum = fNum; string strNum = ""+dNum; //用字符串与数值相加的时候,数值类型会自动的被隐式转换为string Console.WriteLine(strNum);
C#中变量的声明
变量只是一个容器,用于存储具体的数值,并且这个容器里的数值是可以变的。
声明变量的过程
数据类型 变量名;
比如:int iNum;
变量名 = 表达式;
比如:iNum = 5;
当然多数情况下我们将两步合为一步:
int iNum = 5;
同时定义多个同类型的变量
比如:
int a, b, c;
同时定义并赋值多个同类型的变量
比如:
int a=1, b=2, c=3;
显式类型转换
就是指必须由用户手动声明的转换过程。
强制类型转换
格式: (类型名称)表达式
将表达式的值的类型转换为类型名称所标识的类型。
示例:int i = (int)’a’;
注意:在强制类型转换的过程中有可能对原本的数值造损失。
decimal dd = 12.3456m; int iNum = (int)dd; Console.WriteLine(iNum);
数据类型之间的转换
toString()
toString()将其他类型的数据转换为字符串。
几乎所有能够用文字描述的数据都可以转换为字符串。
转换格式:
变量或值.toString();
示例:
true.ToString() intNum.ToString()
XXX.Parse(字符串)
将字符串转换为其他类型。XXX代表类型名称,比如double,int,bool等
格式:
XXX.Parse(字符串)
示例:
string strNum = "123"; short sNum = short.Parse(strNum); int iNum = int.Parse((123).ToString()); float fNum = float.Parse(strNum); double ddNum = double.Parse(strNum); decimal dcNum = decimal.Parse(strNum); long lNum = long.Parse(strNum);
XXX.TryParse(字符串)
将字符串转换为其他类型的数体,在转换的过程中需要一个已赋值的临时变量,如果转换成功则临时变量中存放的就是转换之后的值,否则临时变量中保持原值不变。XXX代表类型名称,比如double,int,bool等
格式:
XXX.TryParse(字符串,out 临时变量)
示例:
string strNum = "123"; decimal bTemp = 0; decimal.TryParse(strNum, out bTemp); Console.WriteLine(bTemp);
System.Convert类型转换工具
它为数据类型转换提供了一多种方法,可以将一个基本数据类型转换为另一种基本数据类型。
Convert的类型转换方法有包含:
ToBoolean、ToByte、ToChar、ToDateTime、ToDecimal、ToDouble、ToInt16、ToUint32、ToUint64等等。
示例:
char c = 'B'; int intNum = Convert.ToInt32(c); Console.WriteLine(intNum); char a = Convert.ToChar(intNum); Console.WriteLine(a); string strNum = intNum + "5"; short sNum = Convert.ToInt16(strNum); Console.WriteLine(sNum); float fNum = Convert.ToSingle(sNum); Console.WriteLine(fNum);
as类型转换
通常as 用于引用类型之间的转换,示例:
object obj = "今天星期五"; string sTime = obj as string; Console.WriteLine(sTime);
is关键字:判断变量或数值的类型
示例:
int sTime = 12345; if (sTime is int) Console.WriteLine("这是int"); else Console.WriteLine("不知道是什么");
练习:
1、 定义一个float类型的变量,并存入值123.31。(注意float类型数值的表示方法)
2、 定义一个char类型的变量cc,并存入字符c,将cc进行没类型转换并存入int类型变量i中,将i转换为字符串,并与字符串”51”连接并将结果存入string类型变量ss中,将ss转换为double类型并显示。
3、 将字符串”3.14”与char类型数值”7”都转换为double类型并相加。
4、 将字符串”15784456” 用convert转换为ushort类型,并在控制台中显示出其类型。
5、 从字符串”35624”,取出第三个数字,并显示出来。
运算符与表达式
C#中的变量
变量的命名规则:
1)、由字母、数字或下划线"_"组成。(中文也可以被看作是字母)
2)、必须由字母或下划线"_"开头,不能以数字开头
3)、不能是c#中的关键字 如:int、string、bool、Main、class等
4)、区分大小写 如:小写的a 和 大写的A 是两个变量
命名技巧:
1、驼峰命名法:当一个变量或函数、方法、类名由多个单词构成时,将每个单词的首字母大写,这我们就可以快速的区分单词之间的间隔。
2、在变量名的前面,我们可以用3个字母来表示变量的类型,比如:int、flt(float)、str(string)、dcm(decimal)、dat(dateTime)
3、接口一般以大写字母I 开头,bool类型一般以is开头。
位运算符
将十进制数字转换为二进制之后,再通过与、或、非等逻辑运算,对每个位上的二进制数字进行比较。
按位与&
示例:
int i = 11 & 7;
相当于:
1011
& 0111
------------
0011
其结果为二进制的11,也就是十进制3 。
按位或|
示例:
int i = 11 | 7;
相当于:
1011
I 0111
------------
1111
其结果为二进制的1111,也就是十进制15 。
位相等^
示例:
int i = 11 ^ 7;
相当于:
1011
^ 0111
------------
1100
其结果为二进制的1100,也就是十进制12 。
按位取反~
只操作一个数字,将该数字中为1的位变成0,为0的位变成 1
移位运算符
就是对二进制数,进行乘以10或除以10的操作。相当于给数字乘以十进制的2 。
int i = 11 <<1;
结果为22
三元运算符
由一个逻辑表达式来控制,逻辑表达式为true时返回第一个值,为false时返回第二个值。
格式: 逻辑表达式 ? 第一个值 : 第二个值 ;
示例:
string strResult = (11 <1)?"成立":"不成立";
运算符的优先级
1、括号:()、[]
2、一元运算符:!、+(正)、-(负)、++、--
3、乘除:*、/、%
4、加减:+(加)、-(减)
5、位移运算符:<<、>>
6、关系运算符:<、>、<=、>=、 ==、!=
7、位运算符:& | ^
8、逻辑运算符:&&、|| (先运算逻辑与,再运算逻辑或)
9、三元运算符:?:
10、赋值运算:=、+=、-=、*=、/=、%=、 (&=、|=、^=、~=)
关于除法的说明
运算结果的类型和参与运算的类型中最高的类型一致,影响最大的是除法,整数除以整数结果还是整数,例如10/3的结果是3,而不是3.333 。所以必须要先将两个数字转换为浮点或decimal类型,再相除。
表达式的概念
就是用运算符或者方法将变量连接起来进行运算,终得到一个确定的结果的运算式。
条件判断语句
if
switch单值判断
示例:
string strInput=Console.ReadLine(); switch (strInput) { case "a": Console.WriteLine("a级"); break; case "b": Console.WriteLine("b级"); break; default: //当上面所有的条件都不满足时执行这里 Console.WriteLine("XXXXXX"); break;
注意事项:
1 |
控制表达式的数据类型可以是sbyte、byte、short、uint、long、 ulong、char、string或枚举类型(后两种类型我们随后会讲到) |
2 |
每个case标签中的常量表达式必须属于或能隐式转换为控制表达式的类型 |
3 |
如果有两个或者两个以上case标签中的常量表达式值相同,编译时将会报错 |
4 |
switch语句中最多只能有一个default标签 |
5 |
要求每个标签项后使用break语句或跳转语句goto(稍后将会讲到) |
练习:
一、 请编写一个程序实现:输入一个长方形的长和宽,输出其长方形的面积
二、 输入一个华氏温度,要求输出摄氏温度;公式为:C=5/9(F-32);C表示摄氏温度,F表示华氏温度
三、 编写程序求圆的周长和面积,要求根据输入的圆的半径计算出圆的周长和面积(c:周长,s:面积,r:半径,π=3.14)
公式:c=2πr; s=πr2
四、 编写程序求长方体的体积和表面积,要求根据输入的长方体长、宽、高计算出长方体的体积和表面积(L:长,W:宽,H:高,V:体积,S:表面积)
公式:v=l*w*h; s=2(l*w+w*h+h*l);
五、 判断输入的年份是否为闰年,只需要满足下面条件之一即为闰年
a) 能被4整除,且不能被100整除
b) 能被400整除
1.编写小程序实现任意输入两个数,判断其大小并输出较大数!
2.编写小程序实现任意输入两个两位以上的整数,找出最后一位并且判断大小,输出判断结果!
3.编写小程序实现任意输入两个整数,第一个数要求是两位以上的整数,找出第一个数末尾那位数,用它除以第二个数,输出运算结果!
4.输出3的前面一个数字和后面一个数字!实际上就是将char类型的字符3转换为int类型,加一或减一之后再转回char类型。
5.编写小程序实现任意输入两个数,判断其大小;将大的一个数和10取模,将取摸的结果输出!
6.编写小程序实现任意输入两个数,判断其是否相等,如果相等,就输出“相等”,否则输出“不相等”!
7.编写小程序实现输入一个五位数,分别取出个位上的数、十位上的数、百位上的数、千位上的数、万位上的数,分别输出这五个数!
8.(思考题)任意输入一个三位整数,并且分别取出个位上的数,十位上的数,百位上的数;如果这三个数都不等于4并且取出的三位数之和等于8,则输出“恭喜你,中了八毛钱!”,如果不等8,则找出这三个数种最大的一个数,输出那个最大数和“下次继续努力吧!”这句活!
1.编写小程序实现任意输入两个数,求两个数的加、减、乘、除,并且分别输出结果。
2.编写小程序实现任意输入一个整数,输出该数字的最后一位。
3.编写小程序实现任意输入五个人的年龄,并求出平均年龄,并且输出。
4.编写小程序实现一种商品(数量,单价任意输入),输出总价.
5.在第四题的基础上实现三种商品的总价计算,输出应付多少钱。
1、使用三元操作符求三数的最大值。
2、使用三元操作符求三数的最小值。
3、输入一个四位数,分别求出个位,十位,百位,千位。
一、 输入一个五位以内的数字,输出该数字是几位数
二、 输入三条边,判断给定的三条边是否能组成三角形,如果能,再判断是等边三角形、等腰三角形还是普通三角形
三、 输入5个数字,判断这5个数字是否存在重复的数字,如果存在则输出yes,否则输出no
四、 编写一个小程序判断输入的正整数是否既是5又是7的整倍数.若是,则输出yes,否则输出no。
五、 编写一个小程序,有一函数如下
输入X 的值,输出对应Y 的值.
六、(思考题)编写一个小程序实现:输入一个整数,判断它能否被3,5,7整除,并输出以下信息之一:
- 能同时被3,5,7整除;
- 能被其中两个数整除(要指出那两个数);
- 能被其中一个数整除(指出那一个);
- 不能被3,5,7任一个整除。
1、输入一个时间(整数),时间在6~10点之间输出“上午好”,在11~13点之间输出 “中午好”,在14~18之间输出“下午好”,其他情况输出“休息时间”。
2、使用IF语句,判断四数的最大值 。
3、从键盘输入两个数,然后输入一个运算符号,使用if语句和switch语句判断输入的运算符号是"+、-、*、/、%"中的哪一个,然后对输入的两个数进行相应的计算。
4、判断任意年份是不是闰年。(条件:能被4整除却不能被100整除或者能被400整除的年份是闰年)
第一题:
有一个函数:
y = x (x<1)
y = 2x-1 (1<=x<10)
y = 3x-1 (x>=10)
写一程序,输入x,输出y值。
第二题:
有3个整数a、b、c,由键盘输入,输出其中最小的数。
要求:用if语句编写程序。
第三题:
企业发放的奖金根据利润提成。利润I小于或等于10万元的,奖金可提成10%;利润高于10万元,低于20万元(100000<I<=200000)时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%,200000<I<=400000时,低于20万的部分仍按上述办法提成(下同),高于20万元的部分按5%提成;400000<I<=600000时,高于40万的部分按3%提成;600000<I<=1000000时,高于60万的部分按1.5%提成;I>1000000时,超过100万元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。
要求:用if或switch语句编写程序
第四题:
实现一个简单的四则运算计算器。
要求:参与运算的两个数值和运算的类型均从控制台输入,顺序为:第一个操作数、第二个操作数、运算类型;用switch语句编写程序。
循环与数组
关于VS的一些操作说明
运行
F5 : 调试 à 启动调用
Ctrl + F5: 调试 à 开始执行(不调试)
调试
断点
我们启动调试的时候,程序的执行过程就会处于VS的控制和监督之下的,此时我们就可以用多种方式来观察的程序的运行状态。
所谓断点,就是让程序在执行到某行代码的时候暂停,让我们可以看到程序的状态。
F11逐语句执行
让程序一条一条的执行。
监视
在程序进入调试状态之后,会显示局部变量和监视窗口,在这些窗口中我们可以跟踪程序中出现的变量和对象的变化。
比如在监视窗口中,我们可以指定众多变量中需要监视的那个变量,并且可以对这个变量进行运算,或调用其属性与方法。
熟练的使用调试工具,能够极大的提高我们在编程时解决Bug的能力。
VS中的项目的管理
一个项目的构成
查看一个项目所包含的所有文件:
通过右击项目名称 à 在windows资源管理器中打开文件夹 à 就可以看到这个项目的文件了
其中:
文件:解决方案名称.sln与 解决方案名称.suo 就是我们的解决方案文件,我们可以把它理解为是项目中所有项目和文件的一个目录清单。通过双击打开这个文件,我们就可以在VS中打开整个解决方案及软件项目。
解决方案中可以包含多个软件项目。每多包含一个项目,sln文件所在文件夹中就会多一个子目录。
文件:项目名称.csproj (c sharp project)就是有指C#所编写的软件项目。
扩展名为cs的文件,就是我们所编写的c#类文件。
目录bin:用户存放用户编写的代码运行之后,编译的结果,也就是exe可执行文件与dll动态链接库就放在此处。
对于控制台应用程序和winform桌面应用程序来说,这个文件夹复制到其他地方里面的exe文件也是可以直接运行的。
目录obj:用于存放引用的类库文件,不需要用户手动去维护它。
目录properties :用于存放当前程序集的配置参数和信息。
在一个解决方案中创建多个项目
打开当前项目 à vs的“文件”菜单 à 添加 à 新建项目
启动项
在一个解决方案中允许包含多个项目。但一次只能执行一个项目。因此如果我们需要在解决方案中指定默认运行某一个项目的话,需要将这个项目设为启动项:
在项目名称右键菜单à设为启动项
运行非“启动项”的项目
在项目名称右键菜单 à 调试 à 启动新实例
在项目名称右键菜单 à 调试 à 进入并单步执行新实例(一开始就让程序一条一条的逐语句执行)
行号
显示行号:工具菜单 à 选项 à 文本编辑器 à 所有语句 à 打上“行号”前的对勾
选择一行代码:单击行号。
选择多行代码:在行号上拖动鼠标。
变量的重命名
Ctrl + r + r
改变指定变量位于多处的变量名
关于数据类型的补充说明
关于实数的运算
decimal deNum = 1.0m / 7.0m; double dbNum = 1.0 / 7.0; float fltNum = 1.0f / 7.0f; Console.WriteLine(deNum); Console.WriteLine(dbNum); Console.WriteLine(fltNum); 此例中可以看出三种精度的实数运算中的差异。 注意:整形除以整形还是整数,即使你将结果放入小数类型中。
变量的作用域
在方法、if判断、for循环等范围内定义的变量,只能在其所定义的大括号{}内部起作用,超出范围之后就无法再调用了。
我甚至可以用 { } 制造一个单纯的作用域。
{ int num = 5; }
循环
While循环
do while循环
至少会被执行一次
do { Console.WriteLine("这是一个循环"); string ss = Console.ReadLine(); if (ss == "stop") i = 2; } while (i == 1);
for循环
int ii = 0; for (int i = 1; i <= 100; i++) { ii += i; } Console.WriteLine(ii);
for循环的简略写法
简略写法下for循环可以直接被当成while来使用
int i = 0; for (; i < 10; ) { i++; Console.WriteLine(i); }
这个for循环中我们省略了“循环变量的定义”与“步长计算的部分”。
同时使用多个循环变量
for (int i =0, j=3 ; i < 10 || j<30 ; i++,j+=3 ) { Console.WriteLine("当前i的值是{0} j的值是{1}",i,j); }
其中,i和j
上一篇: 来自闺密的温馨劝阻
下一篇: cdr中文字描边制作成渐变颜色效果介绍