最近学的比较杂,选择结构和循环结构的很多语句经常被使用,在不熟练且又需要经常使用它们的情况下,参考学习资料后,我对它们进行了一些简单的整理。
一.选择结构。
1.if else语句:if 和 else 是两个关键字,if 意为“如果”,else 意为“否则”,用来对条件进行判断,并根据判断结果执行不同的语句。总结起来,if else 的结构为:
if(判断条件){
语句块1
}else{
语句块2
}
意思是,如果判断条件成立,那么执行语句块1,否则执行语句块2 。
ps:语句块的意思就是由{}包围的一个或多个语句的集合。如果语句块中只有一个语句,也可以省略{}。
eg:求两个数中的较大值
#include <stdio.h>
int main()
{
int a, b, max;
printf("输入两个整数:");
scanf("%d %d", &a, &b);
if(a>b) max=a;
else max=b;
printf("%d和%d的较大值是:%d\n", a, b, max);
return 0;
}
2.if语句:有的时候,需要在满足某种条件时进行一些操作,而不满足条件时就不进行任何操作,这个时候可以只使用 if 语句。
单独使用 if 语句的形式为:
if(判断条件){
语句块
}
意思是,如果判断条件成立就执行语句块,否则直接跳过。
eg:只使用 if 语句来求两个数中的较大值
#include <stdio.h>
int main()
{
int a, b, max;
printf("输入两个整数:");
scanf("%d %d", &a, &b);
max=b;
if(a>b) max=a;
printf("%d和%d的较大值是:%d\n", a, b, max);
return 0;
}
3.多个if else语句:if else 语句也可以多个同时使用,构成多个分支。
结构如下:
if(判断条件1){
语句块1
} else if(判断条件2){
语句块2
}else if(判断条件3){
语句块3
}else if(判断条件m){
语句块m
}else{
语句块n
}
意思是,从上到下依次检测判断条件,当某个判断条件成立时,则执行其对应的语句块,然后跳到整个 if else 语句之外继续执行其他代码。如果所有判断条件都不成立,则执行语句块n,然后继续执行后续代码。一旦遇到能够成立的判断条件,则不再执行其他的语句块,所以最终只能有一个语句块被执行。
4.if语句的嵌套:在使用时要注意if和else的配对问题,else总是与它前面最近的if配对。
5.switch语句:当选择结构分支过多时,用 if else 处理会不太方便,而且容易出现 if else 配对出错的情况。实际中一般使用 switch 语句代替。
switch 是另外一种选择结构的语句,用来代替简单的、拥有多个分枝的 if else 语句。基本形式如下:
switch(表达式){
case 整型数值1: 语句 1;
case 整型数值2: 语句 2;
case 整型数值n: 语句 n;
......
default: 语句 n+1;
}
它的执行过程是:
1) 首先计算“表达式”的值,假设为 m。
2) 从第一个 case 开始,比较“整型数值1”和 m,如果它们相等,就执行冒号后面的所有语句,也就是从“语句1”一直执行到“语句n+1”,而不管后面的 case 是否匹配成功。
3) 如果“整型数值1”和 m 不相等,就跳过冒号后面的“语句1”,继续比较第二个 case、第三个 case……一旦发现和某个整型数值相等了,就会执行后面所有的语句。假设 m 和“整型数值5”相等,那么就会从“语句5”一直执行到“语句n+1”。
4) 如果直到最后一个“整型数值n”都没有找到相等的值,那么就执行 default 后的“语句 n+1”。
default是最后一个分支,不是必须的,匹配后不会再执行其他分支。case后面必须是一个整数,或者是结果为整数的不包含任何变量的表达式。
需要注意的是,当和某个整型数值匹配成功后,会执行该分支以及后面所有分支的语句。
这时就需要使用break关键字来用于跳出switch语句。
例如:
#include <stdio.h>
int main(){
int a;
printf("Input integer number:");
scanf("%d",&a);
switch(a){
case 1: printf("Monday\n"); break;
case 2: printf("Tuesday\n"); break;
case 3: printf("Wednesday\n"); break;
case 4: printf("Thursday\n"); break;
case 5: printf("Friday\n"); break;
case 6: printf("Saturday\n"); break;
case 7: printf("Sunday\n"); break;
default:printf("error\n"); break;
}
return 0;
}
二.循环结构
1.while循环
while循环的一般形式为:
while(表达式){
语句块
}
意思是,先计算“表达式”的值,当值为真(非0)时, 执行“语句块”;执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”……这个过程会一直重复,直到表达式的值为假(0),就退出循环,执行 while 后面的代码。循环条件不成立的话,while循环一次也不会执行。
ps:通常将“表达式”称为循环条件,把“语句块”称为循环体,整个循环的过程就是不停判断循环条件、并执行循环体代码的过程。
eg:用 while 循环计算1加到100的值
#include <stdio.h>
int main(){
int i=1, sum=0;
while(i<=100){
sum+=i;
i++;
}
printf("%d\n",sum);
return 0;
}
2.do-while循环
一般形式为:
do{
语句块
}while(表达式);
do-while循环与while循环的不同在于:它会先执行“语句块”,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while 循环至少要执行一次“语句块”。
eg:用do-while计算1加到100的值:
#include <stdio.h>
int main(){
int i=1, sum=0;
do{
sum+=i;
i++;
}while(i<=100);
printf("%d\n", sum);
return 0;
}
3.for循环
一般形式为:
for(表达式1; 表达式2; 表达式3){
语句块
}
它的运行过程为:
1) 先执行“表达式1”。
2) 再执行“表达式2”,如果它的值为真(非0),则执行循环体,否则结束循环。
3) 执行完循环体后再执行“表达式3”。
4) 重复执行步骤 2) 和 3),直到“表达式2”的值为假,就结束循环。
上面的步骤中,2) 和 3) 是一次循环,会重复执行,for 语句的主要作用就是不断执行步骤 2) 和 3)。
“表达式1”仅在第一次循环时执行,以后都不会再执行,可以认为这是一个初始化语句。“表达式2”一般是一个关系表达式,决定了是否还要继续下次循环,称为“循环条件”。“表达式3”很多情况下是一个带有自增或自减操作的表达式,以使循环条件逐渐变得“不成立”。
由此也可以总结出for循环的一般形式:
for(初始化语句; 循环条件; 自增或自减){
语句块
}