【C语言】分支语句(if、switch)、循环语句(while、for、do while)、无条件转移语句(goto)

发布于:2022-12-16 ⋅ 阅读:(347) ⋅ 点赞:(0)

目录

1. 分支语句

1.1 if语句

1.1.1 语法结构

1.1.2 演示代码

1.1.3 else悬空的问题

1.1.4 判断一个数是奇数还是偶数

1.1.5 输出1~100之间的奇数

1.2 switch语句

1.2.1 语法结构

1.2.2 演示代码

1.2.3 case穿透的问题

1.2.4 default子句

2. 循环语句

2.1 while循环

2.1.1 语法结构

2.1.2 演示代码

2.2 for循环

2.2.1 语法结构

2.2.2 演示代码

2.2.3 表达式的省略

2.2.4 for循环嵌套

2.2.5 多变量的for循环

2.2.6 注意=和==

2.3 do while循环

2.3.1 语法结构

2.3.2 演示代码

2.4 break和continue

2.4.1 break

2.4.2 continue

3. 无条件转移语句


1. 分支语句

1.1 if语句

1.1.1 语法结构

if (表达式)
    语句;

if (表达式)
    语句1;

else
    语句2;

if (表达式1)
    语句1;

else if (表达式2)
    语句2;

...

else if (表达式n)

    语句n;

else
    语句n+1;

1.1.2 演示代码

#include <stdio.h>

int main()
{
	int age = 0;
	scanf("%d", &age);

	if (age < 18)
	{
		printf("未成年\n");
		printf("不能饮酒\n");
	}//if控制多条语句要用{}括起来

	return 0;
}
#include <stdio.h>

int main()
{
	int age = 0;
	scanf("%d", &age);

	if (age < 18)
	{
		printf("未成年\n");
		printf("不能饮酒\n");
	}
	else
		printf("成年\n");

	return 0;
}
#include <stdio.h>

int main()
{
	int age = 0;
	scanf("%d", &age);

	if (age <= 6)
		printf("童年\n");
	else if(age>=7 && age<=17)
		printf("少年\n");
	else if (age >= 18 && age <= 40)
		printf("青年\n");
	else if (age >= 41 && age <= 65)
		printf("中年\n");
	else
		printf("老年\n");

	return 0;
}

1.1.3 else悬空的问题

没有{}的约束下else和离它最近的if匹配。

#include<stdio.h>

int main()
{
	int a = 0;
	int b = 2;

	if (a == 1)
		if (b == 2)
			printf("hehe\n");
	else
		printf("haha\n");

	return 0;
}
//什么都不输出
#include<stdio.h>

int main()
{
	int a = 0;
	int b = 2;

	if (a == 1)
	{ 
		if (b == 2)
			printf("hehe\n");
	}
	else
		printf("haha\n");

	return 0;
}
//输出haha

1.1.4 判断一个数是奇数还是偶数

#include<stdio.h>

int main()
{
	int num = 0;
	scanf("%d", &num);

	if (num % 2 == 1)
		printf("奇数\n");
	else
		printf("偶数\n");

	return 0;
}

1.1.5 输出1~100之间的奇数

#include<stdio.h>

int main()
{
	int i = 1;

	while (i <= 100)
	{
		if (i % 2 == 1)
			printf("%d ", i);
		i++;
	}

	return 0;
}

1.2 switch语句

1.2.1 语法结构

switch(整型表达式)
{

    case 整形常量表达式1:

        语句1;

        break;

    case 整形常量表达式2:

        语句2;

        break;

    ...

    case 整形常量表达式n:

        语句n;

        break;

    default:

        语句n+1;

        break;

}

switch(整型表达式)
{

    case 整形常量表达式1:

    ....

    case 整形常量表达式a:

        语句1;

        break;

    case 整形常量表达式a+1:

    ....

    case 整形常量表达式b:

        语句2;

        break;

    ....

    case 整形常量表达式c:

    ....

    case 整形常量表达式d:

        语句n;

        break;

    default:

        语句n+1;

        break;

}

1.2.2 演示代码

#include<stdio.h>

int main()
{
	int day = 0;
	scanf("%d", &day);

	switch (day)
	{
	    case 1:
			printf("星期一\n");
			break;
		case 2:
			printf("星期二\n");
			break;
		case 3:
			printf("星期三\n");
			break;
		case 4:
			printf("星期四\n");
			break;
		case 5:
			printf("星期五\n");
			break;
		case 6:
			printf("星期六\n");
			break;
		case 7:
			printf("星期日\n");
			break;
		default:
			printf("输入有误,请重新输入\n");
			break;
	}
	return 0;
}
#include<stdio.h>

int main()
{
	int day = 0;
	scanf("%d", &day);

	switch (day)
	{
	    case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			printf("工作日\n");
			break;
		case 6:
		case 7:
			printf("休息日\n");
			break;
		default:
			printf("输入有误,请重新输入\n");
			break;
	}
	return 0;
}

1.2.3 case穿透的问题

在switch语句中,如果case控制的语句体后面不写break,将出现穿透现象。在不判断下一个case值的情况下,向下运行,直到遇到break,或者整体switch语句结束。

#include<stdio.h>

