c#语言中的快捷键
注意:
1、二进制无法精确表示1/10,就像十进制无法精确表示1/3。对于精度较高的场合会导致代码的缺陷,可以使用decimal代替。
调试:查看各个变量的取值,找到程序的错误
1、在可能出错的行处加断点
2、按F5 启动调试
3、按F11 逐语句执行
4、shift+F5 停止调试
标准化输出格式
Console.WriteLine("金额为:{0:c}",10);
Console.WriteLine("{0:d2}",5);//05
Console.WriteLine("{0:f1}",1.26);//1.3 根据精度四舍五入
Console.WriteLine("{0:p}", 0.1);// 10.00%
Console.WriteLine("{0:p1}", 0.1);// 10.0%
Console.WriteLine("{0:p0}", 0.1);// 10%
//空字符
char c1='\0';
//隐式转换:小范围到大范围的自动转换 比如 byte---->int
byte b1 = 10;
int i1 = b1;
//显示转换:大范围到小范围的需要强制类型转换。 比如int---->byte
int i2 = 10;
byte b2 = (byte)i2;
byte b=1;
b+=3;
b=(byte)(b+3);//相加就认为是int类型了
递归
//递归 必须要有出口
//优势:将复杂问题简单化
//阶层的计算
private static int getFactorial(int num) {
if (num == 1) return 1;
return num * getFactorial(num - 1);
}
//计算参数为8的结果
//1-2+3-4+5-6.....
private static int funNum(int num) {
if (num == 1) return 1;
if (num % 2 == 0)
return funNum(num - 1)-num;//类似于:7-8
else
return funNum(num - 1)+num;//类似于:2+3
}
数组
数组的定义:
数据类型[] 数组名;--------> int[] a;
初始化数组:
数组名 = new 数据类型[元素总数]; --------------> a=new int[3];
//返回结果为一个数组
private static float[] scoreArray() {
//数组
Console.WriteLine("请输入学生总人数:");
int count = int.Parse(Console.ReadLine());
//申明一个数组,并且为数组分配空间
float[] score = new float[count];
for (int i = 0; i < score.Length;)
{
Console.WriteLine("请输入第{0}个学生成绩:", i + 1);
float sc = float.Parse(Console.ReadLine());
if (sc >= 0 && sc <= 100)
score[i++] = sc; //成绩塞进来,才加1
else
Console.WriteLine("成绩有误");
}
return score;
}
//利用刚写的方法,该方法返回的是一个数组类型
float[] array = scoreArray();
findMax(array);
//定义查找数组元素最大值的方法float[]
private static float findMax(float[] array) {
float max = array[0];
for (int i=0;i<array.Length-1;i++) {
if (array[i+1]>max)
max = array[i+1];
}
Console.WriteLine(max);
return max;
}
//数组的其他写法 初始化+赋值
string[] arr = new string[2] { "a", "b" };
//判断年是否为闰年
private static bool isLeapYear(int year) {
return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
}
//算某年某月某日是当年的第几天
//比如2017-3-5是2017年的第几天
private static void getAllDays(int year,int month,int day) {
//将一年中每月的天数都存到数组中去
int[] daysOfMonth = new int[] { 31,28,31,30,31,30,31,31,30,31,30,31};
//判断是否为闰年 如果是闰年,那么2月的天数为29天
if (isLeapYear(year)) daysOfMonth[1] = 29;
int num = 0;
//month-1:表示过完了month-1月才能将天数加上
//因为当month=1时,则为一年的开始月
for (int i=0;i<month-1;i++) {
num += daysOfMonth[i];
}
num += day;
Console.WriteLine(year+"年"+month+"月"+day+"日是第{0}天",num);
}
foreach
/* foreach(元素类型 变量名 in 数组名称)
{
变量名 即数组每个元素
}*/
int[] array0 = new int[] { 1, 2, 3, 4, 5 };
foreach (var item in array0) {
Console.WriteLine(item);// 1,2,3,4,5 将数组的元素遍历了一次
}
var
//推断类型:根据所赋数据,推断类型
//适用性:数据类型名称较长
var v1 = 1; //int
var v2 = "1";//string
var v3 = '1';//char
var v4 = true;//bool
var v5 = 1.0;//double(没后缀默认为double)
数组特点
//父类引用指向子类对象 向上转型
Array arr1 = new int[2];
Array arr2= new double[2];
Array arr3= new string[2];
int[] array0 = new int[] { 1, 2, 3, 4, 5 };
int[] brr =(int[]) array0.Clone();//将array0这个数组克隆给数组brr
//判断数组中是否有指定元素
bool result= Array.IndexOf(array0, 2)>=0;//存在指定元素则返回1,否则返回 -1
Array.IndexOf(array0, 2);//表示获取指定元素2在数组array0中的下标
Array.IndexOf(array0, 2)>=0;//表示判断指定元素2是否存在于数组array0中
判断一个元素是否在一个数组中存在时使用 Array.IndexOf()这个方法
买彩票小游戏(数组的练习)
static void Main(string[] args){
//玩一局彩票游戏
int[] myTicket = buyTicket();//自己先买一支彩票
int[] randomTicket = createRandomTicket();//随机生成一期中奖的号码
//查看自己购买的彩票号码
Console.WriteLine("我买的彩票为:");
foreach (var myNum in myTicket)
Console.Write(myNum + "\t");
Console.WriteLine();
//查看中奖的彩票号码
Console.WriteLine("中奖的彩票为:");
foreach (var ranNum in randomTicket)
Console.Write(ranNum + "\t");
Console.WriteLine();
//比对中奖的等级
Console.WriteLine("中奖的等级为:{0}", ticketEquals(myTicket, randomTicket));
}
method1:
/// <summary>
/// 购买彩票
/// </summary>
/// <returns>所有球的号码的数组ticket</returns>
private static int[] buyTicket() {
int[] ticket = new int[7];
//6个红球
for (int i = 0; i < 6; )
{
Console.WriteLine("请输入第{0}个红球号码:",i+1);
int redNumber = int.Parse(Console.ReadLine());
//在将输入的红色球号码存入到数组之前需要满足以下条件:
//1.输入的红球号码不能重复
//2.输入的红球号码在1-33之间
if (redNumber <1 || redNumber > 33) Console.WriteLine("购买的号码超过范围");
else if (Array.IndexOf(ticket, redNumber)>=0) Console.WriteLine("号码已经存在");
else ticket[i++] = redNumber;//以上条件都满足则该号码才能存入到数组ticket中
}
//第7个蓝球
while (true) {
Console.WriteLine("请输入蓝球号码:");
int blueNumber = int.Parse(Console.ReadLine());
if (blueNumber < 1 || blueNumber > 16) Console.WriteLine("购买的号码超过范围");
else {
ticket[ticket.Length - 1] = blueNumber;//先将红球装入数组中,最后放蓝球
break;//将最后一个数据填入数组之后,即结束则跳出整个while循环
}
}
Array.Sort(ticket,0,6);//将数组前6位进行排序
return ticket;
}
method2:
//创建一个随机的彩票数组
//先写一个静态的随机方法,方便调用
static Random random = new Random();
private static int[] createRandomTicket() {
int[] ticket = new int[7];
//随机生成6个红球
for (int i = 0; i < 6;)
{
int redNumber=random.Next(1, 34);//随机产生1-33之间的一个数 并 给红球
//存在不相同的色号 则将该色号存入数组内
if (Array.IndexOf(ticket, redNumber) < 0)
ticket[i++] = redNumber;
}
//随机生成一个蓝球
ticket[ticket.Length - 1] = random.Next(1, 17);
//红球号码排序 从ticket的第1个数据开始,将前6个数据进行排序
Array.Sort(ticket, 0, 6);
return ticket;
}
method3:
//两个数组相互比较
private static int ticketEquals(int[] thisTicket,int[] randomTicket) {
//计算红球和蓝球的中奖数量
//蓝球的中奖数量
int blueCount = thisTicket[thisTicket.Length - 1] == randomTicket[randomTicket.Length - 1] ? 1 : 0;
//红球的中奖数量 判断我的第的号码在不在随机的中奖号码中
int redCount = 0;
for (int i = 0; i < thisTicket.Length-1; i++)
{
//将thisTicket数组中的元素从0开始与randomTicket数组中的元素进行6次搜素对比
if (Array.IndexOf(randomTicket, thisTicket[i], 0, 6) >= 0)
redCount++;
}
//查看中奖情况
int level;//设置中奖等级
if (blueCount + redCount == 7)
level = 1;
else if (redCount == 6)
level = 2;
else if (blueCount + redCount == 6)
level = 3;
else if (redCount + blueCount == 5)
level = 4;
else if (redCount + blueCount == 4)
level = 5;
else if (blueCount == 1)
level = 6;
else
level = 0;
return level;//返回中奖等级
}