C#入门篇5-3:流程控制语句 for

#region for语句
    public class C3
    {
        #region 表达式求值

        //计算奇数之和,偶数之积
        public static void Sun7()
        {
            //两个for循环
            int sum1 = 0;
            int dbResult1 = 1;
            for (int i = 1; i <= 10; i += 2)
            {
                sum1 += i;
            }
            for (int j = 2; j <= 10; j += 2)
            {
                dbResult1 *= j;
            }
            Console.WriteLine("双for循环,奇数之和" + sum1 + " 偶数之积" + dbResult1);


            //单for循环
            int sum2 = 0;
            int dbResult2 = 1;
            for (int x = 1; x <= 10; x++)
            {
                if (x % 2 == 1)
                {
                    sum2 += x;
                }
                else
                {
                    dbResult2 *= x;
                }
            }
            Console.WriteLine("单for循环,奇数之和" + sum2 + " 偶数之积" + dbResult2);

            //While循环
            //while 循环做1--100之内的偶数之积和奇数之和

            int m = 1; //定义循环变量
            double dbSult = 1;
            int sum = 0;

            while (m <= 10)
            {
                if (m % 2 == 0)
                {
                    dbSult *= m;
                }
                else
                {
                    sum = sum + m;
                }
                m++;
            }
            Console.WriteLine("while循环,奇数之和:{0}  偶数之积:{1} ", sum, dbSult);
        }

        // 1!+2!+3!+4!+…+10!
        public static void Sun8()
        {
            double dbnum = 1;
            double dbsum = 0;
            for (int i = 1; i <= 10; i++)
            {
                dbnum *= i;
                dbsum += dbnum;//一个循环两件事情 了;累积到dbsum上
            }
            Console.WriteLine("结果为:" + dbsum);
        }

        // S=1-1/2+1/3-1/4+1/5+……+1/99的值。
        public static void Sun9()
        {
            //拆分开计算
            double even = 0;
            double odd = 0;
            for (int i = 1; i <= 99; i++)
            {
                if (i % 2 == 0)
                {
                    even = even - 1.0 / i;
                }
            }
            for (int j = 0; j <= 99; j++)
            {
                if (j % 2 == 1)
                {
                    odd = odd + 1.0 / j;
                }
            }
            Console.WriteLine("双For循环的结果为:" + (even + odd));

            double dbsum = 0;
            for (int k = 1; k <= 99; k++)
            {
                //偶数就有减法
                if (k % 2 == 0)
                {
                    dbsum = dbsum - 1.0 / k;
                }
                else
                {
                    dbsum = dbsum + 1.0 / k;
                }
            }
            Console.WriteLine("单For循环的结果为:" + dbsum);
        }
       
        #endregion

        //打印乘法表1
        public static void Fun1()
        {
            //打印表头
            Console.WriteLine("九九乘法表");

            //打印九九表
            for (int i = 1; i <= 15; i++)
            {
                //计算并格式化输出九九表的内容
                for (int j = 1; j <= i; j++)
                {
                    Console.Write("{0}x{1}={2}\t", i, j, i * j);
                }
                //换行
                Console.WriteLine();
            }
        }

        //打印乘法表2
        public static void Fun1_1()
        {
            for (int i = 1; i <= 9; i++)
            {
                //i控制行
                for (int j = 1; j <= i; j++)
                {
                    //j控制列 i和j的关系是在每行中j<=i
                    Console.Write("{0}*{1}={2} ", j, i, i * j);

                    //若拼接字符串使用
                    //str += j + "x" + i + "=" + i * j + "  ";
                }
                Console.WriteLine();
            }
        }

        //输出直角三角形。
        public static void Fun2()
        {
            for (int i = 1; i <= 9; i++)
            {
                for (int j = 1; j <= i; j++)
                {
                    Console.Write("*");
                }
                Console.WriteLine();
            }
        }

        //输出菱形。
        public static void Fun3()
        {
            for (int i = 1; i <= 4; i++)
            {
                for (int j = 1; j <= 4 - i; j++)
                {
                    Console.Write(" ");
                }
                for (int k = 1; k <= 2 * i - 1; k++)
                {
                    Console.Write("*");
                }
                Console.WriteLine();
            }

            for (int a = 1; a <= 4; a++)
            {
                for (int g = 1; g <= a; g++)
                {
                    Console.Write(" ");
                }
                for (int f = 1; f <= (6 - 2 * a) + 1; f++)
                {
                    Console.Write("*");
                }
                Console.WriteLine();
            }
        }

        //输出等腰三角形
        public static void Fun4()
        {
            for (int i = 1; i <= 4; i++)
            {
                for (int j = 1; j <= 4 - i; j++)
                {
                    Console.Write(" ");
                }
                for (int k = 1; k <= 2 * i - 1; k++)
                {
                    Console.Write("*");
                }
                Console.WriteLine();
            }
            Console.ReadLine();
        }


        #region 本例演示验证回文数

        //方法一:首尾相比较的方法
        public static void Fun5()
        {
            Console.WriteLine("请输入数字:");
            string str = Console.ReadLine().Trim();

            bool bl = true;//默认值设为true

            //装换成字符数组
            char[] ch = str.ToCharArray();

            //循环控制第一个字符和最后一个字符的比较
            for (int i = 0; i < ch.Length; i++)
            {
                if (ch[i] != ch[ch.Length - i - 1])
                {
                    bl = false;
                    break;
                }
            }
            if (bl)
            {
                Console.WriteLine("Yes");
            }
            else
            {
                Console.WriteLine("No");
            }
        }

        //方法二:首尾相比较截取的方法
        public static void Fun6()
        {
            Console.WriteLine("请输入数字:");
            string str = Console.ReadLine().Trim();
            bool bl = true;
            for (int i = 0; i < str.Length; i++)
            {
                if (str.Substring(i, 1) != str.Substring(str.Length - i - 1, 1))
                {
                    bl = false;
                    break;
                }
            }
            if (bl)
            {
                Console.WriteLine("Yes");
            }
            else
            {
                Console.WriteLine("No");
            }
            //显然第一种方法的效率要高于第二种
        }

        //方法三:反转字符数组的方法
        public static void Fun7()
        {
            Console.WriteLine("请输入数字:");
            string str = Console.ReadLine().Trim();

            //转换成字符数组
            char[] ch = str.ToCharArray();

            //反转字符数组
            Array.Reverse(ch);

            //转成新的字符串
            string stra = new string(ch);

            //比较两个字符串是否相同
            if (str == stra)
            {
                Console.WriteLine("Yes");
            }
            else
            {
                Console.WriteLine("No");
            }
        }

        //方法四:本质上与第一种方法是一样的
        public static void Fun8()
        {
            Console.WriteLine("请输入数字:");
            string str = Console.ReadLine().Trim();

            ArrayList alist = new ArrayList();

            bool bl = true;
            foreach (char ch in str)
            {
                alist.Add(ch);
            }

            for (int i = 0; i < alist.Count; i++)
            {
                if (alist[i].Equals(alist[alist.Count - i - 1]))
                {
                    bl = true;
                }
                else
                {
                    bl = false;
                    break;
                }
            }

            //或者使用这种形式
            //for (int i = 0; i < alist.Count; i++)
            //{
            //    if (alist[i].Equals(alist[alist.Count - i - 1]) == false)
            //    {
            //        bl = false;
            //        break;
            //    }
            //}
            if (bl)
            {
                Console.WriteLine("Yes");
            }
            else
            {
                Console.WriteLine("No");
            }
        }

        //方法五:
        public static void Fun9()
        {
            //判断是否是回文(回文如:“上海自来水来自海上)

            Console.WriteLine("请输入数字:");
            string str = Console.ReadLine().Trim();

            char[] chr = str.ToCharArray();

            bool flag = true;

            for (int i = 0; i < chr.Length; i++)
            {
                if (chr[i] != chr[chr.Length - 1 - i])
                {
                    flag = false;
                    break;
                }
            }

            if (flag)
            {
                Console.WriteLine("回文");
            }
            else
            {
                Console.WriteLine("不是回文");
            }

        }

        #endregion

        #region 1234组成无重复的数组

        public static void Fun10()
        {
            //由 1,2,3,4能组成多少个个、十、百、千位互不相同的四位数
            for (int i = 1; i <= 4; i++)
            {
                for (int j = 1; j <= 4; j++)
                {
                    for (int k = 1; k <= 4; k++)
                    {
                        if (i != j && i != k && j != k)
                        {
                            Console.Write(i.ToString() + j.ToString() + k.ToString() + " ");
                        }
                    }
                    Console.WriteLine();
                }
            }
        }

        //变换一种形式
        public static int ctr = 0;
        public static void Fun11()
        {
            //有1 2 3 4可以组成多个十百 无重复的数字
            for (int i = 1; i <= 4; i++)
            {
                for (int j = 1; j <= 4; j++)
                {
                    for (int k = 1; k <= 4; k++)
                    {
                        if (i != j && i != k && j != k)
                        {
                            ctr++;
                            Console.WriteLine(String.Concat(i.ToString(), j.ToString(), k.ToString()));
                        }
                    }
                }
            }
            Console.WriteLine(ctr);
        }

        //形式2
        public static void Fun12()
        {
            //由 1,2,3,4能组成多少个个、十、百、千位互不相同的四位数
            for (int i = 1; i <= 4; i++)
            {
                for (int j = 1; j <= 4; j++)
                {
                    for (int k = 1; k <= 4; k++)
                    {
                        for (int l = 1; l <= 4; l++)
                        {
                            if (i != j && i != k && i != l && j != k && j != l && k != l)
                            {
                                Console.Write(i.ToString() + j.ToString() + k.ToString() + l.ToString() + " ");
                            }
                        }
                    }
                    Console.WriteLine();
                }
            }

        }

        #endregion

        //寻找素数101-200内的素数
        public static void Sun1()
        {
            //显示101-200内的素数使用整数作为判断的标准
            int inta = 0;
            int count = 0;
            for (int i = 101; i <= 200; i++)
            {
                //将1和它本身之外的数全都除一遍
                for (int j = 2; j < i; j++)
                {
                    //若有一个除尽了,证明该数不是素数
                    if (i % j == 0)
                    {
                        inta = 1;
                        break;
                    }
                }
                //如果inta等于0证明该数是素数
                if (inta == 0)
                {
                    Console.Write(i + " ");
                    count++;
                }
                if (count % 10 == 0)
                {
                    Console.WriteLine();
                }
                inta = 0;
            }

        }

        //水仙花数
        public static void Sun2()
        {
            //方式一
            for (int i = 1; i <= 9; i++)
            {
                for (int j = 0; j <= 9; j++)
                {
                    for (int k = 0; k <= 9; k++)
                    {
                        if (Math.Pow(i, 3) + Math.Pow(j, 3) + Math.Pow(k, 3) == i * 100 + j * 10 + k)
                        {
                            Console.Write("{0} ", i * 100 + j * 10 + k);
                        }
                    }
                }
            }

            //方式二
            for (int i = 100; i <= 999; i++)
            {
                int a = i / 100;//对100求整,获取百位数字
                int b = i / 10 % 10;//对10求整获取98,然后对10求余
                int c = i % 10;//直接对10求余获取个位数字

                if (i != a * a * a + b * b * b + c * c * c)
                {
                    //结束本次循环,开启下一次循环
                    //结束本次循环,代表continue后面的语句不执行
                    continue;
                }
                Console.Write("{0} ", i);

                //if (i == a * a * a + b * b * b + c * c * c)
                //{
                //    //结束本次循环,开启下一次循环
                //    //结束本次循环,代表continue后面的语句不执行
                //    Console.Write("{0} ", i);
                //}
            }
        }

        //数列问题
        public static void Sun3()
        {

            #region 分析
            //题目:有数列 1,1,2,3,5,8,13,21,…… 请算出第30位的数是几?

            //有数列 1,1,2,3,5,8,13,21,…… 请算出第30位的数是几?
            //分析问题:找循环变量和循环中止条件即第几次得出第30位数
            //第1次运算得到的是第3位数
            //第2次运算得到的是第4位数
            //第3次运算得到的是第5位数
            //第4次运算得到的是第6位数
            //第5次运算得到的是第7位数,根据规律得知循环进行到第28次时便得到了第 30位数

            //关键:for 循环是用来控制运算次数的  
            //1+1=2;
            //1+2=3;
            //2+3=5;
            //3+5=8; 
            #endregion

            int first = 1, second = 1;
            for (int i = 0; i <= 27; i++)
            {
                //每次运算的first的值都来自于上次运算second的值,
                //所以用一个中间变量记录上次second的值
                //借助中间变量来记录
                //每次运算的第一个数都是上一次运算的第二个数,而每次运算的第二
                //个数都是上次运算的和

                int temp = second;
                second = first + second;
                first = temp;
            }
            Console.WriteLine("单位移动的结果为:" + second);

            first = 1;
            second = 1;
            for (int j = 0; j <= 13; j++)
            {
                //两位两位的移
                first = first + second;
                second = first + second;
            }
            Console.WriteLine("两位移动的结果为:" + second);
        }

        //数列求和
        public static void Sun3_1()
        {
            //一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少?
            int[] intmr = new int[30];
            intmr[0] = 1;
            intmr[1] = 1;
            for (int i = 2; i < intmr.Length; i++)
            {
                intmr[i] = intmr[i - 1] + intmr[i - 2];
            }

            for (int j = 0; j < intmr.Length; j++)
            {
                Console.WriteLine(intmr[j]);
            }
        }

        //本例演示百钱百鸡
        public static void Run1()
        {
            //公鸡1只5元,母鸡1只3元,小鸡3只1元,
            //现有100元钱,要求买100只鸡,请输出所有的可能组合。

            //i控制公鸡的数量,最多买20只,j控制母鸡的数量,最多买33只

            int k;
            for (int i = 0; i <= 20; i++)//从0开始意味着公鸡可以一只也不买
            {
                for (int j = 0; j <= 33; j++)
                {
                    //获得小鸡的数量
                    k = (100 - i * 5 - j * 3) * 3;

                    //只数要满足100
                    if (i + j + k == 100)
                    {
                        Console.WriteLine("公鸡数量:{0},母鸡数量:{1},小鸡数量:{2}", i, j, k);
                    }
                }
            }
        }

        //输出100--200之间3或5的倍数
        public static void Sun4()
        {
            int cnt = 0;      //计数器
            string str = "";
            for (int i = 100; i <= 200; i++)
            {
                if (i % 3 == 0)
                {
                    cnt++;
                    str += i + " ";
                    if (cnt % 5 == 0)
                    {
                        str += "\r\n";
                    }
                }
                else if (i % 5 == 0)
                {
                    cnt++;
                    str += i + " ";
                    if (cnt % 5 == 0)
                    {
                        str += "\r\n";
                    }
                }
            }
            Console.WriteLine(str);
        }

        //取出球问题
        public static void Sun5()
        {
            //有一袋球(100到200之间),如果一次数四个,则剩两个;
            //一次数五个,则剩三个;
            //一次数六个,则正好数完,编程求该袋球的个数。
            for (int a = 100; a <= 200; a++)
            {
                if (a % 4 == 2 && a % 5 == 3 && a % 6 == 0)
                {
                    Console.WriteLine("总共{0}", a);
                }
            }
        }

        //判断字母是否为数字
        public static void Sun6()
        {

            //从键盘输入一任意字符串判断是否全部是字母组成,是则输出“Yes”,否则“NO”。
        lab:
            Console.WriteLine("请输入一段字符串:");
            string str = Console.ReadLine().Trim();
            bool bl = true;//默认都是真的
            for (int i = 0; i < str.Length; i++)
            {
                char ch = Convert.ToChar(str.Substring(i, 1));
                if (char.IsLetter(ch) == false)//如果有一个假直接跳出循环 
                {
                    bl = false;
                    break;
                }
            }

            if (bl)//布尔值不用表达式
            {
                Console.WriteLine("Yes");
            }
            else
            {
                Console.WriteLine("No");
            }
            goto lab;
        }

        
    }
    #endregion

 

你可能感兴趣的:(流程控制)