当前位置 : 主页 > 编程语言 > c语言 >

c语言修炼第二章--分支与循环

来源:互联网 收集:自由互联 发布时间:2023-08-28
目录 前言 2.1分支语句 2.1.1什么是语句 2.2分支语句 2.2.1if语句的语法形式 2.2.2悬空else问题 2.2.3if书写形式的对比 2.3switch语句 2.3.1switch的语法形式 2.3.2 switch与break的关系 2.3.3 switch与defau


目录

前言

2.1分支语句

2.1.1什么是语句

2.2分支语句

2.2.1if语句的语法形式

2.2.2悬空else问题

2.2.3if书写形式的对比

2.3switch语句

2.3.1switch的语法形式

2.3.2 switch与break的关系

2.3.3 switch与default的关系


前言

小伙伴们端午安康吖!今天我们要开始新的一章的学习!直接开始学习叭!

2.1分支语句

2.1.1什么是语句

在了解语句之前,我们先来了解以下的知识!c语言是结构化的程序设计语言!那么什么是结构化呢又或者结构化都有哪些呢?结构化主要包括:顺序结构,循环结构,选择结构!

c语言修炼第二章--分支与循环_#include

c语言修炼第二章--分支与循环_c语言_02编辑

 选择结构对应的是分支语句(if switch语句),循环结构对应的是循环语句(while,for,do while)。言归正传,什么是语句呢?用分号隔开的就是语句。c语言的语句分类有以下五种

  • 表达式语句
  • 函数调用语句
  • 控制语句
  • 复合语句
  • 空语句

上代码来具体看看叭!

#include<stdio.h>
int main()
{
	3 + 5;//表达式语句
	printf("haha\n");//函数调用语句
	;//空语句
	return 0;
}

c语言修炼第二章--分支与循环_#include_03

今天我们要讲的就是控制语句!控制语句用于控制程序的执行流程以实现程序的各种结构方式(c语言支持三种结构:顺序结构,选择结构,循环结构)它们有特定的语意符组成,c语言由九种控制语句可以分成以下三类:

  • 条件判断语句也称为分支语句:if语句,switch语句
  • 循环执行语句:while语句, for语句,do while语句
  • 转向语句:break语句 goto语句,return 语句,continue语句

2.2分支语句

2.2.1if语句的语法形式

//if的单分支语法结构
if (表达式)
   语句式;

//If的双分支的语法结构
if (表达式)
  语句式;
else
   语句式;

//if的多分支语法结构
if (表达式)
语句式;
else if (表达式)
语句式;
else if (表达式)
语句式;
else;

c语言修炼第二章--分支与循环_c语言_04

以年龄为例,我们具体来看看if的具体使用方式叭!当年龄小于18时我们要进行打印未成年,先用if单分支情况来试试叭

c语言修炼第二章--分支与循环_c语言_05

c语言修炼第二章--分支与循环_c语言_06编辑

 哦豁,当输入13的时候真的打印了未成年欸,那要是当我们输入大于18时打印出成年人,可以谈恋爱该怎么办呢?再上代码叭

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age > 18)
		printf("成年人\n");
	    printf("可以谈恋爱\n");
	return 0;
}

c语言修炼第二章--分支与循环_#include_07

运行一下看看能不能达到我们的预期叭

c语言修炼第二章--分支与循环_c语言_08

c语言修炼第二章--分支与循环_#include_09编辑

 这里来看貌似是按照我们的预期来的!我们再输入一个值看看叭,当我们输入13时又会出现什么结果呢?

c语言修炼第二章--分支与循环_#include_10

c语言修炼第二章--分支与循环_switch语句_11编辑

 这时竟然也打印了可以谈恋爱!可是13不是成年人呐!这时我们会发现代码出现了错误但是程序在编译时并没有出错!那么我们该怎么改呢?这里会报错是因为If后面默认控制一条语句,当出现了多条语句时要使用大括号!

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age > 18)
	{
		printf("成年人\n");
		printf("可以谈恋爱\n");
	}
	return 0;
}

c语言修炼第二章--分支与循环_#include_12

此时我们再输入13就没有问题啦(同时上面的也是复合语句的写法)

c语言修炼第二章--分支与循环_#include_13

c语言修炼第二章--分支与循环_switch语句_14编辑

 总结一下:If语句默认控制一条语句,当出现多条语句时要使用大括号!

在用代码来看看If的双分支情况叭

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
	{
		printf("未成年\n");
	}
	else
	{
		printf("成年人\n");
	}
	return 0;
}

c语言修炼第二章--分支与循环_#include_15

这个语句也很简单,但是有一个需要注意的点:else后面不可以直接跟语句!

#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
	{
		printf("未成年\n");
	}
	else(age >= 20)//代码在编译期间会报错
	{
		printf("青年人\n");
	}
	return 0;
}

c语言修炼第二章--分支与循环_#include_16

else后面想要跟语句的话得再加一个if,此时就要用到多分支啦,上代码

#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 < 100)
	{
		printf("老年人\n");
	}
	else
	{
		printf("老年人\n");
	}
	return 0;
}

c语言修炼第二章--分支与循环_switch语句_17

以上的代码有两个需要注意的地方:

  1. else后面不可以直接跟语句,而else if可以直接跟语句(再次强调)!!
  2.  不可以采用数学的写法:50<=age<=100这种写法是错误的·,这种写法才是正确的age>=50&&age<=100

2.2.2悬空else问题

直接上代码!