int main()
{
	int day = 0;
	scanf("%d", &day);

	switch (day)
	{
	case 1:
		printf("星期一\n");
	case 2:
		printf("星期二\n");
	case 3:
		printf("星期三\n");
	case 4:
		printf("星期四\n");
	case 5:
		printf("星期五\n");
	case 6:
		printf("星期六\n");
	case 7:
		printf("星期日\n");
	default:
		printf("输入有误,请重新输入\n");
		break;
	}
	return 0;
}
//如果输入5,输出结果为:
//星期五
//星期六
//星期日
//输入有误,请重新输入
//

1.2.4 default子句

当switch表达式的值与所有case标签的值都不匹配时,如果没有default子句,那么所有的语句都被跳过,程序不会终止,也不会报错;如果有default子句,那么这个default子句后面的语句就会执行。

尽量在每个switch语句中都放一条default子句。default子句可以放在任意位置。

2. 循环语句

2.1 while循环

2.1.1 语法结构

 while(表达式)

    循环语句;

2.1.2 演示代码

#include <stdio.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		printf("%d ", i);
		i++;
	}

	return 0;
}
//结果为1 2 3 4 5 6 7 8 9 10 

2.2 for循环

2.2.1 语法结构

for(初始化表达式; 条件判断表达式; 调整表达式)

    循环语句;

2.2.2 演示代码

#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		printf("%d ", i);
	}

	return 0;
}
//结果为1 2 3 4 5 6 7 8 9 10 

2.2.3 表达式的省略

三个表达式都是可以省略的,如for(;;)。for(;;)表示无限循环,相当于while(1)。

  • 省略初始化表达式表示不对循环控制变量赋初值。
  • 省略条件判断表达式表示判断恒成立。
  • 省略调整表达式表示不对循环控制变量做调整。

2.2.4 for循环嵌套

#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	for (i = 0; i < 10; i++)
	{
		for (j = 0; j < 10; j++)
		{
			printf("a ");
		}
	}

	return 0;
}
//结果为100个a
#include <stdio.h>

int main()
{
	int i = 0;
	int j = 0;
	for (; i < 10; i++)
	{
		for (; j < 10; j++)
		{
			printf("a ");
		}
	}

	return 0;
}
//结果为10个a

2.2.5 多变量的for循环

#include <stdio.h>

int main()
{
	int i, j;
	for (i = 0, j = 0; i < 2 && j < 5; i++, j++)
	{
		printf("a ");
	}

	return 0;
}
//结果为2个a

2.2.6 注意=和==

//循环了多少次?

#include<stdio.h>

int main()
{
	int i = 0;
	int k = 0;
	for (i = 0, k = 0; k = 0; i++, k++)
        printf("a");

	return 0;
}
//0次,k=0表示给k赋值为0,条件判断表达式为0(0为假),不执行循环
//如果为for (i = 0, k = 0; k == 0; i++, k++),则循环一次

2.3 do while循环

2.3.1 语法结构

do

    循环语句;

while(表达式);

2.3.2 演示代码

#include <stdio.h>

int main()
{
	int i = 10;
	do
	{
		printf("%d ", i);
	}
	while (i < 10);

	return 0;
}
//结果为10,do while循环至少执行一次

2.4 break和continue

2.4.1 break

break是用于永久终止循环的,只要遇到break就停止后面所有的循环,直接终止循环。

#include <stdio.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (5 == i)
			break;

		printf("%d ", i);
		i++;
	}

	return 0;
}
//结果为1 2 3 4 
#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (5 == i)
			break;

		printf("%d ", i);
	}
	return 0;
}
//结果为1 2 3 4 
#include <stdio.h>

int main()
{
	int i = 1;
	do
	{
		if (5 == i)
			break;

		printf("%d ", i);
		i++;
	}
	while (i < 10);

	return 0;
}
//结果为1 2 3 4 

2.4.2 continue

continue是用于终止本次循环的,只要遇到continue,后面的代码就不会执行,直接进入下一次循环的入口。

#include <stdio.h>

int main()
{
	int i = 1;
	while (i <= 10)
	{
		if (5 == i)
			continue;

		printf("%d ", i);
		i++;
	}

	return 0;
}
//结果为1 2 3 4 死循环
#include <stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)
	{
		if (5 == i)
			continue;

		printf("%d ", i);
	}
	return 0;
}
//结果为1 2 3 4 6 7 8 9 10 
#include <stdio.h>

int main()
{
	int i = 1;
	do
	{
		if (5 == i)
			continue;

		printf("%d ", i);
		i++;
	}
	while (i < 10);

	return 0;
}
//结果为1 2 3 4 死循环

3. 无条件转移语句

goto语句,即无条件转移语句,不建议使用,以免造成程序流程的混乱。

做一个关机程序:60s后关机,如果输入:我是猪,则取消关机。

使用goto语句:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
	char input[20] = { 0 };
	system("shutdown -s -t 60");//执行系统命令:60s后关机

again:
	printf("请注意,你的电脑将在60秒后关机,如果输入:我是猪,则取消关机\n");
	scanf("%s", input);
	if (strcmp(input, "我是猪") == 0)
	{
		system("shutdown -a");//执行系统命令:取消关机
	}
	else
	{
		goto again;
	}

	return 0;
}

使用while循环:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
	char input[20] = { 0 };
	system("shutdown -s -t 60");

	while (1)
	{
		printf("请注意,你的电脑将在60秒后关机,如果输入:我是猪,则取消关机\n");
		scanf("%s", input);
		if (strcmp(input, "我是猪") == 0)
		{
			system("shutdown -a");
			break;
		}
	}

	return 0;
}
本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到