C语言基础(三)
C语⾔有三种基本程序控制结构:顺序结构(默认)、选择结构(分⽀)、循环结构
顺序结构
代码从头到尾一句接着一句顺序执行,直到结束,被称为顺序结构
选择结构(分支)
根据具体的条件来决定程序下一步执行哪些代码被称为选择结构
常见:
单分支
双分支
多分枝
具体使用就是if-else选择和switch选择
switch代码更少更简洁
if-else选择
格式:
c
if(选择条件){
代码块;
}
else {
代码块;
}
上面是if-else的基本结构,其中else不是必须的,else主要包括了除if给定条件外的所有其他情况
eg:判断一个两个数谁比较大
c
#include <stdio.h>
int main(){
int a, b;
printf("请输入a和b的值:");
scanf("%d %d", &a, &b);
if (a > b){
printf("a比b大\n");
}
else {
printf("b比a大\n");
}
return 0;
}
运行结果:

当我们输入1 和2的时候,程序将1赋值给a,将2赋值给b,因为2>1,不符合if里的a>b,所以执行else里面的代码块,输出b比a大
当我们输入2和1的时候,程序将2赋值给a,将1赋值给b,这时候a>b符合if里面的条件,所以执行if里面的代码块,输出a比b大
当不使用else的时候就是一个单分支选择,符合if条件就执行,不符合就跳过。
使用if和else就是一个双分支选择
当需要判断的分支不止2条时,就可以使用else if 来增加分支,有几条多出的分支就加几个else if代码块
eg:
在上面我们只有a>b和b>a两个分支,但实际上还有一种情况a等于b,修改代码如下
c
#include <stdio.h>
int main(){
int a, b;
printf("请输入a和b的值:");
scanf("%d %d", &a, &b);
if (a > b){
printf("a比b大\n");
}
else if (a == b){
printf("a等于b\n");
}
else {
printf("b比a大\n");
}
return 0;
}
运行结果:

输入相同的数,a和b相等,这时候执行else if里面的代码块,输出a等于b
ps:使用多个if和else if区别:
else if 是一个选择结构的一个分支,当前面if或else if满足条件时,这个else if并不会执行,但是多个if在条件符合时会都执行
如下一个判断两种分支:
c
#include <stdio.h>
int main(){
int a, b;
printf("请输入a和b的值:");
scanf("%d %d", &a, &b);
if (a >= b){
printf("a大于等于b\n");
}
else if (a == b){
printf("a等于b\n");
}
return 0;
}
运行结果:

使用else is 当if的条件满足时,只会执行if的代码块,然后就跳过其他的,即使符合else if条件也不会去执行,而多if就会多次判断,因为他们属于不同的选择
c
#include <stdio.h>
int main(){
int a, b;
printf("请输入a和b的值:");
scanf("%d %d", &a, &b);
if (a >= b){
printf("a大于等于b\n");
}
if (a == b){
printf("a等于b\n");
}
return 0;
}

switch分支
switch是一种分支结构,类似if,能够对一个或两个或多个分支进行判断,比执行相应代码
适用场景:当判断条件为某个固定的值的时候
语法结构:
c
switch (变量)
{
case 值1:
代码块;
break;
case 值2:
代码块;
default:
break;
}
其中default为默认执行,即当输入的变量不匹配下面任何一个case时执行的
eg:
c
#include <stdio.h>
int main(){
int a;
printf("请输入一个数:");
scanf("%d", &a);
switch (a)
{
case 1:
printf("输入为1\n");
break;
case 2:
printf("输入为2\n");
default:
printf("输入既不是1也不是2\n");
break;
}
return 0;
}
执行结果:

case需要在代码块结尾添加一个break,否则switch会一直执行下面的内容
循环结构
循环是程序中重复执⾏,直到某个条件不满⾜才停⽌的⼀段代码。
循环有for循环和while循环,此外还有一个do while循环
for循环
for 循环常用于执行指定数量的循环
语法结构:
c
for (循环变量; 判断条件; 变量操作){
代码块;
}
因为需要执行有量的循环,所以需要定义个变量用于判断循环的值并初始化,判断条件就是判断什么时候停止循环,变量操作就是将循环变量向判断条件靠近的操作
eg:
c
#include <stdio.h>
int main(){
for (int i = 0; i < 10; i++){
printf("%d\n", i);
}
return 0;
}
执行结果:

这里定义的i为循环变量,并初始化值为0,判断条件为i<10,即i为从0到10之间的0 1 2 3 4 5 6 7 8 9这10个值,i++为操作,每执行一次代码块中代码,i的值就会加1
如果想要for为死循环可以省略变量和操作直接将判断条件定为一个为真的判断
eg:
c
#include <stdio.h>
int main(){
int i = 1;
for (; i = 1; ){
printf("%d\n", i);
}
return 0;
}
执行结果:

因为i恒等于1,所以for会一直执行下去
while循环
当不知道需要循环多少次是可以使用while循环来根据条件判断是否应该停止循环
语法结构:
c
while(判断条件){
代码块;
}
判断条件为真时while执行代码块代码,执行完一次后在进行判断,直到判断条件为假时停止
eg:
c
#include <stdio.h>
int main(){
int i = 0;
while(i < 10){
printf("%d\n", i);
i++;
}
return 0;
}
执行结果:

当i<10时会输出i,然后i自加1,当i=10时不符合i<10的条件,循环结束
如果while想死循环,只需要将判断条件设定为恒真,例如直接为1。
while和for的死循环区别为,while可以直接设置值例如while(1),但是for需要判断过程,例如i<10;
do while
do while和while类似,但是do while会先执行一次代码再进行判断
语法格式:
c
do{
代码块;
}while(判断条件);
eg:
c
#include <stdio.h>
int main(){
int i = 0;
do{
printf("%d\n", i);
i++;
}while(i < 10);
return 0;
}
执行结果:

break和continue
break 为结束,例如在while循环内,使用break会直接停止执行,跳出循环
continue为跳过当前循环,开始下一次循环
eg:
c
#include <stdio.h>
int main(){
int i = 0;
while(i < 6){
i++;
if (i == 3) break;
printf("%d\n", i);
}
printf("循环结束i的值为:%d\n", i);
i = 0;
while(i < 6){
i++;
if (i == 3) continue;
printf("%d\n", i);
}
printf("循环结束i的值为:%d\n", i);
return 0;
}
执行结果:

可以看出,当第一个while执行到i=3的时候符合if条件,执行break停止循环然后跳出循环此时ide值为3,在第二个循环里面执行到为3的时候,continue跳过了当前循环的printf函数,直接开始下一轮循环。