C#基础学习笔记(四)
1、程序调试
-
写完一段程序后,想看一下这段程序的执行过程。
-
当你写完这段程序后,发现,程序并没有按照你想象的样子去执行。
-
调试方法:
- F11逐语句调试(单步调试)
- F10逐过程调试
- 断点调试
2、for循环
语法:
for(表达式1;表达式2;表达式3)
{
循环体;
}
- 表达式1一般为声明循环变量,记录循环的次数(int i=0;)
- 表达式2一般为循环条件(i<10)
- 表达式3一般为改变循环条件的代码,使循环条件终有一天不再成立(i++)。
执行过程:
程序首先执行表达式1,声明了一个循环变量用来记录循环的次数,
然后执行表达式2,判断循环条件是否成立,如果表达式2返回的结果为true,
则执行循环体。当执行完循环体后,执行表达式3,然后执行表达式2继续判断循环条件是否成立,
如果成立则继续执行循环体,如果不成立,则跳出for循环。
例子:
#region 循环已知次数的用for
//打印10遍 北京欢迎你
#region 用while的
int i = 0;
while (i <= 10)
{
Console.WriteLine("北京欢迎你");
i++;
}
#endregion
#region for循环
//第一次执行完循环体之后才加1
for (int i = 0; i <= 10; i++)
{
Console.WriteLine("北京欢迎你{0}", i);
}
#endregion
for循环的正序和倒序输出:
#region for循环的正序和倒序输出
//打印1-10
for (int i = 1; i <= 10; i++)
{
Console.WriteLine(i);
}
//打印10-1
for (int i = 10; i > 0; i--)
{
Console.WriteLine(i);
}
#endregion
练习:
#region 练习1
//求1-100间的所有整数和 偶数和 奇数和 用2去取余
int sum = 0;
int sum1 = 0;
int sum2 = 0;
for (int i = 1; i <= 100; i++)
{
sum += i;
}
//for (int i = 1; i <= 100; i++)
//{
// if (i % 2 == 0)
// {
// sum1 += i;
// }
//}
for (int i = 2; i <= 100; i += 2)
{
sum1 += i;
}
for (int i = 1; i <= 100; i += 2)
{
sum2 += i;
}
Console.WriteLine("1-100的整数和是{0}", sum);
Console.WriteLine("1-100的偶数和是{0}", sum1);
Console.WriteLine("1-100的奇数和是{0}", sum2);
#endregion
#region 练习2
//找出100-999间的水仙花数?
//这个数字百位的立方+十位的立方+个位的立方==当前的的百位数字
//153 1+125+27=153
//百位:153/100
//十位:153%100/10
//个位:153%10
for (int i = 100; i <= 999; i++)
{
int bai = i / 100;
int shi = i % 100 / 10;
int ge = i % 10;
if ((Math.Pow(bai, 3) + Math.Pow(shi, 3) + Math.Pow(ge, 3)) == i)
{
Console.WriteLine("水仙花数有{0}", i);
}
}
#endregion
#region for循环的嵌套
//当一个事情要做一遍,而另一个事情要做N遍的时候
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
Console.WriteLine("Hello World i循环了{0}次,j循环了{1}次", i, j);
}
}
#endregion
#region 练习3
#region 完整的
输出九九乘法表(循环的嵌套)
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= 9; j++)
{
//Console.WriteLine("{0}×{1}={2}", i, j, i * j);
Console.Write("{0}×{1}={2}\t", i, j, i * j);
}
Console.WriteLine();//换行
}
#endregion
#region 斜的
for (int i = 1; i <= 9; i++)
{
for (int j = 1; j <= i; j++)
{
//Console.WriteLine("{0}×{1}={2}", i, j, i * j);
Console.Write("{0}×{1}={2}\t", i, j, i * j);
}
Console.WriteLine();//换行
}
#endregion
#endregion
#region 练习4
//输入3 显示
//0+3=3
//1+2=3
//2+1=3
//3+0=3
Console.WriteLine("请输入一个数字");
int number = Convert.ToInt32(Console.ReadLine());
for (int i = 0; i <= number; i++)
{
Console.WriteLine("{0}+{1}={2}", i, number - i, number);
}
#endregion
3、int.TryParse
int.parse
尝试着将一个字符串转换成int类型。
#region 练习1
//练习1: 循环录入5个人的年龄并计算平均年龄,
//如果录入的数据出现负数或大于100的数,立即停止输入并报错.
int sum = 0;
bool b = true;
for (int i = 1; i <= 5; i++)
{
Console.WriteLine("输入第{0}个人的年龄", i);
try
{
int age = Convert.ToInt32(Console.ReadLine()); //会异常
if (age >= 0 && age <= 100)
{
sum += age;
}
else
{
Console.WriteLine("输出错误跳出");
b = false;
break;
}
}
catch
{
Console.WriteLine("输入年龄不正确,退出!");
//严谨
b = false;
break;
}
}
if (b)
{
//这样写错误跳出的时候也会执行,加判断
Console.WriteLine("这5个人的平均年龄是{0}", sum / 5);
}
#endregion
#region 练习2
//练习2:在while中用break实现要求用户一直输入用户名和密码,
//只要不是admin、88888就一直提示要求重新输入,如果正确则提登录成功.
string name = "";
string pwd = "";
while (true)
{
//直接用死循环做,用break跳出
Console.WriteLine("请输入用户名");
name = Console.ReadLine();
Console.WriteLine("请输入密码");
pwd = Console.ReadLine();
if (name == "admin" && pwd == "88888")
{
Console.WriteLine("登陆成功");
break;
}
else
{
Console.WriteLine("输入错误,重新输入");
}
}
#endregion
#region 练习3
//1~100之间的整数相加,得到累加值大于20的当前数
//(比如: 1 + 2 + 3 + 4 + 5 + 6 = 21)结果6
//sum>=20
int sum = 0;
for (int i = 1; i <= 100; i++)
{
sum += i;
if (sum >= 20)
{
Console.WriteLine("加到{0}的时候,总和大于20", i);
break;
}
}
#endregion
4、Continue(S)
立即结束本次循环,判断循环条件,如果成立,则进入下一次循环,否则退出循环.
举例:运动员跑步喝水的例子
比如:我编写代码的时候,上个厕所,回来继续写代码
练习:
#region 示例
while (true)
{
Console.WriteLine("Hello World");
//break;
continue; //死循环,所以也和if判断连用
}
#endregion
#region 练习1
//练习1:用 while continue实现计算1到100(含)
//之间的除了能被7整除之外所有整数的和。
int sum = 0;
int i = 1;
while (i <= 100)
{
if (i % 7 == 0)
{
i++;
continue;
}
sum += i;
i++;
}
Console.WriteLine(sum);
#endregion
#region 练习2
//找出100内所有的素数
//素数/质数:只能被1和这个数字本身整除的数字
//1不是质数
//判断方法:用这个数字和前面的数字分别取余如果都除不尽则是质数
for (int i = 2; i <= 100; i++) //只循环
{
bool b = true; //注意bool放在哪里
for (int j = 2; j < i; j++) //前一个数计算
{
if (i % j == 0)
{
b = false;
//能整除的不是
break;
}
}
if (b)
{
Console.WriteLine(i); //加条件输出bool
}
}
#endregion
5、三元表达式
语法:
表达式1?表达式2:表达式3;
表达式1一般为一个关系表达式。
如果表达式1的值为true,那么表达式2的值就是整个三元表达式的值。
如果表达式1的值为false,那么表达式3的值就是整个三元表达式的值。
注意:表达式2的结果类型必须跟表达式3的结果类型一致,并且也要跟整个三元表达式的结果类型一致。
举例: bool result = 5 > 3 ? true : false;
会用就可以了
#region 初识三元表达式
//使用if else可以完成的工作也可以使用三元表达式
//计算两个数的大小,求最大值
Console.WriteLine("请输入第一个数字");
int n1 = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入第二个数字");
int n2 = Convert.ToInt32(Console.ReadLine());
#region 三元表达式
//表达式1?表达式2:表达式3;
//表达式1一般为一个关系表达式。
//表达式1的值为true:返回2
//表达式1的值为false:返回3
int max = n1 > n2 ? n1 : n2;
Console.WriteLine(max);
#endregion
#region if else
if (n1 > n2)
{
Console.WriteLine(n1);
}
else
{
Console.WriteLine(n2);
}
#endregion
#endregion
#region 练习2
//输入如果不是王晶,就输出流氓
Console.WriteLine("请输入姓名");
string name = Console.ReadLine();
#region if else
if (name == "王晶")
{
Console.WriteLine("天才");
}
else
{
Console.WriteLine("流氓");
}
#endregion
#region 三元
string result = name == "王晶" ? "天才" : "流氓";
Console.WriteLine(result);
#endregion
#endregion
Console.ReadKey();
6、随机数产生
Random r=new Random();
Int number=r.Next(1,11);产生1-10的数
输入名字随机显示这个人上辈是什么样的人
#region 随机数示例
产生随机数
1、创建能够产生随机数的对象
Random r = new Random();
while (true)
{
//2、让产生随机数的这个对象调用方法来产生随机数
int rNumber = r.Next(1, 10);//左闭右开
Console.WriteLine(rNumber);
Console.ReadKey();
}
#endregion
#region 练习
//输入名字随机显示这个人上辈子是什么的人
//思路
//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();
}
#endregion
7、总结
-
顺序结构:语句顺序执行
-
分支结构:语句在满足条件下执行
-
if, if-else, if-else if, switch-case 表1?表2 :表3(三元)
-
循环结构:语句在满足条件下循环执行多次
-
while, do-while, for foreach
-
跳转语句
-
break(跳出当前循环), continue(大家观察),