分支与循环语句 - 练习题

news2025/1/12 12:00:18

目录

一、分支语句

1. 判断一个数是否为奇数

2. 输出1-100之间的奇数

法1:遍历1-100所有的数字,判断是否为奇数,再输出

法2:奇数从1开始,等差为2,所以循环+2

二、循环语句

1. 计算 n的阶乘。

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

法1:算出每个数阶乘,然后相加

法2:优化,n!=(n-1)!*n

​编辑

3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)

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

5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。

三、综合题(猜数字游戏)


一、分支语句

1. 判断一个数是否为奇数

     if (n % 2 == 1)
    {
        printf("奇数\n");
    }

2. 输出1-100之间的奇数

法1:遍历1-100所有的数字,判断是否为奇数,再输出

int main()
{
int i = 0;
	while (i <= 100)
	{
		if (i % 2 == 1)
		{
			printf("%d ", i);
		}
		i++;
	}
return 0;
}

法2:奇数从1开始,等差为2,所以循环+2

这个循环只需要循环50次,而上面的就要100次

int main()
{
//这个循环只需要循环50次,而上面的就要100次
    int i = 1;
    while (i <= 100)
    {
        printf("%d ", i);
        i=i + 2;
    }

return 0;
}

二、循环语句

1. 计算 n的阶乘。

//n的阶乘
//5! = 5*4*3*2*1
//5! = 1*2*3*4*5
//1~5的数字 累积相乘

 

int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = 1;
	int i = 1;

	for (i = 1; i <=n; i++)//计算n的阶乘
	{
		ret *= i;
	}

	printf("%d\n", ret);

	return 0;
}

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

法1:算出每个数阶乘,然后相加

int main()
{
	int n = 0;
	int ret = 1;
	int i = 1;
	int sum = 0;

	//1!+2!+3!= 1+2+6 = 9
	for (n = 1; n <= 3; n++)//循环1-3
	{
		ret = 1;
		for (i = 1; i <= n; i++)//对每个数字求阶乘
		{
			ret *= i;
		}
		//将每个数的阶乘加起来
		sum += ret;
	}
	
	printf("%d\n", sum);

	return 0;
}

法2:优化,n!=(n-1)!*n

这样每次算完前一个数的阶乘,就可以直接乘了,不用从1再开始乘一遍,便捷


int main()
{
	int n = 0;
	int ret = 1;
	int i = 1;
	int sum = 0;

	//1!+2!+3!= 1+2+6 = 9
	for (n = 1; n <= 3; n++)//循环1-3
	{
		ret *= n;
		sum += ret;
	}

	printf("%d\n", sum);

	return 0;
}

3. 在一个有序数组中查找具体的某个数字n。(讲解二分查找)

1)二分法的的思想:想想现在有只笔(7块),告诉我10块以内,那么范围就出来了0-10块,然后我直接从中间开始猜,5块?不是,小了(现在的范围6-10)。
我继续猜8块?不是,高了(现在范围6-7)。再猜6块?不是,小了(现在就只有7了)。最后猜7块?对了!!
这样只用猜4次就出结果了,而不是从1,2,3这样开始猜,便捷了很多。

2)二分法的好处是:不用遍历数组,省去了一个一个查找的繁琐;二分法每次查找可以砍掉一半的范围,便捷很多;
3)折半法的前提是:必须是有序的数组,否则这样查找就无意义了

int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	int k = 7;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int left = 0;
	int right = sz - 1;
	int count = 0;

	int flag = 0;
	while (left<=right)
	{
		count++;
		//这样求mid的会有个问题,如果left和right都特别大,他俩的和超过了整型的最大值,越界了,会丢失某些位,再除以2就会有误差
		//int mid = (left + right) / 2;
		

		//这个方式就会好一些,先求出最右值与最左值的差,那么它的一半加上最左值就是,两者的平均值(mid)
		int mid = left + (right - left) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			printf("找到了!!下标为%d,找了%d次\n", mid,count);
			flag = 1;
			break;
		}
		
	}
	if(flag==0)
	{
		printf("找不到\n");
	}
	return 0;
}

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

编写代码,演示多个字符从两端移动,向中间汇聚
welcome to Ameris's world!
 
**************************
w************************!
we**********************d!
...
welcome to Ameris's world!

#include<string.h>
#include<Windows.h>
int main()
{
	char arr1[] = "welcome to Ameris's world!";
	char arr2[] = "**************************";
	int left = 0;
	int right = strlen(arr1) - 1;
	
	while (left <= right)
	{
		//arr1的元素替换arr2的元素
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);

		//windows系统命令
		Sleep(1000);//休眠1秒,1000ms=1s
		system("cls");//清屏(只在一行显示变化)

		left++;
		right--;
	}
	printf("%s\n", arr2);

	return 0;
}

