C语言-选择结构

在C语言中,一共有三种程序结构:
顺序结构、选择结构(分支结构)和循环结构。
C语言提供2种类型的选择语句:if语句和switch语句。
C语言由一个分号;隔开的就是一条语句。
在C语言中 0表示假,非0表示真。
if语句可以是任何语句,也可以是有若干语句组成的一个语句组,在这种情况下,这组语句需要用花括号“{}”括起来。

if语句
单分支if选择语句
格式:
if(表达式)
语句;
功能:首先计算"表达式"的值,如果表达式的值为真,则执行"语句",否则不执行,而是转去执行本语句后面的语句。

例:判断一个数是否是奇数,并输出1-100之间的奇数

#include <stdio.h>
int main()
{
	int i = 1;
	while (i <= 100)
	{
		if (i % 2 == 1)  //if(i%2 != 0)
		    printf("%d\n", i);
		i++;
	}	 
	return 0;
}

双分支if_else语句
格式:
if(表达式)
语句块1;
else
语句块2;
功能:首先计算"表达式"的值,如果表达式的值为真,语句块1,否则执行else后面的语句块2。

例:判断学生分数及格

#include<stdio.h>
int main()
{
	int i = 0;
	scanf("%d", &i);
 
	if (i >= 60)
		printf("及格");
	else
		printf("不及格");
	return 0;
}

注意点:
容易出错的if_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;
}
//输出值:空
//原因是代码中else语句跟上面if(b==2)匹配,变成if (a == 1)的嵌套if_else语句
//所以当a==为假时,直接return 0; 无返回值。

//等价于下面这样代码书写,所以当判断a==1,为假,不执行嵌套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

多分支if_else选择语句
格式:
if(表达式1)
语句块1;
else if(表达式2)
语句块2;
else if(表达式3)
语句块3;
else if(表达式4)
语句块4;
else
语句块5;

例:年龄分段

#include <stdio.h>
int main()
{
    int age = 0;
    scanf("%d", &age);
    if (age < 18)
    {
        printf("少年\n");
    }
    else if (age >= 18 && age < 30)
    {
        printf("青年\n");
    }
    else if (age >= 30 && age < 50)
    {
            printf("中年\n");
    }
    else if (age >= 50 && age < 80)
    {
        printf("老年\n");
    }
    else
    {
        printf("老寿星\n");
    }
    return 0;
}

switch语句

多分支开关语句switch
格式:
switch(整型表达式)
{
case 整型常量表达式1: 语句块1;
break;
case 整型常量表达式2: 语句块2;
break;
...
case 整型常量表达式n: 语句块n;
break;
default: 语句块n+1;
}
首先,计算switch后圆括号内的表达式的值,然后,再这个值逐个与各xase的常量表达式i的值进行比较。当找到与其相等(匹配)的case时,就执行该case中的语句块,如果再语句块中有break语句,便退出该switch语句。如果没有break语句,则执行完某个语句块后,连续执行其后的语句块,直到遇到另外一个break语句,结束switch的执行,或者一直执行到最后的语句块,然后,结束switch语句的执行。

例:判断星期

#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("输入错误");
    }
    return 0;
}

例:容易出错的switch语句

#include <stdio.h>
int main()
{
	int n = 1;
	int m = 2;
	switch(n)
	{
	case 1: m++;
	case 2: n++;
	case 3:
		switch (n)
		{ //switch允许嵌套使用
		case 1: n++;
		case 2: m++; n++; break;
		}
	case 4:m++;
		break;
	default:
		break;
	}
	printf("m=%d, n=%d\n", m, n);
	return 0;
}
//运行结果:m=5, n=3
//因为如果再语句块中有break语句,便退出该switch语句。
//如果没有break语句,则执行完某个语句块后,连续执行其后的语句块。
posted @ 2024-07-21 22:32  anhuizjh  阅读(32)  评论(0编辑  收藏  举报