C#学习(面向过程)Day03——while循环、do...while循环、for循环、foreach循环

1. while循环、do...while循环、for循环、foreach循环(循环结构)

using System;
using System.Runtime.InteropServices;

namespace test_1
{
    class Program
    {
        static void Main(string[] args)
        {
            //循环结构
            #region while循环
            /*
             * 【语法】
             *while(条件)
             *{
             *   循环语句;
             *   break;       跳出循环
             *   continue;    跳过本次循环
             *}
             */
            /*
            //【例题】输出5遍 Hello World
            int index = 0;
            while (index < 5)
            {
                Console.WriteLine("Hello World");
                index++;
            }
            
            //【练习】
            //1.计算100 - 10000之间有多少个数,其各位数字之和等于7,例如:241, 2 + 4 + 1 = 7
            int count1 = 0;
            int index1 = 101;
            while (index1 < 10000)
            {
                //求各位数字
                int a = index1 % 10;  //求个位数字
                int b = (index1 / 10) % 10;  //求十位数字
                int c = (index1 / 100) % 10;  //求百位数字
                int d = (index1 / 1000) % 10;  //求千位数字
                int s = a + b + c + d;
                if ( s == 7)
                {
                    count1++;
                }
                index1++;
            }
            Console.WriteLine(count1);
            //2.求1-100之间的所有偶数
            int index2 = 1;
            while (index2 < 100)
            {
                if (index2 % 2 == 0)
                {
                    Console.WriteLine(index2);
                }
                index2++;
            }
            //3.求1+2+...+100的和
            int count3 = 0;
            int index3 = 1;
            while (index3<101)
            {
                count3 += index3;
                index3++;
            }
            Console.WriteLine(count3);
            //4.用while和break实现,一旦输入数字小于0,就跳出循环
            while (true)
            {
                Console.WriteLine("请输入一个数字:");
                int index4 = int.Parse(Console.ReadLine());
                if (index4 < 0)
                    break;
            }
            //5.用while和continue实现,输出的是数字  
            while (true)
            {
                Console.WriteLine("请输入一个数字:");
                char index5 = char.Parse(Console.ReadLine());
                if(index5 < 48 || index5 > 57)
                    continue;
                Console.WriteLine("您输入的数字是:" + (index5 - 48));
            }
            */
            #endregion
            
            Console.WriteLine("--------------------------------分割线--------------------------------------");

            #region do...while循环
            
            /*
             * 语法
             * do{
             *    循环语句;
             * }
             * while(条件表达式)
             * 
             */
            
            /*
            //【例题】印数字 0 - 9
            int a1 = 0;
            do {
                Console.WriteLine(a1);
                a1++;
            } while (a1 < 10);
            
            //【练习】
            //sum = 1 + 2 + 3 + ... + N,求sum不超过10000的最大整数值和项值N
            int a2 = 1;
            int sum = 1;
            do
            {
                sum = sum + a2;
                a2++;
            } while (sum <=10000);
            Console.WriteLine(sum-a2);
            Console.WriteLine(a2-1);
            */
            #endregion
            
            Console.WriteLine("--------------------------------分割线--------------------------------------");
            
            #region for循环
            
            /*
             *语法
             *for (循环变量的初始化;循环条件;循环增量) //循环三要素
             *{
             *     循环体;
             * }
             * 
             */
            /*
            //【例题】输出数字0 - 9
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine(i);
            }
            
            //【练习】
            //阶乘
            Console.WriteLine("请输入一个整数");
            int n = int.Parse(Console.ReadLine());
            int sum1 = 1;
            for (int i = 1; i <= n; i++)
            {
                sum1 = sum1 * i;
            }
            Console.WriteLine(sum1);
            //用For循环输出1-100之间不是7的倍数且各位数字都不能为7的数字
            for (int i = 1; i < 100; i++)
            {
                if(i % 7 == 0||i % 10 == 7 || i / 10 == 7)
                    continue;
                else
                {
                    Console.WriteLine(i);
                }
            }
            //打印下图
            /*
             *1
             *12
             *123
             *...
             * 123..n
             * 
             */
            /*
            Console.WriteLine("请输入一个整数:");
            int a3 = int.Parse(Console.ReadLine());
            int sum2 = 0;
            for (int i = 1; i <= a3; i++)
            {
                sum2 = sum2 + i;
                Console.WriteLine(sum2);
                sum2 = sum2 * 10;
            }
            //打印九九乘法口诀表--循环嵌套(双层循环)
            Console.WriteLine("打印九九乘法口诀表:");
            for (int i = 1; i <= 9; i++)//外层循环表示行数
            {
                for (int j = 1; j <= i; j++)//内层循环表示列数
                {
                    Console.Write($"{j}X{i}={i*j,2}");  --------------------------------输出不换行/输出数字自定义占位数
                    Console.Write("\t");//--------------------------------------------使用转义字符,一个Tab键的长度,4个长度
                }
                Console.WriteLine();
            }
            */
            #endregion
            
            Console.WriteLine("--------------------------------分割线--------------------------------------");
            
            #region foreach循环
            /*
            //var number = "1";  var是模糊类型
            //foreach遍历
            int[] array = {1, 2, 3, 4, 5, 6};
            foreach (int item in array)
            {
                Console.WriteLine(item);
            }
            */
            #endregion
            
            //for 和 foreach对比
            //foreach 不能边遍历边修改数组元素,不能获取数组元素下标,不能修改数组元素
        }
    }
}

