C#03选择语句和循环语句(文末练习)

目录

一. if-else选择语句

1. if-else可以进行逐个选择

2. if-else也可以进行区间选择

3.if-else可以同时对多个变量进行选择

二.Switch-case选择语句

1. switch-case可以进行逐个选择

2.1 switch-case可以通过case穿透进行区间选择

2.2 switch-case也可以通过模式匹配进行选择

3.switch-case可以同时对多个变量进行选择

三.if-else和switch-case的区别

四. 循环控制

1.break (用来跳出整个循环)

2. continue (用来跳出当前循环,继续执行下一层循环)

3. goto 当运行到goto语句时,跳转到对应标签处

4.return 结束当前方法

五. while循环

1.while循环

2.do-while循环

while循环和dowhile循环的区别:

六.for循环

七.键盘录入

八.选择语句和循环语句练习

1.使用for循环嵌套在控制台打印九九乘法表

2.键盘录入一个整数表示菱形的中间层数,使用for循环在控制台打印一个菱形

3.使用for循环和while循环打印100以内的所有整数的和

3.1 for循环打印100以内的所有的整数的和

3.2while循环打印100以内的所有的整数的和

4.键盘录入一个整数代表年数,使用for循环在控制台打印出该年有多少天(判断是否是闰年)

5.逢七过(即这个整数中任意一位数字包含7或者是7的倍数,则这个整数就是逢七过)判断100以内有多少个整数符合逢七过的要求

6.使用while语句和continue控制条件打印出100以内的所有非逢七过的数字

7.键盘录入一个三位数数字,使用for循环在控制台打印出这个数字的每一位数字

8.回文数:一个数字从前往后读和从后往前读是一样的,例如12321,121,131.要求:控制台打印出来1000-9999的所有回文数的个数

 9.打印100以内的所有质数

10.键盘录入一个1-7的整数,使用switch语句,打印出对应的星期几

 11.键盘录入一个月份,不是闰年,使用switch语句,打印出这个月份是多少天


一. if-else选择语句

在if-else选择语句中,首先会判断条件是否为真.如果条件为真,则执行if后面的代码块;如果条件为假,则执行else后面的代码块.

if-else选择语句可以根据不同的条件执行不同的操作,使程序具有更强的灵活性和适应性.它可以用于处理各种情况,例如用户输入,数据状态等进行不同的处理.

1. if-else可以进行逐个选择

//1.if-else可以进行逐个选择
int a = 3;
if (a == 1)
{
    Console.WriteLine("a=1");
}
else if (a == 2)
{
    Console.WriteLine("a=2");
}
else if (a == 3)
{
    Console.WriteLine("a=3");//控制台打印a=3
}
else
{
    Console.WriteLine("a不是1,2,3中的任意一个");
}

2. if-else也可以进行区间选择

//if-else 语句根据条件的真假来决定执行哪个代码块
int a = 3;
if (a >= 0 && a <= 10)
{
    Console.WriteLine("a在0到10之间");//控制台打印a在0到10之间
}
else
{
    Console.WriteLine("a不在0到10之间");
}

3.if-else可以同时对多个变量进行选择

int a = 3, b = 5;
if (a >= 0 && a <= 10 && b >= 0 && b <= 10)
{
    Console.WriteLine("a和b都在0到10之间"); //控制台打印a和b都在0到10之间
}
else
{
    Console.WriteLine("a和b不在0到10之间");
}

二.Switch-case选择语句

在Switch-case选择语句中,首先会计算表达式的值,然后将其与每个case后面的值进行比较,如果表达式的值与某个case后面的值相等,就会执行该case后面的代码块.如果没有匹配的case,就会执行default后面的代码块.

Switch-case选择语句可以使代码更加简介和易于理解,特别是在需要多个不同的条件执行不同的操作时.它可以提高代码的可读性和可维护性.

注: 如果所有的条件都已经在 case 中处理了,那么就不需要执行默认操作,因此可以省略 default 部分。

然而,为了代码的完整性和可读性,建议在 Switch-case 语句中始终包含 default 部分,即使它可能不会被执行。这样可以确保在未来可能添加新的条件时,代码仍然能够正确处理所有情况。

