C语言进阶之旅(3)

循环与二分查找 字符判断

打印乘法口诀表

在这里插入图片描述

想法1,用循环,俩数相乘,看代码

int main()
{
	int i = 0;
	int j = 0;
	for (i = 1; i <= 9; i++)
	{

		for (j = 1; j <= i; j++)
		{
			printf("%d*%d=%d  ", i,j,i*j);
		}
		printf("\n");
	}
	return 0;
}

看下运行结果

在这里插入图片描述

可以看到这不是我们想要的结果,可是为什么呢???
看代码

#include<stdio.h>
int main()
{
	int i = 0;
	int j = 0;
	for (i = 1; i <= 9; i++)
	{

		for (j = 1; j <= i; j++)
		{
			printf("%d*%d=%d  ", j,i,i*j);//第一进来是1*1---->第二次---->i=2 j = 1 *1 -- >*2//所以i放在后面
		}
		printf("\n");
	}
	return 0;
}

原来是i和j的位置啊哪为啥换一下就好了呢解释:看图

在这里插入图片描述

循环do while

先看一下do while的流程图吧

在这里插入图片描述

do while 就是上来不管你里面条件真假都先执行一遍,然后在进行判断用的场景比较少!!(break和contiune)和在while中一致

二分查找

就是类似小的时候上课玩的猜数字游戏一样,老师给你一个大致的范围你去猜,一般人都会猜个中间值,然后老师会睡小了或者大了,那么二分查找也同理得
他的定义大致说一下建议和代码搭配一起看

在有序数组中(没有得不行),用下标来查找,就是用最首元素和最大得下标加起来除二就得到就等到了下标,然后判断,如果小了那么中间下标加一和最大得下标在相加除2,!!那么看代码

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;//最大
	while (left<=right)//
	{
		int mid = (left + right) / 2;//中间下标
		if (arr[mid] < k)//记得是数组mid不要忘记
		{
			left = arr[mid] + 1;
		}
		else if (arr[mid]>k)
		{
			right = arr[mid] - 1;
		}
		else
		{
			printf("恭喜你找到了,下标是:%d", mid);
			break;//找到了就跳出循环
		}
     
	}
	if (left > right)//最小的下标大于最大的下标表示,已经全部找过没找的
		printf("55~~~找不到你要得数字\n");
}
字符判断

字符判断用啥判断???

char arr1[]="daudada";
char arr2[]="cacascac"

这样吗???错错错,这样是比这字符数组首哥元素得数组名,那是没有意义得,那么用啥??当当当介绍一个新函数strcmp专门用来判读数组得,不过用它还需要引头文件string.看下代码emmm

int main()
{
	char password[10] = { 0 };
	scanf("%s", password);//数组的首元素就是地址
	if (strcmp(password, "123456") == 0)
	{
		printf("密码正确");
	}
	return 0;
}

运行结果

在这里插入图片描述
strcmp对比是用assic对比,就是设a 和a对比是去assic中啊看对应得下表对比
assic️标

拓展内容(个人看法)

随机值

1.个人看法。。。。
rand()–>

在这里插入图片描述
这里得意思是生成一个随机数,可是他不够随机,应为他每次开始得位置都一样,第一次可能比较随机,可是第二次,第三次???那么他就成了固定得数了

在这里插入图片描述

这里得意思大致就是给srand函数设置一个种子他就会随机生成---->那么输入100 哦变了——————>按巨快没变好像不够灵活他好像也不够随机那么要想想哦哦哦,给他种子设置一个一直在变化得东西有啥??日期??这个变得好像也太慢了----》时间—》这个好像一直在变

那么介绍一个都想时间戳,他就是计算机创造开始得时间-现在得时间,哦哦哦,可是要怎么获取这个时间呢??

int main(){


	//随机值
	//rand(随机值在7fff的范围内,)----->生成起点都一样所以每次结果一样-->srand
	//srand---->(输入值可以,不过使用快了就不随机)--->时间戳计算机其实计算机开始时间到现在开始的时间的值
	int ret = rand();
	srand((unsigned int)time(NULL));//
	printf("%d", ret);
}

srand((unsigned int)time(NULL))这句话得意思是

生成一个随机值————————>在rand之前调用–>只需要设置一次,不然一直生成得话哪他不就和之前一样没有意思不够随机
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值