5.流程控制

流程控制

正确为true,错误为false。

1、顺序结构语句

​ 程序中的所有语句都是从上到下逐条执行,这样的程序结构叫做顺序结构。顺序结构是程序开发中最常见的一种结构,它可以包含多种语句,如变量的定义语句、输入输出语句、赋值语句等。下面来看一个顺序结构的简单例子,通过程序实现按顺序输出"我爱C语言"

#include <stdio.h>
int main(){
	printf("我\n");
	printf("爱\n");
	printf("C\n");
	printf("语\n");
	printf("言\n");
    return 0;
}

2、选择结构语句

也就是前面也有用到过得if,else还有switch

2.1、判断语句if...else if...else

if也就是如果,else if其他的如果,else其他的。

语法格式是这样

if(判断条件){//if可以单独出现
    执行语句1
}else if(判断条件){//else if可以很多个!
	执行语句2
}else{//需要和if一起出现。当判断条件只有两种时前面没有else if也可以
    执行语句3
    }

上述语法格式中,判断条件是一个布尔值。当判断条件1为true(真的)时,if后面{}中的执行语句1会执行。当判断条件1为false(错误)时,会继续执行判断条件2,如果为true则执行语句2,以此类推,如果所有的判断条件都为false,则意味着所有条件均未满足,else后面{}中的执行语句3会被执行。

#include <stdio.h>//做一个分数及格与否的判断
int main(){
    printf("请输入您的分数:\n");
    int sum;//定义一个sum,来存输入的分数
    scanf_s("%d",&sum);
    if(sum>=60){//达到60分以上会显示及格
        printf("及格\n");
    }else{//达不到的会显示不及格
        printf("不及格\n");
    }
    retrun;
}

上述语法中,判断条件是一个布尔值。当判断条件为true时,if后面{}中的执行语句1会被执行。当判断条件为false时,else后面{}中的执行语句2会被执行。

平常的生活当中,我们还可以看到更多的情况,比如将分数分优秀,良好,及格以及不及格。

#include <stdio.h>//
int main(){
		printf("请输入您的分数:\n");
		int sum;//定义一个sum,来存输入的分数
		scanf_s("%d", &sum);
		if (sum >= 90) {//达到90分以上会显示优秀
			printf("优秀\n");
		}
		else if (sum >= 75 && sum < 90) {//达到75分以上并且90分以下的会显示良好
			printf("良好\n");
		}
		else if (sum >= 60 && sum < 75) {//达到60分以上并且75分以下的会显示及格
			printf("及格\n");
		}
		else {//其他的情况就是60分以下显示不及格
			printf("不及格\n");
		}
    	retrun 0;
}

2.2、switch 条件语句

switch 也是很常用的选择语句,比起if,它用的相对更简单一些并且只能用一些固定的值。比如你想请人吃饭,但是囊中羞涩,就只能根据自己身上的钱来选,由此,我们来构造一个伪代码

身上带的钱的数量
    如果有10000,去五星大酒店,如果没有这么多钱就算了
    如果有1000,去一些大餐馆,没有就算了
    如果有100,去小餐馆,没有就算了
    如果有10,去吃糖果,没有就算了
    没钱,那就不吃了,就算了。

转成代码就是

#include <stdio.h>
int main(){
    int money;//定义身上带的钱
    printf("身上带了多少钱\n");
	scanf_s("%d",&money);//只能输入选择中固定的值
	switch(money){
        case 10000:printf("去五星大酒店\n");break;
        case 1000:printf("去大餐馆\n");break;
        case 100:printf("去小餐馆\n");break;    
        case 10:printf("去吃糖果\n");break; 
        default:printf("不吃了\n");break;//这个是其他的情况
    }    
	return 0;
}

switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,就会执行相应case后的语句,否则执行default后的语句。这里break的作用是跳出switch语句。(往后有更详细的了解)

switch还可以这样

switch(money){
    case 10000:
    case 1000:
    case 100:
        //当money满足10000、1000、100中的任意一个的话,处理方式一样
        printf("吃饭\n");
        break;
    case 10:
    case 1:
        printf("吃糖\n");
        break;
}

3、循环结构语句

在实际生活中经常会将同一件事情重复做很多次,比如在走路时,会重复使用左右脚,打乒乓球时,会重复挥拍的动作等。同样在C语言中,也经常需要重复执行同一代码块,这时就需要使用循环语句。循环语句分为while循环语句、do…while循环语句和for循环语句三种。

3.1 while

while(循环条件判定){
    执行语句
    ......
}

就是当循环条件判定为true时,就会执行{}中的语句块,如果是判定为false的时候这个while就停止循环。

用while来实现一个1~4的输出(printf):

#include <stdio.h>
int main(){
    int x = 1;					//定义变量,起始值为1
    while(x <= 4){				//循环的条件为小于等于4
        printf("x = %d\n", x);	//条件成立就会输出x的值
        x++;					//每循环一次x+1
    }
}

扩张:将数字从大到小输出,

#include <stdio.h>
int main(){
    int x = 5;					//定义变量,起始值为5
    while(--x){				//x-1后,开始循环,当()当中为0时停止循环。
        printf("x = %d\n", x);	//条件成立就会输出x的值
    }
}
那么while(x--)会有什么不同
你会发现用上面的,会多输出一个x=0,为什么呢?
你可以将它拆成这样看
    while(x){				//不等于0时就会循环。
        x=x-1;
        printf("x=%d",x);
    }
而while(--x)则是
    x=x-1					//会先执行一次这个
    while(x){				//不等于0时就会循环。
        printf("x=%d",x);	
        x=x-1;				//每次执行完之后才减一,所以会只输出到x = 1 ,不会再输出x = 0
    }

