主要内容
一个小练习
不断要求用户输入一个数字(假定用户输入的都是正整数),当用户输入end的时候显示刚才输入的数字中的最大值
static void Main(string[] args)
{
//循环体:提示用户输入一个数字 接收 转换成int类型 不停的比较大小
//循环条件:输入的不能是end
string input = "";
int max = 0;
while (input != "end")
{
Console.WriteLine("请输入一个数字,输入end我们将显示你输入的最大值");
input = Console.ReadLine();//数字 end 乱七八糟
if (input != "end")
{
try
{
int number = Convert.ToInt32(input);
//让用户输入的每个数字都跟我假定的最大值比较,只要比我假定的最大值要大,
//就把当前输入的这个数字赋值给我的最大值
if (number > max)
{
max = number;
}
}
catch
{
Console.WriteLine("输入的字符串不能够转换成数字,请重新输入");
}
}
else//==end
{
Console.WriteLine("您刚才输的数字中的最大值是{0}",max);
}
}
Console.ReadKey();
}
程序调试
为什么需要调试
1)、写完一段程序后,想看一下这段程序的执行过程。
2)、当你写完这段程序后,发现,程序并没有按照你想象的样子去执行。调试方法
1)、F11逐语句调试(单步调试)
2)、F10逐过程调试
3)、断点调试
这里输入你要见识的变量名称
多次点击F11 后i 的值已经在代码执行过程中发生了变化
添加断点(点击行号左边的灰色区域添加断点 双击可取消断点)
添加完断点之后直接点击执行 程序会在执行到该行代码的时候停住
(关于行号的添加 参考 .Net基础01)
for循环
语法:
for(表达式1;表达式2;表达式3)
{
循环体;
}
表达式1 一般为声明循环变量,记录循环的次数(int i=0;)
表达式2 一般为循环条件(i<10)
表达式3 一般为改变循环条件的代码,使循环条件终有一天不再成立(i++)。
执行过程:程序首先执行表达式1,声明了一个循环变量用来记录循环的次数,
然后执行表达式2,判断循环条件是否成立,如果表达式2返回的结果为true,
则执行循环体。当执行完循环体后,执行表达式3,然后执行表达式2继续判断循环条件是否成立,
如果成立则继续执行循环体,如果不成立,则跳出for循环。
static void Main(string[] args)
{
for (int i = 0; i < 10; i++)
{
Console.WriteLine("我吃了{0}口饭", i);
}
}
- 小练习1
找出100-999间的水仙花数?
水仙花数指的就是 这个百位数字的
百位的立方+十位的立方+个位的立方==当前这个百位数字
static void Main(string[] args)
{
for (int i = 100; i <= 999; i++)
{
//153
//百位:153/100
//十位:153%100/10
//个位:153%10
int bai = i / 100;
int shi = i % 100 / 10;
int ge = i % 10;
if (bai * bai * bai + shi * shi * shi + ge * ge * ge == i)
{
Console.WriteLine("水仙花数有{0}", i);
}
}
Console.ReadKey();
}
- 小练习2 (for循环嵌套)
static void Main(string[] args)
{
//当遇到某个事情要做一遍,而另外一个事情要做N遍的时候
//for循环的嵌套
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
Console.WriteLine("Hello World i循环了{0}次,j循环了{1}次",i,j);
}
}
Console.ReadKey();
}
从输出结果可以看出for循环嵌套时在满足最外层循环条件后,将执行完内部for循环,之后再判断是否满足外层循环条件。
int.TryParse
类型转换
之前用的 Convert可以类型转换 Parse 也可以类型转换。
之前用的 Convert实际上也是调用了Parse,和Convert 一样Parse 也有int.Parse() double.Parse()等同样的转换类型。
两者在转换失败时都是会抛异常,Parse的效率比Convert要高一丢丢,不过基本可以忽略。
static void Main(string[] args)
{
int number = 100;
//参数 返回值
bool b = int.TryParse("123abc", out number);
Console.WriteLine(b);
Console.WriteLine(number);
//方法 或者 函数?
Console.ReadKey();
}
当Parse 在类型转换失败时,并不会抛异常而是会返回一个 bool值,false 代表转换失败,true 代表转化成功。
continue
在循环中表示结束本次循环
static void Main(string[] args)
{
while (true)
{
Console.WriteLine("Hello World");
// break;
continue;
Console.WriteLine("Hello World");
Console.WriteLine("Hello World");
}
Console.ReadKey();
}
可以发现,程序一直在执行,并没有停止。
- 小练习
用 while continue实现计算1到100(含)之间的除了能被7整除之外所有整数的和。
static void Main(string[] args)
{
int sum = 0;
int i = 1;
while (i <= 100)
{
if (i % 7 == 0)
{
i++;
continue;
}
sum += i;
i++;
}
Console.WriteLine(sum);
Console.ReadKey();
}
三元表达式
语法:
表达式1?表达式2:表达式3;
表达式1一般为一个关系表达式。
如果表达式1的值为true,那么表达式2的值就是整个三元表达式的值。
如果表达式1的值为false,那么表达式3的值就是整个三元表达式的值。
注意:表达式2的结果类型必须跟表达式3的结果类型一致,并且也要跟整个三元表达式的结果类型一致。
static void Main(string[] args)
{
//计算两个数字的大小 求出最大的
Console.WriteLine("请输入第一个数字");
int n1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入第二个数字");
int n2 = Convert.ToInt32(Console.ReadLine());
// 语法:
//表达式1?表达式2 :表达式3
int max = n1 > n2 ? n1 : n2;
Console.WriteLine(max);
Console.ReadKey();
}
随机数
1、创建一个对象
2、用对象调用方法
static void Main(string[] args)
{
//产生随机数
//1、创建能够产生随机数的对象
//Random r = new Random();
//while (true)
//{
// //2、让产生随机数的这个对象调用方法来产生随机数
// int rNumber = r.Next(1, 11);
// Console.WriteLine(rNumber);
// Console.ReadKey();
//}
//输入名字随机显示这个人上辈是什么样的人
//思路:
//1、创建能够产生随机数的对象
//2、产生随机数 (1,7)
Random r = new Random();
while (true)
{
int rNumber = r.Next(1, 7);
Console.WriteLine("请输入一个姓名");
string name = Console.ReadLine();
switch (rNumber)
{
case 1:
Console.WriteLine("{0}上辈子是养猪的", name);
break;
case 2:
Console.WriteLine("{0}上辈子是流氓的", name);
break;
case 3:
Console.WriteLine("{0}上辈子就是小混混", name);
break;
case 4:
Console.WriteLine("{0}上辈子是大汉奸", name);
break;
case 5:
Console.WriteLine("{0}上辈子是拉皮条的", name);
break;
case 6:
Console.WriteLine("{0}上辈子是救苦救难的活菩萨", name);
break;
}
Console.ReadKey();
}
往期回顾