文章目录
一、分支结构
1.if语句
2.if-else语句
3.多重if-else语句
4.嵌套if-else语句
二、循环结构
1.while循环
2.do-while循环
for循环
三种循环结构的比较
循环结构之多重循环
三、结束语句
1.break语句
2.continue语句
四、分支结构
1.switch 语句
五、goto 语句
六、多实例测试
—————————————————————————————————————
一、分支结构
1.if语句
if语句的基本结构:
if语句通过对一个条件判断,当条件为真时,执行{}
中的语句,否则,则不执行该语句。
if语句的语法格式如下:
if(表达式)
{
执行代码块;
}
注意:if()
后面不加入分号,在其之后直接加入{}
2.if-else语句
if-else语句通过对一个条件进行判断,当条件为真时,执行一个操作,否则执行另一个不同的操作。
if-else语句的语法格式如下:
if(表达式)
{
语句1;
}
else
{
语句2;
}
注意:
(1)if()后面没有分号!如果不小心在后面加了分号,会有语法错误,错误提示会指向else:非法的else,没有与之匹配的if
(2)如果if和else后的语句只有一句,可以去掉{}
,当语句超过两句时,必须要加入{}
。加入花括号可以明确表示if 或else的控制范围。
3.多重if-else语句
多重if-else语句通过依次判断表达式的值,当出现某个表达式的值为真时,则执行表达式所对应的操作,否则则执行else所对应的操作。
多重if-else语句的语法格式:
if(表达式1)
{
语句1;
}
else if(表达式2)
{
语句2;
}
……
else if(语句m)
{
语句m;
}
else
{
语句n;
}
注意:当某一个表达式为真时,则不会向下执行该分支结构的其他语句。
4.嵌套if-else语句
通常将一个if-else语句放在另一个if-else语句中形成嵌套的if-else语句。
嵌套if-else语句的语法格式:
if(表达式1)
{
if(表达式2)
{
语句2;
}
else
{
语句3;
}
}
else
{
语句4;
}
二、循环结构
在C语言中,反复不停的执行某个动作就是我们常称的循环,C语言提供了循环语句来实现重复处理。在C语言中,每个循环都有一个控制表达式,每执行一次循环体,都对控制表达式进行求值,如果表达式非0,则继续执行循环。C语言有三种循环语句,即while语句,do语句和for语句。while循环再执行循环体之前测试控制表达式,do循环在循环体执行之后测试控制表达式,for循环则非常适合那些指定循环次数的循环。
1.while循环
while循环适用于如果某个条件为真的情况下,希望反复执行一个操作,那么while语句最为简单易用。
while语句的一般格式如下
while(表达式)
{
循环体语句;
}
功能:当表达式值非0时,重复执行循环体语句。
执行过程:首先计算圆括号中的表达式的值,如果值非0,则继续执行循环体语句,接着再判定表达式。这个过程持续到表达式值为0时才结束。
下面,看一道经典的使用while循环的题目:
/*程序:使用while循环求10个整数的和*/
#include<stdio.h>
int main(void)
{
int i,number,sum;/*number用来暂存读入的整数,sum存储累加和*/
sum=0;/*sum赋值为0*/
i=1;/*循环变量i赋值为1*/
printf("请输入10个整数:\n");
while(i<=10) /*循环条件是i不大于10*/
{
scanf("%d",&number);/*读入一个整数存入number*/
sum+=number;/*number累加到变量sum中*/
i=i+1;/*循环变量i增加1,也可以写成i++*/
}
printf("累加和为:%d\n",sum);/*输出累加和*/
return 0;
}
注意:
(1)由于计算机的浮点数只是一个近似值,因此,用浮点数来做循环控制变量可能会得到一个不精确的数值,从而导致循环终止条件测试错误,所以要用整数值来控制技术循环。
(2)对控制语句头所控制的内部语句要进行缩进,控制语句的前后都要留出空行,能使程序具有二维的层次感,极大地提高了程序的可读性。
(3)如果while循环的循环体中,没有最终将条件改变为假的操作,那么循环将永远不会终止——这就是所谓的死循环(也就是为无限循环)。
2.do-while循环
do-while循环是先执行循环中的语句,再判断while中的表达式是否为真,如果为真,则继续循环;如果为假,则终止循环。因此,do-while循环至少要执行一次循环语句。
do-while语句的一般格式如下:
do
{
语句1;
}while(表达式);//切记,这里有分号。
注意:当使用do-while语句时,while的括号后面必须加分号。
3.for循环
for循环语句能够处理计数控制的所有细节,是功能最强大的一种循环语句,是编写许多循环的最佳方法。
for语句的标准格式如下:
for(表达式1;表达式2;表达式3)
{
语句;
}
执行过程:
(1)执行表达式1,对循环变量做初始化,只执行一次。
(2)判断表达式2,若其值为真(非0),则执行for循环中的语句,然后向下执行;若其值为假(为0),则结束循环。
(3)每次循环中最后一个被执行的操作。设置循环的步长,改变循环变量的值,从而可改变表达式2的真假性。
(4)当循环结束时,程序向下执行。
在绝大多数情况下,上述for语句可以表示成如下的while语句
表达式1
while(表达式2)
{
语句;
表达式3;
}
在for循环中:
(1)表达式1是一个或多个赋值语句,它用来控制变量的初始值;
(2)表达式2是一个关系表达式,他决定什么时候退出循环;
(3)表达式是循环变量的步进值,定义控制循环变量每循环一次后按什么方式进行变化。
(4)这三个部分用分号;
隔开;千万记得不要写成逗号。
for语句的注意事项:
(1)for语句头中的三个表达式:初始化,循环继续条件和增量操作都可以包含算术表达式
例如:
for(i=m+1;i<=4*n;i+=n/m)
(2)控制变量的增量可以是负值,在这种情况下,循环计数是递减的。
例如,下面程序段的作用是“倒计数”信息
for(i=10;i>0;i=i-1)
{
printf("%d ",i);
}
(3)for语句中的三个表达式是可选的。如果将表达式2省略,则认为循环继续条件总是真,这将导致一个无限循环。如果对循环控制变量的初始化工作已经在程序的其他地方完成了,那么表达式1可以省略。如果循环控制变量的增值工作是由for循环体中的语句完成的,或者根本不需要增量工作,那么表达式3也可以省略。for循环语句中的增量表达式可以用循环体末尾的单独一句来替换。
(4)表达式1和表达式3可以是一个简单的表达式也可以是多个表达式以逗号分隔
int sum,num;
for(sum=0,num=0;num<=3;num++,sum++)
{
sum+=num;
printf("num=%d,sum=%d\n",num,sum);
}
(5)如果循环范围多于一个语句,必须加{}
构成复合语句,初学者很容易忘掉{}
,结果造成错误。
例如:
for(i=1;i<=n;i++)
scanf("%d",&number);
sum+=number;
则等价于如下程序段
for(i=1;i<=n;i++)
{
scanf("%d",&number);
}
sum+=number;`
语句sum+=number就在循环体之外了。
(6)
如果不小心在for循环的圆括号后面加上分号,会创造空语句,且会被编译器认为循环的内容就是该空语句。
for(i=1;i<=n;i++)
{
scanf("%d",&number);
sum+=number;
}
该语句等价于:
for(i=1;i<=m;i++)
{
;
}
scanf("%d",&number);
sum+=number;
该语句被编译为器理解为循环体,设计者理解中的循环体会被编译器理解为循环语句的后续语句,再循环结束之后,只执行一次。
(7)循环控制变量,除了用于控制循环,还可以用用用于循环体的计算中。不过最好不要在for循环中中改变循环控制变量的值,这样做可能会造成一些隐蔽性错物。
循环结构之三种循环比较
while,do-while和for三种循环在具体使用场景中是有区别的:
1.在知道循环次数的情况下更适合使用for循环
2.在不知道循环次数时适合使用while或do-while
(1)如果有可能一次都不循环应该考虑使用while循环
(2)如果至少有一次循环应考虑使用do-while循环
循环结构之多重循环
多重循环就是在循环结构中又出现循环结构
但是在实际开发中最多使用到三层多重循环
因为循环层数越多,运行时间长,程序就越复杂,所以最多使用到2-3层多重循环。另外,不同循环之间也是可以嵌套的。
多重循环在执行过程中,外层循环为父循环,内层循环为子循环。
父循环执行一次,子循环就要全部执行完,直到跳出子循环。父循环则再进入下一次,子循环则继续执行……
#include<stdio.h>
int main(void)
{
int i,j,k;
for(i=1;i<5;i++)
{
//观察每行空格数量,补全循环条件
for(j=1;j<5;j++)
{
printf(" ");//输出空格
}
for(k=0;k<2*i-1;k++)
{
printf("*");//每行输出*号
}
printf("\n");//每次循环之后换行,打印下一行
}
return 0;
}
三、结束语句
1.break语句
break语句一般用于提前退出循环或跳出switch语句,执行break语句将导致程序立即从这些语句中跳出,转去执行紧跟的下一条语句。
例如,去操场跑步,计划跑10圈,但在跑步过程中,如果感到身体不适,可以提前结束跑步,回去休息
上述情况可以表现为一下逻辑
for(i=1;i<=10;i++)
{
if(感到身体不适)
break;
}
使用break
语句注意以下几点
1.在没有循环结构的情况下,break不能使用在单独的if-else语句中。
2.在多重循环中,一个break语句只能跳出一层循环且只能是当前循环。
2.continue语句
利用continue语句能中断循环体的本次执行(即跳过循环体尚未执行的语句),立即开始新一轮的循环。
break语句和continue语句的区别是:
break语句是跳出当前整个循环,continue语句是结束本次循环开始下一次循环。
四、分支结构
1.switch 语句
当问题需要处理的分支情况比较多时(一般大于3种),通常使用开关语句代替条件语句来简化程序设计。开关语句就像多路开关一样,使程序控制流程形成多个分支,根据一个表达式的不同取值,选择一个或几个分支执行。C语言的开关语句也称为switch语句。
switch语句的最常用格式:
switch(表达式)
{
case 常量表达式1:语句序列1 break;
case 常量表达式2:语句序列2 break;
……
case 常量表达式n:语句序列n break;
default : 语句序列 n+1
}
switch 语句往往比多分支if语句更容易阅读。另外,switch语句往往比if语句执行速度快,特别是在有许多情况需要判定的时候。
注意:
(1)在case后的各常量表达式的值不能相同,否则会出现错误
(2)在case后面,如果没有break,会一直执行直到遇见break,才会跳出switch语句
(3)switch后面的表达式语句只能是整形或字符型。
(4)在case后,允许有多个语句,可以不用{}
括起来
(5)各case和default语句的先后顺序可以变动,而不会影响程序的执行结果。
(6)default语句可以省略不用。
switch与if语句的应用
计算是该年的第几天
#include<stdio.h>
int main(void)
{
int date=0;
int year=2008;
int month=8;
int day=8;
switch(month)
{
case 12 :date+=30;
case 11 :date+=31;
case 10 :date+=30
case 9 :date+=31
case 8 :date+=31
case 7 :date+=30
case 6 :date+=31
case 5 :date+=30
case 4 :date+=31
case 3 :
if(year%4==0&&year%100!=0||year%400==0)
{
date+=29;
}
else
{
date+=28;
}
case 2:date+=31;
case 1:date+=day;
printf("%d年%d月%d日是该年的第%d天“,year,month,day,date);
break;
default:
printf("error");
break;
}
return 0;
}
五、goto 语句
C语言中的goto语句是一种无条件分支语句,goto语句可以跳转到函数中任何有标号的语句处。goto语句是一个古老的语句,是循环语句的前身。在计算机发展的早期,程序就是由几个语句+语句标号+跳转语句组成的。
goto语句的格式
goto 语句标号;
语句标号:语句标号由一个标识符加一个冒号组成,它标识程序的一个特定位置,一般放在一段可执行语句的左边。
功能:将程序转换到指定位置继续执行。
goto语句是怎样实现循环的?以求1-100的累加和为例:
sum=0,i=1;
loop:sum=sum+1;
i++;
if(i<=100)//如果i<=100,跳转到loop处,从而实现循环
goto loop;
printf("%d\n",sum);
goto语句通常不用,主要因为它会破坏程序的结构,且不易读,容易带来隐患。但当需要从多重循环退出,或包含switch语句的循环中退出时,用goto语句比较合理。
以上就是有关C语言的分支结构与循环结构的讲解,希望我的文章能够帮助到正在学习C语言的你。正所谓实践是检验真理的唯一标准,也希望你能够自己尝试去写一些关于分支结构与循环结构的题目,加深对这篇文章的理解。愿你们都能学有所成!希望喜欢我的小伙伴们,点点关注,多多评论,感谢!!!