三大结构
顺序结构:从头到尾依次执行。
选择结构(分支结构):可以选择要执行的代码,也就是说只执行当前有用的。
循环结构:不断重复执行同一段代码,直至不符合条件。
循环语句
while语句
表现形式
while(表达式){
语句块
}
意思是先判断表达式(循环条件)的值,当表达式里面的值为真(非0)时,执行“语句块”(循环体);执行完“语句块”,再次计算表达式的值,如果为真,继续执行“语句块”,直至表达式的值为假(0)。跳出循环,执行while后面的代码。
例:用 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;
}
输出5050
代码分析:
1) 程序运行到 while 时,因为 i=1,i<=100 成立,所以会执行循环体;执行结束后 i 的值变为 2,sum 的值变为 1。
2) 接下来会继续判断 i<=100是否成立,因为此时 i=2,i<=100 成立,所以继续执行循环体;执行结束后 i 的值变为 3,sum 的值变为3。
3) 重复执行步骤 2)。
4) 当循环进行到第100次,i 的值变为 101,sum 的值变为5050;因为此时 i<=100 不再成立,所以就退出循环,不再执行循环体,转而执行while循环后面的代码。
while 循环的整体思路是这样的:设置一个带有变量的循环条件,也即一个带有变量的表达式;在循环体中额外添加一条语句,让它能够改变循环条件中变量的值。这样,随着循环的不断执行,循环条件中变量的值也会不断变化,终有一个时刻,循环条件不再成立,整个循环就结束了
do-while循环
do-while循环的一般形式为:
do{
语句块
}while(表达式);
do-while循环与while循环的不同在于:它会先执行“语句块”,然后再判断表达式是否为真,如果为真则继续循环;如果为假,则终止循环。因此,do-while 循环至少要执行一次“语句块”
例: 用 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;
}
for
for 循环的一般形式为:
for(表达式1; 表达式2; 表达式3){
语句块
}
计算1加到100的值
#include <stdio.h>
int main()
{
int i, sum=0;
for(i=1; i<=100; i++)
{
sum+=i;
}
printf("%d\n",sum);
return 0;
}
它的运行过程为:
1) 先执行“表达式1”。
2) 再执行“表达式2”,如果它的值为真(非0),则执行循环体,否则结束循环。
3) 执行完循环体后再执行“表达式3”。
4) 重复执行步骤 2) 和 3),直到“表达式2”的值为假,就结束循环。
上面的步骤中,2) 和 3) 是一次循环,会重复执行,for 语句的主要作用就是不断执行步骤 2) 和 3)。
for( ; ; ) 语句 相当于while(1) 语句
选择结构(分支)
if-else
在C语言中,使用if
和else
关键字对条件进行判断。请先看下面的代码:
运行结果
输入:4
输出 :输入的为正数
if 和 else 是两个新的关键字,if 意为“如果”,else 意为“否则”,用来对条件进行判断,并根据判断结果执行不同的语句。总结起来,if else 的结构为:
if(判断条件)
{
语句块1
}else
{
语句块2
}
其图解
由于if else 语句可以根据不同的情况执行不同的代码,所以也叫分支结构或选择结构,上面的代码中,就有两个分支。
也可以单独使用 if 语句的形式为
if(判断条件){
语句块
}
if else 语句也可以多个同时使用,构成多个分支,形式如下:
if(判断条件1){
语句块1
} else if(判断条件2){
语句块2
}else if(判断条件3){
语句块3
}else if(判断条件m){
语句块m
}else{
语句块n
}
从上到下依次检测判断条件,当某个判断条件成立时,则执行其对应的语句块,然后跳到整个 if else 语句之外继续执行其他代码。如果所有判断条件都不成立,则执行语句块n,然后继续执行后续代码。
也就是说,一旦遇到能够成立的判断条件,则不再执行其他的语句块,所以最终只能有一个语句块被执行
if语句的嵌套
if 语句嵌套时,要注意 if 和 else 的配对问题。C语言规定,else 总是与它前面最近的 if 配对
switch case语句
#define _CRT_SECURE_NO_WARNINGS 1
switch (expression) //必须是整型 字符也可以 明确计算某个值的话,用switch;
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
switch (num % 3)
{
case 0://整型常量表达式
printf("余数是0");break;
case 1:
printf("余数是1");break;
case 2:
printf("余数是2");break;
}
return 0;
}
其结构
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”。
如果想跳过后面的其他分支。为了达到这个目标,必须要在每个分支最后添加break;
语句。
还有一种现象
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
switch (num)
{
case 0://整型常量表达式
case 1:
case 2:
case 3:
printf("上半周");break;
case 4:
case 5: case 6: case 7:
printf("下半周");break;
default("输入错误");break;
}
return 0;
最后
1. case 后面必须是一个整数,或者是结果为整数的表达式
2.default 不是必须的。当没有 default 时,如果所有 case 都匹配失败,那么就什么都不执行。
break 语句
break (跳出当前循环)专门用于跳出 switch 语句。所谓“跳出”,是指一旦遇到 break,就不再执行 switch 中的任何语句,包括当前分支中的语句和其他分支中的语句;也就是说,整个 switch 执行结束了,接着会执行整个 switch 后面的代码。
continue语句
continue 语句的作用是跳过循环体中剩余的语句而强制进入下一次循环。continue语句只用在 while、for 循环中
break与continue的对比:break 用来结束所有循环,循环语句不再有执行的机会;continue 用来结束本次循环,直接跳到下一次循环,如果循环条件成立,还会继续循环。