文章目录
- 前言
- 一、C语言的基本结构分类
- 二、选择结构(分支结构)
- 1.if语句
- 2.switch语句
- 三、循环结构
- 1.for循环(用for语句实现循环)
- 2.while循环
- 3.do-while 循环
- 四、break和continue语句
- 五、goto 语句
前言
一、C语言的基本结构分为顺序结构、选择(分支)结构和循环结构。
二~三、分支结构(使用 if 、 switch 语句实现分支结构)和循环结构(使用 for 、 while 、 do while 语句实现循环结构)。
四~五、break、continue和goto 语句的介绍。
一、C语言的基本结构分类
C语言是结构化的程序设计语言,它的三种基本结构是顺序结构、选择(分支)结构和循环结构。
其实我们如果仔细分析,我们日常所见的事情都可以拆分为这三种结构或者这三种结构的组合。由以上3种基本结构组成的C程序算法结构可以解决任何复杂的问题。
我们可以使用 if 、 switch 语句实现分支结构,使用 for 、 while 、 do while 语句实现循环结构。
二、选择结构(分支结构)
1.if语句
(1)if 语句的基本语法形式(if-else语句)如下:
if ( 表达式 )
{ 语句组1; //当语句组1中只有一条语句时,可以省略大括号。语句组2同理
}
else
{语句组2;
}
表达式成立(为真),则执行语句组1,表达式不成立(为假),则执行语句组2
注:在C语言中,0为假,非0表示真。
示例(输⼊⼀个整数,判断是否为奇数,如果是奇数打印是奇数,否则打印偶数)演示if-else语句运行:
#include <stdio.h>int main()
{int num = 0;scanf("%d", &num); //多次运行程序进行测试,第一次输入1,第二次输入2,运行结果如下if (num % 2 == 1)printf("%d 是奇数\n", num);elseprintf("%d 是偶数\n", num);return 0;
}
(2)else 也可以与 if 连用,构成多分支语句,如下:
if ( 表达式1 )
{ 语句组1;
}
else if ( 表达式2 )
{语句组2;
}
else
{语句组3;
}
表达式1成立(为真),则执行语句组1;表达式1不成立(为假),则继续判断表达式2,若是表达式2成立(为真),则执行语句组2;表达式2不成立(为假),则执行语句组3
示例(要求输⼊⼀个整数,判断输⼊的整数是0,还是正数或者负数)演示:
#include <stdio.h>int main()
{int num = 0;scanf("%d", &num);if (num == 0)printf("输入的数字是0\n");else if (num > 0) printf("输入的数字是正数\n");elseprintf("输入的数字是负数\n");return 0;
}
2.switch语句
switch 语句是⼀种特殊形式的 if-else 结构,用于判断条件有多个结果的情况。它把多重的 else if 改成更易用、可读性更好的形式。 switch 语句的基本语法形式如下:
switch (expression)
{case value1: statementcase value2: statementdefault: statement
}
上面代码中,根据表达式 expression 不同的值,执行相应的 case 分支。如果找不到对应的值,就执行 default 分支。
注:
• switch 后的 expression 必须是整型表达式
• case 后的值,必须是整形常量表达式
示例(输入⼀个正整数,输出除6之后的余数情况)演示:
#include <stdio.h>int main()
{int n = 0;scanf("%d", &n);switch (n % 6){case 0:printf("整除,余数为0\n");break; //break的作用:提前结束switch语句case 1:printf("余数是1\n");break;case 2:printf("余数是2\n");break;default:printf("余数大于2\n");}return 0;
}
break能使switch语句提前结束,它在switch语句当中是起到很重要的作用的。下面来观察删去break后代码是如何运行的:
#include <stdio.h>int main()
{int n = 0;scanf("%d", &n);switch (n % 6){case 0: //当给n赋值6时,n%6==0,从case 0分支进入,由于case 0末尾没有break,所以打印了case 0分支的内容之后,printf("整除,余数为0\n");//switch语句不会停止运行,它会继续往下执行其它分支的内容,直到遇到break或到达了switch语句的末尾case 1:printf("余数是1\n");case 2: //当给n赋值8时,n%6==2,从case 2分支进入,由于case 2末尾没有break,所以打印了case 2分支的内容之后,printf("余数是2\n"); //switch语句不会停止运行,它会继续往下执行其它分支的内容,直到遇到break或到达了switch语句的末尾default:printf("余数大于2\n");}return 0;
}
删去break之后,我们可以看到switch语句的运行变得混乱,在执行完对应分支的内容之后不能及时结束switch语句的运行,所以要认识到break在switch语句中的作用,充分利用break来使switch语句正常运行。
三、循环结构
1.for循环(用for语句实现循环)
for 循环的语法形式如下:
for(表达式1; 表达式2; 表达式3)语句; //如果循环体想包含更多的语句,可以加上⼤括号
• 表达式1 用于循环变量的初始化
• 表达式2 用于循环结束条件的判断
• 表达式3 用于循环变量的调整
示例(在屏幕上打印1~10的值)演示for循环:
#include <stdio.h>int main()
{int i = 0;for (i = 1; i <= 10; i++){printf("%d ", i);}printf("\n");return 0;
}
2.while循环
while 循环的语法形式如下:
while(表达式)语句; //如果循环体想包含更多的语句,可以加上⼤括号
示例(在屏幕上打印1~10的值)演示 while 循环:
#include <stdio.h>int main()
{int i = 1;while (i <= 10){printf("%d ", i);i = i + 1;}printf("\n");return 0;
}
3.do-while 循环
在循环语句中 do while 语句的使用最少,它的语法如下:
do语句; //如果循环体想包含更多的语句,可以加上⼤括号
while(表达式);
while 和 for 这两种循环都是先判断,条件如果满足就进入循环,执行循环语句,如果不满足就跳出循环;而 do while 循环则是先直接进入循环体,执行循环语句,然后再执行 while 后的判断表达式,表达式为真,就会进行下⼀次,表达式为假,则不再继续循环。
示例(在屏幕上打印1~10的值)演示 do-while 循环:
#include <stdio.h>int main()
{int i = 1;do{printf("%d ", i);i = i + 1;} while (i <= 10);printf("\n");return 0;
}
四、break和continue语句
在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中提供了 break 和 continue 两个关键字,就是应用到循环中的。
• break 的作用是用于永久的终止循环,只要 break 被执行,直接就会跳出循环,继续往后执行。(break还能使switch语句提前结束,在switch语句讲解中已演示其作用)
• continue 的作用是跳过本次循环中 continue 后边的代码,跳转到循环开头进行下一次循环。
示例演示break在循环中的作用:
#include <stdio.h>int main()
{int i = 1;for (i = 1; i <= 10; i++){if (i == 5)break;printf("%d ", i);}printf("\n");return 0;
}
打印了1,2,3,4后,当i等于5的时候,循环在 break 的地方终止,不再打印,不再循环。
所以 break 的作用就是永久的终止循环,只要 break 被执行, break 外的第一层循环就终止了。
示例演示continue在循环中的作用:
#include <stdio.h>int main()
{int i = 1;for (i = 1; i <= 10; i++){if (i == 5)continue;printf("%d ", i);}printf("\n");return 0;
}
打印了1,2,3,4后,当i等于5的时候,循环执行 continue 语句,continue 的作用是跳过本次循环中 continue 后的代码,直接去到循环开头,进行下一次循环,所以i=5时,后面的打印被跳过了。
五、goto 语句
C语言提供了一种非常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同一个函数内跳转到设置好的标号处。 示例如下:
#include <stdio.h>int main()
{printf("hehe\n");goto next; //直接跳转到next这个标号处,跳过了haha的打印printf("haha\n");next:printf("heihei\n");return 0;
}
goto 语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以建议是能不用尽量不去使用;但是 goto 语句也不是一无是处,在多层循环的代码中,如果想快速跳出使用 goto 就非常的方便了。 示例如下:
for (...)
{for (...){for (...){if (disaster)goto error;}}
}
error:...
本来 for 循环想提前退出得使用 break ,⼀个 break 只能跳出⼀层 for 循环,如果3层循环嵌套就得使用3个 break 才能跳出循环,所以在这种情况下我们使用 goto 语句就会更加的快捷。