前言
用 if 语句实现选择结构
用switch 语句实现多分支选择结构
用 for 语句实现循环
用 while 语句实现循环
用 do…while 语句实现循环
continue 和 break 语句的使用
循环的嵌套
goto语句
前言
C 语⾔是结构化的程序设计语⾔,常用的编程结构有三种:顺序结构,选择结构,循环结构。C 语⾔能够实现这三种基本结构,由这三种基本结构组成的程序能处理任何复杂问题。其实我们日常生活中的事情大都可以分为这三种结构。
顺序结构 :顺序结构是最简单的程序设计,输入一段代码,从前往后依次执行,直至结束。
选择结构 :也称分支结构。“选择”顾名思义,就是有选择的执行代码。例如路口有两条路,一条是回家的路,另一条是去往别地的路。而正好你又需要回家,“回家”这个目的就是触发条件。给你一段代码,走到一个有两条路可以走的语句,执行哪一条语句就需要特定条件。
循环结构 :程序会重复执行一段代码,直到触发特定条件而停止。
我们可以使⽤ if ,switch 实现分⽀结构,使⽤ for 、while 、do···while 实现循环结构。
用 if 语句实现选择结构
1.C 语言提供了简单的 if 语句和 if···else 语句,可以用来实现单分支和双分支选择结构。
2.简单 if 语句
简单 if 语句的形式为 :
if(表示条件的表达式)
{
语句体
}
例如:输入一个人的年龄,判断是否成年。可以写出以下语句 :
#include <stdio.h>
int main()
{
int age;
scanf("%d",&age);
if (age >= 18) //条件
printf("成年了\n"); //输出语句
return 0;
}
运行结果 :
18
成年了
表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏。
在C语⾔中,0为假,非0表示真,也就是表达式的结果如果是0,则语句不执⾏,表达式的结果如果是不是0,则语句执⾏。
3.if···else语句
if···else语句是标准的 if 语句,用来实现双分支选择结构,其一般形式为 :
if(条件)
{
语句体1
}
else
{
语句体2
}
如上段代码 :
#include <stdio.h>
int main()
{
int age;
scanf("%d",&age);
if (age >= 18) //条件
printf("成年了\n"); //输出语句
else
printf("未成年\n");
return 0;
}
当我们输入数字 18,这段代码就会打印成年,反之则未成年。
4.嵌套 if
在 if···else 语句中,else 可以与另⼀个 if 语句连⽤,(在 else 部分又嵌套了多层 if 语句)
例如 :
if ( 表达式1 )
else if ( 表达式2 )
else if ( 表达式3 )
··········
else if ( 表达式n )
else
例如 :
if ( num > 100 )
result = 1;
else if ( num > 80 )
result = 2;
else if ( num > 60 )
result = 3;
else
result = 0
另外还有一种情况是 else 悬空问题 :例如有两个 if 语句,第一个if 与代码末尾的 else 对齐。但是这个 else 不是与谁对齐就是匹配谁,所以这个'else'与最近 if 匹配。
用switch 语句实现多分支选择结构
switch 语句是 C 语言中又一种实现多分支选择结构的语句,其一般形式是 :
switch (表达式)
{
case常量表达式1:语句块1
break;
case常量表达式2:语句块2
break;
·································
case常量表达式n:语句块n
break;
[defasult;语句块n+1]
}
其中,switch 后面括号内的表达式的数据类型必须是整型表达式。每个 case 后面的“常量表达式”的值各不相同,它们代表着不同的分支。case 后的值,必须是整形常量表达式。
语句执行的过程为:当 switch 后面括号内表达式的值与某个 case 后面的表达式的值相匹配时,则执行该 case 中的语句块,然后由 break 退出 switch 语句结构。
当 switch 后面括号内表达式的值与每个 case 后面的表达式的值不匹配时,则执行 default 中的语句块,default 部分可写可不写。
注意 :①case 和后边的数字之间必须有空格
②每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句。
switch 语句中 break 语句是⾮常重要的,能实现真正的分⽀效果,当然,break 也不是每个 case 语句都要有,需要根据实际情况来看。
例题 :要求按考试成绩分等级,80分以上为A,60~79为B,50~59为C,60分以下为D,输入等级查看分数范围。
#include <stdio.h>
int main()
{
char Grade = 0;
scanf("%c", &Grade);
printf("Your score in : ");
switch (Grade)
{
case 'A':printf("80~100\n");
break;
case 'B':printf("60~79\n");
break;
case 'C':printf("50~59\n");
break;
case 'D':printf("0~49\n");
break;
default :printf("Enter error\n");
}
return 0;
}
运行结果 :
A
Your score in : 80~100
在上述代码中 case 与 default 语句是没有顺序要求的,不过我们通常是把 default 子句放在最后处理。
注意 :一般情况下,在执行一个 case 子句后,应用 break 跳出 switch 结构,但最后一个 default 子句中不用加 break ,因为程序已经走到 switch 结构结束。
用 for 语句实现循环
for 语句是循环里用的最多的, for 循环的语法形式如下:
for ( 表达式1 ; 表达式2 ; 表达式3 )
循环体语句;
常见的形式为 :
for ( 初始表达式; 循环表达式; 变量增值表达式 )
{
循环体语句;
}
for 循环语句的执行过程 :
①先执行初始表达式。
②计算循环条件表达式,若为非0(真),则执行循环体;若为0(假),则结束循环。
③计算变量增值表达式,然后重复执行第②步。
例如 :
#include <stdio.h>
int main()
{
int i = 0;
for ( i = 1; i <= 10; i++ ) //i由1变道10,循环10次
printf("%d ",i); //执行for循环,输出i的值
return 0;
}
运行结果 :
1 2 3 4 5 6 7 8 9 10
用 while 语句实现循环
1.while 语句的一般格式
while 语句也是循环控制语句,其一般形式为 :
while ( 表达式 )
{
语句体;
}
2.while 语句的执行过程
首先计算表达式的值。如果为非0(真),则执行循环体,然后重新计算表达式的值,并再次判断值是否为真,如果为真,则继续执行,若为0(假),则推出循环结构。
3.while 语句的实践
应用上述例题:在屏幕上打印1~10的值。。
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
运行结果 :
1 2 3 4 5 6 7 8 9 10
while 语句可简单地记为 :只要当循环条件为真,就执行循环体语句。
但为了使循环控制更加灵活,C 语言允许在特定条件成立时,使用break语句强制结束循环。
当有两个循环体时,内层循环使用break语句只能退出内循环。
用 do…while 语句实现循环
除了 while 语句之外,C 语言还提供了 do···while 语句来实现循环结构,不过在几种循环中使用最少。
1. do···while 语句的一般格式
do
{
语句体;
}while ( 表达式 );
2. do···while 语句的执行过程
while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环
do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环
3.do···while 语句的实践
还是以上面打印1-10为例 :
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}
运行结果 :
1 2 3 4 5 6 7 8 9 10
continue 和 break 语句的使用
在循环执⾏的过程中,在某些情况下有时需要提早结束正在执行的循环操作。C 语⾔中提供了 break 和 continue 两个关键字,就是应用到循环中的语句。
1.用 break 语句提前终止循环
如前所述,用 break 语句可以使跳出 switch 结构,继续执行 switch 下面的一个语句。实际上, break 语句话可以用来从循环体内跳出循环体,即提前结束循环,接着执行下面的语句。
break 的作用是⽤于永久的终止循环,只要 break 被执行,直接就会跳出循环继续往后执行
2.用 continue 语句提前结束本次循环
有时不想终止整个循环,而只想提前结束本次循环,接着执行下次循环,这时应使用 continue 语句
continue 的作用是跳过本次循环后边的代码,在 for 循环和 while 循环中有所差异
例如 :要求输出0~50不能被3整出的数。
int main()
{
int n;
for (n = 1; n <= 50; n++)
{
if (n % 3 == 0)
continue;
printf("%d ", n);
}
return 0;
}
运行结果 :
1 2 4 5 7 8 10 11 13 14 16 17 19 20 22 23 25 26 28 29 31 32 34 35 37 38 40 41 43 44 46 47 49 50
循环的嵌套
一个循环体内又包含另一个循环结构称为循环的嵌套。内嵌的循环还可以嵌套循环,这就是多层循环。
3 种循环 ( while循环、do···while 循环和 for 循环 )都可以相互嵌套。
例如,下面六种都是符合的。
例题 :要求打印1-100之间的素数。
#include <stdio.h>
int main()
{
int i = 0;
//循环产⽣1~100的数字
for (i = 1; i <= 100; i++) //判断i是否为素数
{ //循环产⽣2~i-1之间的数字
int j = 0;
int flag = 1; //假设i是素数
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d ", i);
}
return 0;
}
运行结果 :
1 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
goto语句
在C语言中,使用goto语句可以跳转到程序中的某个标记位置。常用于处理特殊情况,或者在某些情况下简化程序结构。
但 goto 语句如果使用不当,就会导致在函数内部随意乱跳转,打乱程序的执行,所以能不用尽量不用。
goto 语句的基本用法
goto 标记名;
...
标记名:语句;
其中,标记名是一个标识符,后面接一个冒号(:),表示这是一个标记位置。goto语句执行时,会跳转到标记名所在的位置,并从那里开始执行后面的语句。
例如 :
int main()
{
printf("Hello\n");
goto next;
printf("Hi\n"); //跳过了Hi的打印
next:
return 0;
}
运行结果 :
Hello
完
因本人能力有限,若文中有不当之处请多多包涵。