Bootstrap

C语言分支和循环语句的学习感悟

        近期刚好学习到分支和循环语句,C语言中,分支和循环语句是控制程序流程的重要工具。常用的分支语句包括if语句、switch语句,常用的循环语句包括for循环、while循环和do-while循环。

If语句

        根据条件判断是否执行一段代码块。其基本语法为:

if(表达式)
{
    语句1;
}
else
{
    语句2;
}

 如果条件成立,则执行代码块中的语句;否则,程序会跳过语句1并继续执行else中的语句2。

Switch语句

        根据不同的条件执行不同的代码块。其基本语法为:

switch (expression) 
{
    case value1: statement
    case value2: statement
    default: statement
}

如果表达式的值与某个case后面的值匹配,则执行该case后面的代码块;否则,执行default代码块。

for循环

重复执行一段代码块一定次数。其基本语法为:

for(表达式1; 表达式2; 表达式3)
{
     语句;
}
//表达式1 ⽤于循环变量的初始化
//表达式2 ⽤于循环结束条件的判断
//表达式3 ⽤于循环变量的调整

第一次循环时,执行初始化表达式;循环条件成立时,执行代码块;循环结束后,执行更新表达式。

while循环

当满足条件时重复执行一段代码块。其基本语法为:

while(表达式)
{
    语句;
}

⾸先执⾏判断表达式,若表达式的值为0,循环直接结束;若表达式的值不为0,则执⾏循环语
句,语句执⾏完后再继续判断,是否进⾏下⼀次判断。总之只要表达式成立,就不断执行;当条件不成立时,跳出循环。

do-while循环

        至少执行一次代码块,然后再检查条件是否成立。其基本语法为:

do
{
    语句;
}while(表达式);

首先执行代码块,然后检查条件是否成立,如果成立,继续执行代码块;否则,跳出循环。

在使用这些语句时,需要注意以下几点:

1、语句的正确性:确保分支和循环语句的语法正确,避免出现错误。
2、条件的判断:分支和循环语句的条件需要仔细考虑,确保能够正确地控制程序的流程,要完全掌握好关系操作符,条件操作符以及逻辑操作符。
3、变量的作用域:分支和循环语句中使用的变量需要确保其作用域正确,避免出现未定义的行为。
4、嵌套使用:分支和循环语句可以嵌套使用,但需要注意控制程序的复杂度,避免出现逻辑错误或死循环等问题。

        在使用循环语句时,需要提前终止循环时使用break和continue这两个关键字,break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执⾏。continue 的作⽤是跳过本次循环 continue 后边的代码。需注意continue在for循环和while循环里面是有区别的,在while循环里稍不注意会造成程序死循环。

区分下面两个代码,i++条件控制语句不同位置就会出现不同的结果。

代码1:不能正常输出,打印到7以后不再继续打印,并且程序未退出,说明程序此时进入了死循环。

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

代码2:能正常打印,程序也正常退出。

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

所以使用continue关键字时要慎重小心,避免出现不必要的麻烦。

我的第一个小游戏

        学习了分支和循环,可以写一个“猜数字游戏”继续巩固知识。毕竟学习就是一个向上的循环。游戏分为三个关卡,分别是猜1~100,100~500,500~1500之间的数。

#define _CRT_SECURE_NO_WARNINGS 1

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


void game();//声明函数,游戏的判断在这个函数中实现
void menu();//提示菜单
int time_rand(int x);//实现随机数生成的函数

void game()
{
	int i = 0;
	int g = 0;
	int a = 0;
	for (i = 1; i <=3; i++)
	{
		int r = time_rand(i);
		int count = 0;
		while (1)
		{
			scanf("%d", &g);
			if (g > r)
			{
				printf("你猜大了!重新输入> ");
				count++;
			}
			else if (g < r)
			{
				printf("你猜小了!重新输入> ");
				count++;
			}
			else
			{
				printf("恭喜你猜中了!你共计猜了%d次\n", count);
				if(count==1)
					printf("你是天选之人!\n");
				else if(count<=10)
					printf("你是幸运星!\n");
				else
					printf("你的运气爆棚!\n");
				count = 0;
				printf("\n是否晋级?1-晋级,0-退出\n");								
			cxsr:
				scanf("%d", &a);
				if (a == 1)
				{
					break;
				}
				else if (a == 0)
					break;
				else
				{
					printf("输入错误,请重新输入:\n");
					goto cxsr;
				}
				if (i == 3)
				{
					printf("恭喜你完成所有关卡!\n");
				}
			}		
		}
		if (a == 0) break;			
	}
}

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

//⽣成a~b的随机数,公式:a + rand()%(b-a+1);
int time_rand(int x)
{
	int r = 0;
	if (x == 1)
	{
		r = rand() % 100 + 1;//1~100的随机数
		printf("请输入1~100的数字:>");
	}
	else if (x == 2)
	{
		r = 100 + rand() % (500 - 100 + 1);//100~500的随机数
		printf("请输入100~500的数字:>");
	}
	else if (x == 3)
	{
		r = 500 + rand() % (1500 - 500 + 1);//1500~500的随机数
		printf("请输入500~1500的数字:>");
	}
	return r;
}

int main()
{
	int input = 0;		
	srand((unsigned int)time(NULL));//由时间戳来控制随机值的种子
	menu();
	do
	{			
		scanf("%d", &input);
		if (input == 1)
		{
			printf("开始游戏\n");
			game();
			menu();
		}
		else if (input == 0)
		{
			printf("游戏退出\n");
			break;
		}
		else
		{
			printf("输入错误,请输入0和1选择\n");
			menu();
		}
    } while (input);
		
}

        小子的本次分享到此结束,望各位客官大佬指正!

;