#include<stdio.h>
int main()
{
	int a = 5;
	int b = 3;
	if (a == 1)
		if (b == 3)
			printf("haha\n");
	else
	 printf("hehe\n");
	return 0;
}

c语言修炼第二章--分支与循环_c语言_18

是会打印hehe还是会打印haha1还是二者都打印亦或是二者都不打印呢?我们一起ctrl+f5来看看结果吧!

c语言修炼第二章--分支与循环_switch语句_19

c语言修炼第二章--分支与循环_c语言_20编辑

 这时我们会发现什么也没有进行打印,这是为什么呢!这是因为else只与离得最近的if进行匹配而不是离得最近的!所以我们的代码应该是这个样子的

#include<stdio.h>
int main()
{
	int a = 5;
	int b = 3;
	if (a == 1)
		if (b == 3)
			printf("haha\n");
	    else
	        printf("hehe\n");
	return 0;
}

c语言修炼第二章--分支与循环_#include_21

为了更好的理解,也可以在if后面使用{ }

#include<stdio.h>
int main()
{
	int a = 5;
	int b = 3;
	if (a == 1)
	{
	  if (b == 3)
		printf("haha\n");
	  else
		printf("hehe\n");
	}
	return 0;
}

c语言修炼第二章--分支与循环_switch语句_22

从这个代码中我们得出两点:

  1. ·else与离得最近的if进行匹配
  2. 在进行书写代码时要注意代码风格的问题。

关于代码风格的问题推荐酱酱们去看林锐博士写的《高质量c/c++编程》,里面有很好的讲述噢!

2.2.3if书写形式的对比

//第一种                              
if (condition) {
	return x;
}
return y;
//第二种
if (condition)
{
	return x;
}
else
{
	return y;
}

c语言修炼第二章--分支与循环_switch语句_23

这俩种进行对比,酱酱们觉得哪种读起来简单明了呢?没错就是第二种!再次强调一遍一定要去看林锐博士写的《高质量c/c++编程》!

2.3switch语句

2.3.1switch的语法形式

sitch(整型表达式)
{
    语句项;
}

c语言修炼第二章--分支与循环_c语言_24

其中语句项由case语句组成!那么case语句的结构是什么样的,上代码!

case 整型常量表达式:
   语句;

c语言修炼第二章--分支与循环_c语言_25

其中值得注意的是:switch里的整型表达式决定了case的入口!

2.3.2 switch与break的关系

题目·:输入1到7可以得出相应的星期,以题目为例来熟悉switch的语法吧

#include<stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期1\n");
	case 2:
		printf("星期2\n");
	case 3:
		printf("星期3\n");
	case 4:
		printf("星期4\n");
	case 5:
		printf("星期5\n");
	case 6:
		printf("星期6\n");
	case 7:
		printf("星期天\n");
	}
	return 0;
}

c语言修炼第二章--分支与循环_switch语句_26

写的很棒,再来运行一下看看结果叭

c语言修炼第二章--分支与循环_c语言_27

c语言修炼第二章--分支与循环_switch语句_28编辑

 我们输入2确实出现了我们想要的星期2,但是为什么还出现星期3到星期天呢?这就不得不要介绍switch与break的关系啦。在switch中,case决定入口,break决定出口。倘如语句中没有break,则会一直执行下去。

#include<stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
		printf("星期1\n");
        break;
	case 2:
		printf("星期2\n");
        break;
	case 3:
		printf("星期3\n");
        break;
	case 4:
		printf("星期4\n");
        break;
	case 5:
		printf("星期5\n");
        break;
	case 6:
		printf("星期6\n");
        break;
	case 7:
		printf("星期天\n");
        break;
	}
	return 0;
}

c语言修炼第二章--分支与循环_switch语句_29

c语言修炼第二章--分支与循环_#include_30

c语言修炼第二章--分支与循环_#include_31编辑

 此时就可以得到我们想要的结果啦!那要是我们想要把1到星期五都输出weekday,星期六和星期天都输出weekend!还是像之前一样写吗?不不不,我们该做一些变动

#include<stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("weekday\n");
		break;
	case 6:
	case 7:
		printf("weekend\n");
	}
	return 0;
}

c语言修炼第二章--分支与循环_switch语句_32

这样是不是简单多啦!再次进行总结:

  • 在switch中搭配break,可以实现真正的分支
  • break语句的实际效果是把语句列表划分为不同的分支部分

最后再来一个注意事项:在最后一个case语句的后面加上一条break语句,这是为了避免之前一个case语句忘了添加break语句。

2.3.3 switch与default的关系

当输入的值与所有项都不匹配,代码运行时也不进行报错,但是我们又并不想要时此时可以用上default语句。default语句的位置可以写在case语句的任意位置。default语句也要跟上一个break噢,利用代码来看看具体的实现形式叭

#include<stdio.h>
int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
	case 1:
	case 2:
	case 3:
	case 4:
	case 5:
		printf("weekday\n");
		break;
	case 6:
	case 7:
		printf("weekend\n");
	default:
		printf("输入错误\n");
		break;
	}
	return 0;
}

c语言修炼第二章--分支与循环_c语言_33

c语言修炼第二章--分支与循环_c语言_34

c语言修炼第二章--分支与循环_switch语句_35编辑

 浅浅的总结一下叭

  • 当switch表达式的值与所有的case标签的值都不匹配时,default子句后的语句就会执行
  • case与整型常量表达式之间有一个空格

以上就是今天的内容啦,端午安康酱酱们!!


上一篇:C语言打印HelloWorld
下一篇:没有了
网友评论