三种方式(猜数字游戏实践)

在这里插入图片描述

个人主页:小田爱学编程
系列专栏:c语言从基础到进阶
关注博主,随时获取更多关于c语言的优质内容!


欢迎来到小田代码世界~
喜欢的小伙伴记得一键三连哦 ૮(˶ᵔ ᵕ ᵔ˶)ა

目录

一、分支语句

1.if语句

(1)Tip:短路问题

(2)Tip:if和 eise if的嵌套

(3)Tip:悬空else问题

 2.switch语句

二、循环语句

1.while语句

​编辑

2.for语句

do-while循环

四、goto语句

五.猜数字游戏


前言:

梳理一下三大结构且做一个实践

C语⾔是结构化的程且序设计语⾔,这⾥的结构指的是顺序结构、选择结构、循环结构,C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合

三种方式(猜数字游戏实践)_第1张图片

一、分支语句

1.if语句

         三种方式(猜数字游戏实践)_第2张图片

举个例子:输入一个整数,判断是否为奇数

#include
int main()
{
    int num=0;
 scanf("%d",&num);
if(num%2=1)
{
printf("%d是奇数/n",&num);
}
return 0;
}

用一张图清楚的表达出这里面的逻辑,在c语言中0表示为假,非0表示为真,把这个逻辑用到奇数判断就行,判断奇数,首先为数学问题,模2为1则为奇数,然后根据编程思维写出来,利用if语句和scanf函数这个题很简单三种方式(猜数字游戏实践)_第3张图片

else语句

三种方式(猜数字游戏实践)_第4张图片

