注释符作用
不写注释是流氓;乱起名字是扯淡
1)注销
2)解释(比较常用)
注释符不同类型
1)注销单行//
2)注销多行/* */
3)注释文档类或者方法///,输入///后会出下summary,这个的意思是摘要。
常用的快捷键
1)ctrl+s:保存
2)ctrl+k+d:快速对齐(注:这里需要注意,要是你的代码有问题这个快捷键对齐的功能就没有办法实现)
3)ctrl+k+c:选中单行或者多行,可以快速注释
5)fn+end+shift:当光标在一行的头部,按下这几个键,就会从这一行代码的头部选到尾部,如果继续向下选中,那么就按下shift+Pgdn按键。
6)fn+home+shift:当光标在一行的尾部,按下这几个键,就会从这一行代码的尾部选中到头部,如果继续向上选中,就按下shift+Pgup按键。
注:如果仅仅是移动光标,不用选中的话吗,就不用按下shift键,这样可以移动光标位置。详细点就是说,如果你光标在一行尾部,你想移动到首部,那么,你就按下fn+home就可以了;如果你光标在一行首部,你想移动到尾部,那么,你就按下fn+end就可以了。
7)ctrl+z:撤销键
8)ctrl+j:快速弹出智能提示,但是在自己练习过程中,还是不要使用智能提示,因为你进公司的笔试题,你手写的话没有提示。
9)折叠冗余代码:在冗余代码前面输入#region,在冗余代码尾部输入#endregion,此时在冗余代码的前端就会出现一个减号,点击减号,你的代码就可以折叠了,如果你要注释的话,记得在region后面空一格在注释,不能直接写嗷!
10)F1:帮助文档
当我们要把一个数存储到计算机中的时候,我们需要给他开辟一个空间,刚开始我们都是通过该空间的地址进行查找的。
不用存储的内容那个本身找的原因是:不同空间可能存储一样的内容,如图所示。
地址一般长这样:0x101010211,长吧,而且也没有规律,好找吗?不好找。
此时,有人说,那就给它们每个人起一个名字吧,第一个地址中100,那就叫它Number,第二个就叫它name,第三个就叫它Score。然后根据这些名字找。
不知道你理解这里了嘛?相当于每个空间是一个房子,给每个房子起一个房号去找。这个"房号"就是我们说的变量。
举个例子:
时小糖同学去旅游,要开宾馆
当时小糖同学一个人去开宾馆的话,开单间,单人床,102(房号)
当时小糖同学和姐姐一起旅游开宾馆的话,开双人间,双人床,105(房号)
当时小糖同学结婚了和老公一起开宾馆的话,开双人间,一张大床,106(房号)
根据这三个例子可以看到,影响开的宾馆类型的有两点:
1)人数不同,房间类型不同;
2)人员类型不同,房间类型也不同,我和姐姐,和我和老公,都是两个人,但是因为类型不同,开的房间类型自然也不相同。
同理不同类型的内容,自然要有不同类型的变量,这里呢,房号就是变量,这个变量里面的空间也不同。
//官方解释:声明一个int类型的变量
int number; //变量类型;变量名;简单理解就是开一个房号是number的int类型房间
//官方解释:将100的值赋给变量number
number =100;//变量名=值;简单理解就是让100住进去number房间中
//或者简写
int n =100;
1.整数类型:int;整数类型不能存储小数;
2.小数类型:double;可以存储小数,也可以存储整数;精度是15-16
3.金钱类型:decimal;可以存储金钱,金钱后面要加一个m;精度28-29,这个类型银行常用,因为这个类型后面精度高,对于那些很有钱的人来说,精度越高赚的越多,所以银行使用的精度类型高。
4.字符串类型:string;可以存储一串字符或者空,存储的时候写值的话要带英文半角类型的" "。
5)字符类型:char;可以存储单个字符,最多,最少,只能存一个字符,不能不存。或者是存的大于一个字符,赋值的时候要用英文半角类型的单引号’ '。
1.先声明变量
2.在给变量赋值
3.再使用变量
int number ;
number = 100;
Console.WriteLine(number);
Console.ReadKey();//输出100
注意:这里不定义,直接赋值使用,是错误的
这里不赋值,直接使用也是错误的
这里只定义,不赋值,不使用,会出现警告
所以变量一定要按照顺序:声明——赋值——使用
补充:在编写代码的时候会出现红色波浪线是语法错误的提示。要是出现绿色波浪线就是说语法没有错误,但是可能会有错误,绿色的是警告线。
这里写一个代码和上面比较
int number;
number = 100;
Console.WriteLine("number");
Console.ReadKey();//输出的是number
为什么会有这两个区别呢?这是因为第二个打印语句中加上了双引号,双引号是给字符加的,所以输出的就是字符,而不是你赋值好的变量。
我们说过:不写注释的是流氓,乱起名字的是胡扯。
1.所有我们命名的名字都要有含义,number,age,score,你不要命名a,b,c,这样在团队完成项目中别人就没有办法理解你写的是什么。
2.初级阶段命名变量是都使用字母开头。
3.使用字母开头后,后面可以跟字母,数字,下划线,但是不可以跟除了下划线以外的其他特殊字符
4.不能使用C#中的关键字命名,因为人家关键字就相当于已经是有版权了,你就不能使用
5.C#中对于字母的大小写是敏感的,HTML是不敏感的。
比如:你命名一个number和Number就是不一样的变量,C#中这两者是有区别的。
补充:在使用字符串的时候,可以发现有两个字符串形式,一种是首字母大写的String,一种是首字母小写的string。这两种字符串都是可以用的,只不过大写的是String类,大写的String是整个平台下字符串类型,所有平台都有,小写的是C#中的关键字,一般用小写的关键字,但是二者最后都会映射到class system string类。
6.同一个变量是不能重复定义或者声明的,如下代码:
int number ;
int number = 20;
该代码重复定义命名变量,是有错误的。
1)Camel(骆驼命名规范):所谓的骆驼命名规范就是除了首单词首字母要小写,剩余的单词首字母都要大写。eg:highSchoolStudent
一般命名变量的时候使用Camel命名规范
2)Pascal:所有单词的首字母都要大写,其他字母小写.eg:HighSchoolStudent;
命名类或者方法的时候使用Pascal命名规范
小学学的等号=,在C#里是赋值运算符 。它的作用是把右边的值给左边的变量。
int n = 100;//把100赋给变量n;
有赋值运算符的式子我们叫做赋值表达式,赋值表达式的值就是等号左边变量的值,每个赋值表达式我们都可以得到一个固定的值。
变量可以被重复赋值,被重新赋值之后,老值就不存在了,取而代之的是新值。
int n = 20;
n = 50;
Console.WriteLine(n);
Console.RadKey();
最后控制台输出的是50,就是那个重新赋的值
加号在C#中有两个作用
1)连接两个字符串
2)用作加法
当加号任意一边有字符串的话就是连接两个字符串的作用
当加号两边都没有字符串的话就是加法的作用
Console.WriteLine(5+5);
Console.ReadKey();
结果输出的是10,这里是加法作用
Console.WriteLine(5+"5");
Console.ReadKey();
这里输出的是55,将一个5与一个字符5连接起来
string name = "卡卡西";
int age = 30;
string email = "[email protected]";
string address = "火影村";
decimal salary = 5000m;
Console.WriteLine("我叫"+name+",我今年"+age+"岁了,我住在"+address+",我的邮箱是"+email+",我的工资是"+salary);
Console.ReadKey();
int age = 18;
age = 81;
Console.WriteLine(age);
Cosole.ReadKey();
占位符就是挖一个坑,然后填一个坑。
Console.WriteLine("我叫"+name+",我今年"+age+"岁了,我住在"+address+",我的邮箱是"+email+",我的工资是"+salary);
这样写的话容易写错,所以要使用占位符,占一个位置。
string name = "卡卡西";
string address = "火影村";
int age = 30;
string email = "[email protected]";
decimal salary = 5000m;
Cosole.WriteLine("我叫{0},我今年{1}岁了,我住在{2},我的邮箱是{3},我的工资是{4}",name,age,address,email,salary);
Console.ReadKey();
1)占位符要挖一个坑,填一个坑,多填,没效果;少填,抛异常
2)异常不是语法错误,异常是运行时程序出现了某些问题,不能正常进行
输出的顺序和挖坑的顺序一致,就是你挖的顺序是什么,后面出现的就是什么
例如:
int n1 = 10;
int n2 = 20;
int n3 = 30;
Console.WriteLine("第一个数字是:{0},第二个数字是:{1},第三个数字是:{2}",n1,n2,n3);
Console.ReadKey();
输出的结果是10,20,30
int n1 = 10;
int n2 = 20;
int n3 = 30;
Console.WriteLine("第一个数字是:{1},第二个数字是{0},第三个数字是:{2}",n1,n2,n3);
Console.ReadKey();
输出的结果是:20,10,30
每一次都有一个面试题问你说交换变量,有两种办法
int n1 = 10;
int n2 = 20;
int temp = n1;
n1 = n2;
n2 = temp;
Console.WriteLine("交换后的n1={0},n2={1}", n1, n2);
Console.ReadKey();
有些面试题让你不能使用中间变量
int n1 = 10;
int n2 = 20;
n1= n1-n2;//这时n1=-10,n2=20
n2 = n2+n1;//这时n1=-10;n2=10
n1=n2-n1;//这时n1=20;n2=10
Console.WriteLine("交换后的n1={0},n2={1}",n1,n2);
Console.ReadKey();
这个方法把n1换成30,把n2换成50也可以保证准确,就是用两个变量加加减减,凑出交换的结果。
这里学一个新一行的代码:
Cosole.ReadLine();
这个代码就是接受用户输入,并要定义一个字符串类型,存储用户输入。为什么是定义一个字符串类型呢?因为用户可能输入5,张三,男,145132564,3.14,无法确定的类型,但是都可以用字符串类型表示。
补充:当代码先在控制台显示要你输入的内容时,程序暂停,那么我们可以知道,ReadLine();和ReadKey一样,都可以暂停程序。
Console.WriteLine("请输入您的姓名:");
string name = Console.ReadLine();
Console.WriteLine("您的姓名为:{0}",name);
Console.ReadKey();
注意:这里的Console.ReadLine();的接收类型必须是个字符串类型,其他的不可以。
练习1:
Console.WriteLine("您的姓名是:{0}", name);
Console.ReadKey();
Console.WriteLine("请问您喜欢吃什么水果?");
string fruit = Console.ReadLine();
Console.WriteLine("这么巧,我也喜欢吃{0}", fruit);
Console.ReadKey();
Console.WriteLine("请问您的姓名是:");
string name = Console.ReadLine();
Console.WriteLine("请问您的年龄是:");
string age = Console.ReadLine();
Console.WriteLine("请问您的性别是:");
string gender = Console.ReadLine();
Console.WriteLine("您好,您的姓名是{0},您的年龄是{1},您的性别是{2}", name, age, gender);
Console.ReadKey();
转义字符就是’'+其他特殊字符,来表示一个特殊含义的字符
‘/n’:表示换行,mac系统可以识别的类型
‘/t’:表示Tab键
‘/b’:表示Backspace键
‘/r/n’:在Windows系统下是换行的意思
‘//’:就是\的意思
/‘’:就是英文半角的双引号的意思
@:①就是取消转义字符转义的作用②保持原格式输出
算术运算符包括:+、-、*、/、%
int n1 = 10;
int n2 = 3;
Console.WriteLine(n1/n2);
Console.ReadKey();
结果是3;
两个int类型加减乘除取余依旧是int类型
计算顺序为:先乘除,后加减,有括号先算括号内的
赋值运算符 = 左右两边的数据类型应该是一样的,右边的操作数的类型和左边的运算结果的类型必须一致
1.计算一个半径为5的圆的面积和周长,pi=3.14
int r = 5;
double area = r * 3.14 * r;
double perimeter = r * 3.14 * 2;
Console.WriteLine("圆的面积:{0},圆的周长:{1}",area,perimeter);
Console.ReadKey();
某商店T恤价格为35元每件,裤子价格为120元每条,小明买了两条裤子和三件T恤,应该付多少钱,8.8折后呢?
int T_shirt = 35;
int trousers = 120;
int price = T_shirt * 3 + trousers * 2;
Console.WriteLine("小明应该付:{0}",price*0.88);
Console.ReadLine();
含义:当有下面两种情况时可以进行隐式类型转换(又称自动类型转换)
1)类型兼容,比如都是数字类型:int 和 double
2)小精度转大精度,或者官方的话叫做:目标类型>原类型
含义:当满足下面两种条件时是显示类型转换(又称强制类型转换)
1)类型兼容,比如都是数字类
2)大精度转小精度,目标类型<原类型
语法:(要转换的类型)要转换的值
double a = 30.65;
int b= (int)a;
Console.WriteLine(b);
Console.ReadKey();
注:对于一个表达式来说,如果有一个操作数是double类型,则整个表达式都可以提升为double类型。
int a = 10;
int b = 3;
double c = a / b;
Console.WriteLine(c);
Console.ReadKey();
这个输出结果是3;好多人说不应该是3.3333333吗?
不是的,整数类型之间的加减乘除只能得到整数类型,这里的确进行了类型转换,类型转换没说要加小数点嗷!也就是说可以这么来理解,double类型可以表示double类型也可表示int类型。
下面将一个操作数变成double类型(将一个操作数变成double类型的简单方法是*1.0)
int a = 10;
int b = 3;
double c = a / b;
Console.WriteLine(c);
Console.ReadKey();
这里的结果是3.33333333
或者,可以直接将操作数改为double类型
double a = 10;
int b = 3;
double c = a / b;
Console.WriteLine(c);
Console.ReadKey();
这里输出的结果是3.333333333
首先用占位符,其次保留几位占位符写小数点后几位,例子如下:
double a = 10;
int b = 3;
double c = a / b;
Console.WriteLine("{0:0.00}",c);
Console.ReadKey();
输出结果为3.33
注意怎么写的{0:0.00},不要写错了。
int days = 46;
int weeks = days / 7;
int day = days % 7;
Console.WriteLine("{0}天是{1}周{2}天",days, weeks, day);
Console.ReadKey();
第一道题难度不大
第二道题我做的时候出现了两次错误
double totalsecond = 107653;
double day1 = totalsecond / 60 / 60 / 24;
int days = (int)day1;
double hour1 = (day1 - days) * 24;
int hours = (int)hour1;
double minute1 = (hour1 - hours) * 60;
int minutes = (int)minute1;
int senconds = (int)((minute1 - minutes) * 60);
Console.WriteLine("107653秒是{0}天{1}时{2}分{3}秒", days, hours, minutes, senconds);
Console.ReadKey();
第一次错误是因为将totalsecond设置为int类型了,在第二行代码中,尽管day1是int类型,但是后面的数据类型都是整数,整数之间的加减乘除得出来的还是整数,不可能是小数。
第二个是在进行强制类型转换得时候,我写成了int(值)的样子,语法书写错误,正确的语法是(要转换的类型)要转换的值。
方法二:
int seconds = 107653;
int days = seconds/ 86400;//多少天
int secs = seconds % 86400;//天数算完还有多少秒
int hours = secs / 3600;//有多少小时
secs = secs % 3600;//算完小时还有多少秒
int minutes = secs/60;
secs = secs % 60;
Console.WriteLine("{0}秒有{1}天{2}小时{3}分钟{4}秒", seconds, days, hours, minutes, secs);
Console.ReadKey();
方法一和方法二的区别就是,方法一完全没有用到外面的数,方法二用到了外面的数字。