先说下今天的心情吧,今天看的课感觉真的是开始上难度了,有一些逻辑复杂的地方要把视频反复看四五遍才能明白,不知道我这种笨蛋能不能学好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;
}