#include
int main()
{
int age = 0;
scanf("%d,&age");
if(age>=18)
{
printf("成年/n";
else
printf("未成年/n");
}
return 0;
}

三种方式(猜数字游戏实践)_第5张图片

#include
int main()
{
int year=0;
scanf("%d",&year);
if(year%4=0&&year%100!=0||year%400=0)
{
printf("这个年是闰年/n");
else
printf("不不不/n");
}
return 0;
}

(1)Tip:短路问题

三种方式(猜数字游戏实践)_第6张图片

短路问题

三种方式(猜数字游戏实践)_第7张图片

里面要特别注意&&这个操作符,记住左边一旦为真,左边即是0

注意if 语句只能控制⼀条语句,就是 printf("成年了\n"); ,if语句为真,则打印成年了,

if语句为假,则不打印,对于 printf("可以谈恋爱了\n"); 是独⽴存在的,不管if语句的条件的真
假,都会被执⾏。那如果我们要if语句同时控制2条语句,怎么办呢?那就要使⽤ {} 将代码括起来, else 后也可以跟上⼤括号。

(2)Tip:if和 eise if的嵌套

if else语句中else中能穿插 if吗?答案是 的。这就是我接下来介绍的if嵌套,构成多重判断。
 要求输入一个整数,判断输入的整数是0,还是正数或者负数。
int main()
{
	int num = 0;
	//输入
	scanf("%d", &num);
	//判断
	if (num == 0)
		printf("输入的值是0\n");
	else if (num > 0)
{
			printf("输入的值是正数\n");
}
		else{

			printf("输入的值是负数\n");	
}	
return 0;
}

输入一个整数,如果是正数,再判断是奇数还是偶数,并输出;如果不是正数则输出:负数

#include
int main()
{
int num=0;
scanf("%d",&num);
if(num>0)
{
if(num%2==0)
printf("偶数/n");
else
printf("奇数/n");
}
else
{
Printf("负数/n");
}
return 0;
}

(3)Tip:悬空else问题

有的人又要问了:if后不加{}else后不加{}能行吗?if后不加{}else后不加{}能行吗?else总跟最接近的if匹配这样很可能会构成逻辑错误,会把相近的语句进行对齐:悬空else问题

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

如果希望else确实和第⼀个if匹配,可以这样修改。

 2.switch语句

1.除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。
2.switch 语句是⼀种特殊形式的 if...else 结构,⽤于判断条件有多个结果的情况它把多重
的 else if 改成更易⽤、可读性更好的形式
示例:
switch (expression) {
 case value1: statement
 case value2: statement
 default: statement
}

上⾯代码中,根据表达式 expression 不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,就执行defult的形式。

注:
• switch 后的 expression 必须是整型表达式
• case 后的值,必须是整形常量表达式
练习:输⼊任意⼀个整数值,计算除3之后的余数
#include 
int main()
{
 int n = 0;
 scanf("%d", &n);
 switch(n%3)
 {
 case 0:
 printf("整除,余数为0\n"); 
 break;
 case 1:
 printf("余数是1\n"); 
 break;
 case 2:
 printf("余数是2\n"); 
 break;
 }
 return 0;
}
前⾯的代码中,如果我们去掉case语句中的break,会出现什么情况呢?
#include 
int main()
{
 int n = 0;
 scanf("%d", &n);
 switch(n%3)
 {
 case 0:
 printf("整除,余数为0\n"); 

 case 1:
 printf("余数是1\n"); 
 
 case 2:
 printf("余数是2\n"); 
 
 }
 return 0;
}
我们发现,7除以3本来余数是1,但是我们发现程序运⾏的结果多了⼀⾏“余数是2”的打印
三种方式(猜数字游戏实践)_第8张图片
原因是 switch 语句也是分⽀效果的,只有在 switch 语句中使⽤ break 才能在跳出 switch
句,如果某⼀个 case 语句的后边没有 break 语句,代码会继续往下执⾏,有可能执⾏其他 case
语句中的代码,直到遇到 break 语句或者 switch 语句结束。就⽐如上⾯的代码就执⾏了 case2中的语句
在使⽤ switch 语句的时候,我们经常可能遇到⼀种情况,⽐如 switch 后的表达式中的值⽆法匹
配代码中的 case 语句的时候,这时候要不就不做处理,要不就得在 switch 语句中加上default
switch 后边的 expression 的结果不是 value1 ,也不是 value2 的时候,就会执⾏ default ⼦句
	default :
			System.out.println("default");
			break;
case和default没有先后的关系

二、循环语句

1.while语句

三种方式(猜数字游戏实践)_第9张图片

⾸先上来就是执⾏判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执⾏循环语句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。
示例: 在屏幕上打印1~10的值
#include 
int main()
{
 int i = 1;
 while(i<=10)
 {
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}

while里面的break和continue

break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执
⾏。
示例:
#include 
int main()
{
 int i = 1;
 while(i<=10)
 {
 if(i == 5)
 break;//当i等于5后,就执⾏break,循环就终⽌了
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}

为什么会出现这种结构?

打印了1,2,3,4后,当i等于5的时候,循环到 break 的地⽅终⽌,不再打印,不再循环。
所以 break 的作⽤就是永久的终⽌循环,只要 break 被执⾏, break 外的第⼀层循环就终⽌了。
那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤ break 来完成我们想要的效果。
而for循环是先判断再进表达式,最后在调整。·
continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码,继续进⾏
下⼀次循环的判断
#include 
int main()
{
 int i = 1;
 while(i<=10)
 {
 if(i == 5)
 continue;
 //当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅
 //因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}
到这⾥我们就能分析出来, continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接
到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成死循环

2.for语句

for 循环是三种循环中使⽤最多的, for 循环的语法形式如下:

1. for(表达式1; 表达式2; 表达式3)
2. 语句;
表达式1 ⽤于循环变量的初始化
表达式2 ⽤于循环结束条件的判断
表达式3 ⽤于循环变量的调整
示例图: 三种方式(猜数字游戏实践)_第10张图片

 练习:在屏幕上打印1~10的值

1 #include 
2
3 int main()
4 {
5 int i = 0;
6 for(i=1; i<=10; i++)
7 {
8 printf("%d ", i);
9 }
10 
11 return 0;
}

运行结果  1.2.3.4.5.6.7.8.9.10

for和while的区别三种方式(猜数字游戏实践)_第11张图片示例

计算1~100之间3的倍数的数字之和

#include 
int main()
{
 int i = 0;
 int sum = 0;
 for(i=1; i<=100; i++)
 {
 if(i % 3 == 0)
 sum += i;
 }
 printf("%d\n", sum);
 return 0;
}

如果能直接产⽣3的倍数的数字就省去了多余的循环和判断

#include 
int main()
{
 int i = 0;
 int sum = 0;
 for(i=3; i<=100; i+=3)
 {
 sum += i;
 }
 printf("%d\n", sum);
 return 0;
}

break和continue

其实和 while 循环中的 break ⼀样, for 循环中的 break 也是⽤于终⽌循环的,不管循环还需
要循环多少次,只要执⾏到了 break ,循环就彻底终⽌
示例:
#include 
int main()
{
 int i = 1;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 break;
 printf("%d ", i);
 }
 return 0;
}

运行结果为1.2.3.4.

break 的作⽤是永久的终⽌循环,未来我们在某个条件发⽣的时候,不想再继续循环的时候,就可以使⽤ break 来完成。

continue 

#include 
int main()
{
 int i = 1;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 continue;//这⾥continue跳过了后边的打印,来到了i++的调整部分
 printf("%d ", i);
 }
 return 0;
}

打印的结果为1.2.3.4.5.6.7.8.9.10

while遇见continue是到判断了

for遇见continue是到循环了

do-while循环

在循环语句中 do while 语句的使⽤最少,它的语法如下:
do
语句;
while ( 表达式 )
while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳
出循环; ⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表 达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。、
示例图
三种方式(猜数字游戏实践)_第12张图片
do while 语句中循环体是⾄少执⾏⼀次的,这是 do while 循环⽐较特殊的地⽅
示例 在屏幕上打印1~10的值
#include 
int main()
{
 int i = 1;
 do
 {
 printf("%d ", i);
 i = i + 1;
 }while(i<=10);
 
 return 0;
}

三种方式(猜数字游戏实践)_第13张图片

⼀般 do while 使⽤在循环体⾄少被执⾏⼀次的场景下,所以较少⼀些。
但有的时候得用do while循环最好
输⼊⼀个正整数,计算这个整数是⼏位数?
这⾥并⾮必须使⽤ do while 语句,但是这个代码就⽐较适合使⽤ do while 循环,因为n即使是
0,也是1位数,要统计位数的
#include 
int main()
{
 int n = 0;
 scanf("%d", &n);
 int cnt = 0;
 do
 {
 cnt++;
n=n/10;
} while (n);
printf("%d\n", cnt);
return 0;
}
do.while 语句中的 break continue 的作⽤和 while 循环中⼏乎 ⼀模⼀样 ,这里就不赘述了

四、goto语句

C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数
内跳转到设置好的标号处。
#include 
int main()
{
 printf("hehe\n");
 goto next:
 printf("haha\n");
 
next:
 printf("跳过了haha的打印\n");
return 0;
}
goto 语句如果使⽤的不当,就会导致在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建 议是能不⽤尽量不去使⽤;但是 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出 使⽤ goto 就⾮常的⽅便了

五.猜数字游戏

#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
void menu()//设置一个函数,具有返回值
{
	printf("*************************/n");
	printf("********1.play 0.exit/n");
	printf("*******************************/n");
}
void game()
{
	int r = rand() % 100 + 1;//生成一个随机数,为了提高代码运行的效率,所以缩短范围,采用模100+1出来的为0-100之间的数
	int guess = 0;
 
	
	while (1)//采用while语句进入循环
	{
		printf("猜一下数字:");
		scanf("%d" ,& guess);
		//使用if语句进行判断
		if (guess > r)
		{
			printf("猜大了/n");
		}
		else  if (guess < r)
		{
			printf("猜小了/n");
		}
		else
		{
			printf("恭喜你,你成功了");
			break;
		}
	}
}
//开始游戏
	int main()
	{
		int input = 0;//开始游戏,需要值的启动,设置初始化变量)
		//因为随机数生成与种子有关,所以采用time返回值为时间戳,种子会一直变化,unsigned进行强制转换为整型
		srand((unsigned int)time(NULL));
 
		//一开始就要进行循环,选择do while语句
		
		{
			menu();//引入一个函数,就是菜单
			printf("请选择数字");
			scanf("%d", &input);//输出一个值,在vs中要么用scanf-s,要不然在第一行定义
			switch (input)//使用case语句
			{
			case 1:
 
				game();
				break;//跳出循环
			case 0:
				printf("游戏结束,请去打王者荣耀");
				break;
			default://其他情况
				printf("输入错误,重新输入/n");
					break;
			}
		} while (input);
		return 0;
	}
 
 

今天的分享到这里就结束啦!如果觉得文章还不错的话,可以三连支持一下,您的支持就是我前进的动力!

你可能感兴趣的:(c语言从入门到进阶,c语言,算法,c++,c#)