2021.2.22----2.25分支语句和循环语句

《分支语句和循环语句》

一.分支语句(选择语句):

1.if else语句

1.语句结束;
2.打印多条语句,用代码块{}
3.if else两种模式
①两整体
在这里插入图片描述
②多条并列
在这里插入图片描述

4.else和离他最近的未匹配的if匹配
5.书写习惯:5= =num(√)num= =5(×)
6.练习:判断奇数,输出1-100奇数
在这里插入图片描述

2.switch语句(适合多条分支)

switch(整形(int)表达式)
case(整形常量(不能是变量)表达式)
break(跳出)
default子句
在这里插入图片描述

3.练习

1.输入三个数,从大到小排列
①法一:
在这里插入图片描述
②法二:
在这里插入图片描述

二.循环语句:

1.while语句

1.循环中的break:跳出循环
循环中的continue:continue后的语句不再执行,回到循环入口的判断部分(存在死循环)
2.

在这里插入图片描述

在这里插入图片描述

2.for循环

1.for(初始化;判断;调整){}
2.break:……
continue:……(不存在死循环)
3.不要再for循环体内改变变量值,防止for循环失去控制。
建议循环控制变量的取值用左闭右开式。
4.for循环的初始化、调整、判断都可以省略。(但不建议省略)
但是如果判断部分被省略,他的判断条件就是:恒为真。

3.do…while循环

先斩后奏,先循环后判断,至少循环一次

4.练习

1.计算n的阶乘
在这里插入图片描述
2.在有序数组中找数,找7
①法一:低效
在这里插入图片描述

②法二:二分查找法

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	int arr[] = { 0,1,2,3,4,5,6,8,9,1011 };
	int sz = sizeof(arr) / sizeof(arr[0]);//计算元素个数
	int left = 0;//左下标
	int right = sz - 1;//右下标
	int k = 7;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else
		{
			printf("找到了,下标是%d", k - 1);
			break;
		}
	}
	if (left > right)
		printf("找不到");
	return 0;
}

3.演示多个字符从两端移动,向中间汇聚

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<windows.h>
#include<stdlib.h>
int main()
{
	char arr1[] = " welcome to bite ";
	char arr2[] = "                 ";
	int left = 0;
	int right = strlen(arr1) - 1;
	//或者int right = sizeof(arr1) / sizeof(arr1[0])-2;  麻烦
	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(100);//休息0.1秒
		system("cls");//cls-清空屏幕
		left++;
		right--;
	}
	printf("%s", arr2);
	return 0;
}

【注】

sizeof(arr)或者sizeof(arr[0])---------计算变量或者类型(此处为字符串arr或者单个字符)所占空间的大小,单位:字节
strlen(arr);---------#include<string.h>---------计算字符串arr长度
Sleep(1000------);--------#include<windows.h>--------休息1秒
system(“cls”);--------#include<stdlib.h>-----------清屏

4.输入密码登录,三次机会

#define  _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int main()
{
	int i = 0;
	char password[20] = { 0 };
	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:");
		scanf("&s", password);
		if (strcmp(password, "123456")==0)//不能用来比较两个字符串是否相等,应该使用一个库函数strcmp
		{
			printf("密码正确\n");
			break;
		}
		else
		{
			printf("输入错误\n");
		}
	}
	if (i == 3)
	{
		printf("三次输入均错误,退出程序");
	}
	return 0;
}

5.求两个数的最大公约数:辗转相除法

在这里插入图片描述

6.打印100到200间素数《素数求解的n种境界》

试除法

在这里插入图片描述
②优化:sqrt开平方的数学库函数
在这里插入图片描述

【注】

sqrt(数)-------#include<math.h>-----------数开平方
③再优化:
在这里插入图片描述

7.分数求和:计算1-1/2+1/3-1/4+……+1/99-1/100=?
在这里插入图片描述

8.打印10个数中的最大值
在这里插入图片描述
9.打印乘法表
在这里插入图片描述

10.猜数游戏

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<time.h>

void menu()
{
	printf("*****************************\n");
	printf("****  1.play     2.exit  ****\n");
	printf("*****************************\n");
}

void game()
{
	int ret = 0;
	int guess = 0;
	ret = rand() % 100 +1;//生成随机数1--100//RAND_MAX-32767
	while (1)
	{
		printf("猜数游戏:");
		scanf("%d", &guess);
		if (guess > ret)
		{
			printf("猜大了\n");
		}
		else if (guess < ret)
		{
			printf("猜小了\n");
		}
		else
		{
			printf("恭喜你,猜对了\n");
			break;
		}
	}
}

int main()
{
	int input = 0;
	srand((unsigned int)time(NULL));//拿时间戳来设置随机数的生成起点
	do
	{
		menu();//进入菜单
		printf("请选择:");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			game();//进入猜数游戏
			break;
		case 2:
			printf("退出游戏\n");
			break;
		default:
			printf("输入错误\n");
			break;
		}
	} while (input);
	return 0;
}

三.goto语句:

优点:直接跳出多层循环

关机游戏

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
main()
{
	char input[] = { 0 };
	system("shutdown -s -t 60");
again:
	printf("请注意,你的电脑将在1分钟后关机,输入213就取消关机\n请输入:");
	scanf("%s", input);
	if (strcmp(input, "213") == 0)
	{
		system("shutdown - a");
	}
	else
	{
		goto again;
	}
	return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值