# 循环结构和选择结构 ## if-else选择分支 语法 ```c //一般情况 if(判断条件){ 语句块1 }else{ 语句块2 } //只用if if(判断条件){ 语句块 } //多个if else分支 if(判断条件1){ 语句块1 }else if(判断条件2){ 语句块2 }else if(判断条件3){ 语句块3 }else if(判断条件m){ 语句块m }else{ 语句块n } //if语句嵌套 if(判断条件1){ 语句1 if(判断条件2){ 语句2 }else{ 语句3 } }else{ 语句4 } ``` 示例 ```c #include #include int main(int argc, char *argv[]) { int age; printf("Enter a number: "); scanf("%d", &age); if (age >= 18) { printf("Not kid."); } else { printf("Kid"); } return 0; } ``` ## switch-case选择分支 语法 ```c switch(表达式){ case 整型数值1: 语句1; break; case 整型数值2: 语句1; break; case 整型数值3: 语句1; break; ... case 整型数值n: 语句1; break; default: 语句n+1; break; } ``` 示例 ```c #include int main(){ int a; printf("Input integer number:"); scanf("%d",&a); switch(a){ case 1: printf("Monday\n"); case 2: printf("Tuesday\n"); case 3: printf("Wednesday\n"); case 4: printf("Thursday\n"); case 5: printf("Friday\n"); case 6: printf("Saturday\n"); case 7: printf("Sunday\n"); default:printf("error\n"); } return 0; } ``` ## 条件运算符 语法 ```c 表达式1? 表达式2:表达式3 ``` 条件运算符是C语言中唯一的一个三目运算符,其求值规则为:如果表达式1的值为真,则以表达式2 的值作为整个条件表达式的值,否则以表达式3的值作为整个条件表达式的值。条件表达式通常用于赋值语句之中。 示例 ```c max = (a>b)? a:b; ``` ## while循环 语法 ```c while(表达式){ 语句块 } ``` 意思是,先计算“表达式”的值,当值为真(非0)时, 执行“语句块”;执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”……这个过程会一直重复,直到表达式的值为假(0),就退出循环,执行 while 后面的代码。 示例 ```c #include int main(){ int n=0; printf("Input a string:"); while(getchar()!='\n') n++; printf("Number of characters: %d\n", n); return 0; } ``` ## do-while循环 语法 ```c do{ 语句块 }while(表达式); ``` do-while循环与while循环的不同在于:它会先执行“语句块”,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while 循环至少要执行一次“语句块”。注意`while(i<=100);`最后的分号`;`,这个必须要有。 示例 ```c #include int main(){ int i=1, sum=0; do{ sum+=i; i++; }while(i<=100); printf("%d\n", sum); return 0; } ``` ## for循环 语法 ```c for(表达式1; 表达式2; 表达式3){ 语句块 } ``` for循环比while循环更加紧凑。for 循环中的“表达式1(初始化条件)”、“表达式2(循环条件)”和“表达式3(自增或自减)”都是可选项,都可以省略(但分号`;`必须保留)。 示例 ```c #include int main(){ int i, sum=0; for(i=1; i<=100; i++){ sum+=i; } printf("%d\n",sum); return 0; } ``` 除了 while 和 for,C语言中还有一个 goto 语句,它也能构成循环结构。不过由于 goto 语句很容易造成代码混乱,维护和阅读困难,饱受诟病,不被推荐,而且 goto 循环完全可以被其他循环取代,所以后来的很多编程语言都取消了 goto 语句。