一、顺序语句
二、条件,分支语句
1、if语句
关键是能够熟练运用 if的嵌套。要考虑好所有的情况。
如果说 条件是两种+情况相互对应的,那么就可以只用 if 与else 。但必须要想好 每个else 跟哪个if是一对。
如果情况是相互独立的三种情况以上,那么可以选择运用if ... else if ...else。
1.if语句
if(条件)
{ 满足条件的时候执行;}2. if(条件)
{ 满足条件执行;}else{ 不满足条件时执行;}
3 if(条件1)
{ 满足条件1的时候执行;}else if(条件2){ 不满足条件1的情况下满足条件2;}4.
if(条件1)
{ if(条件2) { 既满足条件1又满足条件2的时候执行; }}eg 1.判断年份是否为闰年?格式是否正确?
static void Main5(string[] args) { Console.WriteLine("请输入年份:"); int nian = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("请输入月份:"); int yue = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("请输入日期:"); int ri = Convert.ToInt32(Console.ReadLine()); int r = 0; //r=0代表平年 r=1代表闰年 if (nian > 0 && nian < 9999) { //判断闰年还是平年 if (nian % 100 == 0) { if (nian % 400 == 0) { r = 1; Console.WriteLine("该年是闰年"); } else { Console.WriteLine("该年是平年"); } } else { if (nian % 4 == 0) { r = 1; Console.WriteLine("该年是闰年"); } else { Console.WriteLine("该年是平年"); } } //判断月份 if (yue >= 1 && yue <= 12) { //判断日期是否合法 if(yue==1 || yue==3 || yue == 5 || yue==7 || yue==8 || yue==10 ||yue == 12) { if(ri<=31 && ri>0) { Console.WriteLine("输入的日期正确!"); } else { Console.WriteLine("输入的日期不正确!"); } } else if(yue == 4 || yue == 6 || yue==9 || yue==11) { if(ri<=30 && ri>0) { Console.WriteLine("输入的日期正确!"); } else { Console.WriteLine("输入的日期不正确!"); } } else { if(r == 1) { if(ri>0 && ri<=29) { Console.WriteLine("输入的日期正确!"); } else { Console.WriteLine("输入的日期不正确!"); } } else { if(ri>0 && ri<=28) { Console.WriteLine("输入的日期正确!"); } else { Console.WriteLine("输入的日期不正确!"); } } } } else { Console.WriteLine("输入的月份不正确,日期有假!"); } } else { Console.WriteLine("输入的年份不正确!日期有假"); } }
2、switch 语句
如果说可选的条件比较多时,选择switch语句,要比if语句效率要高。特别注意的是 case 后跟的break。
eg:
1 //eg.6 swtich语句 作用域 2 static void Maine(string[] args) 3 { 4 //Console.WriteLine("你本次选择出场的英雄是:"); 5 Random r = new Random(); 6 int n = r.Next(10); 7 8 string a; 9 10 switch (n)11 {12 case 1: 13 a = "赵信"; break;14 case 2:15 a = "寒冰射手";break;16 case 3:17 a = "无极剑圣";break;18 case 4:19 a = "机器人"; break;20 default:21 a = "齐天大圣";break;22 }23 Console.WriteLine("本次选择的英雄是:"+a);24 }
三、循环语句
for循环
四要素:
初始条件,循环条件,状态改变,循环体。 执行过程:
初始条件--循环条件--循环体--状态改变--循环条件....
注意:for的小括号里面分号隔开,for的小括号后不要加分号。
利用 加断点的方式,可以更好的明白for的工作原理。
1.for循环空操作完成的实例, 输出100以内的数字
1 static void Main(string[] args) 2 { 3 int i = 1; 4 for (; ; ) 5 { 6 if (i > 100) 7 { 8 break; 9 }10 Console.Write(i + "\t");11 i++;12 }13 Console.ReadKey();14 }
当然你也可以用 while,if() break;的嵌套完成上述操作。
2.正序和逆序的推断问题。 (折纸问题)
1 //eg.5 折纸问题 2 static void Maine(string[] args) 3 { 4 //Console.WriteLine("请输入次数"); 5 //int n = Convert.ToInt32(Console.ReadLine()); 6 7 8 //int i = 0; 9 //for (double sum = 0.0001; sum <= 8848.0; sum = sum * 2)10 //{11 // i++;12 13 //}14 //Console.WriteLine(i);15 16 double sum = 0.0001;17 int z = 0;18 19 for (int i = 0; ; i++)20 {21 z++;22 sum = sum * 2;23 24 if (sum >= 8848.0)25 {26 Console.WriteLine(z);27 break;28 }29 }30 }
3.应用:a.穷举法: 用循环把各种可能的情况都给走一遍,然后用if条件把满足要求的结果给筛选出来。
1 //eg.6 百马百石 大马驮2石,中马驮1石 小马驮0.5石 2 static void Main6a(string[] args) 3 { 4 for (int i = 0; i <= 50; i++) 5 { 6 for (int j = 0; j <= 100; j++) 7 { 8 for (int k = 0; k <= 200; k++) 9 { 10 if ( (i * 2 + j * 1 + k * 0.5 == 100) && (i + j + k == 100) ) 11 { 12 Thread.Sleep(50); 13 Console.WriteLine("大马需要" + i + "头,中马需要" + j + "头,小马需要" + k + "头。"); 14 } 15 } 16 } 17 } 18 } 19 //eg.7 20 static void Maing(string[] args) 21 { 22 for (int i = 1; i < 10; i++) 23 { 24 for (int j = 1; j < 5; j++) 25 { 26 for (int k = 1; k < 25; k++) 27 { 28 if (i * 5 + j * 10 + k * 25 == 50) 29 { 30 Console.WriteLine("50元用来买" + i.ToString() + "个牙刷," + j.ToString() + "个牙膏," + k.ToString() + "块肥皂,正好能用完。"); 31 } 32 } 33 } 34 } 35 36 } 37 //eg.8 有1块,2块,5块的钱若干,凑出20块钱,有几种凑法 38 static void Mainh(string[] args) 39 { 40 int m = 0; 41 for (int i = 0; i <= 20; i++) 42 { 43 for (int j = 0; j <= 10; j++) 44 { 45 for (int k = 0; k < 4; k++) 46 { 47 if (i * 1 + 2 * j + 5 * k == 20) 48 { 49 m++; 50 Console.WriteLine("一共有" + m + "中方法。"); 51 Console.WriteLine("需要1元的" + i + "张,2元的" + j + "张,5元的" + k + "张。"); 52 } 53 } 54 } 55 } 56 } 57 //eg.9 1 () 2 () 3 ()4 = 4;问括号里我要填 (- 或 +) 58 static void Maini(string[] args) 59 { 60 for (int i = 1; i <= 1; i += 2) 61 { 62 for (int j = -1; j <= 1; j += 2) 63 { 64 for (int k = -1; k <= 1; k += 2) 65 { 66 for (int l = -1; l <= 1; l += 2) 67 { 68 if (1 * i + 2 * j + 3 * k + l * 4 == 4) 69 { 70 Console.WriteLine("i=" + i + ",j=" + j + ",k=" + k + ",l=" + l + "。"); 71 } 72 } 73 74 75 } 76 } 77 } 78 } 79 //eg.10 123()45()67()8()9=100;要求在()里面填写+或-使等式成立。 80 static void Maini2(string[] args) 81 { 82 for (int a = -1; a <= 2; a += 2) 83 { 84 for (int b = -1; b <= 2; b += 2) 85 { 86 for (int c = -1; c <= 2; c += 2) 87 { 88 for (int d = -1; d <= 2; d += 2) 89 { 90 if (123 + a * 45 + b * 67 + c * 8 + d * 9 == 100) 91 Console.WriteLine("a=" + a + ",b=" + b + ",c=" + c + ",d=" + d); 92 } 93 } 94 } 95 } 96 Console.ReadKey(); 97 } 98 //eg.11 某侦查队接到一项紧急任务,要求在A.B.C,D,E,F六名队员中尽可能多的挑选若干人。A和B两人必须去一人。A和D不能同时去。A,E,F三人必须两人去。B和C都 //去或都不去。C和D两人中去一人。若D不去,E也不去。问应叫哪几个人去?(灵活运用1与0)
99 static void Mainj(string[] args)100 {101 for (int a = 0; a <= 1; a++)102 {103 for (int b = 0; b <= 1; b++)104 {105 for (int c = 0; c <= 1; c++)106 {107 for (int d = 0; d <= 1; d++)108 {109 for (int e = 0; e <= 1; e++)110 {111 for (int f = 0; f <= 1; f++)112 {113 if ((a + b >= 1) && (a + d <= 1) && (a + e + f == 2) && (b + c != 1) && (c + d == 1) && (d - e >= 0))114 {115 Console.WriteLine("A=" + a + "B=" + b + "C=" + c + "D=" + d + "E=" + e + "F=" + f);116 }117 118 }119 }120 }121 }122 }123 }124 }125 //老师版126 static void Mainj1(string[] args)127 {128 int a, b, c, d, e, f;129 for (a = 0; a < 2; a++)130 {131 for (b = 0; b < 2; b++)132 {133 for (c = 0; c < 2; c++)134 {135 for (d = 0; d < 2; d++)136 {137 for (e = 0; e < 2; e++)138 {139 for (f = 0; f < 2; f++)140 {141 if ((a + b >= 1) && (a + d <= 1) && (a + e + f == 2) && (b + c != 1) && (c + d == 1) && ((d + e == 0) || d == 1))142 {143 Console.WriteLine("A=" + a + "B=" + b + "C=" + c + "D=" + d + "E=" + e + "F=" + f);144 }145 }146 }147 }148 }149 }150 }151 Console.ReadKey();152 }
b.迭代法:有一定规律。 每次循环都是从上次运算结果中获得数据,本次运算的结果都是要为下次运算做准备。
eg1 兔生兔问题
有一对幼兔,幼兔一个月后成长为小兔,小兔一个月后成长为成兔并生下一对幼兔,问几年后有多少对兔子,其中幼兔,小兔,成兔分别是多少?
1 //eg.2 兔生兔问题 2 3 //方法一 4 static void Maink3(string[] args) 5 { 6 int syt = 1, byt = 0; 7 int sxt = 0, bxt = 0; 8 int sct = 0, bct = 0; 9 10 Console.WriteLine("请输入月数:");11 int month = Convert.ToInt32(Console.ReadLine());12 int sum;13 14 for (int i = 1; i <= month; i++)15 {16 //赋值顺序不能变,必须按照兔子生长规律来,先有的bct才会有byt17 bct = sxt + sct;18 bxt = syt;19 byt = sxt + sct;20 21 //bct = sxt + sct; 这样写,必须注意他的顺序22 //bxt = syt;23 //byt = bct;24 25 26 27 //byt = bct;//错误的28 //bxt = syt;29 //bct = sxt + sct; 30 31 syt = byt;32 sxt = bxt;33 sct = bct;34 35 //sum = byt + bxt + bct;36 }37 38 sum = byt + bxt + bct;39 40 Console.WriteLine("过了{0}个月后,幼兔个数为{1}对,小兔个数为{2}对,成兔个数为{3}对,总共有{4}对。", month.ToString(), byt, bxt, bct,sum);41 42 }43 //方法二44 static void Maink4(string[] args)45 {46 int n = Convert.ToInt32(Console.ReadLine());47 int tu = 0;//要求那个月的总数48 int tu1=1, tu2=1;//倒数第一个为 tu1,倒数第二个为 tu249 50 for (int i = 3; i < n;i++ )51 {52 tu = tu1 + tu2;53 tu2 = tu1;54 tu1 = tu;55 }56 Console.WriteLine(tu);57 58 }59 //方法三60 static void Maink5(string[] args)61 {62 Console.Write("请输入月数:");63 int m = int.Parse(Console.ReadLine());64 int ct = 0;//成兔的对数65 int xt = 0;//小兔的对数66 int yt = 1;//67 int zt = 1;//68 69 for (int i = 1; i <= m; i++)70 {71 if (i == 1)72 {73 ct = 0;74 xt = 0;75 yt = 1;76 }77 else78 {79 ct = xt + ct;80 xt = yt;81 yt = ct;82 }83 zt = yt + xt + ct;84 85 Console.WriteLine(i.ToString() + "个月后成兔的对数是:" + ct.ToString());86 Console.WriteLine(i.ToString() + "个月后小兔的对数是:" + xt.ToString());87 Console.WriteLine(i.ToString() + "个月后幼兔的对数是:" + yt.ToString());88 Console.WriteLine(i.ToString() + "个月后兔子的总对数是:" + zt.ToString());89 }90 Console.ReadLine();91 }
eg 2 100以内的所有数的和。
eg3. 求阶乘。eg4.求年龄。eg5.折纸。eg6.棋盘放粮食。eg7.猴子吃桃子。
1 static void Maink(string[] args) 2 { 3 int sum = 1; 4 for (int i = 0; i < 6; i++) 5 { 6 int t = (sum + 1) * 2; 7 sum = t; 8 } 9 Console.WriteLine("桃子一共有:" + sum + "个。");10 }
eg8.落球问题。一个球从10米高度落下,每次弹起2/3的高度,问第五次弹起后的高度?
eg.9
打印菱形
1 //eg.2 打印菱形(教材版) 2 static void Mainb(string[] args) 3 { 4 //菱形上半部 5 Console.WriteLine("请输入一个数:"); 6 int n = int.Parse(Console.ReadLine()); 7 for (int i = 1; i <= n; i++) 8 { 9 for (int b = 1; b <= n - i; b++)10 {11 Console.Write(" ");12 }13 for (int j = 1; j <= 2 * i - 1; j++)14 {15 Console.Write("☆");16 }17 Console.Write("\n");18 }19 20 //菱形下半部21 for (int p = 1; p < n; p++)22 {23 for (int o = 1; o <= p; o++)24 {25 Console.Write(" ");26 }27 for (int k = 1; k <= 2 * (n - p) - 1; k++)28 {29 Console.Write("★");30 }31 Console.Write("\n");32 }33 Console.ReadKey();34 }35 36 //eg.4 打印菱形(自己做)37 static void Maind(string[] args)38 {39 Console.WriteLine("请输入要打印菱形的中间层个数:");40 int a = Convert.ToInt32(Console.ReadLine());41 42 //组成菱形必须是奇数行43 if (a % 2 != 0)44 {45 int c = (a + 1) / 2;46 //上半部47 for (int i = 1; i <= c; i++)48 {49 for (int j = i; j <= c - 1; j++)50 {51 Console.Write(" ");52 }53 for (int k = 1; k <= 2 * i - 1; k++)54 {55 Console.Write("★");56 }57 Console.WriteLine();58 }59 60 //下半部61 for (int m = c + 1; m <= a; m++)62 {63 for (int n = 1; n <= m - c; n++)64 {65 Console.Write(" ");66 }67 for (int o = 2 * (a - m) + 1; o >= 1; o--)68 {69 Console.Write("☆");70 }71 Console.WriteLine();72 }73 }74 else75 {76 Console.WriteLine("你所输入的层数不可能组成菱形。");77 }78 79 }
四、while 循环。一般用在一些死循环当中。
五、try catch。保护程序,避免程序出错时无法运行。
格式:
try//快捷方式:双击 tab键 { } catch (Exception) { throw; } finally { }
六、跳转语句
1.break。跳出循环体。
eg
如果循环有多层嵌套,停止的是最贴近break的那个循环,即循环2 for()循环1 { for()循环2 { if() { break } } }
2.continue。跳出本次循环,进行下一次循环。