您的位置:首页 > 其它

03-if.switch.do_while.for

2015-05-26 10:39 281 查看
分支语句if

if语句用于根据条件选择执行语句

else不能独立存在且总是与它最近的未配对的if相匹配

else语句后可以接连其他if语句

if (condition) {

//statement1;

} else {

//statement2;

}

if (cond1) {

//statement1;

} else if (cond2) {

//statement2;

} else {

//statement3

}

就是以下形式

if (cond1) {

//statement1;

} else {

if (cond2) {

//statement2;

} else {

//statement3

}

}

if语句中0值比较的注意点

1.bool型变量应该直接出现于条件中,不需要再比较真假,非0即为真;

2.普通变量和0值比较时,0值最好出现在比较符号左边;

3.float型变量不能直接进行0值比较,需要定义精度;

bool b = TRUE;

if (b) {

//statement1;

} else {

//statement2;

}

int i = 1;

if (0 == i) {

//statement1;

} else {

//statement2;

}

#define EPSINON 0.00000001

float f = 0.0;

if ((-EPSINON <= f) && (f <= +EPSINON)) {

//statement1;

} else {

//statement2;

}

switch分支

switch语句对应单个条件多个分值的情形;

每个case语句分支必须要有break,否则会导致分支重叠

default语句必须要加上,以处理特殊情况

switch (表达式) {

case 常量:

代码块

case 常量:

代码块

default:

代码块

}

switch语句中的值只能是整型或字符型

case语句排序顺序分析

按字母或数字顺序排列各语句

正常情况放前面,异常情况放后面

default语句只能用于真正的默认情况

if和switch对比使用实例

#include <stdio.h>

void f1(int i) {

if( i < 6 ) {

printf("Failed!\n");

} else if( (6 <= i) && (i <= 8) ) {

printf("Good!\n");

} else {

printf("Perfect!\n");

}

}

void f2(char i) {

switch(i) {

case 'c':

printf("Compile\n");

break;

case 'd':

printf("Debug\n");

break;

case 'o':

printf("Object\n");

break;

case 'r':

printf("Run\n");

break;

default:

printf("Unknown\n");

break;

}

}

int main() {

f1(5);

f1(9);

f2('o');

f2('d');

f2('e');

return 0;

}

小结

if语句适用于需要按片进行判断的情形;

switch语句适用于需要对各个离散值进行分别判断的情形;

if语句可以完全从功能上代替switch语句,但switch语句无法代替if语句;

switch语句对于多分支判断的情形更加简洁;

循环语句

循环语句的基本工作方式

通过条件表达式判定是否执行循环体

条件表达式遵循if语句表达式的原则

do,while,for的区别

do语句先执行后判断,循环体至少会被执行一次

while语句先判断后执行,循环体可能不被执行

for语序先判断后执行,相比while更简洁

三种循环语句使用对比:

累加自然数

#include <stdio.h>

int f1(int n){

int ret = 0;

int i = 0;

/* 最直观 */

for(i = 1; i <= n; i++) {

ret += i;

}

return ret;

}

int f2(int n){

int ret = 0;

/* 实现方式比较抽象 */

while((n > 0) && (ret += n--));

/* 如果没有n>0的判断就会进入死循环 */

/* while(n && (ret += n--)); 死循环 */

return ret;

}

int f3(int n){

int ret = 0;

if (n > 0) {

/* 如果没有n>0的判断就会进入死循环 */

do {

ret += n--;

} while(n);

/* 只要n!=0就是真,while就会继续循环 */

}

/* 可以将条件该为while(n > 0);避免死循环 */

/* 用while(n>0) do{} 可以代替上面的分支和循环 */

return ret;

}

int main(){

printf("%d\n", f1(10));

printf("%d\n", f2(10));

printf("%d\n", f3(10));

return 0;

}

break和continue的区别

break表示终止循环的执行(跳出块语句(循环,switch));可以用在循环和switch;

continue表示终止本次循环,进入下次循环执行;

switch能否使用continue关键字?

continue是依赖于循环的,不能用于switch分支;

do和break的妙用

-----------------------------------------------

#include <stdio.h>

#include <malloc.h>

int func(int n)

{

/* 1.统一的资源分配 */

int i = 0;

int ret = 0;

int* p = (int*)malloc(sizeof(int) * n);

/* 2.代码执行*/

do {

if( NULL == p ) break;

/* break跳出语句块 */

if( n < 0 ) break;

/* 如果将break替换为return,代码将比较繁琐 */

for(i = 0; i < n; i++) {

p[i] = i;

printf("%d\n", p[i]);

}

ret = 1;

} while(0);

/* 外层的do...while语句块一定会执行一次 */

/* 3.统一的资源回收 */

free(p);

return ret;

}

int main() {

if( func(10) ) {

printf("OK");

} else {

printf("ERROR");

}

return 0;

}

-----------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: