目录
C语言是一个结构化的程序设计语言,这里的结构是指的顺序结构、循环结构、选择结构,C语言是能够实现这些结构的。
一、分支
1.if语句
1.1 if
(1)语法形式
if(表达式)
{
语句
}
- 表达式既可以是数字、变量,又可以是含有操作符的表达式。
- 当只有一条语句时,可以不用{};但是,当有多条语句时,需要用{}将语句给括起来。给语句加上{}是一个好的编程习惯。
(2)执行流程
当表达式成立(为真)时,语句就执行;当表达式为假,则语句不执行。C语言中0为假,非0表示真。
在该示例中,由于a不等于b,表达式为假,因此第一个if语句并未被执行;第二个if的表达式为真,
语句被执行,屏幕输出hehe。
1.2 else
else表示其他的、另外的意思,常和if连用,构成if....else语句。其语法形式如下:
if(表达式)
{
语句
}
else
{
语句
}
当if的表达式为假时,编译器会跳过if中的语句,转而执行else中的语句。
如图所示,当输入值为奇数时,程序跳过if语句,执行else语句;当输入值为偶数时,程序执行if语句。
1.3 嵌套if
在if...else语句中,else可以与另一个if结合,构成多重判断。
#include<stdio.h>
int main()
{
int score = 0;
scanf("%d", &score);
if (score < 60)
{
printf("不及格,准备补考\n");
}
else if (score < 90)//这里的if相当于嵌套在了else语句中,形成了嵌套结构
{
printf("合格\n");
}
else
{
printf("优秀\n");
}
return 0;
}
在该代码行中,第二个if和前面的else构成了嵌套,形成了嵌套结构。
1.4 悬空else问题
#include<stdio.h>
int main()
{
int a = 0;
int b = 5;
if(a == 1)
if(b == 1)
printf("haha\n");
else
printf("hehe\n");
return 0;
}
在该代码中,编译器会输出hehe。因为在有多个if和else的情况下,else总是会和离他最近的if相匹配。
在写代码时要有一个良好的代码风格,在写分支、循环语句时,要用{}将相应的代码块括起来。如:
#include<stdio.h>
int main()
{
int a = 0;
int b = 5;
if(a == 1)
{
if(b == 1)
{
printf("haha\n");
}
else
{
printf("hehe\n");
}
}
return 0;
}
这样将会让其他人更好的理解你编写的代码的意思。
2.switch语句
2.1 语法形式
switch(expression){
case value 1:
statement
case value 2:
statement
default:
statement
}
- expression必须是整形表达式
- case后面的值必须是整型常量表达式
- 可以在statement后面加上break,在执行完该语句后跳出;如需继续执行下面语句可以不用加break
编译器会根据表达式不同的值,执行case的分支,如果找不到对应的值,就执行default分支。
2.2 switch中的break
break会使得编译器执行完相应case中的语句后跳出switch语句,如果case语句后面没有添加break的话,那么代码就会一直往下执行,直到遇见下一个break或者将switch语句执行完。因此,在switch中添加break是非常重要的,它是分支实现的关键。
如图便是没有正确使用break的结果。
2.3 switch语句中的default
在我们使用switch语句时,有时会遇到输入值与case后面的值无法匹配的问题,此时就需要switch语句中的default来处理。
就如该图所示一样,当输入值无法与case后面的指向匹配时,编译器就会执行default子句,在屏幕上输出提示内容。
注:在switch语句中,case和default语句是没有顺序要求的,只要顺序满足实际需求即可。通常,我们习惯性的吧defualt放在最后。
二、 循环
C语言提供了3种循环结构:while循环、do-while循环、for循环。
1.while循环
1.1 语法结构
while语句和if语句的语法结构非常类似
if(表达式)
{
语句;
}
while(表达式)
{
语句;
}
只有当表达式为真的时候后面的语句才会被执行。
1.2 while的实现形式
编译器执行判断表达式--->表达式值不为0(若表达式值为0)----->执行循环语句,并进行下一次判断(循环结束)
#include<stdio.h>
int main()
{
int a = 0;
while(scanf("%d",&a)!=EOF)
{
printf("%d",a);
}
return 0;
}
如图,该代码实现了循环输入和输出,当输入值不是EOF是,程序就读取用户的输入值并输出。当用户输入值是EOF时,程序就停止运行,循环结束。
注:EOF全称是end of the file,他的返回值是-1
2.do-while循环
do-while循环和while循环相似,唯一的区别就是while循环是先判断表达式,do-while循环是先执行语句,然后在判断表达式。
do-while循环的语法结构
do
{
语句
}while();
3.for循环
for循环是所有循环中使用最多的一种循环
3.1for循环的语法形式
for(exp1;exp2;exp3)
{
语句;
}
- exp1用于初始化变量
- exp2用于循环结束的条件判断
- exp3用于与循环变量的调整
3.2 for循环的执行流程
⾸先执⾏ 表达式1 初始化循环变量,接下来就是执⾏ 表达式2 的判断部分, 表达式2 的结果如果==0,则循环结束; 表达式2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表 达式3 ,调整循环变量,然后再去 表达式2 的地⽅执⾏判断, 表达式2 的结果是否为0,决定循环是否继续。
整个循环中表达式1只被执行一次,剩下就是表达式2、表达式3、循环语句在循环
#include<stdio.h>
int main()
{
int i = 0;
for(i=1; i<11; i++)
{
printf("%d\n",i);
}
}
运行结果:
3.3 for循环和while循环对比
for 和 while 在实现循环的过程中都有初始化、判断、调整这三个部分,但是 for 循环的三个部
分⾮常集中,便于代码的维护,⽽如果代码较多的时候 while 循环的三个部分就⽐较分散,所以从形式上 for 循环要更优⼀些。
4.continue与break
1.continue
countinue主要在循环之中使用,不能在分支中使用
continue的作用
continue 的作⽤是跳过本次循环中 continue 后边的代码,在 for 循环和 while 循环中有
所差异的。
(1)while循环中的continue
在while循环中,continue语句会跳过后面的语句,直接执行while语句中的条件表达式,然后决定是否该进行下一次循环。
(2)for循环中的continue
在for循环中,continue语句会跳过后面的代码,直接来到for循环的调整部分,然后再判断是该执行下一次循环 。
2.beak
break可以在循环和switch语句中使用
break的作用
break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执
⾏。
由以上两个图可知:不论是在while循环还是for循环中,当程序遇到break语句后就会停下来,跳出循环 ,继续往后执行。