分支循环语句练习和友尽模拟器的综合应用

2023-11-11

目录

一、循环语句练习

1.计算 n的阶乘

2. 计算 1!+ 2!+ 3!+ …… + 10!

二、分支循环综合练习

3. 在一个有序数组中查找具体的某个数字n。

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

5. 编写代码实现,模拟用户登录情景,并且只能登录三次。

6.猜数字游戏

三、友尽模拟器及其综合应用

1.友尽模拟器初阶

2.友尽模拟器进阶


一、循环语句练习

1.计算 n的阶乘

#include<stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = 1;
	int i = 1;
	for (i= 1; i<=n; i++)
	{
		ret *= i;//从1乘到n
	}
	printf("%d\n", ret);
	return 0;
}

2. 计算 1!+ 2!+ 3!+ …… + 10!

#include<stdio.h>
int main()
{
	int n = 0;
	int i = 0;
	int j = 0;
	int sum = 0;
	scanf("%d", &n);
	for (i = 1; i <= n; i++)
	{	
      //将计算n!的程序复制过来
		int ret = 1;
		//ret每次都要重新定义为1,不然会在原基础上进行相乘
		for (j = 1;j <= i;j++)
		{
            ret = ret * j;
		}
		sum = sum + ret;
	}
	printf("%d\n", sum);
	return 0;
}

二、分支循环综合练习

3. 在一个有序数组中查找具体的某个数字n。

我们在一个有序数组中需要找到一个数值时,可以使用这种二分查找的方法
比如说,1 2 3 4 5 6 7 8 9 10 中我们需要找到一个数字
我定义一个左角标为0,定义一个右角表为9,分别对应1和10
然后定义一个中间角标为左右角标的平均值,看这个平均值角标对应的数字是比你要找的数字大还是小
大的话就右角标向左移动到中间角标的前一个,小的话就左角标向右移动到中间角标的后一个,一遍一遍地重复减小范围,最终找到数字

 #include<stdio.h>
int main()
{
	int arr[100] = { 0 };
	int i = 0;
	for (i=0; i<100; i++)//初始化一个1-100的数组
	{
		arr[i] = i+1;
	}
	int n = 0;
	while ((scanf("%d", &n)) != EOF)//循环输入,单次输入可以去掉循环
	{
		int left = 0;//左角标
		int right = sizeof(arr) / sizeof(arr[0]) - 1;//右角标
		int num = 0;//查找次数
		int mid = 0;//中间角标
		while (left <= right)
		{
			mid = (right - left) / 2 + left;//当这个数组很大时,这样写可以检索更大的范围
			if (arr[mid] > n)
			{
				right = --mid;
				num++;
			}
			else if (arr[mid] < n)
			{
				left = ++mid;
				num++;
			}
			else//相等时
			{
				printf("找到了下标为:");
				printf("%d\n", mid);
				printf("查找了%d次\n",num);
				break;
			}
		}
		if (left > right)//这种情况在正常情况下不会发生
		{
			printf("找不到\n");
		}
	}
	return 0;
}

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

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
int main()
{
	char arr1[20] = "bonjour,monsieur!";
	char arr2[20] = "#################";
	int left = 0;
	int right = strlen(arr2) - 1;
	while (left<=right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];//把arr1的内容替换到arr2中
		printf("%s", arr2);
		Sleep(1000);//睡眠1000毫秒
		system("cls");//一个cmd指令,清空屏幕
		left++;
		right--;//向中间移动
	}
	return 0;
}

我们可以看到屏幕上会先输出#################,后清空屏幕输出b###############!,然后再次清空输出bo#############r!......最后所有的字符替换完成,输出bonjour,monsieur!,看起来就好像在向中间汇聚。

5. 编写代码实现,模拟用户登录情景,并且只能登录三次。

(只允许输入三次密码,如果密码正确则提示登录成功,如果三次均输入错误,则退出程序。)

#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[20] = { 0 };
	//设置密码为abcdef
	char arr2[20] = "abcdef";
	int i = 0;
	for (i = 0; i < 3;i++)
	{
		printf("请输入密码:");
		scanf("%s", arr1);
		if (strcmp(arr1, arr2) == 0)//比较两个字符串,完全相同时返回0
		{
			break;
		}
		if (i<2)
		{
			printf("请重新输入\n");
		}
	} 
	if (i == 3)
	{
		printf("三次密码输入错误,自动退出程序\n");
    }
	else
	{
		printf("登陆成功\n");
	}
	return 0;
}

