您现在的位置是:首页 >技术交流 >【初始C语言】分支语句和循环语句和转向语句的用法,文章末尾还有精品小礼物噢。网站首页技术交流

【初始C语言】分支语句和循环语句和转向语句的用法,文章末尾还有精品小礼物噢。

小李同学_LHY 2023-06-09 08:00:02
简介【初始C语言】分支语句和循环语句和转向语句的用法,文章末尾还有精品小礼物噢。

 夜里醒来,听雨滴

打在窗台雨搭上,更细密的一阵雨

落在窗外小树林里

雨落在更远的地方,落在另一场雨中

绵密的一片雨声

从芭蕉的昏暗

词林升起。一场夜雨紧邻古代

在巴山秋池,无需梦

无需修剪火焰,听雨

是一个人靠近古人的地方

而今晚是另一个夜晚

时间稀落,听雨的,是另一个人

—— 耿占春《一个人听雨》

 这是小小结构图:

 一,条件判断句(分支语句)

条件判断句就是分支语句,就是有多种选择的方式,就比如,如果你觉得我博客写的不错,就给我点点赞鼓励一下我,反之,你唏嘘一声摆摆头走了,这就是选择。

if 语句

if语句有单分支和多分支,简单理解就是单分支就是只有一种或两种选择,多分支是有三种以上的选择。

if 里面的表示式的结果为真(判断正确),就会执行里面的语句;(注意在c语言中,0表示假,非0表示真)

#include<stdio.h>

int main()
{

	int a = 10;
	if (a == 10)
	{
		printf("相等", a);
	}


	return 0;
}

if 里面的表示式的结果如果为真(判断正确),就会执行里面的语句else 语句,如果为假,就会自动执行 else 里面的语句。

#include<stdio.h>

int main()
{

	int a = 10;
	if (a == 10)
	{
		printf("相等", a);
	}
	else
	{
		prinf("不相等");
	}


	return 0;
}

if else 语句(多分支)

其实多分支就是会有多个表达式,程序顺着代码行往下执行,从if语句里面的表达式开始,如果表达式为真就执行if里面的语句,为假就进入下面多个else if的表达式,依次判断else if 里的表达式是否为真,真就执行else if里面的语句,如果if语句 和else if语句都没有执行,那说明最后只有else的表达式符合条件,就会执行else 里的语句。


