C语言分支和循环语句

目录

分支语句

1.if-else语句

1)单if语句:即只有if的分支语句

2)if-else双分支语句

3)if- else if -else

2.switch语句

3.分支语句的嵌套

循环语句

goto语句


C语言是结构化的程序设计语言,所有的结构大致可分为三种:顺序结构、选择结构、循环结构

下面介绍一下选择结构和循环结构

分支语句中有if语句和switch语句

循环语句有while语句,for语句,do while语句,goto语句

分支语句

1.if-else语句

1)单if语句:即只有if的分支语句
#include
int main()
{
	int age = 20;
	if (age > 18)
	    printf("可以考驾照\n");
	return 0;
}

注意:C语言中if后的条件判断:非零为真,零为假

不加大括号时if仅与其后最近的一条语句配对

2)if-else双分支语句

双分支语句其实就是判断题,非if即else

#include
  int main()
  {
	  int age;
	  scanf("%d",&age);
	  if (age >= 18)
		  printf("adult\n");//成年
	  else
		  printf("nonage\n");//未成年
  }
3)if- else if -else

多分支语句就像是判断题变成了多选题

int main()
{
	int score = 80;
	if (score >= 0 && score < 60)
		printf("挂科\n");
	else if (score >= 60 && score < 70)
		printf("中等\n");
	else if (score >= 70 && score < 90)
		printf("良好\n");
	else if (score >= 90 && score <= 100)
		printf("优秀\n");
	else
		printf("成绩出错\n");
}

常见错误:

  1. if (score >= 0 && score < 60)易写成if (0 <= score < 60)                                                          错误原因:if(0<=score<60)的逻辑:先执行"0<=score",score为80,所以表达式为真,结果为1,"1<60"这个表达式也是真,所以if后()内的表达式值为1,打印“挂科”
  2. if (20 == a)写成if (20 = a)                                                                                                       直接报错:

    ​​​C语言分支和循环语句_第1张图片

  3. 悬空的else的匹配问题
    int main()
    {
    	int a = 10;
    	int b = 20;
    	if (a == 20)
    		if (b == 20)
    			printf("%d", b);
    	else
    		printf("%d", a);
        return 0;
    }
    

    结果是什么都不打印,原因是else默认与离自己最近的未匹配的if匹配,上面代码书写风格不好,实际上排版应是下面这种形式:

    int main()
    {
    	int a = 10;
    	int b = 20;
    	if (a == 20)
    		if (b == 20)
    			printf("%d", b);
    		else
    			printf("%d", a);
    	return 0;
    }
    

    所以代码风格很重要

2.switch语句

switch语句是一种适用于处理多分支的语句,switch后面的()内为整型表达式,就是说这个表达式结果的数据类型必须是整型,case后面的表达式是整型常量表达式,就是说这个表达式不仅结果必须是整型,而且结果必须是常量。

int main()
{
	int day = 6;
	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;
	}
	return 0;
}

其中的break关键字充当的是switch程序块出口的角色,作用是让程序读到它时跳出自己当前所在的子程序,这样,程序块就被划分成了不同的部分,进而实现分支的功能

小结:switch的入口是case,出口是break

break直接跳出switch语句,不执行后续操作;

default:当case语句中的所有整型变量表达式均不满足时,执行default中的语句,default可写在任意地方,没有顺序可言

3.分支语句的嵌套

if-else语句嵌套

int main()
{
	int a = 1,b;
	if (a == 1)
	{
		printf("你是否要努力学习?(1 or 0):");
		scanf("%d",&b);
		if (b == 1)
			print("找到好工作\n");
		else
			printf("放飞自我,毕业即失业\n");
	}
	return 0;
}

switch嵌套

#include 
int main() 
{
	int x = 3;
	int y = 3;
	switch (x % 2) 
    {
	case 1:
		switch (y)
		{
		case 0:
			printf("first");
            break;
		case 1:
			printf("second");
			break;
		default:
            printf("hello");
            break;
		}
	case 2:
		printf("third");
	}
	return 0;
}

循环语句

C语言中的循环结构有三种常见的语句,分别是while,for,do-while循环,结构上都分为初始化部分、条件判断部分、调整部分

1)while循环语句

例,打印1~10的数字

#define  _CRT_SECURE_NO_WARNINGS 1
#include
int main()
{
	int i = 1;//初始化部分
	while (i <= 10)//条件判断部分
	{
		printf("%d ", i);//循环体
		i++;//调整部分
	}
	return 0;
}

2)for循环语句

int main()
{
	int i = 0;
	for (i = 1/*初始化*/; i <= 10/*判断部分*/; i++/*调整部分*/)
	{
		printf("%d ", i);
	}
	return 0;
}

变种1:

int main()
{
    for( ; ;)
    printf("hehe\n");
    return 0;
}

结果为死循环打印hehe,原因:当初始化和调整部分省略时,程序不进行初始化和后续的调整;而当判断部分省略时,则程序认为判断部分为真,所以程序会一直运行下去 

变种2:

int main()
{
    for(x=0,y=0;x<2&&y<5;++x,y++)
    printf("hehe\n");
    return 0;
}

以上我们可以看出,for循环的控制变量是允许有2个变量存在的,但当有2个变量存在时,需格外谨慎才不会出错

3)do-while()循环语句

程序逻辑:先执行一次循环,再进行条件判断是否继续循环,与for和while循环的区别在于do-while语句至少可以循环一次

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

goto语句

goto语句相当于一个传送门,可以直接改变代码执行的逻辑,即可以直接跳到目标代码去执行,但它如一把双刃剑,用的好编程效果很不错,滥用就会自废武功

int main()
{
		int age;
	again:
		scanf("%d", &age);
		if (age < 18 && age >= 1)
			printf("未成年\n");
		else if (age >= 18 && age <= 121)
			printf("成年\n");
		else
		{
			printf("输入错误,请重新输入\n");
			goto again;
		}
	return 0;
}

 注意:goto语句只能在一个函数范围内跳转,不能跨函数

你可能感兴趣的:(c语言,开发语言)