C语言分支与循环

C语言分支与循环 前言本人的技术笔记会优先发布在个人站点longyxblg.cnC语言是结构化的程序设计语言结构指顺序结构、选择结构、循环结构。分支语句if语法格式if(表达式)语句C语言中非0为真0为假。intnum0;scanf(%d,num);if(num%21)print(%d 是奇数\n,num);return0;else判断是与不是的情况if(表达式)语句1else语句2intnum0;scanf(%d,num);if(num%21)printf(%d 是奇数\n,num);elseprintf(%d 是偶数\n,num);分支中包含多条语句C语言中默认 if 和 else 后只跟一条语句想跟多条需要使用 {} 。intage0;scanf(%d,age);if(age18){printf(你已经成年了\n);printf(可以去上网了\n);}else{printf(你是个儿童\n);printf(不能去上网\n);}if 嵌套在 if…else 语句中, else 可以与另一个 if 语句连用构成多重判断。intnum0;scanf(%d,num);if(num0)printf(%d 是正数\n,num);elseif(num0)printf(%d 是负数\n,num);elseprintf(%d 是零\n,num);return0;intnum0;scanf(%d,num);if(num0){if(num%21)printf(%d 是正奇数\n,num);elseprintf(%d 是正偶数\n,num);}else{printf(%d 是非正数\n,num);}else 的悬空问题else 总是与最接近的 if 匹配inta0;intb2;if(a1)if(b2)printf(hehe\n);elseprintf(haha\n);这里 else 与 是与 if(b 2) 匹配 所以结果是什么代码运行结果是什么都没有。如果想要 else 与 if (a 1) 相匹配可以使用{}。inta0;intb2;if(a1){if(b2)printf(hehe\n);}elseprintf(haha\n);关系操作符C语言中用于比较的表达式成为关系表达式使用的运算符就称为关系运算符。主要有以下六个// 大于运算符// 小于运算符// 大于等于运算符// 小于等于运算符// 等于运算符!// 不等运算符关系表达式通常返回的是 0 或 1。需要注意的是关系运算符不宜连用。intnum0;if(18num20){printf(haha\n);}在上述代码中执行逻辑是先判断 18 0 返回为 0然后再比较 0 20 为真所以执行了语句。正确写法应使用逻辑运算符在后文中会说明。条件操作符也叫三目操作符需要三个操作数形式如下exp1?exp2 exp3计算逻辑如图inta0;intb0;scanf(%d,a);ba5?3:-3;printf(%d\n,b);逻辑操作符逻辑操作符提供逻辑判断功能。主要如下!:逻辑取反(改变单个表达式的真假):逻辑与两侧表达式都为真则为真否则为假||:逻辑或两侧表达式有一个是真则为真否则为假! 逻辑取反intflag0;if(!flag){printf(do something\n);} 逻辑与inta0;intb0;scanf(%d%d,a,b);if(a0b0){printf(a和b都是正数\n);}|| 逻辑或inta0;intb0;scanf(%d%d,a,b);if(a0||b0){printf(a和b至少有一个是正数\n);}短路C语言逻辑运算符总是对左侧的表达式求值再对右侧的表达式求值。如果左侧表达式满足逻辑运算符的条件则不再对右侧表达式求值这种现象称为短路。inta0;intb1;if(a1b){printf(hehe\n);}printf(%d\n,b);这里可以看到 b 的值还是1 说明发生了短路b 没有执行。像这种仅仅根据左操作数的结果就能知道整个表达式的结果不再对右操作数进行计算的运算称为短路求值。switch 语句C语言还提供了 switch 来实现分支结构。switch 语句 是一种特殊形式 if…else 语句。用于判断条件有多个结果的情况。switch(expression){casevalue1:statementcasevalue2:statementdefault:statement}根据表达式 expression 表达式的值来执行不同的 case 分支。如果没找到对应值执行 defaultt 分支。switch 后的 expression 必须是整型表达式。case 后的值必须是整型表达常量。if 语句和 switch 语句的对比intn0;scanf(%d,n);if(n%30)printf(整除余数为0\n);elseif(n%31)printf(余数是1\n);else{printf(余数是2\n);}intn0;scanf(%d,n);switch(n%3){case0:printf(整除余数为0\n);break;case1:printf(余数是1\n);break;case2:printf(余数是2\n);break;}case 和后边的数字之间必须有空格。case 语句的代码后加上 break 才能跳出这个 switch 语句。 否则会出现穿透现象。switch 语句中的穿透现象intn0;scanf(%d,n);switch(n%3){case0:printf(整除余数为0\n);case1:printf(余数是1\n);case2:printf(余数是2\n);}某一个 case 后没有跟 break 代码就会继续往下执行。直到遇到其他 case 中的break 或 switch 语句结束。switch 语句中的 default当 switch 后边的 expression 中的结果与任意 case 中的值都不匹配的时候就会默认执行 default 后的语句。switch 语句中 case 和 defaultC语言中并没有硬性规定 case 和 default 的顺序通常写法是将 default 放在最后。while 循环语法格式while(表达式)语句执行流程如图首先执行判断表达式表达式值为0。循环结束不为0则执行循环语句语句执行完再重复上述过程。while 循环示例//输入一个整数逆序打印他intnum0;scanf(%d,num);while(num){printf(%d,num%10);num/10;}for 循环语法格式for(表达式1;表达式2;表达式3)语句表达式1 用于循环变量的初始化表达式2 用于循环结束的条件判断表达式3 用于循环变量的调整。执行流程如图for 循环示例// for循环打印1-10inti0;for(i1;i10;i){printf(%d\n,i);}do-while 循环语法格式do语句while(表达式);do-while 是先进入循环体执行一次语句再进行判断是否进行循环。执行流程如下do-while 中循环体至少执行一次。示例如下:// do-while循环打印1-10intnum1;do{printf(%d\n,num);num;}while(num10);return0;break 和 continue 语句C语言中提供了 break 和 continue 两个关键字。在循环中,break 的作用是永久终止该循环。continue 是跳过本次循环位于 continue 之后的代码。break 示例inti1;while(i10){if(i5)break;printf(%d ,i);ii1;}在 i 的值为 5 时break 执行永久终止了这个循环。continue 举例inti1;while(i10){if(i5)continue;printf(%d ,i);ii1;}当 i 等于 5 后就执行 continue直接跳过 continue后的代码去循环的判断的地方。因为里跳过了i i1所以i一直为5程序陷入和死循环。goto 语句C语言提供了 goto 语句 和 跳转标号可以实现在同一个函数内跳转到设置好的标号处。// goto语句的使用inti1;while(i10){if(i5)gotolabel;printf(%d ,i);ii1;}label:return0;语句如果使用的不当就会导致在函数内部随意乱跳转打乱程序的执行流程。需谨慎使用。