三、C语言中的分支与循环—if语句 (1)

发布时间:2024年01月04日

在这一章节中我们的学习内容如下,咱们一步步来。

分支结构


1. if语句
2. 关系操作符
3. 条件操作符
4. 逻辑操作符:&& , || , !
5. switch语句

循环结构

6. while循环
7. for循环
8. do-while循环
9. break和continue语句
10. 循环的嵌套
11. goto语句

本章分支结构的学习内容如下:

三、C语言中的分支与循环—if语句 (1)

三、C语言中的分支与循环—关系操作符 (2)

三、C语言中的分支与循环—条件操作符 与逻辑操作符(3)

三、C语言中的分支与循环—switch语句(4)分支结构 完


本章循环结构的学习内容如下:

三、C语言中的分支与循环—while循环 (5)

三、C语言中的分支与循环—for循环 (6)

三、C语言中的分支与循环—do-while循环 (7)

三、C语言中的分支与循环—break和continue语句(8)循环结构 完??


?

1. if 语句的语法

注意if这句后面没有分号

1 if (表达式)
2     语句;

如果表达式为真,则语句执行;如果表达式为假,则后面那一语句不执行。

1)判断输入整数是奇数还是偶数

咱们思考这个判断条件,可以写成对该整数关于2取模的结果是否为0

同时注意if后的执行语句需要缩进,按下Tab键即可

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 0)//注意这句后面没有分号;
        //注意判断左右表达式是否相等的符号是“==”
	    printf("%d是偶数",num);
	return 0;
}

输入10

输入9后,因为if()括号内的表达式为假,该语句不执行

2.else的用法

对于奇数偶数这种非此即彼的问题,我们可以用if....else....来处理,如果为真就怎样,否则就怎样

我们来改善上一个代码

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 0)
		printf("%d是偶数",num);//if后的表达式为真执行这一句
	else
		printf("%d是奇数", num);//否则,if后的表达式为假执行这一句
	return 0;
}

3. 如何让if和else控制多条语句

1)if和else默认控制一条语句,如果有多条,则代码运行出错;

如果只有if ,代码没有错误,但是从第二条往下就不归if管了,继续执行:

2)解决方案:加花括号

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num % 2 == 0)
	{
		printf("%d是偶数\n", num);
		printf("%d可以被2整除\n", num);
	}
	else
	{
		printf("%d是奇数\n", num);
		printf("%d不可以被2整除\n", num);
	}
	return 0;
}

4.嵌套if

当我们的问题有多种选择的时候,可以选择嵌套的方法,主要是自己需要梳理清楚逻辑

1)判断输入的数是0,还是正数,负数

可以嵌套进if或者else的任意一个中

形式1 嵌套进if中

//判断输入的数是0,还是正数,负数
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num != 0)
    {
        if (num > 0)
		    printf("输入的值为正数");
		else
			printf("输入的值为负数");
	}	
	else
		printf("输入的值为0");
	
	return 0;
}

形式2 嵌套进else中

//判断输入的数是0,还是正数,负数
int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num == 0)
		printf("输入的值为0");
	else
	{
		if (num > 0)
			printf("输入的值为正数");
		else
			printf("输入的值为负数");
	}
	return 0;
}

也可以用if else if else这种写法,注意想要控制多条语句时需要打上花括号

if-else if-else 结构是一种条件控制语句,用于在多个条件之间进行选择执行。这种结构允许程序根据不同的条件执行不同的代码块。下面是其基本结构和工作原理的解释:

if (condition1) 
{
    // 代码块1: 当 condition1 为真时执行
} 
else if (condition2) 
{
    // 代码块2: 当 condition1 为假且 condition2 为真时执行
} 
else if (condition3) 
{
    // 代码块3: 当 condition1 和 condition2 都为假且 condition3 为真时执行
} 
else {
    // 代码块4: 当所有上面的条件都不满足时执行
}

所以该问题的代码还可以写作:

int main()
{
	int num = 0;
	scanf("%d", &num);
	if (num == 0)
		printf("输入的值为0");
	else if(num > 0)
			printf("输入的值为正数");
	else
			printf("输入的值为负数");
	return 0;
}

2)练习题

  1. 输??个?的年龄
  2. 如果年龄<18岁,打印"少年"
  3. 如果年龄在18岁?44岁打印"?年"
  4. 如果年龄在45岁?59岁打印"中?年"
  5. 如果年龄在60岁?89岁打印"?年"
  6. 如果90岁以上打印"?寿星"
这里涉及了&&,与操作符,我们下节继续
int main()
{
	int age = 0;//初始化
	int r = scanf("%d", &age);
	if (age < 18)
		printf("少年\n");
	else
	{
		if (age <= 44)
			printf("青年\n");
		else if (age <= 59 && age >= 45)
			printf("中老年\n");
		else if (age <= 89 && age >= 60)
			printf("老年\n");
		else
			printf("老寿星\n");
	}
	return 0;
}

5.?悬空else问题

悬空else:当有多个 `if` 语句嵌套而没有足够的 `else` 语句时,就可能产生悬空else的情况。例如:

if (condition1)
    if (condition2)
        statement1;
    else
        statement2;

在这个例子中,`else` 语句到底是与第一个 `if` 语句匹配,还是与第二个 `if` 语句匹配呢?这就是悬空else问题。C和C++,有一个清晰的规则来处理这个问题:`else` 总是与最近的未匹配的 `if` 与之配对。因此,在上面的例子中,`else` 与第二个 `if`(`if (condition2)`)配对。

为了避免悬空else问题带来的混淆,建议总是使用大括号 `{}` 明确地指明 `if-else` 语句的范围,即使语句体只有一行。例如:

if (condition1)
 {
    if (condition2) 
    {
        statement1;
    }
} 
else 
{
    statement2;
}

这样的代码结构可以清晰地表达程序的逻辑,避免悬空else问题。

文章来源:https://blog.csdn.net/m0_52889787/article/details/135255883
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。