当前位置: 首页 > news >正文

初阶c语言(循环语句习题,完结)

前言:

c语言为b站鹏哥,嗯对应视频37集

昨天做的c语言,今天在来做一遍,发现做错了

今天改了平均值的计算,

就是说最大值加上最小值,如果说这个数值非常大的话,两个值加上会超过int类型的最大值,从而导致数值的重新计算,导致结果不稳定,所以换一种计算方法

第二题,折半查找法

环境介绍,就是dev c++软件运行编译

就是说最大值减去最小值,然后中间有个差值,将他分成一半给最小值,那两个就都是平均值了

#include <stdio.h>
int main()
{
	int arr[] = {1,2,3,4,5,6,7,8,9,10};
	int left =0;
	int pj = sizeof(arr)/sizeof(arr[0]);  //就是那个sizeof计算字符串整型都可以用,全部元素都计算了
	//定义一个输入
	int k =6; 
	int right=pj-1;

	for(left=0; left<=right; left++)
	{
		int mid =left + (right-left)/2;
		if(arr[mid]<k)
		{
			left = mid +1;
		}
		if(arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			printf("找到了,下标为:%d\n", mid);
		}
	 }
	
	return 0;
}

嗯,就是正确的下标应该是5,但是打印的下标为4,。。。

我知道了

我用的for循环,而且我每次循环,都将left加1了,导致就是计算结果不准,至于为什么等于4我就没有深究了,

所以这个还是用for循环比较好,当然我把第三个表达式删掉了,也可以得到正确的值,就这样

    for(left=0; left<=right; )

这里也是会造成死循环,因为把left++去掉了,left和right不变了

修改的代码

#include <stdio.h>
int main()
{
	int arr[] = {1,2,3,4,5,6,7,8,9,10};
	int left =0;
	int pj = sizeof(arr)/sizeof(arr[0]);  //就是那个sizeof计算字符串整型都可以用,全部元素都计算了
	//定义一个输入
	int k =6; 
	int right=pj-1;

	while(left <= right)
	{
		int mid =left + (right-left)/2;
		if(arr[mid]<k)
		{
			left = mid +1;
		}
		if(arr[mid] > k)
		{
			right = mid - 1;
		}
		else
		{
			printf("找到了,下标为:%d\n", mid);
            break;
		}
	 }
	
	return 0;
}

为啥这个要加break,不然会造成死循环,因为这个while循环,找到了之后并不会变化里面的right和left值,所以while循环的表达式永远为真,就造成循环

第三题:编写代码,演示多个字符从两端移动,向中间汇聚

strlen函数,这个是统计  \0  之前的元素,适合用于计算字符串的长度

sizeof函数,统计所有元素,包括\0

strlen,如果需要使用这个函数,需要加上头文件,就是这个,#include <string.h>

sleep函数,需要使用#include <windows.h>,这个是头文件

systemctl函数,包含 #include <stdlib.h>,执行系统命令(dev c++好像不用包含额外头文件)

源代码

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

//welcome to bit!!!!
//##################
//we##############!!
//...........
//welcome to bit!!!!

int main()
{
	char arr1[] = "welcome to bit!!!!";
	char arr2[] = "##################";

	int right = strlen(arr2) - 1;  //strlen比较好算字符串的长度,因为不计算/0在里面,字符串数组里默认有\0. 
	int left =0;
	
	while(left < right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		left ++;
		right --;
		Sleep(1000); 
		system("cls");
		printf("%s\n", arr2);
	}
	 
}

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

字符串比较不能直接这样写

    if(password == "abcdef")

嗯.....别问,问就是会报错,然后就是要利用函数

strcmp函数,用于对比字符串是否一致,一致返回0

代码

int main()
{
	int i = 0;
	
	char password[100] = {0}; //这里需要指派空间大一点

	
	while(i < 3)
	{
		printf("请输入密码:");
	    scanf("%s", password);	
	    
		if (strcmp(password, "abcdef") == 0)
		{
			printf("登录成功\n");
			break;
		}
		else
		{
			printf("登录失败,请重试\n");
			
		}
	 i++;
	} 
	 
	 
	
	return 0;
 } 

数组那里的空间需要给大一点,嗯,不指名空间大小的话,就只能存一次

然后我有问题的是

为啥需要将输入函数放到循环里面,放到循环外面就不起作用了,也就是程序不能正常运行

相关文章:

  • AI前端开发的崛起与ScriptEcho的助力
  • css面试题
  • 通过IDEA傻瓜式快速分析java堆内存快照
  • 使用 Docker 安装 Open WebUI 并集成 Ollama 的 DeepSeek 模型
  • React 低代码项目:组件设计
  • Golang的并发编程案例详解
  • Linux相关知识点(持续更新)
  • 【戒抖音系列】短视频戒除-1-对推荐算法进行干扰
  • PostgreSQL错误: 编码“UTF8“的字符0x0xe9 0x94 0x99在编码“WIN1252“没有相对应值
  • YOLO11 【三】 【速通 训练+推理+导出 续】
  • 【MySQL】InnoDB单表访问方法
  • 【逆向工程】破解unity的安卓apk包
  • 如何使用DHTMLX Scheduler的拖放功能,在 JS 日程安排日历中创建一组相同的事件
  • AI软件外包需要注意什么 外包开发AI软件的关键因素是什么 如何选择AI外包开发语言
  • 基于 STM32 的病房监控系统
  • 数据库数据恢复—MongoDB丢失_mdb_catalog.wt文件导致报错的数据恢复案例
  • 【含开题报告+文档+PPT+源码】基于Spring+Vue的拾光印记婚纱影楼管理系统
  • HTML,API,RestFul API基础
  • 深入理解概率密度函数和概率的关系
  • 【鸿蒙】ArkUI-X跨平台问题集锦
  • 气候多米诺:厄尔尼诺与东南亚跨境害虫或威胁中国粮食安全
  • 国务院关税税则委:调整对原产于美国的进口商品加征关税措施
  • 广东韶关一镇干部冲进交通事故火海救人,获授“见义勇为”奖励万元
  • 上海建筑领域绿色发展2025年工作要点发布
  • 浙江公开征集涉企行政执法问题线索,包括乱收费、乱罚款等
  • 家电维修担心遇“李鬼”?上海推动“物业+专业服务”进社区