6.猜数字游戏

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
void menu()//打印起始页面的函数
{
	printf("****************\n");
	printf("*****1.play*****\n");
	printf("*****0.exit*****\n");
	printf("****************\n");
	printf("请输入1或0:\n");
}
int getnum()//生成随机数的函数
{
	int ret = 0;
	ret = rand()%100+1;
    //rand函数可以生成一个随机数,这个数字的范围是0-32767,但想调用rand需要先调用srand函数
	//让我们去看下面的srand函数,在main函数下面

	//看完srand函数后,此时rand函数可以正常生成一个随机值了
	//srand只需要确定一次起始位置即可,所以没有把它放在生成熟知的函数里
	return ret;
}
void game()//玩游戏的函数
{
	int b = getnum();//生成随机数
	int x = 0;
	while (1)//死循环直到猜中跳出
	{	
		printf("请输入数字:");
        scanf("%d", &x);
	    if (x>b)
	    {
			printf("猜大了\n");
	    }
	    else if(x<b)
	    {
			printf("猜小了\n");
	    }
	    else 
	    {
			printf("正确,这个数字为%d\n", b);
			break;
	    }
	}
}
int main()
{
	srand((unsigned int)time(NULL));
	//调用srand函数确定一个生成随机数的起始位置
	//然而正确使用这个函数需要向内部传进一个类型为unsigned int的变动的值。
	//我们要产生一个随机值,而这个随机值的生成需要一个随机值
	//我们似乎进入了一个先有鸡先有蛋的问题,这时就需要引入一个概念叫做时间戳
	//时间戳表示一个时间,这个时间就是相对于1970年1月1日到现在的时刻我们经过了多少秒,然后将它转化为一个数字
	//由于时间是不断变动的,它就可以满足我们的要求,time函数可以返回这个数字。
	//time函数需要一个指针类型的参数,我们就给它一个空指针。它的返回类型是time_t,需要强制类型转换为unsigned int
	//让我们回到rand函数那里
	int a = 0;
	do {
		menu();
		scanf("%d", &a);
		switch (a)
		{
		    case 1:
		    {
				game();
				break;
		    }
		    case 0:
		    {
				return 0;
		    }
		    default:
		    {
		    	printf("请重新输入\n");
				break;
		    }
		}
	} while (1);
	return 0;
}

三、友尽模拟器及其综合应用

你有没有这样的舍友,大白天累了就睡觉,半夜他不困了就开始开着麦打游戏,床上留着孤零零的你躺着睡不着觉。他的怒吼声和噼噼啪啪的键盘声让你不禁怀疑人生。

好吧,代入感很强,已经开始生气了。

虽然,对于舍友关系还是应该以和为贵。

什么?他不听!

拿下面这个程序干他!!!

1.友尽模拟器初阶

#include<stdio.h>
#include<windows.h>
#include<string.h>
int main()
{
	char arr[20] = { 0 };
	system("shutdown -s -t 60");//cmd指令,表示60s后自动关机
	printf("注意,你的电脑将在一分钟内关机\n");
	printf("如果输入我是猪就可以取消\n");
	while (1)
	{
		scanf("%s", arr);
		if (strcmp(arr, "我是猪") == 0)
		{
			system("shutdown -a");
			break;
		}
		else
		{
			printf("重新输入,输不对就关你电脑\n");
		}
	}
	return 0;
}

你可以把这个代码写到VS上,把VS上面的Debug模式改为Release,会得到一个exe程序,把它改成游戏图标,改个名称往那儿一放就等他来了。虽然可能不能完全阻止他,但至少可以整整他。

这个程序他即使关掉也没有用,程序已经设定好了,他不输电脑就必定关机。

2.友尽模拟器进阶

(1)就像前面只允许输入三次密码,你也可以让他只能输入三次,不输就关

#include<stdio.h>
#include<windows.h>
#include<string.h>
int main()
{
	char arr[20] = { 0 };
	system("shutdown -s -t 60");
	printf("注意,你的电脑将在一分钟内关机\n");
	printf("如果输入我是猪就可以取消\n");
	int n = 0;
	while (1)
	{
		scanf("%s", arr);
		if (strcmp(arr, "我是猪") == 0)
		{
			system("shutdown -a");
			break;
		}
		else
		{
			if (n < 2)
			{
				printf("重新输入,输不对就关你电脑\n");
			}
			n++;
		}
	    if (n == 3)
		{
			printf("你没机会了\n");
			break;
		}
	}
	return 0;
}

此时可能会有以下画面:

注意,你的电脑将在一分钟内关机
如果输入我是猪就可以取消
你是猪
重新输入,输不对就关你电脑
你才是猪
重新输入,输不对就关你电脑
你这个家伙
你没机会了

