搭建网站 软件下载,wordpress文章分类显示,网站销售系统,将网页加入可信站点[C语言]分支语句和循环语句 文章目录 [C语言]分支语句和循环语句C语言语句分类分支语句if语法结构else的匹配规则switch语句switch语句中的breakswitch语句中default 循环语句while循环while循环中的break和continuefor循环for循环中的break和continuefor循环的变种do while循环…[C语言]分支语句和循环语句 文章目录 [C语言]分支语句和循环语句C语言语句分类分支语句if语法结构else的匹配规则switch语句switch语句中的breakswitch语句中default 循环语句while循环while循环中的break和continuefor循环for循环中的break和continuefor循环的变种do while循环do while循环中的break和continue goto语句 C语言语句分类
C语言的语句可分为以下五类
表达式语句函数调用语句控制语句复合语句空语句
其中控制语句用于控制程序的执行流程以实现程序的各种结构方式C语言有九种控制语句。 可分成以下三类
条件判断语句也叫分支语句if语句、switch语句循环执行语句do while语句、while语句、for语句转向语句break语句、goto语句、continue语句、return语句。
C语言是结构化的程序设计语言包含如下结构
顺序结构 – 按照代码既定顺序执行选择结构 – 选择一部分代码执行循环结构 – 重复执行同一段代码 C语言通过分支语句来形成选择结构通过循环语句来形成循环结构。无论是分支语句还是循环语句都属于控制语句。
分支语句
if语法结构
if语句有以下三种语法结构:
单分支
语法结构
if(表达式)语句;表达式为真执行语句。
#include stdio.hint main()
{int age 16;if (age 18) //表达式为真输出未成年printf(未成年\n);return 0;
}双分支
if(表达式)语句1;
else语句2;表达式为真执行语句1。表达式为假执行语句2。
#include stdio.hint main()
{int age 20;if (age 18) //表达式为假输出成年printf(未成年\n); elseprintf(成年\n);return 0;
}多分支
if(表达式1)语句1;
else if(表达式2)语句2;
else语句3;表达式1为真则执行语句1。表达式2为真执行语句2。else前的所有表达式都为假执行语句3。可以使用多个else if来控制多个分支。
#include stdio.hint main()
{int age 59;if (age 18)printf(未成年\n);else if (age 18 age 60) //该表达式为真输出成年printf(成年\n);elseprintf(老年\n);return 0;
}补充
C语言中0表示假1表示真。if语法结构中无论有多少分支最终只能选择其中一个分支执行。if、else if、else只能控制后续的一条语句如果要控制多条语句需要用{}将语句变成代码块。
代码块中可以有多条语句,使用代码块的结构如下:
#include stdio.h
int main()
{if(表达式){语句列表1}else{语句列表2}return 0;
}else的匹配规则
else是和它离的最近的if匹配的。
#include stdio.hint main()
{int a 0;int b 2;if (a 1)if (b 2)printf(hehe\n);elseprintf(haha\n);return 0; //没有输出
}由于else匹配的是最近的ifelse是和if (b 2)语句匹配的因此当if (a 1)中条件不成立时打印语句就都不会被执行。为了提高代码的可读性建议修改成如下写法:
#include stdio.hint main()
{int a 0;int b 2;if (a 1){if (b 2)printf(hehe\n);elseprintf(haha\n);}return 0;
}以上两段代码的功能是相同的但是由于书写方式不同可读性就有所不同。
switch语句
switch语句也是一种分支语句常常用于多分支的情况。
switch语句的主要语法结构如下:
switch(整型表达式)
{case 整形常量表达式:语句;//...
}switch中必须使用整形表达式作为判断对象。case中必须使用整形常量表达式作为判断条件。switch中的整形表达式和case整形常量表达式进行对比判断进行选择进入到对应的case情况中。
#include stdio.hint main()
{int day 0;scanf(%d, day); //输入为4switch (day){case 1:printf(星期一\n);case 2:printf(星期二\n);case 3:printf(星期三\n);case 4:printf(星期四\n);case 5:printf(星期五\n);case 6:printf(星期六\n);case 7:printf(星期天\n);}return 0;//输出为星期四 星期五 星期六 星期天
}虽然在上面这段代码中day选择了case 4但是由于该情况中没有控制结束因此switch语句会顺序执行将case 5、case 6、case 7也执行。
switch语句中的break
在switch语句中的 break可以把语句列表划分为不同的分支部分。
#include stdio.h
int main()
{int day 0;scanf(%d, day);//输入为4switch (day){case 1:printf(星期一\n);break;case 2:printf(星期二\n);break;case 3:printf(星期三\n);break;case 4:printf(星期四\n);break;case 5:printf(星期五\n);break;case 6:printf(星期六\n);break;case 7:printf(星期天\n);break;}return 0;//输出为星期四
}在执行完case 4中的语句后break控制了该情况结束跳出并且结束switch语句。
switch语句中default
default表示除以上case情况外的所有情况。
#include stdio.h
int main()
{int day 0;scanf(%d, day); //输入8switch (day){case 1:printf(星期一\n);break;case 2:printf(星期二\n);break;case 3:printf(星期三\n);break;case 4:printf(星期四\n);break;case 5:printf(星期五\n);break;case 6:printf(星期六\n);break;case 7:printf(星期天\n);break;default:printf(输入错误\n);break;}return 0; //输出为输入错误
}循环语句
while循环
while循环的语法结构:
while(表达式)循环语句;循环判断表达式表达式为真执行循环语句。表达式为假结束循环。循环语句为多条语句时需要使用{}将其变成代码块。
#include stdio.hint main()
{int i 0;while (i 5){printf(%d , i);i;}return 0; //输出 0 1 2 3 4
}while循环中的break和continue
while中的break是用于永久终止循环的。在循环中只要遇到break就停止后期的所有的循环直接终止循环。
#include stdio.hint main()
{int i 0;while (i 5){if (i 3)break;printf(%d , i);i;}return 0; //输出为 0 1 2
}当i3时while表达式判断为真执行循环语句if表达式判断为真执行break语句终止了while循环。
continue是用于终止本次循环的也就是本次循环中continue后边的代码不会再执行 而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
#include stdio.hint main()
{int i 0;while (i 5){i;if (i 3)continue;printf(%d , i);}return 0; //输出为 1 2 4 5
}当i3时while表达式判断为真执行循环语句if表达式判断为真执行continue语句终止了本次循环进入了下一次循环。
while循环的大致流程图: for循环
for循环的语法结构
for(表达式1; 表达式2; 表达式3)循环语句;表达式1为初始化部分用于初始化循环变量的。表达式2为条件判断部分用于判断循环时候终止。表达式3为调整部分用于循环条件的调整。循环语句为多条语句时需要使用{}将其变成代码块。
#include stdio.hint main()
{int i 0;for (i 1; i 10; i){printf(%d , i);}return 0; //输出为 1 2 3 4 5 6 7 8 9
}for循环中的break和continue
在for循环中也可以出现break和continue他们的意义和在while循环中是一样的。
#include stdio.hint main()
{int i 0;for (i 1; i 5; i){if (i 3)break;printf(%d , i);}return 0; //输出为 1 2
}当i3时for表达式判断为真执行循环语句if表达式判断为真执行break语句终止了for循环。
#include stdio.hint main()
{int i 0;for (i 1; i 5; i){if (i 3)continue;printf(%d , i);}return 0; //输出为 1 2 4
}当i3时for表达式判断为真执行循环语句if表达式判断为真执行continue语句终止了本次循环进入了下一次循环。
for循环的大致流程图: for循环的变种
#include stdio.hint main()
{for (;;){printf(hehe\n);}return 0; //死循环输出 hehe
}for循环中的初始化部分判断部分调整部分都是可以省略的全部都省略相当于循环条件永远为真。
#include stdio.hint main()
{int i 0;int j 0;for (i 0; i 10; i){for (j 0; j 10; j){printf(hehe\n);}}return 0; //输出为100个hehe
}for循环进行了嵌套外层循环循环10次外层循环每次都执行一次内层循环一次内层循环执行10次因此一共是100次。
#include stdio.hint main()
{int i 0;int j 0;for (; i 10; i){for (; j 10; j){printf(hehe\n);}}return 0; //输出为10个hehe
}for循环进行了嵌套外层循环循环10次外层循环每次都执行一次内层循环第一次内层循环执行10次后j为10下一层内层循环没有初始化j依旧为10内层循环无法再执行因此一共是10次。
#include stdio.hint main()
{int x, y;for (x 0, y 0; x 2 y 5; x, y){printf(hehe\n);}return 0; //输出为2个hehe
}循环的判断条件是x 2 y 5,循环两次后x2不再满足因此只能执行两次。
#include stdio.hint main()
{int i 0;int k 0;for (i 0, k 0; k 0; i, k)k;return 0;
}判断条件是k0,是一个赋值语句赋值语句的结果为所赋的值因此该语句的结果为0循环一次都不执行。
do while循环
do while循环的语法结构
do循环语句;
while(表达式);先执行一次循环语句在判断表达式因此循环至少执行一次。循环语句为多条语句时需要使用{}将其变成代码块。
#include stdio.hint main()
{int i 1;do{printf(%d , i);i;} while (i 5);return 0; //输出 1 2 3 4 5
}do while循环中的break和continue
#include stdio.h
int main()
{int i 1;do{if (3 i)break;printf(%d , i);i i 1;} while (i 5);return 0; //输出 1 2
}i3时if表达式判断为真执行break语句终止了循环。
#include stdio.h
int main()
{int i 0;do{i i 1;if (3 i)continue;printf(%d , i);} while (i 5);return 0;//输出 1 2 4 5
}i3时if表达式判断为真结束本次循环进行下一次循环。
do while循环的大致流程图: 总结
无论何种循环语句break的作用都是结束循环。无论何种循环语句continue的作用都是不执行continue后的代码跳转到循环判断。(for循环会在跳转到循环判断前进行循环条件的调整)
goto语句
C语言中goto语句可以向标志位置进行程序跳转。
#include stdio.hint main()
{printf(hello world\n);goto flag;printf(hello goto\n);
flag:printf(hello blog\n);return 0; //输出为 hello world hello blog
}其中flag:作为标志位供goto语句进行跳转由于goto语句跳转到了标志位置会导致中间的代码不被执行。
标志名任意只需要使用标志名:标志位置即可使用goto语句跳转。goto语句由于会导致代码的可读性和可维护性降低等原因因此不常被使用。goto语句适用于从多层循环的内部向外跳转。