C语言第三篇(if/switch语句 头头是道(一))

本文介绍了C语言中的控制语句,包括表达式语句、复合语句、空语句和控制语句。重点讨论了控制语句中的选择语句——if语句的单分支、双分支和多分支形式,以及如何避免‘悬空else’问题。此外,还简述了switch语句的使用,强调了case和break的作用。
摘要由CSDN通过智能技术生成

欢迎关注🔎点赞收藏⭐️留言

坚持不懈的学习进步

锲而不舍,金石可镂

弃而舍之,朽木不折!

废话不多说,接下来进入C语言的世界

首先我们了解一下C语言当中C语句有哪几类?

答案是一共有4类:

1.表达式语句

·表达式语句是C语句中最简单的一种语句,在表达式的末尾加上分号就形成了一个表达式语句

·常见的赋值语句函数调用语句也是表达式语句

x = 1000;
y = 30000;
x *= 10;    
 1;
x + y; //这些语句也是合法的。语句被执行时,表达式求值,但结果并不保存于任何地方
getchar(); 
x++;
printf("hello \n"); //printf函数的返回值通常并不关心。所谓语句“没有效果”只是表示表达式的值被忽略。

上面代码末尾加上了分号就形成了一个表达式语句。

2.复合语句

·复合语句又叫做语句块,将两条以上的语句用{}括起来,即称作复合语句,也可将其称为块语句

或者是块程序

{a=a+b;
if(a==b)
cout<<"a=0"<<endl;
}

 3.空语句

·空语句顾名思义,即只有一个分号的语句,空语句空空如也故什么都不做的语句。

·空语句在循环体中时,表示循环体声明也不做。

;//空语句
for(int a=0;a<10000;a++)
;//循环体为空

4.控制语句 

·控制语句就是用来控制的,控制什么呢,控制的就是程序的执行流程,以实现程序的各种结构方式,控制语句由特定的语句定义符组成,在C语言当中有九种控制语句,并把这九种控制语句分为了三类

这些在C语言当中我们经常见到的语句就被称为控制语句。共九种三类。


接下来我们就一起来探索一下控制语句当中的选择语句if语句 

1.单分支语句

//单分支
if(表达式)
语句;//如果为真,执行语句;否则不执行
//C语言规定:0为假,非0为真

·例:如果年龄为15岁(小于18岁)则输出“未成年”——只有一个分支

 

 2.双分支语句

双分支
//两分支
if(表达式)
语句1;//表达式为真,执行语句1
else
语句2;//否则,执行语句2

·例:如果年龄为15岁(小于18岁)则输出“未成年”,else(大于18岁)则输出“已成年”

int main()
{
	int age = 20;
	if (age < 18)
		printf("未成年\n");
	else
		printf("已成年\n");
	return 0;
}

int main()
{
	int age = 15;
	if (age < 18)
		printf("未成年\n");
	else
		printf("已成年\n");
	return 0;
}

 3.多分支语句

//多分支
if(表达式1)//表达式1为真,执行语句1
语句1;
else if(表达式2)//表达式1为假,表达式2为真,执行语句2
语句2;
else//其余所有情况,执行语句3
语句3;

例:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
		printf("未成年\n");
	else if (18 <= age && age < 28)
		printf("青年\n");
	else if (28 <= age && age < 50);
	printf("壮年\n");

	return 0;
}

4.代码块 

#include <stdio.h>
int main()
{
    if(表达式)
   {
        语句列表1;
   }
    else
   {
        语句列表2;
   }
    return 0; 
}

·如果条件成立,要执行多条语句,应该使用代码块

例:

int main()
{
    int age = 0;
    scanf(" % d", &age);
    if (age < 18)                //情况A
    {
        printf("未成年\n");
        printf("不能谈恋爱\n");
    }//一对大括号,就是一个代码块
    else                     //情况B
    {
        if (18 <= age && age < 28)
            printf("青年\n");
        else if (age >= 50 && age < 50)
            printf("壮年\n");
        else if (age >= 50 && age < 90)
            printf("老年\n");
        else//最后一个else也可以省略
            printf("寿比南山");
    }
    return 0;
}

 5.悬空else

#include<stdio.h>
 
int main()
{
 int a = 5;
 int b = 2;
 if (a == 0)
 
  if (b == 0)
   a = a + b;
 
 else
 
  a = a - b;
 
 printf("a=%d", a);
 return 0;
}

这段代码我们的本意是当a等于0,判断b是否为0,执行下面a=a+b;的语句。如果a不等于0,则执行a=a-b。然而,这只是我们的想法,编译器却没有这么做,原因是C语言中else始终与同一对花括号内最近的未匹配的if结合,这段代码实际上被执行的逻辑是这样的:

#include<stdio.h>
 
int main()
{
 int a = 5;
 int b = 2;
 if (a == 0)
 {
 
  if (b == 0)
   a = a + b;
 
  else
 
   a = a - b;
 }
 printf("a=%d", a);
 return 0;
}

也就是说,当a不等于0时这段代码什么也没做,直接输出a=5。如果想按照原来的想法输出,我们应该这样写:

#include<stdio.h>
 
int main()
{
 int a = 5;
 int b = 2;
 if (a == 0)
 {
  if (b == 0)
  {
   a = a + b;
  }
 }
 else
 {
  a = a - b;
 }
 printf("a=%d", a);
 return 0;
}

现在,else与第一个if结合了,第二个if已经被括号封装起来了。这样,就不会有“悬空else”了。


switch语句

switch在英语中的翻译是开关的意思

在C语言当中switch语句也和if语句一样是一种分支语句

常常用于多分支的情况

话不多说直接给例:

#include<stdio.h>
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)//day必须定义为整型
    {
    case 1+0 ://true 是整型常量就行
        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("星期7\n");
        break;
    }
    return 0;
}

 看到这里可能会不知所措 :这当中的case是啥呀?break是啥呀?

1.switch

switch的圆括号内测试表达的值应该是一个整数值(包括char类型)

2.case

·case 标签必须是整数类型(包括char类型)的常量 或 整型常量表达式(表达式中只包含整形常量)

3.break

·它使程序控制跳出当前循环或switch语句的剩余部分

·break语句 的实际效果是把语句列表划分为不同的分支部分。

break语句是一个跳出循环的语句这个语句与良好的编程习惯息息相关

这次的分享到这里就结束啦,还有许许多多的if switch语句案例没有介绍完,接下来会出一篇本篇的续篇部分。

不积跬步无以至千里,不积小河无以成江海!

谢谢大家的支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值