Day03
循环语句
本质就是执行顺序
- 重复执行同一组语句,直到满足指定的条件。
- 循环的要素:
– 循环体(需要重复执行的语句)
– 循环条件(重复执行的条件)
1.for 和 while循环语句
for(初始化;循环条件;增减变量)
{
循环体;//用for:先写明白循环体,然后了解事情要干多少次
}
执行顺序:先初始化 -> 循环条件(决定权) -> 循环体 -> 增减变量 -> 循环条件 -> 循环体 -> 增减变量
- 写法一:
for (int i = 0; i < 5; i++)
{
Console.WriteLine(i);
}
- 写法二
int i = 0;
for(; i<5; )
{
Console.WriteLine(i);
i += 1;
}
注:
- 与上面那种写法一致(两者的区别就是作用域)
- 作用域:起作用的范围(从声明 开始 到 } 结束
- for循环作用:预定次序的循环
例
- 一张纸的厚度为0.01毫米 , 请计算 对折 30次 以后的厚度为多少米
float thickness = 0.00001f;
for (int i = 0; i < 30; i++)
{
//thickness = thickness * 2;
thickness *= 2;
}
Console.WriteLine("厚度为 :" + thickness);
- 1–100之间数字累加
int sum = 0;
for (int i = 0; i <= 100; i++)
{
sum += i;
}
Console.WriteLine(sum);
- 一个球从100米高度落下 , 每次落地后,弹回原高度一半 , 计算,总共弹起?次最终落地(最小弹起高度 :0.01米) 总共经过?米
float height = 100;//当前高度
int count = 0;
float distance = height;//距离
//下次弹起高度 如果 大于 0.01米
while (height / 2 >= 0.01f)
{
height /= 2;//高度减半count++;//计数//累加起、落距离
distance += height * 2;
Console.WriteLine("第{0}次弹起高度为 :{1}。", count, height);
}
Console.WriteLine("经过{0}次最终落地", count);
Console.WriteLine("总共经过{0:f1}米", distance);//保留一位小数
2.do–while语句
do
{
循环体
} while(条件);//先执行一次循环体,再判断条件
- 创建一个随机数工具
Random random = new Random(); - 产生一个随机数
int number = random.Next(1, 101);
跳转语句
- 用于将控制转移给另一段代码。
- 包 括 :continue 语句、 break 语句、 return 语句。
continue 语句
- 退出本次循环,执行下次循环。
- 案例:计算1到100之间能被3整除的数字累加和
break 语句
退出最近的循环体或switch语句。
方法
什么是方法
- 方法就是对一系列语句的命名 , 表示一个功能或者行为
如:Start、Update、Movement.… - 使用方法可以提高代码的可重用性和可维护性(代码层次结构更清晰)。
语法
返回值类型
. 返回值:方法定义者告诉调用者的结果。
. 如果方法有返回值,方法体中必须有 return 语,且返回的数据与返回值类型必须兼容。
· void 代表无返回值类型,方法体中 return 关键字可有可无。
· return 后面的语句将不再执行。
· 调用方法时,如果需要结果,声明相应类型的变量接收返回值数据。
static void Main()
{
//调用方法
**//1.方法的调用者**
Fun1();
Fun2();
Console.WriteLine();//没有返回值
string input=Console.ReadLine();//有返回值
//实参 要与 形参一一对应
int a = 100; //a为实参
string b = "ok";
Fun3(a,b);//实参(知道实际的数是多少)
}
private static void Fun1()//void是空类型
{
Console.WriteLine("Fun1执行了");
return;//没有返回值的方法,也可以写return关键字
}
private static int Fun2()//函数返回值若不是void(空),(这里面是int)就必须添加返回值
{
//2.方法的定义者
//返回值的数据必须与返回值类型兼容
Console.WriteLine("Fun2执行了");
return 0;//返回 数据; 退出方法
Console.WriteLine("Fun2又执行了");//这行代码无法执行
}
//(int a,string b)中a b叫做形参
private static void Fun3(int a,string b)
{
Console.WriteLine(a);
}
- 方法只有在调用的时候才会执行
- 传递参数
- 调用方法要先看参数要什么,如果这里面要是将Fun3(aaa,b);也是可行的,因为传的是参数,无所谓变量叫什么
- 看提示写内容
参数列表
参数
- 方法定义者需要调用者传递的信息。
- 定义方法时叫形式参数,简称形参;
- 调用方法是叫实际参数,简称实参;
- 实参与形参要一 一对应(类型、数量、顺序)
学会调用别人提供的方法
- 看名字猜,看描述
- 看参数(类型、名称、描述)
- 看返回值
- 测试
//例
//str.Insert()方法
string str = "1 2 3";
str = str.Insert(4, "1");
//前面的str含义是因为有返回值,所以要接收返回值
//str.IndexOf()方法
int index =str.IndexOf('1');
如何定义方法
- 方法 : 表示功能
- 返回值 : 功能的结果(方法定义者 告诉 方法调用者的 结果)
- 看方法有没有返回值就看提示的最左边第一个单词 , void就是没有返回值
- 类型 : 数据类型 int double float string
- void 没有返回值
定义两个整数相加的方法
//如何定义方法
static void Main()
{
/*--获取数据*/
Console.WriteLine("请输入第1个数 :");
int one = int.Parse(Console.ReadLine());
Console.WriteLine("请输入第2个数 :");
int two = int.Parse(Console.ReadLine());
/*--逻辑运算*/
//调用方法语句
int result=Add(one,two);//调用Add方法
/*--显示结果*/
Console.WriteLine("结果为" + result);
}
//两个整数相加的方法 : [一个]功能
private static int Add(int one,int two)
{
//将方法体写的尽可能小(为了复用)
return one + two;
}
定义方法的原则
- 必须知道的信息,定义为参数。
- 需要告诉调用者的结果,定义为返回值
- 将方法体写的尽可能小 ( 为了提高复用性和可维持性,以便完成一个独立的功能 )
每日一练:输出年历(定义方法的例子 )
思路 :
- 在控制台中现实年历的方法
年份是个参数 - 调用12遍现实月历
–显示表头Console.WriteLine(“日\t一\t二\t”);
–计算当月一日星期数,输出空白(\t)
Console.Write(“\t”);//不换行输出
– 计算当月天数,输入1\t 2 3 4
– 每逢周六换行 - 根据年月日,计算星期数[赠送]
- 计算指定月份的天数
- 判断年的方法
2月闺年29天
平年28天
年份能被4整除 但是 不能被100整除
年份能被400整除
/// <summary>
/// 根据年月日,计算星期数的方法
/// </summary>
/// <param name="year">年份</param>
/// <param name="month">月份</param>
/// <param name="day">天</param>
/// <returns>星期数</returns>
//根据年月日,计算星期数的方法
private static int GetWeekByDay(int year, int month, int day)
{
DateTime dt = new DateTime(year, month, day);
return (int)dt.DayOfWeek;
}
//1.判断是否为闰年方法
private static bool IsLeapYear(int year)
{
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
return true;
else
return false;
//方法体中的第二种写法
//return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
//2.计算月份的天数方法(简化后的代码)
private static int GetDaysByMonth(int year, int month)
{
if (month < 1 || month > 12) return 0;
{
switch(month)//判断月份
{
case 2://判断当月份是2时的天数
//调用IsLeapYear函数,判断二月的天数
return IsLeapYear(year) ? 29 : 28;
case 4:
case 6:
case 9:
case 11:
return 30;
default:
return 31;
}
}
}
//3.显示月历方法(只显示 ,不需要返回值)
private static void PrintMonthCalendar(int year, int month)
{
//(1).显示表头
Console.WriteLine("{0}年{1}月", year,month);
Console.WriteLine("日\t一\t二\t三\t四\t五\t六");
//(2).根据1日星期数,显示空白
int week=GetWeekByDay(year,month,1);
for(int i=0; i<week;i++)
Console.Write("\t");
//(3).根据当月总天数,显示日的方法
int days = GetDaysByMonth(year, month);
for (int i = 1; i <= days; i++)
{
Console.Write(i + "\t");
//(4).每逢周六换行
if (GetWeekByDay(year, month, i) == 6)
Console.WriteLine();
}
}
//4.显示年历的方法
private static void PrintYearCalendar(int year)
{
for (int i = 1; i <= 12; i++)
{
PrintMonthCalendar(year, i);
Console.WriteLine();//仅仅为了换行
Console.WriteLine();//仅仅为了换行
}
}
//调用方法
private static void Main()
{
Console.WriteLine("请输入年份:");
int year = int.Parse(Console.ReadLine());
PrintYearCalendar(year);
}