Linux-C P5 控制语句

文章目录

  • Linux-C P5 控制语句
    • 顺序语句
    • 判断语句
      • if判断语句
      • switch判断语句
    • 循环语句
      • while循环语句
      • for循环语句
    • 特殊语句
      • goto语句
      • continue语句
      • break语句
    • 程序案例
      • 99乘法表完整版

Linux-C P5 控制语句

C语言中的控制语句用于控制程序的流程,以实现程序的各种结构方式,包括顺序语句判断语句循环语句特殊语句

Linux-C P5 控制语句_第1张图片

顺序语句

什么是顺序语句呢?

语句1
语句2
.....
语句n

观察流程图,按照语句从上到下,从左到右的进行顺序执行程序指令的过程,在程序没有使用任何其他控制语句的前提下,语句实行的就是顺序语句

举个栗子

Linux-C P5 控制语句_第2张图片

#include 

int main(int argc, const char *argv[])
{
     
	printf("1\n");
	printf("2\n");
	printf("3\n");
	printf("4\n");
	printf("5\n");

	return 0;
}

Linux-C P5 控制语句_第3张图片

从程序的运行结果可以看出程序的执行顺序是从上到下,这是最基本的结构,也是学习其他结构的基础

判断语句

通过对顺序语句的了解之后,来看看判断语句

Linux-C P5 控制语句_第4张图片

判断语句又称选择语句,包括if语句switch语句

if判断语句

基本概念

if语句是用来判定所给定的条件是否满足
根据判定的结果执行给出的操作

程序段0
if(判断条件){
     
        程序段1
}else{
     
        程序段2
}
程序段3

光看程序,还是有些不好理解的话
下面通过流程图来了解一下它的运作原理

程序段0
判断条件
程序段1
程序段2
程序段3

这样就能很清晰的了解到if判断语句是如何运作的,如果判断条件为真执行程序段1,如果为假执行程序2
但是这样看还不够形象,在此之前先来看看if语句三种基本形式


三种基本形式

形式一

程序段0
if(判断条件){
     
        程序段1
}else{
     
        程序段2
}
程序段3

前面已经讲到了这种形式的基本流程,接下来通过例子来更具体的了解一下

举个栗子

Linux-C P5 控制语句_第5张图片

#include 

int main(int argc, const char *argv[])
{
     
	int a = 5,b = -5;

	if(a > b){
     
		printf("a > b\n");
	}else{
     
		printf("b >= a\n");
	}

	return 0;
}

Linux-C P5 控制语句_第6张图片
通过例子可以看到,if后面括号里面的内容是关键,如果里面的表达式a>b成立,那么就会执行printf(“a > b\n”);,而不成立就会执行else后面的内容printf(“b >= a\n”);

可以看出int a = 5,b = -5;,显然a是b要大的,所以输出的内容为a > b

下面通过第二种形式来更加深入的了解if语句

形式二

程序段0
if(判断条件){
     
        程序段1
}
程序段2

流程图

程序段0
判断条件
程序段1
程序段3

通过基本机构和流程图应该能看出一些与前面形式的不同,如果判断的表达式为假时,则直接执行后面的语句,而没有执行不成立的一个语句段

举个栗子

Linux-C P5 控制语句_第7张图片

#include 

int main(int argc, const char *argv[])
{
     
	int a = 5,b = -5,c = 0;

	if(a){
     
		printf("%d\n",a);
	}

	if(b){
     
		printf("%d\n",b);
	}

	if(c){
     
		printf("%d\n",c);
	}

	return 0;
}

Linux-C P5 控制语句_第8张图片
从这里看到了三个形式的if语句,但是表达式却换成了整型的变量,这样是可以的吗?
从结果能输出的情况可以看到是可以的,if语句只会判断括号里的内容的大小,从结果也不难发现,只有当内容的结果不为0时,输出判断正确的内容,而当括号里的结果为0时,则不输出任何内容

形式三