此外,default 部分也可以用于处理一些意外情况或错误情况,例如当输入的值不符合预期时,可以在 default 部分中进行相应的处理。

因此,虽然在所有条件都已经在 case 中列出的情况下可以不写 default,但为了代码的健壮性和可维护性,最好还是包含 default 部分。

1. switch-case可以进行逐个选择

//1.switch-case可以进行逐个选择
int a = 3;
switch (a)
{
    case 1:
        Console.WriteLine("a=1");
        break;
    case 2:
        Console.WriteLine("a=2");
        break;
    case 3:
        Console.WriteLine("a=3"); //控制台打印a=3
        break;
    default:
        Console.WriteLine("a不是1,2,3中的任意一个");
        break;
}

2.1 switch-case可以通过case穿透进行区间选择

在 Switch-case 语句中,case 穿透是指当一个 case 执行完毕后,程序不会立即跳出 Switch 语句,而是继续执行下一个 case 中的代码.

这种情况通常发生在没有在每个 case 后面添加 break 语句的情况下。break 语句用于在执行完一个 case 后跳出 Switch 语句,防止继续执行下一个 case.

如果没有添加 break 语句,程序会按照顺序依次执行每个 case 中的代码,直到遇到 break 语句或者 Switch 语句结束.

//2.switch-case可以通过case穿透进行区间选择
int a = 3;
switch (a)
{
    case  > 0:
    case  < 10:
        Console.WriteLine("a在0到10之间"); //控制台打印a在0到10之间
        break;
    default:
        Console.WriteLine("a不在0到10之间");
        break;
}

2.2 switch-case也可以通过模式匹配进行选择

//3.switch-case也可以通过模式匹配进行选择
int a = 3;
switch (a)
{
    case int n when (n >= 0 && n <= 10):
        Console.WriteLine("a在0到10之间");
        break;
    default:
        Console.WriteLine("a不在0到10之间");
        break;
}

3.switch-case可以同时对多个变量进行选择

int a = 3, b = 5;
switch (a, b)
{
    case (int n1, int n2) when (n1 >= 0 && n1 <= 10 && n2 >= 0 && n2 <= 10):
        Console.WriteLine("a和b都在0到10之间");
        break;
    default:
        Console.WriteLine("a和b不在0到10之间");
        break;
}

三.if-else和switch-case的区别

1.语法结构:if-else语句使用条件表达式来判断执行哪个分支,而switch-case语句使用表达式的值来匹配不同的case分支.

2.表达式类型:if-else语句中的条件表达式可以是任何类型,而switch-case语句中的表达式只能是整数类型或枚举类型.

3.分支数量:if-else语句可以有任意数量的分支,而switch-case语句的分支数量通常是有限的.

4.执行效率:在,某些情况下,switch-case语句的执行效率可能比if-else语句更高,因为它可以直接跳转到匹配的分支,而不需要逐个判断条件.

注意:

如果条件比较简单,且值的范围有限,使用switch-case语句可能会更加的合适,因为switch-case代码的优点是代码简洁,可读性高而且执行效率比if-else更高.

如果条件比较复杂,或者需要处理多种情况,使用if-else语句可能更加灵活,因为if-else代码的优点就是可以处理更加复杂的条件逻辑.

四. 循环控制

1.break (用来跳出整个循环)

//1.break
int a = 0;
while (a < 10)
{
    Console.WriteLine(a);
    a++;
    if (a == 5)
    {
        break; //跳出循环
    }
}
//循环打印的值:0 1 2 3 4

2. continue (用来跳出当前循环,继续执行下一层循环)

//2.continue
int a = 0;
while (a < 10)
{
    a++;
    if (a == 5)
    {
        continue; //跳过本次循环
    }
    Console.WriteLine(a);
}
//循环打印的值:1 2 3 4 6 7 8 9 10

3. goto 当运行到goto语句时,跳转到对应标签处

//3.goto
int a = 0;
while (a < 10)
{
    Console.WriteLine(a);
    a++;
    if (a == 5)
    {
        goto End; //当循环内条件成立时,跳转到End标签处
    }
} //控制台打印0 1 2 3 4
End: 
Console.WriteLine("循环结束");