(2)结合我们之前的猜数字游戏,我们可以更损

让他猜数字,三次猜不中就不能取消关电脑,这个程序有个好处。只要他点了,同时不知道这个cmd指令,他就不能取消关机。

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
int getnum()
{
	int ret = 0;
	ret = rand()%100+1;
	return ret;
}
void game()
{		
	int n = 0;
	int x = 0;
	while (1)
	{	
		int b = getnum();
		printf("输入我正在想的数字:");
        scanf("%d", &x);
	    if (x>b)
	    {
			printf("猜大了\n");
			n++;
	    }
	    else if(x<b)
	    {
			printf("猜小了\n");
			n++;
	    }
	    else 
	    {
			printf("输对了你也打不开游戏\n", b);
			system("shutdown -a");
			break;
	    }
		if (n==3)
		{
			printf("你没机会了\n");
			break;
		}
	}
}
int main()
{
	srand((unsigned int)time(NULL));
	system("shutdown -s -t 60");
	printf("注意,你的电脑将在一分钟内关机\n");
	printf("如果输入我心里想的那个数就可以取消\n");
	game();
	return 0;
}

有没有发现那个生成随机数的函数被放到了循环内部,也就是说在这样的条件下,每循环一次这个随机数都会被更换,还有猜大,猜小这样的误导项更猜不对。

可以先拿自己电脑试一下,注意别把自己电脑关了。说实在的,改个名往群里一发也确实够损,这种程序还是自己玩比较好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

分支循环语句练习和友尽模拟器的综合应用 的相关文章

  • 宝塔面板解决跨域

    1 找到宝塔面板配置nginx文件的地方 2 增加如下代码 add header Access Control Allow Origin add header Access Control Allow Methods POST PUT GE
  • 使用git查看修改记录

    查看文件中每行代码的最近一次修改人 git blame file name git blame
  • 判断能否被3,5,7整除

    输入一个整数 判断它能否被3 5 7整除 并输出以下信息 1 能同时被3 5 7整除 直接输出3 5 7 每个数中间一个空格 2 能被其中两个数整除 输出两个数 小的在前 大的在后 例如 3 5或者 3 7或者5 7 中间用空格分隔 3 能
  • 简单的Arima模型自动最优拟合与预测

    昨天用R折腾了一个简单的时间序列数据Arima自动拟合与预测 过程不复杂 但由于用得不多 为了防止忘记 撰文记录 打开R 安装一个叫做 Forecast 的包 每次开启R后 使用之前用 library forecast 加载该包 这里我用传
  • pickle.load,pickle.dump构建Coco数据集labels的pickle文件

    1 效果图 write pickle coco classes pickle done loading coco classes pickle person bicycle car motorcycle airplane bus train

