C语言中的3种结构
我们在了解C语言的语句之前,应先了解C语言中的基本程序结构,从程序流程的角度来看,程序可以分为三种基本结构,即顺序结构、分支(选择)结构、循环结构。
顺序结构:
就是从上往下依次执行语句的结构,就如一条笔直的大路,没有任何转折。
分支(选择)结构:
通过分支语句(选择语句)组成,分支就如我们走到分叉路口,我们要进行方向选择才能接着往前走。
循环结构:
通过循环语句组成,循环就如春夏秋冬四季的变换。
这三种基本结构可以组成所有各种复杂程序。
C语言中提供了多种语句来实现这些程序结构。
这期我们对分支(选择)结构进行讲解。
什么是语句
语句是C程序的基本构建块。在C语言中由一个分号 ;结尾就是一条语句。比如:
printf(“hehe\n”);
1+2;
最简单的语句是空语句:
;//空语句
分支(选择)语句
if语句
if语句的三种形式
//语法结构
//第一种
if(表达式)
语句;
//第二种
if(表达式) //if可以理解为如果的意思
语句1;
else //else就是否则的意思
语句2;
//第三种
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
解释:在第二种和第三种形式中,如果表达式的结果为真,则语句执行。
在C语言中:0表示假,非0表示真。
下面我们来看第一种形式:
if(表达式) 语句;
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d",%age);
if(age<18)
printf("未成年\n");
return 0;
}
//再举个例子
//从键盘上获取两个数,按从大到小输出
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int t = 0;
scanf("%d%d",&a,&b);
if(a<b)
{
t = a;
a = b;
b = t;
}
printf("a = %d,b = %d\n",a,b)
return 0;
}
注意:
(1)如果if后的语句只有一条,可以不用大括号括住。
例如:
if(age<18)
printf("未成年\n");
等价于:
if(age<18)
{printf("未成年\n");}
(2)当if控制多条语句时,则必须用大括号将缩控制的所有语句括起来,否则if只能控制离它最近的那条语句
例如:
if(a<b)
t = a;
a = b;
b = t;
等价于:
if(a<b)
{t = a;}
a = b;
b = t;
第二种形式:if…else分支结构
//演示代码:
//代码1
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d",&age);
if (age >= 18)
{
printf("成年\n");
} //合理使用大括号,可以使代码的逻辑更加清晰,使读者更易读懂
else
{
printf("未成年\n");
}
return 0;
}
//代码2
/输入两个整数,使用if...else结构求最大数,并输出
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
printf("请输入两个整数:");
scanf("%d%d",&a,&b);
if(a>b)
printf("最大数为:%d\n",a);
else
printf("最大数为:%d\n",b);
return 0;
}
第三种形式: 多重选择 if…else if…else
//代码演示
#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;
}
注意: 以上三种形式无论是哪种,在if或者else后面都不需要加分号“;”。因为这样会影响控制范围,甚至导致语法错误。
悬空else:
我们看下列代码
#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呀?实际上当我们运行代码会发现什么都没输出。
其实上方代码等价于:
#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;
}
所以,我们可以看到,在C语言中,如果没有用括号来改变配对关系,else 总是与它前面最近且未配对的 if 进行配对。
适当的使用 { } 可以使代码的逻辑更加清楚
从这我们可以清楚的知道代码风格的重要性,在这我给大家推荐一本书,可以来提高自己的代码风格,不是打广告,哈哈~
高质量的c-c++编程
switch语句
switch语句结构:
switch(整型表达式)
{
语句项;
}
那么语句项时什么呢?
//是一些case语句
//如下:
case 整型常量表达式:
语句;
注意:
(1)switch小括号里面的表达式必须是整型表达式,比如 int、short、long、char。其中的char类型虽然是字符型,但每个字符对应的ASCII值也是整型。
(2)case后面接的也必须是整型常量表达式,其中关键字case与整型常量表达式之间有空格,整型常量表达式后面必须有一个冒号“ :”。
接下来让我们来看看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;
}
阅读上面代码,是不是输入数字几,就会在屏幕上输出星期几呢?我们来运行一下
程序输出的是从我们输入的数开始,将后方输出的内容都打印出来了。
我们应该如何解决这个问题呢?接下来看:
在switch语句中的break
在switch语句中,其实我们没法直接实现分支,搭配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;
}
让我们看看运行代码
这样就得到我们想要的效果啦。
有时候我们的需求变了,比如:
1.输入1-5输出的是”工作日”
2.输入6-7输出的是“休息日”
所以我们的代码就可以这样实现了:
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
}
从这我们就可以看出 break语句 的实际效是把语句列表划分为不同的部分。
编程好习惯
在最后一个case语句的后面加上一条break语句(之所以这么写是可以避免出现在以前的最后一个case语句后面忘了添加break语句)。
default字句
如果表达的值与所有的case标签的值都不匹配怎么办?
其实也没什么,结构就是所有的语句都被跳过而已。
程序并不会终止,也不会报错,因为这种情况在C中并不认为适合错误。
但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢?
你可以在语句列表中增加一条default子句,把下面的标签
default:
写在任何一个case标签可以出现的位置。
当 switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。
所以,每个switch语句中只能出现一条default子句。
但是它可以出现在语句列表的任何位置,而且语句流会像贯穿一个case标签一样贯穿default字句。
编程好习惯
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。
接下来我们来做一道练习结束这期吧
#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
好啦,这期到这,记几天精彩继续。