2.作业

using System;

namespace Day05_3
{
    class Program
    {
        static void Main(string[] args)
        {
            #region 第一题(三层循环)
            /*
            //已知abc+cba = 1333,其中a,b,c均为⼀位数,编程求出满⾜条件的a,b,c所有组合。
            for (int i = 1; i < 10; i++)
            {
                for (int j = 0; j < 10; j++)
                {
                    for (int k = 1; k < 10; k++)
                    {
                        if(i * 100 +j * 10 + k + i + j * 10 + k * 100 == 1333)
                            Console.WriteLine("a={0},b={1},c={2}",i,j,k);
                    }
                }   
            }
            */
            #endregion

            #region 第二题辗转相除法(欧几里得算法)
            /*
            //输⼊两个数,求最⼤公约数和最⼩公倍数
            //辗转相除法:又叫欧几里得算法,用来求两个正整数最大公约数.
            //拓展:扩展欧几里得算法,可用于RSA加密等领域。
            Console.WriteLine("请输入两个整数:");
            int num1 = int.Parse(Console.ReadLine());
            int num2 = int.Parse(Console.ReadLine());
            int max, min,x,y;
            if (num1 > num2)
            {
                max = num1;
                min = num2;
            }
            else
            {
                max = num2;
                min = num1;
            }
            while (min != 0)
            {
                x = max % min;
                y = min;
                max = y;
                min = x;
            }
            Console.WriteLine("最大公约数是:" + max );
            Console.WriteLine("最小公倍数是:" + num1 * num2 / max);
            */
            #endregion

            #region 第三题(百钱买百鸡) ---------------------- ---------------------结果有问题
            /*
            //编⼀个程序,解决百钱买百鸡问题。某⼈有100元钱,要买100只鸡。公鸡5元钱⼀只,⺟鸡3元钱
            //⼀只,⼩鸡⼀元钱3只。问可买到公鸡,⺟鸡,⼩鸡各为多少只。
            for (int i = 0; i < 21; i++)
            {
                for (int j = 0; j < (float)((100 - i*5)/3 ); j++)
                {
                    if(i * 5 + j * 3 + (float)((100 - i - j) /3 )== 100)
                        Console.WriteLine("公鸡:"+ i +"母鸡:" + j + "小鸡:" + (100-i-j));
                }
            }
            */
            
            #endregion

            #region 第四题(猴子吃桃)
            /*
            //猴⼦第⼀天摘下若⼲个桃⼦,每天都吃了前⼀天剩下的⼀半零⼀个,到第10天早上
            //想再吃的时候,就剩下⼀个桃⼦. 求第⼀天共摘多少个桃⼦。
            int sum = 1;
            for (int i = 1; i < 10; i++)
            {
                sum = (sum + 1) * 2;
            }
            Console.WriteLine(sum);
            */
            #endregion

            #region 第五题(求分数之和)
            /*
            //编⼀个程序,⽤while循环语句来计算1+1/2+2/3+3/4+...+99/100之和
            int i = 1;
            float num = 1;
            float sum = 1;
            while (i != 101)
            {
                sum = sum + num / (num + 1);
                num++;
                i++;
            }
            Console.WriteLine(sum);
            */
            #endregion

            #region 第六题(三次登录)
            /*
            //编⼀个程序,要求使⽤while语句,输⼊⽤户名和密码,实现⽤户登录程序的功能,⾄多允许输⼊
            //三次,超过三次不允许登录
            int num = 1;
            while (num != 4)
            {
                Console.WriteLine("请输入账号:");
                string username = Console.ReadLine();
                Console.WriteLine("请输入密码:");
                string password = Console.ReadLine();
                if (username.Equals("admin") && password.Equals("123456"))
                {
                    Console.WriteLine("登录成功");
                    break;
                }
                else
                {
                    Console.WriteLine("输入错误");
                }
                num++;
            }
            */
            #endregion

            #region 第七题   --------------------------------------------对题目有疑问
            /*
            //有关系式11+22+33+...+kk<2000,编⼀个程序,求出满⾜此关系式的k的最⼤值
            int sum = 0;
            int i = 1;
            while(sum < 2000)
            {
                i++;
                if (i < 10)
                {
                    sum = sum + i * 11;
                }
                else
                {
                    sum = sum + i * 100 + i;
                }
            }
            Console.WriteLine(i-1);
            */
            #endregion

            #region 第八题
            /*
            //编⼀个程序,定义⼀个有10个元素的数组,使⽤for循环语句,从键盘上输⼊10名同学的数学成
            //绩,分别求出最⾼分和最低分,并且求出10名同学的数学平均成绩。
            int[] score = new int[10];
            Console.WriteLine("请输入10名同学成绩:");
            int sum = 0;
            for (int i = 0; i < 10; i++)
            {
                score[i] = int.Parse(Console.ReadLine());
                sum = sum + score[i];
            }
            int max = score[0];
            int min = score[0];
            float avg =(float) (sum / 10);
            for (int i = 1; i < 10; i++)
            {
                if (score[i] > max)
                {
                    max = score[i];
                }

                if (score[i] < min)
                {
                    min = score[i];
                }
            }
            Console.WriteLine("最高成绩:" + max);
            Console.WriteLine("最低成绩:" + min);
            Console.WriteLine("平均成绩:" + avg);
            */
            #endregion

            #region 第九题(阶乘)
            /*
            //编⼀个程序,利⽤for循环语句,求出1!+2!+3!+...+10!的和
            int sum = 0;
            int x = 1;
            for (int i = 1; i < 11; i++)
            {
                x = x * i;
                sum += x;
            }
            Console.WriteLine(sum);
            */
            #endregion

            #region 第十题 -----------------------------------------------同百钱买百鸡问题
            /*
            //编⼀个程序,把⼀张1元的钞票换成5分,2分和1分的硬币,要求每种⾄少⼀枚,并且所换硬币数不
            //超过30枚。请问,有哪⼏种换法?
            int count = 0;
            for (int i = 1; i < 18; i++)
            {
                for (int j = 1; j < (100 - 5 * i) / 2 - 1; j++)
                {
                    int k = (100 - 5 * i - 2 * j) / 1;
                    if (i+j+k<=30)
                    {
                        count++;
                    }
                }
            }
            Console.WriteLine(count);
            */
            #endregion

            #region 第十一题  ----------------------------------------------同百钱买百鸡问题
            /*
            //编⼀个程序,把⼀张⾯值100元的钞票换成5元,1元和5⻆⾯值的钞票,要求100元换以上的零钱
            //100张,且要求每种不少于⼀张。请问,有哪⼏种换法?
            int count = 0;
            for (int i = 1; i < 19; i++)
            {
                for (int j = 0; j < 100 - i*5 - 1 ; j++)
                {
                    if (i * 5 + j * 3 + (100 - i - j) / 2 == 100)
                        count++;
                }
            }
            Console.WriteLine(count);
            */
            #endregion

            #region 第十二题
            /*
            //编⼀个程序,定义⼀个有10个元素的⼀维数组a,在键盘上输⼊时没有⼤⼩次序,但是存⼊数组时要按
            //由⼩到⼤的顺序存放。例如,输⼊第1个数1时,存⼊a[0];假如第2个数是5,则数存⼊a[1];假如第
            //3个数是4,那么把前⾯输⼊的5向后⾯移动到a[2],把4插⼊到a[1]的位置上,这样使得每输⼊⼀个数,
            //保持从⼩到⼤的顺序排列
            int[] array = new int[10];
            array[0] = int.Parse(Console.ReadLine());
            for (int i = 1; i < 10; i++)
            {
                int x = int.Parse(Console.ReadLine());
                if (x <= array[0])
                {
                    for (int j = i; j > 0; j--)
                    {
                        array[j] = array[j - 1];
                    }
                    array[0] = x;
                }
                else if (x > array[i-1])
                {
                    array[i] = x;
                }
                else
                {
                    for (int j = 0; j < i; j++)
                    {
                        if (x < array[j])
                        {
                            for (int k = i; k > j ; k--)
                            {
                                array[k] = array[k - 1];
                            }
                            array[j] = x;
                            break;
                        }
                    }
                }
            }

            Console.WriteLine("结果为:");
            for (int l = 0; l< 10; l++)
            {
                Console.Write(array[l] + " ");
            }
            */
            #endregion

            #region 第十三题(打印菱形)
            /*
            int n = int.Parse(Console.ReadLine());
            //打印空心菱形
            for (int i = 1; i <= n; i++)
            {
                for (int j = 2 * n - 1; j >= 1; j--)
                {
                    if (j == n - i + 1)
                    {
                        Console.Write("*");
                    }
                    else if (j == n + i - 1)
                    {
                        Console.Write("*");
                    }
                    else
                    {
                        Console.Write(" ");
                    }
                }
                Console.WriteLine();
            }
            for (int i = 1; i <= n-1; i++)
            {
                for (int j = 2 * n - 1; j >= 1; j--)
                {
                    if (j == i + 1)
                    {
                        Console.Write("*");
                    }
                    else if (j == 2 * n - 1 - i )
                    {
                        Console.Write("*");
                    }
                    else
                    {
                        Console.Write(" ");
                    }
                }
                Console.WriteLine();
            }
            //打印实心菱形
            for (int i = 1; i <= n; i++)
            {
                for (int j = n-i; j >= 1; j--)
                {
                    Console.Write(" ");
                }
                for (int j = 1; j <= i ; j++)
                {
                    Console.Write("* ");
                }
                Console.WriteLine();
            }
            for (int i = 1; i <= n-1; i++)
            {
                for (int j = 1; j <= i ; j++)
                {
                    Console.Write(" ");
                }
                for (int j = 1; j <= n - i; j++)
                {
                    Console.Write("* ");
                }

                Console.WriteLine();
            }
            */
            #endregion
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值