分类: C语言学习笔记

10 篇文章

C 中结构体定义的函数指针,通过结构体成员来实现函数的调用
C 中结构体定义的函数指针,通过结构体成员来实现函数的调用 起因:   我在阅读 ESP32 中 RMT 外设驱动 Dshot 电调协议的时候遇到的 C 语言语法问题,这个结构体的用法未曾见过,它是在结构体中定义了一个 函数指针,指针后面括号了形参,这种写法之前没遇到过特此记录。 struct rmt_encoder_t { *…
do{ }while(0); 的黑科技
do{ }while(0); 的黑科技 前言   对于循环来说,do while 循环仿佛一直用得比较少,除了必要的执行一遍循环体中的语句之外,我个人一般很少使用到该循环的语法。但是无意间在知乎看到了do while(0) 这个黑科技玩法。因此记录一下。 宏定义 // 一般使用宏定义的时候 一切正常 #define a 10 p…
C语言练习七 斐波那契数列
斐波那契数列里,输入项数,输出具体数列斐波那契数 思考: 一、斐波那契数列特点是什么? 这个数列从第 3 项开始,每一项都等于前两项之和。 所以前两项是固定死的:F(0)=0,F(1)=1 总结性规律就是F(n) = F(n-2)+F(n-1) 程序 #include<stdio.h> int F(int n) { if(n==0) r…
C语言练习六 爬楼梯
树老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。 思考: 一、自己的第一思考方式:也就是走的数之和等于楼梯数。大概分三大类:都走1,都走2(判断是不是偶数),混合。 疑问点:但是这个混合怎么去求走法数?说明考虑有误。 再回头改变下思考逻辑,不分类了直接表示所有的情况。 从普遍到特殊流程如下: 第一次可以走1或者2,第二次可以…
C语言练习五 汉诺塔
思考: 一、Q:汉诺塔游戏的规则是什么? A:共三个柱子,确定起始柱子上有N(自己定义)个盘子,大的盘子在下小的盘子在上,从起始柱子上挪到其他柱子上,且挪动过程不可以重复。 二、找共性。从A柱子挪动到C柱子,当我没有盘子时,就不需要操作,什么都不用挪动。当我有一个盘子时,直接从A—>C。有两个盘子时,需要先A->B,A->C,B-…
C语言练习四 正整数求阶乘
输入一个正整数,输出它的阶乘 思考: 一、其实这个也就是从1开始遍历到这个数,再赋值一个 = (这种程序其实也没找到有优化的点,不过需要注意的是b初始化的时候记得赋值1) 二、这里将其延申一下, 如果是输入整数n,求1!+2!+3!+4!+5!+6!+7!+…+n! 的和。 是不是阶乘可以使用递归的方法来求呢? 这里是可以使用递归来求,注意的点在于…
C语音练习三 200以内被3整除且个位数字为6的整数
输出所有0-200之间能被3整除且个位数字为6的整数。 思考: 一:遍历0-200,然后个位数字的表示就是 i%100%10 (唯一稍微优化的一点点就是从6开始少遍历几次) 程序 include int main(void) { int i = 0; for (i = 6; i <= 200; i++) { if (i % 3 == 0 &a…
C语言练习二 皮球下落
一个皮球从100米高度自由落下,每次落地后反弹回原高度的一半,再落下,再反弹。求当它第10次落地时,共经过了多少米,第10次反弹多高? 思考: 一、需要一个变量表示每次反弹多高 height = height / 2,height 初始化 = 100 二、共经过了多少米,设置变量length也就是下落+反弹, 除了第一次外,height *2。 三…
C语言练习一 水仙花数
打印所有的水仙花数。所谓水仙花数是指一个三位数,其各位数字的立方和等于该数。 例如,153就是一个水仙花数,因为153=111+555+333 思考: 一、所有的水仙花数,也就是确定范围100-999。 二、遍历100-999,要找的数按位表示使用 i/100, i/10, i%10 三、判断条件就是 i==(i/100)(i/100)(i/100…