先说下今天的心情吧,今天看的课感觉真的是开始上难度了,有一些逻辑复杂的地方要把视频反复看四五遍才能明白,不知道我这种笨蛋能不能学好C语言。。。还是对自己得有点信心,肯定能学好!下面是今天的内容啦!
For循环
之前不是很明白for循环和while循环的区别,这两天在chatgpt刨根问底了一下,总结来说,for循环更适合在已知循环次数时使用,while更适合在未知循环次数下使用;而且,for循环有个好处,就是它初始化、判断、调整的部分都在一起,如for(int i = 0; i < 10; i++)
而while的初始化、判断、调整部分可能是分散开的,如果后续需要在循环内添加语句,可能不太好找这三部分的具体位置。
for循环体内不可以修改循环变量,为防止for循环失去控制,比如:
int i = 0;
for (i = 0; i < 10; i++)
{
if(i = 5) //这里一个“=”是赋值,而不是判断
printf("哈哈\n");
printf("呵呵\n");
}
这段代码运行起来打印的是无数个呵呵和哈哈,for失去控制。
for循环的初始化、判断、调整都是可以省略的,但是,如果判断部分被省略,那么判断的条件就会恒为真,比如:
for ( ; ; ) //省略了判断
{
printf("呵呵\n");
}
此时打印出无数个呵呵,因为条件为真就会一直重复进入循环。
一道面试题
这个循环中循环了几次,答案:0次
int main()
{
int i = 0;
int k = 0;
for (i = 0, k = 0; k = 0; i++, k++)//一个“=”是赋值
{
k++;
}
return 0;
}
第五行for循环里的内容,这里反复看了好几遍,一直觉得把0赋值给了K,那K不就是等于0吗,等于0不就是真命题吗,不就该进入循环吗……
后来才弄明白不对,for循环第二部分应该是判断, 但是这里把0赋值给了K,而0表示是假,非0才表示为真,此时0为假,所以不进入循环
二分查找算法
这里看视频觉着不难,但是有点绕,弹幕里有一条说二分查找算法是所有算法里最简单的……妈呀,最简单的都这么复杂,那以后学的得多复杂啊。。。
二分查找算法,就是说,比如我定义了一个数组
char arr[10] = {1,2,3,4,5,6,7,8,9,10};
然后我想找数字7对应的下标是几,此时我们最坏的情况是第十次找到数字7,
而如果我们第一个数找中间的数,也就是5,因为7大于5,所以我们要找的7在5的右边,这时候只需要在6到10之间去找我们要的数,以此类推,我们最坏的情况是第四次就能找到7,这种方法就叫二分查找算法,例如:
#include<stdio.h>
int main()
{
char arr[10] = {1,2,3,4,5,6,7,8,9,10};
int k = 7;
int sz = = sizeof(arr)/sizeof(arr[0]); //计算元素个数
int lift = 0;//左下标为0,代表数字1
int right = sz-1;
while(lift < right) //当左下标小于右下标才进入循环
{
int mid = (lift + right)/2;
if (arr[mid] > k)
{
right = mid-1; //新的右下标变成mid左边的值
}
else if (arr[mid] < k)
{
lift = mid+1; //新的左下标变成mid右边的值
}
else
{
printf("找到了,下标是:%d\n",mid);
break;
}
}
if (lift > right)
{
printf("找不到")
}
return 0;
}
计算n的阶乘
#include<stido.h>
int main()
{
int i = 0;
int n = 0;
int ret = 1; //这里不能等于0
scanf("%d",&n);
for (i=1; i <= n; i++)
{
ret = ret * i; //上面如果让ret=0的话,这里就是0乘以i,结果还是0
}
printf("结果是:%d",ret);
return 0;
}