C语言是结构化的程序设计语言!
顺序结构
选择结构 对应 分支语句
循环结构 对应 循环语句
第一节 分支语句:if 和 switch
什么是语句?
C语言中由一个分号;隔开的就是一条语句。比如
printf("haha");
;//这个叫空语句
一、 if语句
C语言如何表示真假:非0为真,0为假
1. if语句的语法结构:
//形式1
if(表达式)//表达式为真则执行
语句;
//形式2
if(表达式)
语句1;//表达式为真则执行
else
语句2;//表达式为假则执行
//形式3多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;//如果没用{ }则只能控制一条语句!!!如果下面还有语句则不受其控制!!!
else
{
语句3;
语句4;
}//用{ }可以执行多条语句;{}叫做代码块
/******** 举例 *************/
//形式1
int age=10;
if (age>=18)
printf("成年\n");//结果什么都不显示
//形式2
int age=10;
if (age>=18)
printf("成年\n");
else
printf("未成年\n");
//形式3
int age=60;
if (age<18)
printf("少年\n");
//else if (18<=age<26)//这种写法是错误的
//因为执行过程是这样的:age=60是大于18,所以为真,“18<=age”这一部分就变成了1,1<26,所以此语句为真
else if (age>=18 && age<26)//正确写法
printf("青年\n");
else if (age>=26 && age<40)
printf("中年\n");
else if (age>=40 && age<60)
printf("壮年\n");
else if (age>=60 && age<100)
printf("老年\n");
else
printf("神仙\n");
2. 悬空else
当你写了这样的代码:
int main()
{
int a=0,b=2;
if(a==1)
if(b==2)
printf("haha\n");
else
printf("xixi\n");
return 0;
}
结果是:什么都不打印
因为else和最近的一个if匹配
上述代码相当于:
int main()
{
int a=0,b=2;
if(a==1)
{
if(b==2)
printf("haha\n");
else
printf("xixi\n");
}
return 0;
}
代码风格养成——《高质量C/C++编程》
3.if语句书写形式对比
//代码1
if (condition)
{
return x;
}
return y;
//代码2
if (condition)
{
return x;
}
else
{
return y;
}
代码1和代码2相同,但选择代码2,因为代码1会使理解出错
当用常数和变量比较时,常量放左边,不易出错
//代码3
if (a==1)
//如果写成
//if(a=1)
//输出结果是一样的,但是代码逻辑错误
//为了避免这种错误,采用代码4的写法
printf("hahha");
//代码4
if (1==a)
printf("haha");
4.练习:
1.判断一个数是否为奇数
2.输出1-100之间的奇数
//1.判断一个数是否为奇数
int main()
{
int num=0;
scanf("%d",&num);
if(num%2==1)
printf("奇数");
return 0;
}
//2.输出1-100之间的奇数
int main()
{
int i=0;
for(i=0;i<=100;i++)
{
if(i%2==1)
printf("%d ",i);//%d后面用空格隔开
}
return 0;
}
//C++和C99支持这样写:
// for (int i = 1; i<=100; i++)
//写法2
for(int i=1;i<=100;i+=2)//vs2022支持这样写
{
printf("%d ",i);//%d后面用空格隔开
}
二、switch语句
switch语句也是一种分支语句,常用于多分支的情况
比如:
输入1,输出星期一
输入2,输出星期二
输入3,输出星期三
输入4,输出星期四
输入5,输出星期五
输入6,输出星期六
输入7,输出星期七
如果写成if…else if …else if 的形式太复杂,那用switch语句可以使形式变简单
1.switch语句语法结构
switch(整型表达式)
{
语句项;
}
语句项是什么?
//是一些case语句:
//如下:
case 整型常量表达式:
语句;
注意细节:
case后面只能用整型!!常量表达式!!!
case决定的是执行的入口在哪里;break决定的是出口在哪里(break是用来跳出某一个分支,并不是一定要用)
break语句的实际效果是把语句列表划分为不同的部分
/********** 举例 *************/
//用switch语句输出星期一~七
int main()
{
int day = 0;
scanf("%d",&day);
switch (day)
{
case 1://如果day的值为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("星期7\n");
}
return 0;
}
//实际上输出结果为:
输入:1 | 输入2 |
---|---|
输出: | 输出 : |
星期1 | |
星期2 | 星期2 |
星期3 | 星期3 |
星期4 | 星期4 |
星期5 | 星期5 |
星期6 | 星期6 |
星期7 | 星期7 |
所以 case 决定的是执行的入口在哪里
想要正确执行任务,需要用break来决定出口的位置(用来跳出某一个分支)
//用switch语句输出星期一~七
int main()
{
int day = 0;
scanf("%d",&day);
switch (day)
{
case 1://如果day的值为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("星期7\n");
break;
}
return 0;
}
输入:1
输出:星期1
break并不是必须每个case都要用,而是按项目需求来使用
举例:
//1-5是工作日
//6-7是休息日
int main()