前言:首先我们要知道分支与循环语句一共有九类,他们也被统称为控制语句,从而实现顺序结构,选择结构,循环结构的的程序编写。我们又可以把他们细分为三大类:分支语句,循环语句,转向语句。分支语句包括:if语句,switch语句
循环语句包括:while语句,for语句,do... while语句
转向语句中包括:break语句,continue语句,goto语句(本篇文章未讲),return语句(本篇文章未讲)
1.if语句
1.1 单独的if语句
基本语法形式如下:
if(表达式)
语句;
如果表达式为真(非0),就会执行下面的一句,表达式为假(0),就不会执行语句。/*在c语言中1表示为真0表示为假*/
1.2 if ...else...语句
基本语法形式如下:
if(表达式)
语句1;
else
语句2;
如果表达式为真(非0),就会执行语句1,表达式为假(0),就会执行语句2。
1.3分支中包含多条语句
C语言中默认if和else语句中都只能控制一条语句,如果我们想要他们控制多条语句时候我们该怎么办呢?哈哈很简单的,把控制的语句放在{}中就可以实现啦。
例如:
#include<stdio.h>
int main()
{
if()
{
printf("代阳说:");
printf("我爱陶");
}
else
{
printf("如果陶不喜欢代阳");
printf("代阳还是喜欢陶");
}
return 0;
}
1.4嵌套if
我们生活中常常有很多选择,远远可能大于2个以上,那我们又想要用if语句来编写,那怎么办呢?
if嵌套可以来解决。
if...else...语句中,else可以与另一个if语句连用,构成多重判断。
例子:
if()
{
语句1;
语句2;
}
else if
{
语句3;
语句4;
}
......
else
{
语句5;
}
#include<stdio.h>
int main()
{
int a;
printf("请陶输入:1, 2,3");
while (scanf("%d",&a)!=EOF)
if(a==1)
{
printf("陶答应做代阳女朋友");
}
else if(a==2)
{
printf("陶不得不答应做代阳女朋友");
}
else
{
printf("代阳强迫陶不得不答应做代阳女朋友");
}
return 0;
}
2. switch语句
2.1 switch 实现分支结构的基本结构
其实switch和if都是用来实现分支结构的,不过switch比较特殊,它可以实现多条分支的判断。在多条分支的判断中switch比if嵌套形式呈现的更加清楚,容易解读。但是不代表多条分支的判断我们都盲目的用switch语句,switch语句也有自己的缺点。
基本结构形式如下
switch(expression)
{
case value1: statement
case value2 : statement
......
defalut:statement
}
注意几个点:
1: expression必须为整型表达式
2: case 后面的值必须为整型常量表达式/*在c语言中字符常量表方式也归为整型*/
3: case和后面的值必须空一格,值与“:”可以空格也可以不空格,例如:case 1:或case 1 :
2.2将if嵌套语句程序转化为switch语句
接下来让我把上面写的if嵌套语句转化为switch语句,如下:
#include<stdio.h>
int main()
{
int a;
printf("请陶输入:1, 2,3");
while (scanf("%d",&a)!=EOF)
switch(a)
{
case 1: printf("陶答应做代阳女朋友\n"); break;
case 2: printf("陶不得不答应做代阳女朋友\n"); break;
case 3 printf("代阳强迫陶不得不答应做代阳女朋友\n"); break;
}
return 0;
}
是不是一幕了然了,细心的小伙伴肯定看到后面多个break:下面我们开始讲讲这个break的作用
2.3 switch语句中的break
如果在switch语句中不加入break,那么当输入当陶1时候打印会出现:
陶答应做代阳女朋友
陶不得不答应做代阳女朋友代阳强迫陶不得不答应做代阳女朋友
显然如果 case 1: printf("陶答应做代阳女朋友\n");后面没有break,程序会往下接着运行,所以break在这里是终止程序运行。
2.4 switch语句中的default
defsult语句是在所有情况都不满足时候执行的,现在让我们修改下上面的程序:
#include<stdio.h>
int main()
{
int a;
printf("请陶输入:1, 2,3");
while (scanf("%d",&a)!=EOF)
switch(a)
{
case 1: printf("陶答应做代阳女朋友\n"); break;
case 2: printf("陶不得不答应做代阳女朋友\n"); break;
case 3 printf("代阳强迫陶不得不答应做代阳女朋友\n"); break;
defalut:printf("你输入错啦,请输入1或2或3");
}
return 0;
}
这样当陶输入其他数字时候,就可以提醒她重新输入。
2.5 switch语句中的default和case的顺序问题
注意case和defalut是没有顺序要求的,只是大家习惯于case后面加defalut。只要符合语法规定,defalut可以在case前面。
3. while语句
3.1 while语句的基本形式
基本形式如图:
while(表达式)
{
语句;
}
表达式的值为1,执行语句,表达式值为0,不执行语句。
3.2 while语句的基本执行流程
执行流程:
4. for语句
4.1for语句的基本形式
for(表达式1;表达式2;表达式3)
{
语句;
}
表达式1:初始化,程序中只进行一次。
表达式2:用于程序的判断
表达式3: 用于程序的调整
4.2while语句的基本执行流程
5. do while语句
5.1 do while语句的基本形式
do
{
语句;
}
while(表达式);
这个语句不管判断真假都会先执行一次语句。
while(表达式);后面有一个“;”,不要忘了哦
5.2 do while语句的基本执行流程
6. break语句和continue语句
前言:break的作用是用于永久的终止循环,只要break被执,循环跳出,继续往后执行,Continue语句的作用跳过本次循环中的continue后边的代码,在for语句和while中有差异。
6.1while中的break语句和continue语句
与前言中描述的一样
6.2for中的break语句和continue语句
break语句和前言中描述的一样,但是continue有些区别:
#include<stdio.h>
int main()
{
int a = 0;
while(a<=10)
{
if(a==5)
continue;
printf("第%d天喜欢陶\n",a);
a++;
}
return 0;
}
#include<stdio.h>
int main()
{
int a = 0;
for(int a =0;a<=10;a++)
{
if(a==5)
continue;
printf("第%d天喜欢陶\n");
}
return 0;
}
大家可以看到在while循环中程序陷入了死循环,在for打印的全部的内容,这是因为两个语句调整的顺序不一样,while语句中a++调整部分在continue后面,当第一次a等于5时候if语句成立跳出循环,然后判断a<=10,再次进入循环,a==5 if语句成立再次跳出循环,陷入死循环。for语句中当第一次a等于5时候if语句成立跳出循环,然后会直接跳到调整部分(a++),然后a==6,再次进行判断,后面大家应该都懂
6.3 do...while语句中的break和Continue语句
与前言中描述的一样
7.循环的嵌套
7.1三种循环的嵌套
输入100~200范围数字的全部素数
#include<stdio.h>
#include<math.h>
int main(){
int i = 0;
int count = 0;
for (i = 101; i <= 200; i=i+2)
{
int j = 0;
int flag = 1;
for (j = 2; j <=sqrt(i); j++)
{
if (i % j == 0)
{
flag =0;
break;
}
}
if (flag == 1)
{
printf("%d是素数\n",i);
count++;
}
}
printf("素数有%d个",count);
return 0;
}