代码效果展示(演示多个字符从两端移动,向中间汇聚)

5. 编写代码实现,模拟用户登录情景,并且只能登录三次。(只允许输入三次密码,如果密码正确则 提示登录成,如果三次均输入错误,则退出程序。

比较密码这种字符串需要用strcmp()函数
int main()
{
	int i = 0;
	char psw[] = { 0 };
	int flag = 0;

	for (i = 0; i < 3; i++)
	{
		printf("请输入密码:>");
		scanf("%s", psw);

		if (strcmp(psw, "123456") == 0)//比较密码这种字符串需要用strcmp()
		{
			flag = 1;
			printf("密码正确\n");
			break;
		}
		else
		{
			printf("密码错误\n");
		}
	}
	if (flag == 0)
	{
		printf("三次密码均错误,退出程序!\n");
	}
}

三、综合题(猜数字游戏)

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

#include<stdlib.h>
#include<time.h>
void game()
{
	//1.生成随机数
	// 库函数,rand()会返回一个0-32767之间的随机数,在使用rand之前要调用srand()
	
	int ret = rand()%100+1;//因为随机数太大了,不在1-100里,所以模100+1,0-99+1-->1-100
	//printf("%d", ret);
	//2.猜数字
	int guess = 0;
	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)time(NULL));//time()函数返回一个时间戳//需要调用一次就够了,放在主函数里,不用放在game()里
	do 
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			printf("*****   开始游戏  *****\n");
			game();
			break;
		case 0:
			printf("退出游戏\n");
			break;
		default:printf("选择错误!!!\n");
		}
	} while (input);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/156682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ArcGIS基础实验操作100例--实验84查找面到直线的最近点位置

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验84 查找面到直线的最近点位置 目录 一、实验背景 二、实验数据 三、实验步骤 &#…

Acwing---1015.摘花生

摘花生1.题目2.基本思想3.代码实现1.题目 Hello Kitty想摘点花生送给她喜欢的米老鼠。 她来到一片有网格状道路的矩形花生地(如下图)&#xff0c;从西北角进去&#xff0c;东南角出来。 地里每个道路的交叉点上都有种着一株花生苗&#xff0c;上面有若干颗花生&#xff0c;经…

Hudi集成Spark(二)Spark SQL方式

文章目录环境准备创建表插入数据查询数据更新数据删除数据覆盖数据修改表结构&#xff08;Alter Table&#xff09;修改分区存储过程&#xff08;Procedures&#xff09;Catalog&#xff1a;可以和Spark或者Flink中做一个共享&#xff0c;共享之后&#xff0c;计算引擎才可以去…

跨域与Nginx总结

跨源资源共享&#xff08;CORS&#xff09;是一种机制&#xff0c;他使浏览器可以访问由其他域提供的Web资源。通常&#xff0c;浏览器会使用同源策略来限制从脚本中发出的HTTP请求。例如&#xff0c;如果一个网站的资源位于https://haha.com&#xff0c;那么它就不能发出对htt…

使用ResNet50实现CIFAR10数据集的训练

如果对你有用的话&#xff0c;希望能够点赞支持一下&#xff0c;这样我就能有更多的动力更新更多的学习笔记了。&#x1f604;&#x1f604; 使用ResNet进行CIFAR-10数据集进行测试&#xff0c;这里使用的是将CIFAR-10数据集的分辨率扩大到32X32&#xff0c;因为算力相关的…

C语言常用内存函数的深度解析

文章目录前言memcpymemcpy函数的使用memcpy函数的自我实现memmovememmove函数的使用memmove函数的自我实现memcmpmemcmp函数的使用memcmp函数的自我实现memsetmemset函数的使用memset函数的自我实现写在最后前言 内存函数的使用广泛度大于常用字符串函数的使用广泛度&#xff0…

教程- VTK.js的基本介绍

VTK.js的核心是标准可视化工具包(VTK)库的JavaScript移植&#xff0c;这是一个c库&#xff0c;旨在促进数据可视化&#xff0c;在此基础上构建了科学可视化应用程序Paraview。VTK.js没有使用OpenGL&#xff0c;而是利用WebGL&#xff0c;主要关注几何和体渲染。因此&#xff0c…

JavaFx程序使用Gloun打包成Android平台App教程

0. 提要 !!! 适合有Maven基础&#xff0c;对JavaFx或JavaFX移动端感兴趣的朋友 提示必须在Linux环境下进行&#xff0c;可以使用虚拟机 推荐使用CentOS系统进行,虚拟机硬盘大小推荐最少给30G 不要像我一样,搞一半又去给文件系统根目录扩大容量 如果容量不够可以看篇博客: http…

