孙Cloud的C语言学习博客-4-循环语句2.0

第六天了,今天也是循环语句的学习2.0,主要从8.13号的那篇编程题库博客中的前4道题进行的详细解析总结。

  • 第一道题为:计算1!+2!+3!+4!+…n!这道题虽然不是很难,但是有一个点却值得我仔细思考的琢磨,就是这是我第一个在那个老师视频中提到优化,效率问题,时间复杂度的代码,当代码进行时计算 1!直到 n!时,效率不高的代码一直使用从123*…n来计算n的阶乘的,但其实只需要5!=4!*5就可以了,这样进行代码的编写将会大大提高代码的效率。这里也学会了一个计算数组中数据的元素数量的一个方法, 即是:int sz = sizeof(arr)/size(arr[0])

  • 第二道题为:在一个有序数组中查找某个数字n,这道题是比较简单的,简单在他说的前提是一个有序的数组,所以最简单的方法就是从头利用for循环进行遍历,总会找到那个数字n,但是这样做,也是效率低下的,这样的时间复杂度就为n,且最坏的情况需要程序遍历整个数组,所以这里老师向我们介绍了更加简单的方法来找到数字n即:(折半查找法,二分查找法)!!!

  • 折半,二分查找法:即找到数组最左边的数与最右边的数,因为是有序的,故可以找到中间值,后与要查询的数字进行比较,然后再重复进行中分,直到找到那个数字n,这种方法的时间复杂度为log2n,当进行(2的32次方)的数组时,此种方法只需要最多32次就能找到数字n!!!编写时利用left与right与中间值mid来查找。

  • 第三道题为:编写代码,演示多个字符从两端移动,向中间汇聚!这道题很有意思,学到了很多新的东西,比如如果数组中是一堆字符而不是数字时,如果再用int sz = sizeof(arr)/size(arr[0])来计算字符个数时需要-2!因为在计算机中比如数组中存放的是a b c时,其实存放的是a b c \n 四个量,故很容易出错,用这种方法,老师给我们了一个新的库函数即是:strlen(arr)来得到,字符数组中的元素个数,不止这个,为了让字符有时间的出现,故使用Sleep();来让他有时间的出现和退出,说到退出,为了使之前的部分消除掉,使用system(“cls”)来清空屏幕,在使用以上函数时都要加上头文件,#include<string.h> #include<windows.h> #include<stdlib.h>依次按顺序。

  • 第四道题为:编写代码实现模拟用户登陆场景,只能登陆三次,并且尽最大可能进行优化(三次密码错误后,退出程序!)这道题就更更更好玩了!!!全是细节,都可以一点一点优化,完善代码,其中也学了一些东西,比如==这个比较是不可以用来比较两个字符串是否相等的!!!即password=“123456”这样是不可以的,需要用一个函数strcmp(a,b)==0)来用等于0来用于判断a与b相等的。

  • 孙浩小笔记!!!
    1.很重要,即是a++与++a的区别,前者是前自增,后者是后自增,
    inta=0,b=1;
    a=b++;//a=1 b=2
    a=++b; //a=3 b=3
    2.int sz = sizeof(arr)/size(arr[0])
    strlen()计算数组表长,头文件为#include<string.h>
    system(“cls”)清空屏幕,头文件是 #include<windows.h>
    3.函数strcmp(a,b)==0)来用等于0来用于判断a与b相等的。
    4.加油!孙浩!做别人做不到的事!

猜你喜欢

转载自blog.csdn.net/weixin_44719191/article/details/107991071