4.return 结束当前方法

//4.return
int a = 0;
while (a < 10)
{
    Console.WriteLine(a);
    a++;
    if (a == 5)
    {
        return; //当循环内条件成立时,结束当前方法
    }
}//控制台打印0 1 2 3 4

五. while循环

1.while循环

在while循环中,只要条件为真(即条件表达式的值为非零),循环体就会被执行.每次循环结束后,程序会重新检查条件,如果条件仍然为真,则继续执行循环体,直到条件变为假为止.

while循环的优点是它可以根据条件的变化动态地控制循环的执行次数,适用于需要重复执行一段代码直到满足特定条件的情况.然而,在使用while循环时,需要确保条件最终会变为假,否则循环将无限执行,导致程序死锁或出现其他问题.

//1.while循环
int a = 0; //声明并对变量a赋值
while (a < 10)
{
    Console.WriteLine(a);
    a++; //累加条件,否则会陷入死循环
}//控制台打印0-9

2.do-while循环

do-while循环是一种在编程中常用的控制结构,它与while类似,但执行顺序略有不同.

do-while循环适用于需要先执行一次操作,然后再根据条件决定是否继续执行的情况.它可以确保循环体至少会被执行一次.

int a = 10;
do
{
    Console.WriteLine(a);
    a++;
}  //控制台打印10
while (a < 10);

while循环和dowhile循环的区别:

while循环是先进行判断,如果条件成立则进入语句体,如果条件不成立即退出循环.

do-while循环是无论条件成立与否先执行一次语句体内的语句在进行判断条件成立与否.

六.for循环

for循环的一般形式为: for(初始化语句;条件语句;累加(累减)语句)

在for循环中,首先会执行初始化表达式,然后判断条件表达式是否为真.如果条件为真,则执行循环体,然后执行累加(累减)表达式.累加(累减)表达式用于修改变量的值,以便于下一次循环中继续判断条件.

//条件: for(初始化;条件;累加)
for (int a = 0; a < 10; a++)
{
    Console.WriteLine(a);
}//打印0-9

for循环的初始化语句和累加(累减)语句在特殊情况下可以省略但是条件语句不可以

for (;true;) //只有条件语句,没有累加累减语句用来终止循环条件,造成死循环
{
    Console.WriteLine("死循环");
}

七.键盘录入

在C#中我们可以使用Console.ReadLine();语句来实现键盘录入,该方法会等待用户在控制台输入一行文本并将其当做一个字符串进行返回

//键盘录入
Console.WriteLine("请输入你想要输入的内容: ");
string somethings = Console.ReadLine();
Console.WriteLine(somethings); //打印你所输入的内容

八.选择语句和循环语句练习

1.使用for循环嵌套在控制台打印九九乘法表

for (int i = 1; i <= 9; i++)
{
    for (int j = 1; j <= i; j++)
    {
        Console.Write($"{j}*{i}={i * j}\t");
    }
    Console.WriteLine();
}

2.键盘录入一个整数表示菱形的中间层数,使用for循环在控制台打印一个菱形

Console.WriteLine("请输入一个整数表示菱形的中间层数");
int num = Convert.ToInt32(Console.ReadLine());
for (int i = 1; i <= num; i++) //打印上半部分
{
    for (int j = 1; j <= num - i; j++) //打印空格
    {
        Console.Write(" ");
    }
    for (int k = 1; k <= 2 * i - 1; k++) //打印星号
    {
        Console.Write("*");
    }
    Console.WriteLine();
}
for (int i = 1; i <= num - 1; i++) //打印下半部分
{
    for (int j = 1; j <= i; j++) //打印空格
    {
        Console.Write(" ");
    }
    for (int k = 1; k <= 2 * (num - i) - 1; k++) //打印星号
    {
        Console.Write("*");
    }
    Console.WriteLine();
}

3.使用for循环和while循环打印100以内的所有整数的和

3.1 for循环打印100以内的所有的整数的和

int sum = 0;
for (int i = 1; i <= 100; i++)
{
    sum += i;
}
Console.WriteLine("100以内所有的整数和为" + sum);