随机推荐

  • OSI七层模型,报文数据包帧详解,tcp三次握手与四次挥手说明,WireShark抓包分析

    目录 浅谈OSI参考模型 七层模型 什么是OSI参考模型 OSI参考模型的划分 OSI模型与TCP IP模型的比较 七层详解 工作流程 TCP IP协议栈 简介 通用协议栈描述 报文 数据报 报文段 数据包 帧的概念 tcp三次握手与四次挥
  • Callable接口详解

    Callable接口详解 Callable 返回结果并且可能抛出异常的任务 优点 可以获得任务执行返回值 通过与Future的结合 可以实现利用Future来跟踪异步计算的结果 Runnable和Callable的区别 1 Callable
  • pg_dump实例详解

    本文转自 http blog chinaunix net uid 354915 id 3504632 html 一 pg dump的用法 数据库的导入导出是最常用的功能之一 每种数据库都提供有这方面的工具 例如Oracle的exp imp
  • 密封类(sealed class)

    密封类 使用关键字 sealed 密封类里面可以有若干个子类 这些子类如果要继承密封类 则必须和密封类在同一个文件里 sealed class LicenseStatus2 单例继承密封类 object UnQualified Licens
  • 转-如何绘制业务流程图(二)

    转自 http blog jobbole com 22509 本来写完上篇 我发现没有太多必要单纯讨论这一部分内容 因为对于很多人来讲 缺的不是具体的做法 而是做这件事情的意义以及目标性的明确 一旦对这件事情的意义和目标有深刻认同 那自然会
  • JavaScript 扁平化数组转成Tree

    有时候我们得到的数据结构并不是想要的 这个时候就需要对得到的数据进行处理了 比如 我们拿到的是扁平化的数组 但我们要应用在 tree 树形组件或级联选择器组件中 这样的组件要求数据结构是具有层级递进关系的 tree 结构 或者我们并不需要层
  • 【JVM类加载及字节码技术】类加载阶段——加载、链接(一)

    类在JVM中的流程分析 类加载 1 加载 2 链接 2 1 验证 2 2 准备 2 3 解析 总结 类加载 类的生命周期 加载 gt 验证 gt 准备 gt 解析 gt 初始化 gt 使用 gt 卸载 加载阶段 加载 链接阶段 验证 准备
  • DTCC2023第十四届中国数据库大会分享:MySQL性能诊断平台:利用eBPF技术实现高效的根因诊断

    主题 8月16 18日 DTCC2023第十四届中国数据库大会在北京国际会议中心召开 17日下午在云原生数据库开发与实践分论坛 我将带来分享 MySQL性能诊断平台 利用eBPF技术实现高效的根因诊断 敬请期待 欢迎大家提前试用我们发布的产
  • 5种CSS3鼠标悬停图片显示文字信息

    下载地址 5种CSS3鼠标悬停图片显示文字信息是一款鼠标悬停特效 含5种不同风格的鼠标悬停图片显示文字信息 dd
  • 用Double-DQN方法解决简单迷宫寻路问题

    环境描述 25 25离散的栅格图 起点左上角 终点右下角 障碍物1 1随机分布 动作空间维度2 向右 向下 每次移动奖励 1 遇到障碍物或移动出环境奖励 100 到终点奖励20 注 针对这个任务期望SARSA Q learning等方法能够
  • Android中控件AutoCompleteTextView的使用方法和一些属性

    版权声明 本文为博主原创文章 未经博主允许不得转载 AutoCompleteTextView一些属性
  • “数据压缩实验之LZW 编解码算法实现与分析”实验报告_201810413045_陈诚

    文章目录 1 实验项目名称 2 实验目的 3 什么是LZW编解码算法与它的原理 3 1 LZW编解码算法介绍 3 2 LZW编解码算法原理 3 2 1 编码流程图及为了便于理解和期末复习举实例说明 3 2 2 解码流程图及举实例说明 重点说
  • 并发无锁队列学习之一

    Anker 工作学习笔记 关注云计算 网络安全 软件定义网络 博客园 新随笔 管理 随笔 169 文章 2 评论 403 并发无锁队列学习之一 开篇 1 前言 队列在计算机中非常重要的一种数据结构 尤其在操作系统中 队列典型的特征是先进先出
  • SDUc++课结课大作业:基于qt类库c++实现简单的音乐播放器

    2021年11月的项目 版本一 功能简单 UI界面难看 代码架构拉跨 没有核心内容 技术含量低 2022年6月21日准备重构一下代码 让架构清晰一点 加点多线程和网络通信的内容 然后这次打算在visual studio下开发了 因为之前把那
  • 【零基础学QT】第八章 文件操作,网络文件传输实验

    作者主页 凉开水白菜 作者简介 共同学习 互相监督 热于分享 多加讨论 一起进步 专栏目录 零基础学QT 文章导航篇 专栏资料 https pan baidu com s 192A28BTIYFHmixRcQwmaHw 提取码 qtqt 点
  • java通过ssh远程调用服务器

    1 在大数据时代 服务器使用的频率难免上升 工作中难免会出现频繁使用的时候 有些场景不方便切换到服务器去操作 比如调用一个服务器的命令 但是要在程序里执行 当然不能手动去执行啦 所以java调用ssh就尤为重要 首先 添加maven依赖
  • Visual Stdio调试IDAPython脚本

    1 安装VS插件PTVS 这一步与第2步中安装版本应该一致 否则最后调试时会连不上 https github com Microsoft PTVS 2 安装python模块PTVSD pip install ptvsd 3 写如下代码ptv
  • SQL注入绕waf(安全狗)

    SQL注入绕waf 前言 感觉自己注入绕waf有点拉跨 于是自己搭建了一个环境练习绕waf 环境 我是用phpstudy sql lib 安全狗最新版本 正常访问 恶意语句 被拦截 注入检测 首先进行注入检测 判断是否有注入 id 1 直接
  • MyBatis基础知识

    MyBatis 优点 支持自定义 Sql 存储过程以及高级映射 MyBatis免除了几乎所有的JDBC代码以及设置参数和获取结果集的工作 MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型 接 口和 Java POJO Pl
  • 分支循环语句练习和友尽模拟器的综合应用

    目录 一 循环语句练习 1 计算 n的阶乘 2 计算 1 2 3 10 二 分支循环综合练习 3 在一个有序数组中查找具体的某个数字n 4 编写代码 演示多个字符从两端移动 向中间汇聚 5 编写代码实现 模拟用户登录情景 并且只能登录三次