C++模板(第二版)笔记之第十八章:模板的多态性

文章目录一、动态多态&#xff08;dynamic polymorphism&#xff09;二、静态多态三、静态多态VS动态多态1.术语2.优点和缺点3.结合两种多态形式&#xff1a;CRTP四、使用concepts五、新形势的设计模式六、泛型编程七、总结一、动态多态&#xff08;dynamic polymorphism&#…

【C语言】内存函数介绍

它们所在的头文件&#xff1a; &#xff08;这里出现的arr都为char类型数组&#xff09;strlen作用&#xff1a;计算一个字符串的长度本质&#xff1a;历经千辛找一个 \0 &#xff0c;找到 \0 就立马停止。&#xff08;就是找 \0 &#xff09;易错&#xff1a;strlen 返回值为 …

物联网无线通信技术中蓝牙和WIFI有哪些区别?

在物联网快速发展的时代&#xff0c;联网运行的设备越来越多&#xff0c;无线通信技术在物联网中发挥着举足轻重的作用&#xff0c;无线通信技术的发展改变了信息传输的方式&#xff0c;人们在任何时间、任何地点都可以访问设备&#xff0c;目前最常用的两种无线通信技术分别是…

云服务器CentOS前后端部署流程记录

部署流程记录 购买云服务ecs服务器&#xff0c;建立CentOS系统 通过xftpxshell访问远程服务 doker部署&#xff08;https://www.runoob.com/docker/centos-docker-install.html&#xff09; docker docker部署环境&#xff08;mysql&#xff09; docker常用命令 1. docker i…

【Linux】进程状态与优先级

文章目录进程状态概念Linux中的进程状态R(running)状态S(sleeping)状态D(disk sleep)状态T(stopped)状态t(tracing stop)状态X(dead)状态Z(zombie)状态特殊的孤儿进程进程优先级进程性质补充进程状态概念 《现代操作系统》中给出的进程状态的定义如下&#xff1a; 进程状态反映…

Qt+C++窗体界面中英文多语言切换

程序示例精选 QtC窗体界面中英文语言切换 如需安装运行环境或远程调试&#xff0c;见文章底部个人微信名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<QtC窗体界面中英文语言切换>>编写代码&#xff0c;代码整洁&#xff0c;规则&#x…

【Linux】软件包管理器 yum

目录 一、什么是软件包 二、如何进行软件安装 1、yum 的使用 2、yum 配置 一、什么是软件包 在Linux下安装软件&#xff0c;一个通常的办法是下载到程序的源代码&#xff0c;并进行编译&#xff0c;得到可执行程序。但是这样太麻烦了&#xff0c;于是有些人把一些常用的软…

InnoDB数据存储结构

InnoDB数据存储结构 本专栏学习内容来自尚硅谷宋红康老师的视频 有兴趣的小伙伴可以点击视频地址观看 1. 数据库的存储结构&#xff1a;页 索引结构给我们提供了高效的索引方式&#xff0c;不过索引信息以及数据记录都是保存在文件上的&#xff0c;确切来说是存储在页结构中。…

不讨论颜色的前提下,如何证明自己不是色盲?神奇的零知识证明

0x01 一个小故事 《阿里巴巴与四十大盗》中有这样一段小故事&#xff1a; 阿里巴巴会芝麻开门的咒语&#xff0c;强盗向他拷问打开山洞石门的咒语&#xff0c;他不想让人听到咒语&#xff0c;又要向强盗证明他知道这个咒语。 那应该怎么办呢&#xff1f; 便对强盗说&#xf…

基于KVM安装部署RHCOS操作系统

参考&#xff1a;Openshift 4.4 静态 IP 离线安装系列&#xff1a;初始安装 - 米开朗基杨 - 博客园 一、Openshift OCP集群安装架构示意图 RHCOS 的默认用户是 core 如果安装有问题会进入 emergency shell&#xff0c;检查网络、域名解析是否正常&#xff0c;如果正常一般是以…

重修JAVA

程序员的差距是在构思上&#xff1a;思想决定了深度&#xff0c;思想的精髓高深是很多人学不来的&#xff01; 每一门语言都有它的特点&#xff0c;有优势也有劣势&#xff0c; 所以不必拘泥于招式&#xff0c;掌握底层原理即可&#xff01; 每一们语言实际上都是一个“工具”&…

如何在您的香港主机帐户上注册多个域名

注册多个域名非常普遍。事实上&#xff0c;香港主机服务提供商鼓励这样做&#xff0c;因为它既有意义又是必要的。下面将介绍决定为什么您可能需要在香港主机上注册多个域名的几个因素。注册多个域名的原因是什么?方便多个项目如果香港主机帐户的所有者在网络上有多个不同域名…