3.2、do...while

do 
{
执行语句
………
} while(循环条件);

与while不同的是,do...while会先执行do之后{}中间的语句块,然后再进行while()的循环条件判断。

用do while来实现一个1~4的输出(printf):

#include <stdio.h>
int main(){					//开始
    int x=1;     			//定义
    do{
        printf("x = %d\n",x);	//输出
        x++;				//x+1
    }while(x <= 4);			//条件判定
    return 0;				//结束
}

那么从4-1呢?

#include <stdio.h>
int main(){						//开始
    int x = 4;     				//定义
    do{
        printf("x = %d\n",x);	//输出
    }while(--x);				//条件判定,并x-1,与while一样,x--会多一个x = 0的输出
    return 0;					//结束
}

3.3、for

通常用于循环次数已知的情况。语法格式为

for(初始化表达式; 循环条件; 操作表达式)
{
		执行语句
		………
}

输出1-4。

#include <stdio.h>	
int main(){
    for(int i = 1; i <= 4; i++)
	{
			printf("%d\n",i);
	}//执行步骤:首先会执行定义一个i=1,之后判定 i 是否会小于等于4,是的话,就执行输出打印。
	 //然后执行i++,之后再进行判定 i 是否会小于等于4,否的话就退出这个循环。
retrun 0;
}

对自然数1~4进行求和

#include<stdio.h>
int main()
{
	int sum = 0;                     //定义变量sum,用于记住累加的和
	for (int i = 1; i <= 4; i++)  //i的值会在1~4之间变化
	{
		sum += i;                    //实现sum与i的累加
	}
	printf("sum = %d \n", sum);   //打印累加的和
	return 0;
}

3.4、循环嵌套

有时为了解决一个较为复杂的问题,需要在一个循环中再定义一个循环,这样的方式被称作循环嵌套。

while、do…while、for循环语句都可以进行相互嵌套,

比如for循环中嵌套for循环,具体语法格式如下:

for(初始化表达式; 循环条件; 操作表达式) 
{
		………
		for(初始化表达式; 循环条件; 操作表达式) 
{
			执行语句;
			………
		}
		………
}

接下来通过for语句的循环嵌套来实现使用“*”打印直角三角形

#include<stdio.h>
int main()
{
	int i, j;                     //定义两个循环变量
	for (i = 1; i <= 9; i++)      //外层循环
	{
		for (j = 1; j <= i; j++)  //内层循环
		{
			printf("*");	   	  //打印*
		}
		printf("\n");			  //换行
	}
	return 0;
}

4、跳转语句(break、goto、continue)

跳转语句用于实现循环执行过程中程序流程的跳转

4.1、break

switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。当它出现在循环语句中,作用是跳出当前循环语句,执行后面的代码。接下来通过一个具体的案例来演示break语句如何跳出当前循环:

#include<stdio.h>
int main()
{
	int x = 1;     			   //定义变量x,初始值为1
	while (x <= 4) 			   //循环条件
	{
		printf("x = %d\n", x); //条件成立,打印x的值
		if (x == 3)			   //当x==3是,就执行停止
		{
			break;
		}
		x++;         		   //x进行自增
	}
	return 0;
}//所以这个的打印执行只会到 x = 3。 

4.2、goto

break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环,如果想要跳出外层循环则需要对外层循环添加标记,然后使用goto语句。接下来通过一个案例来演示如何使用goto语句:(不常用)

#include<stdio.h>
int main(){
	int i, j;                     //定义两个循环变量
	for (i = 1; i <= 9; i++){     //外层循环
		for (j = 1; j <= i; j++){ //内层循环
			if (i > 4){           //判断i的值是否大于4,也就是第5行开始不打印,只打印前4行
				goto end;         //跳至标识为end的语句(就是结束)
			}
            printf("*");          //输出*
		}
		printf("\n");             //换行
	}
     end:  return 0;
}

4.3、continue

在循环语句中,如果希望立即终止本次循环,并执行下一次循环,此时就需要使用continue语句。接下来通过一个1~100之内的奇数求和的案例来演示continue语句的使用

#include<stdio.h>
int main()
{
int sum = 0;           //定义变量sum,用于记住和
for (int i = 1; i <= 100; i++){
	if (i % 2 == 0){   //如果i是一个偶数,执行if语句中的代码
		continue;      //结束本次循环
		}
		sum += i;          //实现sum和i的累加
	}
	printf("sum = %d\n", sum);
	return 0;
}

使用for循环让变量i的值在1100之间循环,在循环过程中,当i的值为偶数时,将执行continue语句结束本次循环,进入下一次循环。当i的值为奇数时,sum和i进行累加,最终得到1100之间所有奇数的和,打印“sum = 2500”

作业:image-20201020172841887

作业2:

计算 1+2+3...+100的和

#include<stdio.h>

int main() {
	int sum = 0;					//定义这个和的变量名为sum
	for (int i = 1; i <= 100; i++) {//从1开始一直到100,当i小于100时
		sum = sum + i;				//sum就加上循环是i的值。
	}
	printf("1+2+3...+100=%d\n", sum);
	while (1);						//卡屏
	return 0;
}

9*9乘法表:

#include <stdio.h>
int main(){
for (int x = 1; x <= 9; x++) {
		for (int y = 1; y <= 9; y++) {
			if (x >= y) {
				printf("%d * %d = %d   ", x, y, x*y);
			}
		}
		printf("\n");
	}

	while (1);
    return 0;
}

0101000001100110

posted @ 2020-10-24 12:10  onedust  阅读(111)  评论(0)    收藏  举报