3.2while循环打印100以内的所有的整数的和

int sum = 0;
int a = 1;
while (a <= 100)
{
    sum += a;
    a++;
}
Console.WriteLine(sum);

4.键盘录入一个整数代表年数,使用for循环在控制台打印出该年有多少天(判断是否是闰年)

Console.WriteLine("请输入一个整数代表年数");
int year = int.Parse(Console.ReadLine()); //Console.ReadLine()方法返回的是字符串类型,需要使用int.Parse()方法,该方法用于将字符串类型转换为整数类型
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
{
    Console.WriteLine(year + "年有366天");
}
else
{
    Console.WriteLine(year + "年有365天");
}

5.逢七过(即这个整数中任意一位数字包含7或者是7的倍数,则这个整数就是逢七过)判断100以内有多少个整数符合逢七过的要求

int count = 0;
for (int i = 1; i <= 100; i++)
{
    if (i % 7 == 0 || i % 10 == 7 || i / 10 == 7)
    {
        count++; //每有一个整数符合要求,计数器就加1
    }
}
Console.WriteLine("100以内有" + count + "个整数符合逢七过的要求");

6.使用while语句和continue控制条件打印出100以内的所有非逢七过的数字

int a = 1;
while (a <= 100)
{
    if (a % 7 == 0 || a % 10 == 7 || a / 10 == 7)
    {
        a++;
        continue;
    }
    Console.WriteLine(a);
    a++;
}

7.键盘录入一个三位数数字,使用for循环在控制台打印出这个数字的每一位数字

Console.WriteLine("请输入一个三位数数字");
int num = int.Parse(Console.ReadLine());
for (int i = 1; i <= 3; i++)
{
    int result = num % 10;
    switch (i)
    {
        case 1:
            Console.WriteLine("个位上的数字是" + result);
            break;
        case 2:
            Console.WriteLine("十位上的数字是" + result);
            break;
        case 3:
            Console.WriteLine("百位上的数字是" + result);
            break;
    }
    num /= 10;
}

8.回文数:一个数字从前往后读和从后往前读是一样的,例如12321,121,131.要求:控制台打印出来1000-9999的所有回文数的个数

int count = 0;
for (int i = 1000; i <= 9999; i++)
{
    int ge = i % 10;
    int shi = i / 10 % 10;
    int bai = i / 100 % 10;
    int qian = i / 1000;
    if (ge == qian && shi == bai)
    {
        count++;
    }
}
Console.WriteLine("1000-9999之间有" + count + "个回文数");

 9.打印100以内的所有质数

for (int i = 2; i <= 100; i++)
{
    bool flag = true;
    for (int j = 2; j < i; j++)
    {
        if (i % j == 0)
        {
            flag = false;
            break;
        }
    }
    if (flag)
    {
        Console.WriteLine(i);
    }
}

10.键盘录入一个1-7的整数,使用switch语句,打印出对应的星期几

Console.WriteLine("请输入一个1-7的整数");
int num = int.Parse(Console.ReadLine());
switch (num)
{
    case 1:
        Console.WriteLine("星期一");
        break;
    case 2:
        Console.WriteLine("星期二");
        break;
    case 3:
        Console.WriteLine("星期三");
        break;
    case 4:
        Console.WriteLine("星期四");
        break;
    case 5:
        Console.WriteLine("星期五");
        break;
    case 6:
        Console.WriteLine("星期六");
        break;
    case 7:
        Console.WriteLine("星期日");
        break;
    default:
        Console.WriteLine("输入有误");
        break;
}

 11.键盘录入一个月份,不是闰年,使用switch语句,打印出这个月份是多少天

Console.WriteLine("请输入一个月份");
int num = int.Parse(Console.ReadLine());
switch (num)
{
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        Console.WriteLine(num + "月有31天");
        break;
    case 4:
    case 6:
    case 9:
    case 11:
        Console.WriteLine(num + "月有30天");
        break;
    case 2:
        Console.WriteLine(num + "月有28天");
        break;
    default:
        Console.WriteLine("输入有误");
        break;
}

  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰茶_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值