• 练习


    八、练习

    1、用户输入姓名,然后打印此人的年龄,从1岁-18岁,每一岁占一行,打印内容为“我今年xxx岁了!”;
    ①当6岁时增加打印“我上小学了!”;
    ②当11岁时增加打印“我上初中了!”;
    ③当15岁时增加打印“我上高中了!”;
    ④当18岁时增加打印“我成年了!考上了北大!”。

    主要代码:

    ①法一:

    Console.Write("请输入姓名:");

    string n = Console.ReadLine();

    for (int a = 1; a <= 18; a++)

    {

        if (a == 6)

           Console.WriteLine("我今年{0}岁了,我上小学了。", a);

        else if (a == 11)

           Console.WriteLine("我今年{0}岁了,我上初中了。", a);

        else if (a == 15)

           Console.WriteLine("我今年{0}岁了,我上高中了。", a);

        else if (a == 18)

           Console.WriteLine("我今年{0}岁了。我成年了!我考上北大了!", a);

        else

           Console.WriteLine("我今年{0}岁了。", a);

    }

    Console.ReadLine();

    ②法二:

    Console.Write("请输入姓名:");

    string n = Console.ReadLine();

    for (int a = 1; a <= 18; a++)

    {

        switch (a)

        {

            case 1: Console.WriteLine("我今年{0}岁了。", a); break;

            case 2: Console.WriteLine("我今年{0}岁了。", a); break;

            case 3: Console.WriteLine("我今年{0}岁了。", a); break;

            case 4: Console.WriteLine("我今年{0}岁了。", a); break;

            case 5: Console.WriteLine("我今年{0}岁了。", a); break;

            case 6: Console.WriteLine("我今年{0}岁了,我上小学了。", a); break;

            case 7: Console.WriteLine("我今年{0}岁了。", a); break;

            case 8: Console.WriteLine("我今年{0}岁了。", a); break;

            case 9: Console.WriteLine("我今年{0}岁了。", a); break;

            case 10: Console.WriteLine("我今年{0}岁了。", a); break;

            case 11: Console.WriteLine("我今年{0}岁了,我上初中了。", a); break;

            case 12: Console.WriteLine("我今年{0}岁了。", a); break;

            case 13: Console.WriteLine("我今年{0}岁了。", a); break;

            case 14: Console.WriteLine("我今年{0}岁了。", a); break;

            case 15: Console.WriteLine("我今年{0}岁了,我上高中了。", a); break;

            case 16: Console.WriteLine("我今年{0}岁了。", a); break;

            case 17: Console.WriteLine("我今年{0}岁了。", a); break;

            case 18: Console.WriteLine("我今年{0}岁了。我成年了!我考上北大了!", a); break;

        }

    }

    Console.ReadLine();

    结果:

    总结:

    通脱此题可以看出switch~case语句在与if~else语句实现相同功能时,一般情况下要比较复杂。

    2、输入3个数,将这三个数从大到小排列打印出来。

    主要代码:

    ①法一:

    while (true)

    {

        Console.Write("请输入x=:");

        int x = int.Parse(Console.ReadLine());

        Console.Write("请输入y=:");

        int y = int.Parse(Console.ReadLine());

        Console.Write("请输入z=:");

        int z = int.Parse(Console.ReadLine());

        if (x <= y)

        {

            int a = x;

            x = y;

            y = a;

        }

        if (y <= z)

        {

            int b = y;

            y = z;

            z = b;

            if (x <= y)

            {

                int c = x;

                x = y;

                y = c;

            }

        }

        Console.WriteLine("{0} {1} {2}", x, y, z);

    }

    Console.ReadLine();

    ②法二:

    Console.Write("请输入x=:");

    double x = double.Parse(Console.ReadLine());

    Console.Write("请输入y=:");

    double y = double.Parse(Console.ReadLine());

    Console.Write("请输入z=:");

    double z = double.Parse(Console.ReadLine());

    if (x > y)

    {

        if (y > z)

        {

            Console.WriteLine("x>y>z");

            Console.WriteLine("{0}>{1}>{2}", x, y, z);

        }

        else if (y == z)

        {

            Console.WriteLine("x>y=z");

            Console.WriteLine("{0}>{1}={2}", x, y, z);

        }

        else if (x > z && z > y)

        {

               Console.WriteLine("x>z>y");

               Console.WriteLine("{0}>{1}>{2}", x, z, y);

        }

        else if (z > x)

        {

            Console.WriteLine("z>x>y");

            Console.WriteLine("{0}>{1}>{2}", z, x, y);

        }

        else if (x == z)

        {

            Console.WriteLine("x=z>y");

            Console.WriteLine("{0}={1}>{2}", x, z, y);

        }

    }

    else if(x==y)

    {

        if (y > z)

        {

            Console.WriteLine("x=y>z");

            Console.WriteLine("{0}={1}>{2}", x, y, z);

        }

        else if (z > x)

        {

            Console.WriteLine("z>x=y");

            Console.WriteLine("{0}>{1}={2}", z, x, y);

        }

        else if (x == z)

        {

            Console.WriteLine("x=y=z");

            Console.WriteLine("{0}={1}={2}", x, y, z);

        }

    }

    else if (x < y)

    {

        if (x > z)

        {

             Console.WriteLine("y>x>z");

             Console.WriteLine("{0}>{1}>{2}", y, x, z);

        }

        else if (y > z && z > x)

        {

             Console.WriteLine("y>z>x");

             Console.WriteLine("{0}>{1}>{2}", y, z, x);

        }

        else if (x == z)

        {

             Console.WriteLine("y>x=z");

             Console.WriteLine("{0}>{1}={2}", y, x, z);

        }

        else if (y == z)

        {

            Console.WriteLine("y=z>x");

            Console.WriteLine("{0}={1}>{2}", y, z, x);

        }

        else if(z>y)

        {

             Console.WriteLine("z>y>x");

             Console.WriteLine("{0}>{1}>{2}", z, y, x);

        }

    }

    Console.ReadLine();

    结果:

    法一:

    法二:

    总结:

    通过对比,我们可以知道不同的判断条件,在同一问题下会使得程序复杂度不同。

    3、打印100以内的全部质数,并求和。

    主要代码:

    int b = 0;

    int s = 0;

    for (int i = 2; i <= 100; i++)

    {

        int c = 0;

        for (int j = 1; j <= i; j++)

        {

            if (i % j == 0)

            c++;

        }

        if (c == 2)

        {

            Console.Write(i + " ");

            b++;

            s += i;

        }

    }

    Console.Write(" ");

    Console.WriteLine("b={0}", b);

    Console.Write("s={0}", s);

    Console.ReadLine();

    结果:

    总结:

    此题关键点在于质数的判断条件,用计算机理解方式来理解就是质数只能执行两次for循环中的if语句两次,为了达到这一目的,我们需要一个变量去记录执行次数,因此切忌不能忘了设置标记变量!

    对比题:计算100以内的奇数的和。

    主要代码:

    int s = 0;

    for (int i = 1; i <= 100; i++)

    {

        if (i % 2 != 0)

        {

            s += i;

        }

    }

    Console.WriteLine("s={0}", s);

    Console.ReadLine();

    结果:

    总结:

    此题与前面的最大不同就是不需要标记变量,究其根本是质数与奇数定义的不同。做此类题要仔细分析定义,要充分把握细节。

    4、让用户循环操作,用户输入一个正整数(0-20),如果小于0或大于20都提示输入错误,如果输入的是0-20之间的数,那么就打印从0到这个数的累加求和,一共需要用户输入3遍,输入错误不计入这3遍操作当中。

    主要代码:

    int s = 0;

    int c = 0;

    for (int i = 0; i < 10; i++)

    {

        if (c >= 3)

           break;

        Console.Write("请输入:");

        int a = int.Parse(Console.ReadLine());

        if (a >= 0 && a <= 20)

        {

            s = 0;

            for (int j = 0; j <= a; j++)

               s += j;

            Console.WriteLine(s);

            c++;

        }

        else

           Console.WriteLine("输入错误!");

    }

    Console.ReadLine();

    结果:

    总结:

    此题同上一题一样需要标记变量,其次就是标记变量的位置,需要放到循环之前,因为输入3遍后我们不需要执行for循环。

    5、打印方形,每行打印10个“A”,打印10行,使用循环嵌套,不允许定义内容为“AAAAAAAAAA”的变量;

    主要代码:

    for (int i = 0; i < 10; i++)

    {

        for (int j = 0; j < 10; j++)

           Console.Write("A");

        Console.Write(" ");

    }

    Console.ReadLine();

    结果:

    6、打印三角形

    *

    **

    ***

    ****

    *****

    *****

    ****

    ***

    **

    *

           *

         **

       ***

      ****

    *****

    *****

      ****

        ***

         **

           *

          

          *

        ***

      *****

     *******

         *

       ***

      *****

     *******

      *****

        ***

         *

    主要代码:

    for (int i = 1; i <= 5; i++)

    {

        for (int j = 1; j <= i; j++)

           Console.Write("*");

        Console.Write(" ");

    }

    Console.ReadLine();

    for (int i = 1; i <= 5; i++)

    {

        for (int j = 5; j >= i; j--)

           Console.Write("*");

        Console.Write(" ");

    }

    Console.ReadLine();

    for (int i = 1; i <= 5; i++)

    {

        for (int j = 4; j >= i; j--)

           Console.Write(" ");

        for (int k = 1; k <= i; k++)

           Console.Write("*");

        Console.Write(" ");

    }

    Console.ReadLine();

    for (int i = 0; i <= 5; i++)

    {

        for (int j = 1; j <= i; j++)

           Console.Write(" ");

        for (int k = 4; k >= i; k--)

           Console.Write("*");

        Console.Write(" ");

    }

    Console.ReadLine();

    for (int i = 0; i <= 5; i++)

    {

        for (int j = 4; j >= i; j--)

           Console.Write(" ");

        for (int k = 1; k <= i; k++)

           Console.Write("*");

        for (int m = 1; m <= i - 1; m++)

           Console.Write("*");

        Console.Write(" ");

    }

    Console.ReadLine();

    for (int i = 0; i <= 5; i++)

    {

        for (int j = 4; j >= i; j--)

           Console.Write(" ");

        for (int k = 1; k <= i; k++)

           Console.Write("*");

        for (int m = 1; m <= i - 1; m++)

           Console.Write("*");

        Console.Write(" ");

    }

    for (int i = 0; i <= 4; i++)

    {

        for (int j = 1; j <= i; j++)

           Console.Write(" ");

        for (int k = 3; k >= i; k--)

           Console.Write("*");

        for (int m = 3; m >= i - 1; m--)

           Console.Write("*");

        Console.Write(" ");

    }

    Console.ReadLine();

    结果:

    衍生题:让用户输入一个奇数,打印上面最后的菱形,最长的个数是用户输入的个数。

    主要代码:

    while (true)

    {

        Console.Write("请输入:");

        int a = int.Parse(Console.ReadLine());

        if (a % 2 != 0)

        {

            for (int i = 0; i < (a + 1) / 2; i++)

            {

                for (int j = (a + 1) / 2 - 1; j >= i; j--)

                   Console.Write(" ");

                for (int k = 1; k <= i; k++)

                   Console.Write("*");

                for (int m = 1; m <= i - 1; m++)

                   Console.Write("*");

                Console.Write(" ");

            }

            for (int i = 0; i <= (a + 1) / 2 - 1; i++)

            {

                for (int j = 1; j <= i; j++)

                   Console.Write(" ");

                for (int k = (a + 1) / 2 - 2; k >= i; k--)

                   Console.Write("*");

                for (int m = (a + 1) / 2 - 2; m >= i - 1; m--)

                   Console.Write("*");

                Console.Write(" ");

            }

        }

        else

           Console.WriteLine("你输入的不是奇数!");

    }

    Console.ReadLine();

    结果:

    总结:

    衍生题注意的是输入的奇数与循环的关系,循环与行数的关系。

    7、99乘法表

    主要代码:

    for (int i = 1; i <= 9; i++)

    {

        for (int j = 1; j <= i; j++)

           Console.Write("{0}*{1}={2} ", j, i, j * i);

        Console.Write(" ");

    }

    Console.ReadLine();

    结果:

    总结:

    注意此题结果中的每行第一个因数是内循环的循环条件变量,即j;第二个因数是外循环的循环条件变量,即i。

    8、有一张纸厚度为0.07mm,对折多少次能达到珠峰的高度,珠峰高度为8848m;

    主要代码:

    ①法一:

    double h = 0.07;

    for (int i = 1; ; i++)

    {

        h *= 2;

        if (h >= 8848000)

        {

            Console.WriteLine("对折{0}次。", i);

            break;

        }

    }

    Console.ReadLine();

    ②法二:

    int i=0;

    for (double h = 0.07; h <= 8848000; h *= 2)

       i++;

    Console.WriteLine("对折{0}次。", i);

    Console.ReadLine();

    ③法三:

    double h = 0.07;

    int c = 0;

    for (; ; )

    {

        h *= 2;

        c++;

        if (h >= 8848000)

           break;

    }

    Console.WriteLine("对折{0}次。", c);

    Console.ReadLine();

    结果:

    总结

    通过三种方法可以看出循环的初始条件,循环条件,循环调整的不同,对于同一个题的做法也就不同,但是如果for循环写的比较简单,一般比较难理解,需要加注释。

  • 相关阅读:
    ER模型
    一道人人的笔试题
    关系代数运算
    推荐两个不错的CAD二次开发(.Net)手册
    CAD 致命错误
    CAD二次开发(.NET)之PaletteSet和Palette
    养生
    我看面向对象
    .NET中参数化查询数据库
    自定义按照index和key访问的List
  • 原文地址:https://www.cnblogs.com/bosamvs/p/5455871.html
Copyright © 2020-2023  润新知