C语言 分支循环语句核心知识点复习与练习

分支语句和循环语句


一、C语句可分为以下五类:

1.语句分类
  1. 表达式语句
  2. 函数调用语句
  3. 控制语句
  4. 复合语句
  5. 空语句
2.C语言有九种控制语句, 可分成以下三类:
  1. 条件判断语句也叫分支语句:if语句、switch语句
  2. 循环执行语句:do while语句、while语句、for语句
  3. 转向语句:break语句、goto语句、continue语句、return语句

二、分支(选择)语句

  1. if else else if 三者的使用
  2. switch:
    在每个 switch 语句中都放一条default子句是个好习惯,
    甚至可以在后边再加一个 break

三、循环语句

  1. for循环
  2. while循环
  3. do while循环

四、转向语句

  1. 应用场景:
    在选择和循环语句中灵活使用break,continue,goto

五、练习

1. break易错点

代码演示m最终的运行结果

#include <stdio.h>
int main()
{
	int n = 1;
	int m = 2;
	switch (n)
	{
	case 1:
		m++;
	case 2:
		n++;
	case 3:
		switch (n)//switch允许嵌套使用
		{        
		case 1:
			n++;
		case 2:
			m++;
			n++;
			break;
		}
	case 4:
		m++;
		break;
	default:
		break;
	}
	printf("m = %d, n = %d\n", m, n);
	return 0;
}
//思考:运行结果是什么?
//m = 5 n = 2 为什么不是m = 4呢?
//该代码中嵌套 switch 中的 break 跳出的是它那一层的 switch ,跳出后他仍然后继续执行最外层的 switch 语句

结论:break 只是跳出它所在的那一层语句,而不是跳到最外层.

2.编写代码,演示多个字符从两端移动,向中间汇聚

代码演示用两个数组实现字符的汇聚,while和for均可

#include <stdio.h>
#include <Windows.h>
int main()
{
	//1.定义两个数组,一个是完整的字符串,另一个是要演示汇聚的字符串
	char arr1[] = "Myblue offer!";
	char arr2[] = "xxxxxxxxxxxxx";
	//2.利用循环分别从两端向中间字符拷贝,利用sleep来观察字符的拷贝过程
	//3.定义两个下标索引,一个从左到右,一个从右向左
	int length = sizeof(arr1) / sizeof(arr1[0]);
	int left = 0;
	int right = length - 1;//length是字符串的长度
	while (left <= right)//直至左边元素下标大于右边的元素时停止循环
	{
		Sleep(1000);
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		left++;
		right--;
		printf("%s\n", arr2);
	}
	return 0;
}`

3.自定义一个二分查找函数

(适用于按一定顺序排列的数据)

//自定义函数实现二分查找(折半查找法),找到了就打印FIND!,没找到就打印NO FIND!
#include <stdio.h>
//自定义函数
//1.查找一个数在数组中是否存在
//2.我需要 查找的数组 和 要查找的数,折半查找需要最左边和最右边的元素的下标
//3.找到了返回下标,没找到就返回-1 
int findNumber(int arr[], int number, int left, int right)
{
	//定义一个数组中间元素,因为数组是按顺序排序的,

	
	//循环判断,直至原本左边的元素下标大于右边的元素下标就停止循环(也就是全部都查找了,没有查找到)
	while (left<=right)
	{
		//小细节:这个要放在循环的里面,不能放在循环外面,否则mid一直不变化
		int mid = (left + right) / 2;

		//要查找的数大于中间值,那么左边到中间的值一定不符合条件(都比它小),一定在函数的右边,因为数组是按顺序排列的
		if (number > arr[mid])
		{
			left = mid + 1;
		}
		//要查找的数小于中间值,那么右边到中间的值一定不符合条件(都比它大),一定在函数的左边,因为数组是按顺序排列的
		else if (number < arr[mid])
		{
			right = mid - 1;
		}
		//找到了就返回下标
		else
		{
			return mid;
		}
	}
	//循环结束之后没有找到
	return -1;


}


int main() 
{
	//1.定义一个要查找的顺序数组
	int arr[10] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 };
	//2.输入要查找的数
	int number = 0;
	scanf("%d", &number);
	//3.调用函数,把所需要的参数传过去
	int left = 0;
	int right = sizeof(arr) / sizeof(arr[0]) - 1;

	int index = findNumber(arr, number, left, right);
	if (index>=0)
	{
		printf("FINFD!");
	}
	else if(index == -1)
	{
		printf("NO FIND!");
	}
	return 0;
}

4.猜数字游戏

代码演示 利用while循环实现一个猜数字游戏

#include <stdio.h>
#include <time.h>
#include <stdlib.h>
void menu()
{
	printf("-------------------------------\n");
	printf("----------1. 开始游戏-----------\n");
	printf("----------0. 退出游戏-----------\n");
	printf("-------------------------------\n");
}

void game()
{
	int rand_num = rand() % 100 + 1;//1~100的随机数
	//printf("%d\n", rand_num);//可以看看生成随机数的具体数值
	int my_input = 0;
	while (1)
	{
		printf("请输入要猜的数字\n");
		scanf("%d", &my_input);
		if (my_input > rand_num)
		{
			printf("大了\n");
		}
		else if (my_input < rand_num)
		{
			printf("小了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}

int main()
{
	int input = 0;

	//生成随机数的种子,头文件
	srand((unsigned)time(NULL));

	do
	{
		menu();//菜单
		printf("请输入input:");
		scanf("%d", &input);//输入一个数选择要执行的操作
		switch (input)
		{
		case 1:
			game();//开始游戏
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:
			printf("选择错误,请重新选择\n");
			break;
		}
	} while (input);

	return 0;
}

5.goto语句(了解)

应用场景: 最常见的用法就是终止程序在某些深度嵌套的结构的处理过程
例如:一次跳出两层或多层循环
多层循环这种情况使用break是达不到目的的。它只能从最内层循环退出到上一层的循环


总结

以上内容是对分支循环语句的简单介绍,主要是这部分的关键内容进行讲解,上述讲解的几个例题可以去试着练习一下,难度不算太低,希望阅读完的码友能够有所收获!如果存在不足,欢迎在评论区指正!

  • 16
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值