#include<stdio.h>

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age < 18)
	{
		printf("是前途无限的少年
");
	}

	else if (age >= 18 && age < 30)
	{
		printf("是风华正茂的青年
");
	}

	else if (age >= 30 && age < 50)
	{
		printf("是成熟魅力的中年
");
	}

	else if (age >= 50 && age < 80)
	{
		printf("是天伦之乐的老年
");
	}

	else
	{
		printf("老寿星
");

	}
	return 0;
}

补充说一下,关于悬空else

只有记住一点,else的匹配是和它离最近的if匹配的,我称之为就近原则

例如 

​

#include<stdio.h>

int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehe
");
	
	else
		printf("haha
");
	return 0;
}

​

​

 

咱们分析一下以上的的代码,我们知道if语句里面的代码如果为假,就会自动执行else 里面的语句

a 不等于 1,表达式为假,应该自动执行else里面的语句输出“haha”才对,但是发现并没有输入任何东西 ,为什么呢,因为,else 语句是跟最近的if匹配,所以上面的else 是匹配里面的if语句的,当然没有任何输出! 所以我们以为else语句对齐了 if语句就是与之匹配的,实则不然。 所以咱们要养成好的习惯,之后在if语句和else语句中都加上“ { } ”(花括号),这样就使代码的逻辑更加清晰了。

所以当我们改正时的代码应该在这样

#include<stdio.h>

int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
		{
			printf("hehe
");
		}
	}
			
	else
	{
		printf("haha
");
	}
	return 0;
}

 switch语句

switch语句也是一种分支语句,常常用于多分支的情况

我们在前面发现,多分支语句中的else if的形式太复杂了,咱就换不一样的语法形式

switch的语法结构

switch(整型表达式)

{
     case 整形常量表达式1 :

     {

        语句1;

     }

    break;

   case 整形常量表达式2 :

     {

        语句1;

     }

    break;

       .......

   ddefault;

}

 整形表达式指的是只有整形组成,结果也是整形,比如(3+4 = 7),char 类型也是属于整形类型,除此之外都不行,比如浮点型 float或者双精度型 double,整形常量表达式也是如此,

字句break是把语句列表划分为不同的分支部分,简单来讲就是,case标签的值是入口,break是出口,如果没有break,就会往下执行语句,直到遇到break跳出为止。

子句default是当switch表达式的值并不匹配所有case 标签的值时,这个default字句后面的语句就会执行,default:可以写在任何一个case标签可以出现的位置。

代码例子:

#include<stdio.h>

int main()
{
	int day = 0;
	scanf("%d", &day);
	switch (day)
	{
		case 1:
		{
			printf("星期一
");
		}
		break; 
		case 2:
		{
			printf("星期儿
");
		}
		break;
		case 3:
		{
			printf("星期三
");
		}
		break;
		case 4:
		{
			printf("星期四
");
		}
		break;
		case 5:
		{
			printf("星期五
");
		}
		break; 
		case 6:
		{
			printf("星期六
");
		}
		break;
		case 7:
		{
			printf("星期天
");
		}
		break;
	deault:
		{
			printf("输入错误");
		}
		break;
	}


	return 0;
}

二.循环语句

我们在前面将来if 语句,当条件满足时,if语句后的语句执行,否则不执行。但是这个语句只会执行一次,但是如果一件事情需要我们完成很多次,咋整,那我们就可以用到循环语句来解决问题了。

1.for循环

for(表达式1;表达式2;表达式3)

{
     循环语句;
}

表达式1为初始化部分,用来初始化循环变量

表达式2为条件判断部分,用来判断循环时候终止

表达式3为调整部分,用来循环条件的调整

比如使用for循环,在屏幕上打印 1 - 10的数字

#include<stdio.h>

int main()
{
	int i = 0;
	for (i = 1; i <= 10; i++)//(初始化;判断部分;调整部分)
	{
		printf("%d ", i);     //循环语句;
	}
	return 0;
}

2.while语句

while(条件)

    {

           循环语句;

     }

#include<stdio.h>

int main()
{
	int i = 0;
	while (i <= 10)
	{
		printf("%d ", i);
		i = i + 1;
	}
	return 0;
}

 3.do while语句

do

{
      循环语句;

}while(表达式)

do while 循环语句有有个特点,就是不管while里面的表达式,循环至少先执行一次,你可以这样想,do while 中的 do 放在while前面,就是不管三七二十一,先干你一次再说,就是先执行花括号里面语句一次。

代码示例:

#include<stdio.h>

int main()
{
	int i = 10;
	do
	{
		printf("%d ", i);

	} while (i < 10);

	return 0;
}

三.转向语句

4.1 continue的作用:continue是用来终止本次循环的,也就是本次while ,do while,for,循环中continue后边的代码不会再执行了,而是直接跳转到  while 或者  do while  或者  for  语句的判断部分,进行下一次循环的入口判断。咱们以 for 循环为例

#include<stdio.h>

int main()
{
	int i = 0;
	for (i = 0; i <= 10; i++)
	{
		if (i <= 5)
		{
			continue;
		}
		printf("%d ", i);
	}
}

	return 0;

 我们可以看到,如果i是小于等于5时,用continue语句跳过了本次的循环,不会执行continue后面的语句了,所以1 - 5不会输出,当 i 大于 5了不满足if里面的语句,就会来到printf这里输出。

4.2 break

break 的作用:在while,do while ,for  循环中只要遇到break,就停止后期的所有循环,直接终止循环,所以循环语句中的break是用来永久终止循环的

 咱们以while 语句为例,代码如下

#include<stdio.h>

int main()
{
	int i = 0;
	while (i <= 10)
	{
		if (i == 5)
		{
			break;
		}
		printf("%d ", i);
		i++;
	}

 在 i 小于5时,可以进行输出,但i 等于 5时,if条件为真,执行了break语句,使这次循环永久终止了,后面的值不可能再输出了。 

4.3 goto 语句

find:

{
      语句;

}
    goto find;//find可以替换成其他的,这里不要求一定是find

goto语句的作用:用于无条件跳转到其他标签。它将控制权转移到程序的其他部分。

代码示例:

int main()
{
	int i = 0;
	
	while (i <= 10)
	{
		goto find;
		{
		find:
			{
				break;
			}
		}
		printf("%d ", i);
		i++;
	}
	return 0;
}

 

 在while 语句里遇到了goto,然后跳转到goto 语句里面的break,直接永久终止了循环,没有输出。

goto语句一般很少使用,因为它使程序的可读性和复杂性变得更差,一旦滥用goto语句将会导致逻辑混乱,导致系统崩溃等问题!!!

但是goto既然存在,那就自然有它的用处某些场合下goto语句还是用得着的,最常见的用法就是终止程序在某些深度嵌套的结构的处理过 程。比如结束多层嵌套的使用

for(...)
    for(...)
   {
        for(...)
       {
            if(表达式)
                goto find;
       }
   }
    …
find:
 if(表达式)
{

         // 跳出多层循环到这里
}

4.4 return语句:

具体可以参考以下链接(人家写的详细~)
return的作用_return语句的作用_春风欲雨的博客-CSDN博客

精品小礼物:嗨害嗨,编程猜数字小游戏!!!

猜一个1 -100之间的数字,猜大或猜小了就继续猜,直到才对为止。

在这个小游戏中用到了以上几乎所有的语句(分支,循环,转向),既可以巩固复习一下,又可以玩玩小游戏放松怡情,这多是一件美事~

这是一个具体的框架,细节在下一步;

#include<stdio.h>

int main()
{
	int input;

	do
	{
		menu();
		printf("
欢迎来玩猜数字小游戏,请选择:>");
		scanf("%d", &input);
		switch (input)
		{
			case 1:
			{
				game();
				
			}
			break;
			case 0:
			{
				printf("退出游戏");
				break;
			}
			break;
			default:
				printf("输入错误,请重新输入");
		}
	} while (input);
	return 0;
}

1.do while 

我们先定义一个变量input作为我们猜数字的输入,猜数字游戏咱们玩一次不够尽兴,必须玩到咱们不想玩为止(意思是玩很多次),所以在前文时提到如果一件事需要进行很多次时,就用到循环,这里用到 do while循环,do while循环的特点是就是不管怎样,先至少进行循环体的语句再进行判断,在这里比较适合。(就好像是,游戏菜单先打开了,你再进行选择,而不是游戏菜单还没弹出来,你就选择,选个啥),while()里的判断表达式是输入的值,因为c语言中非0表示真,所以输入非0的数都可以使循环进行,选择0刚好为假,终止了循环退出程序,一举两得。

men()

函数功能用来打印菜单

void menu()
{
	printf("****************************
");
	printf("****************************
");
	printf("*********1.开始游戏*********
");
	printf("*********0.退出游戏*********
");
	printf("****************************
");
	printf("****************************
");
}

2.switch

游戏菜单打出来之后,咱们就可以进行选择(选1就是玩,选0退出,选其他的数字就会提示输入错误),玩游戏或是不玩,我们就可以用到switch来根据我们的选择来进入不同的入口,实现不同的功能,如果输入1,那就进到case:1的入口,来到game()函数这里来玩游戏,输入0就来到cse:0的入口,遇到break,直接终止循环退出,输入其他数就提示输入错误,重新输入。

game()

功能在这里实现猜数字小游戏

void game()
{
	int guess = 0;
	int ret = rand() % 100 + 1;
	while (1)
	{
		printf("请猜数字:>");
		scanf("%d", &guess);
		if (guess > ret)
		{
			printf("猜大了
");
		}
		else if (guess < ret)
		{
			printf("猜小了
");
		}
		else
		{
			printf("恭喜你,猜对了
");
			break;
		}
		
	}
}

 game()函数的核心就是在于这个随机数的生成,,猜数字游戏嘛,每次肯定都是生成不同的随机数来猜测,这里就使用到了srand函数和rand函数来中用来产生一个随机的数值,但要注意的是每次rand函数只需调用一次srand函数即可,所以srand函数放到主函数即可,(补充一点,在srand()里调用time()函数的头文件是<stdio.math>),如果使用rand函数每次都要调用一次srand函数可能产生随机的数值,rand函数返回值范围是0 ~ 32767,为了使猜数字的范围在1 ~ 100之间,所以要 %100 + 1,具体详情可以参考:

C语言中的rand()函数_c rand_TLpigff的博客-CSDN博客

整个源码在这里;
 

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

void menu()
{
	printf("****************************
");
	printf("****************************
");
	printf("*********1.开始游戏*********
");
	printf("*********0.退出游戏*********
");
	printf("****************************
");
	printf("****************************
");
}

void game()
{
	int guess = 0;
	int ret = rand() % 100 + 1;
	while (1)
	{
		printf("请猜数字:>");
		scanf("%d", &guess);
		if (guess > ret)
		{
			printf("猜大了
");
		}
		else if (guess < ret)
		{
			printf("猜小了
");
		}
		else
		{
			printf("恭喜你,猜对了
");
			break;
		}
		
	}
}

int main()
{
	int input;
	srand((unsigned int)time(NULL));

	do
	{
		menu();
		printf("
欢迎来玩猜数字小游戏,请选择:>");
		scanf("%d", &input);
		switch (input)
		{
			case 1:
			{
				game();
				
			}
			break;
			case 0:
			{
				printf("退出游戏");
				break;
			}
			break;
			default:
				printf("输入错误,请重新输入");
		}
	} while (input);
	return 0;
}

看官,来都来了,留下个赞赞再走呗~ 

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。