程序段0
if(判断条件1{
     
        程序段1
}else if(判断条件2{
     
        程序段2
}else if(判断条件3{
     
        程序段3
}.......{
     
        ......
}else if(判断条件n){
     
        程序段n
}

程序段n+1

流程图

程序段0
判断条件1
程序段1
判断条件2
程序段2
判断条件3
程序段3
判断条件N
程序段N
程序段N+1

这个形式能够进行多重判断,能够将一个条件进行很细的分类,当然如果只通过上面的结构和流程图可能会看的有点云里雾里,接下来就通过例子来深入了解一下吧

举个栗子

Linux-C P5 控制语句_第9张图片

#include 

int main(int argc, const char *argv[])
{
     
	int a;
	printf("在大鱼吃小鱼中,查看你现在能吃的鱼的种类\n");
	printf("输入1:查询小鱼\n");
	printf("输入2:查询大鱼\n");
	printf("输入3:查询鲨鱼\n");
	printf("输入4:查询鲸鱼\n");
	scanf("%d",&a);

	if(a > 4){
     
		printf("输入内容超出范围请输入1~4\n");
	}else if(a > 3){
     
		printf("可以吃鲨鱼、大鱼和小鱼\n");
	}else if(a > 2){
     
		printf("可以吃大鱼和小鱼\n");
	}else if(a > 1){
     
		printf("可以吃小鱼\n");
	}else if(a == 1){
     
		printf("你好像什么都不能吃哦!\n");
	}else{
     
		printf("输入内容超出范围请输入1~4\n");
	}
	return 0;
}

Linux-C P5 控制语句_第10张图片

这里我以一个大鱼吃小鱼的游戏为例,看现在的形态能吃什么?
当然是越厉害吃的越多

这里通过数字的划分就可以选择不同的语句进行输出,下面列了一个表格

范围 功能 结果
a>4 输入有误 输入内容超出范围请输入1~4
a=4 你是鲸鱼 可以吃鲨鱼、大鱼和小鱼
a=3 你是鲨鱼 可以吃大鱼和小鱼
a=2 你是大鱼 可以吃小鱼
a=1 你是小鱼 你好像什么都不能吃哦!
a<1 输入有误 输入内容超出范围请输入1~4

通过表格应该能够更好的理解if语句形式三的作用,但是当划分的情况更多的时候,if语句会变的很麻烦,所以更好的解决方法会在switch讲到


if嵌套语句

在if语句中又包含一个或者多个if语句称为if语句的嵌套

一般形式

程序段0
if(判断条件1){
     
    程序段1
    if(判断条件2){
     
        程序段2
    }else{
     
        程序段3
    }
}else{
     
    程序段4
    if(判断条件3){
     
        程序段5
    }else{
     
        程序段6
    }
}
程序段7

流程图

程序段0
判断条件1
程序段1
程序段4
判断条件2
判断条件3
程序段2
程序段3
程序段5
程序段6
程序段7

举个栗子

这里做一个判断,比如你过了英语四级,且过了计算机二级你就能拿到学位证;如果只有其中之一能拿到毕业证;如果都没过则不能毕业。输入你是否通过这两门测试,程序就会告诉你的能否毕业,还需要在哪些方面做努力

Linux-C P5 控制语句_第11张图片

#include 

int main(int argc, const char *argv[])
{
     
	int a,b;

	printf("你是否通过了英语四级(是输入1/否输入0):");
	scanf("%d",&a);

	printf("你是否通过了计算机二级(是输入1/否输入0):");
	scanf("%d",&b);


	if(a == 1){
     
		printf("你能拿到毕业证!\n");
		if(b == 1){
     
			printf("你能拿到学位证!\n");
		}else{
     
		
		}
	}else{
     
		if(b == 1){
     
			printf("你能拿到毕业证!\n");
		}else{
     
			printf("你什么都拿不到哦!\n");
		}
	}

	return 0;
}

Linux-C P5 控制语句_第12张图片

switch判断语句

if语句只能从两者中选择一个,当要实现几种可能之一时
就要用if…else if,甚至多重的嵌套if来实现,当分支较多时,程序会变得很复杂,可读性很差
因此…
switch语句专门处理多路分支情形,是程序变得简洁

基本形式

程序段0
switch( 表达式){
     
    case 常量表达式1:程序段1 ;break;
    case 常量表达式2:程序段2 ;break;
    case 常量表达式3:程序段3 ;break;
    .....
    case 常量表达式n:程序段n ;break;
    default:
}
程序n+1

流程图

常量表达式1
常量表达式2
常量表达式3
常量表达式N
程序段0
表达式
程序段1
程序段2
程序段3
程序段N
程序段N+1

举个栗子

这里我们可以改造一下之前的if语句,大鱼吃小鱼的那个
Linux-C P5 控制语句_第13张图片

#include 

int main(int argc, const char *argv[])
{
     
	int a;
	printf("在大鱼吃小鱼中,查看你现在能吃的鱼的种类\n");
	printf("输入1:查询小鱼\n");
	printf("输入2:查询大鱼\n");
	printf("输入3:查询鲨鱼\n");
	printf("输入4:查询鲸鱼\n");
	scanf("%d",&a);

	switch(a){
     
		case 1:printf("你好像什么都吃不到哦!\n");break;
		case 2:printf("可以吃小鱼\n");break;
		case 3:printf("可以吃大鱼和小鱼\n");break;
		case 4:printf("可以吃鲨鱼、大鱼和小鱼\n");break;
		default:printf("输入内容超出范围请输入1~4\n");
	}

	return 0;
}

Linux-C P5 控制语句_第14张图片

这样程序是不是就简单很多了,关于后面添加的break会在后面的特殊语句讲到

循环语句

Linux-C P5 控制语句_第15张图片
但能够对程序进行判断而执行指定程序的判断语句之后,如果想要重复的执行一段代码,该如何实现呢?
循环语句的出现就很好的解决了这个问题

while循环语句

首先看到while循环语句


while
基本形式

程序段0
while(判断条件){
     
    程序段1
}
程序段2

流程图

不为0
为0
程序段0
表达式
程序段1
程序段2

通过结构图和流程可以看出,只要判断条件成立或者不为0,它就会一直循环执行程序段1,如果在程序段1不改变表达式里的情况,就会进入一个死循环,当然很多时候需要用到这个死循环,但现在先以可以退出循环的例子进行举例

举个栗子

Linux-C P5 控制语句_第16张图片

#include 

int main(int argc, const char *argv[])
{
     
	int i = 1,s = 0;

	while(i <= 5){
     
		s += i;
		i++;
	}	

	printf("s = %d\n",s);
	return 0;
}

Linux-C P5 控制语句_第17张图片

这里进行了累加操作,通过while循环实现了1+2+3+4+5=15


do…while

基本形式

程序段0
do{
     
    程序段1
}while(判断条件);
程序2

流程图

不为0
为0
程序段0
程序段1
表达式
程序段1
程序段2

这么一看好像跟上面的没什么区别,但是它还是有不样的地方,通过例子一探究竟把!

举个栗子

Linux-C P5 控制语句_第18张图片

#include 

int main(int argc, const char *argv[])
{
     
	int i = 1,s = 0;


	do{
     
		s += i;
		i++;
	}while(i <= 5);


	printf("s = %d\n",s);
	return 0;
}

Linux-C P5 控制语句_第19张图片

for循环语句

for语句是C语言所提供的功能更强、使用更广泛的一种循环语句


for语句

基本形式

程序段0
for(表达式1;表达式2;表达式3){
     
    程序段1
}
程序段2

三个表达式用分号隔开

表达式1是循环初始化表达式
表达式2是循环条件表达式
表达式3是循环调整表达式

这里用上面while循环的例子看看能够更好的理解

Linux-C P5 控制语句_第20张图片

流程图

表达式2不为0
表达式2为0
执行表达式3
程序段0
表达式1
表达式
程序段1
程序段2

看着就像while的简化版

举个栗子

Linux-C P5 控制语句_第21张图片

#include 

int main(int argc, const char *argv[])
{
     
	int i,s = 0;

	for(i = 1;i <= 5;i++){
     
		s += i;
	}

	printf("s = %d\n",s);
	return 0;
}

Linux-C P5 控制语句_第22张图片

这里完成的功能跟while一样,但程序简化了很多


循环嵌套

基本形式

程序段0
for(表达式1;表达式2;表达式3){
     
    程序段1
    for(表达式1;表达式2;表达式3){
     
        程序段2
    }
    程序段3
}
程序段4

举个栗子

写个99乘法表

Linux-C P5 控制语句_第23张图片

#include 

int main(int argc, const char *argv[])
{
     
	int i,j;

	for(i =1;i <= 9;i++){
     
		for(j = 1;j <=9;j++){
     
			if(i <= j){
     
				printf("%d*%d=%-2d  ",i,j,i*j);
			}
		}
		printf("\n");
	}

	return 0;
}

Linux-C P5 控制语句_第24张图片

当然99乘法表的显示不止一种形式,如下图

Linux-C P5 控制语句_第25张图片

这里完整版的程序内容可以参见程序案例

特殊语句

Linux-C P5 控制语句_第26张图片

goto语句

goto也称为无条件转移语句,这里直接通过例子来了解一下


举个栗子

Linux-C P5 控制语句_第27张图片

#include 

int main(int argc, const char *argv[])
{
     
	int i = 1,s = 0;

loop:
	if(i <= 5){
     
		s += i;
		i++;
		goto loop;
	}

	printf("s = %d\n",s);
	return 0;
}

Linux-C P5 控制语句_第28张图片

goto同样实现了循环的功能

continue语句

continue只能用在循环体中,就是不执行这个循环continue语句之后的内容直接跳到下个循环

continue;

举个栗子

比如输出100以内所有能被5整除的数

Linux-C P5 控制语句_第29张图片

#include 

int main(int argc, const char *argv[])
{
     
	int i;
	
	for(i = 1;i <= 100;i++){
     
		if(i % 5 != 0){
     
			continue;
		}
		printf("%d\n",i);
	}

	return 0;
}

Linux-C P5 控制语句_第30张图片

break语句

之前在switch里面出现过,现在在这里做出详细的讲解
break用在switch或者循环语句中,在循环语句中与continue有点相似,不同的是它会直接退出整个循环体
而在switch中,每个case后面不加的话会继续往下进行判断


基本形式

break;

之前已经在switch里用过了,这里就举个在循环中的例子吧

举个栗子

比如让程序进行从1~100的累加,但我想让累加和大于200的时候就输出结果

Linux-C P5 控制语句_第31张图片

#include 

int main(int argc, const char *argv[])
{
     
	int i,s = 0;

	for(i = 0;i <= 100;i++){
     
		s += i;
		if(s >= 200){
     
			break;
		}
	}

	printf("i = %d,s = %d\n",i,s);
	return 0;
}

Linux-C P5 控制语句_第32张图片

程序案例

99乘法表完整版

程序

#include 
/*
 *功能介绍:实现不同显示形式的九九乘法表
 *作者:Cage
 *更新日期:2019.10.28
 */
void fun1(){
     
	int i,j;

	for(i =1;i <= 9;i++){
     
		for(j = 1;j <=9;j++){
     
			if(i <= j){
     
				printf("%d*%d=%-2d  ",i,j,i*j);
			}
		}
		printf("\n");
	}
}

void fun2(){
     
	int i,j;

	for(i = 1;i <= 9;i++){
     
		for(j = 1;j <= 9;j++){
     
			if(j < i){
     
				printf("        ");
			}else{
     
				printf("%d*%d=%-2d  ",i,j,i*j);
			}
		}
		printf("\n");
	}
}

void fun3(){
     
	int i,j,k;

	for(i = 1;i <= 9;i++){
     
		for(k = 1;k <= 9-i;k++){
     
			printf("        ");
		}
		for(j = 1;j <= i;j++){
     
			printf("%d*%d=%-2d  ",i,j,i*j);
		}
		printf("\n");
	}
}

void fun4(){
     
	int i,j;

	for(i =1;i <= 9;i++){
     
		for(j = 1;j < i+1;j++){
     
			printf("%d*%d=%-2d  ",i,j,i*j);
		}
		printf("\n");
	}
}

int main(int argc, const char *argv[])
{
     
	int c,w = 1;
	
	while(w){
     
		printf("请输入想要显示九九乘法表的方式(1.方式一2.方式二3.方式三4.方式四-1.退出):");
		scanf("%d",&c);
		switch(c){
     
			case -1:w = 0;break;
			case 1:fun1();break;
			case 2:fun2();break;
			case 3:fun3();break;
			case 4:fun4();break;
			default:printf("输入有误,请输入正确的内容\n");
		}
	}
	return 0;
}

``
## 更多内容

[Linux-C P1 Linux基础与Vi操作](https://blog.csdn.net/qq_41030935/article/details/103098904)


[Linux-C P2 数据类型](https://blog.csdn.net/qq_41030935/article/details/103410286)

[Linux-C P3 运算符和表达式](https://blog.csdn.net/qq_41030935/article/details/103438738)

[Linux-C P4 输入输出](https://blog.csdn.net/qq_41030935/article/details/103475581)



[Linux-C P6 数组](https://blog.csdn.net/qq_41030935/article/details/103825381)

[Linux-C P7 指针](https://blog.csdn.net/qq_41030935/article/details/103882541)

[Linux-C P8 函数](https://blog.csdn.net/qq_41030935/article/details/103998816)

[Linux-C P9 内存管理](https://blog.csdn.net/qq_41030935/article/details/104074306)

[Linux-C P10 结构体细讲](https://blog.csdn.net/qq_41030935/article/details/104106883)

你可能感兴趣的:(嵌入式开发,Linux-C,编程语言,c语言)