练习

八、练习

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循环写的比较简单,一般比较难理解,需要加注释。

原文地址:https://www.cnblogs.com/bosamvs/p/5455871.html