C# 课堂总结3-语句

一、顺序语句

二、条件,分支语句

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才会有byt
17                 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,倒数第二个为 tu2
49 
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                 else
78                 {
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             else
75             {
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。跳出本次循环,进行下一次循环。

 

posted @ 2015-07-05 21:53  其实哥很宅  阅读(375)  评论(0编辑  收藏  举报