C语言的宏运算符

这题还是MSC决赛的一题,原题题干已经交代得很清楚了(我懒……),直接搬过来好了 宏&宏函数简介 宏是 C 语言中极为强大,也极具魅力的一个功能。宏为极其贴近机器语言的 C 提供了一定程度上的元编程能力。程序员们能够利用宏来减少代码中的重复,或是解决一些条件编译之类的问题。 宏、或者说 C 预处理器,实际上干的事情就是进行字符串拼接和处理,其中比较简单的就是普通的字符串替换: #define abc efg #define one 1 #define INT int #define DENGYU INT abc DENGYU one; // -> int efg = 1; 为了防止替换的过程无法结束,通过这种方式定义的宏在它的(和它的递归)展开内容中是不会再对其本身进行替换 #define abc abc efg #define efg abc hij #define hij efg abc abc // (所有东西都可以被展开) -> abc efg // (abc 不会再被展开) -> abc abc hij // (abc efg 不会再被展开) -> abc abc efg abc 另一种则是宏函数,规则稍微复杂一些。宏函数首先会对它的参数进行宏展开,如果参数中存在 # 或者 ## (具体作用后面会提及), 那么不再对这个参数进行递归展开,然后再按照宏的定义将参数进行拼接,得到这一次展开的结果;之后对结果进行下一次展开。这次展开和之前说的展开规则类似,不再会对生成的结果中相同的宏函数进行展开。...

February 19, 2019 · 3 min · 519 words · NCJ

Variadic Function in C

去年参加MSC的决赛的时候,遇到了关于变参函数的问题。其实这类函数很套路,但是考虑到之后想写的关于宏的一篇文章中有些东西跟变参函数有些类似,而且网上关于变参函数的教程都几乎是千篇一律、不中要害,因此先写一篇关于变参函数的文章,对其使用方法进行探讨。 〇、引言-常规的函数 在C语言中,函数在声明时往往就要指定参数的数量与类型,编译的时候,编译器也会替我们检查,看函数调用有无问题。 例如: #include <stdio.h> int func(int i, int j) { } int main() { func(100); // 实参数目不对 return 0; } 此时编译器就会报错: error: too few arguments to function 'func' func(100); ^ 再如: #include <stdio.h> int func(int i, int j) { } int main() { int* a; func(a, 100); return 0; } 此时编译器不会报错(at least for GCC),但是会给出一个Warning: warning: passing argument 1 of 'func' makes integer from pointer without a cast func(a, 100); ^ note: expected 'int' but argument is of type 'int *' int func(int i, int j) ^ 在这里我是故意用的一个指针,如果你用的是double或者char的话,连warning都不会出现,到时候一个强制类型转化塞给func()。...

January 20, 2019 · 5 min · 950 words · NCJ

Calculus Review

极限 函数&预备知识 参数方程 极坐标方程 二项式展开 和差化积公式 … 数列极限 定义 $\xi - N$ (用于验证) 性质&四则运算 两大定理&$e$ 夹逼定理 单调有界定理 函数极限 定义 $\xi - \delta​$ $\xi - X$ 归结原理、左右极限 性质&四则运算 两大定理? 夹逼定理(仍然成立) 单调有界?(No Longer Exist) 两大重要极限 $\lim_{x \to 0}\frac{x}{sinx} = 1$ $\lim_{x \to \infty}(1 + \frac{1}{x})^x = e​$ 连续 定义 $\lim_{x \to x_0}f(x) = f(x_0)​$ 有限闭区间上的连续函数的性质 有界性 最大最小值定理 零点存在定理 介值定理 (常用于证明$F(\xi) = 0​$ ) o()、O()、等价替换 $o(x) + o(x^2) = o(x)$ $o()$代表”一类“量,因此”=“不是传统意义上的”等于“ 导数 定义 $\lim_{x \to x_0}\frac{f(x) - f(x_0)}{x - x_0} = A = f’(x_0)$ 切线 割线斜率的极限...

January 15, 2019 · 2 min · 231 words · NCJ

2018年终回顾

2018年过去了,感觉挺快的。到现在我还记得去年的今天,我正在准备元月调考,而现在,我正在大学的寝室里待着。刚好这两天放假,不妨抽个空,盘点一下我自己的2018年。 想必18年最重要的事情,就是高考了。其实真的感觉没那么紧张,也没有晚上睡不着觉的情况,真的感觉跟平常差不多。唯一的区别,就是这是高中最后一次考试了,而且考完要填志愿。本来一直想去北京的,结果误打误撞地来到了浙大。但是现在看来,也许选择浙大是一个明智的选择,毕竟最后进入到了自己最喜欢的专业,也见到了许许多多的大佬,紫金港条件也不错,不出意外的话,等大西区建好之后,我浙将是中国面积最大的大学之一。 其实我一直觉得,大学最重要的目的是拓宽视野。其实很多大学里学的知识到工作中并不能直接使用,但是在学习它们时,你学习能力的提升,你接触到的老师的视野,都是你受益终生的财富。看到周围还有人用高中的方式在学习,不听课、只刷题,除了学习什么都不干,不去与大佬接触,我只能笑而不语。 说起大佬,不得不说机器人协会是个很牛的协会。这应该是学校最硬核的协会之一,一直想玩的机器人、一直想学的Arduino,嗯,都玩到了。教学部很多大佬啊,真的是让人受益匪浅,第一次内训就推荐了一大堆资源,涵盖了方方面面,不得不说很牛!在协会,我还认识了不少竺可桢学院的大佬。哎,抱腿的感觉,真好。 学校的情况差不多就这些吧。总之,选择浙大,我不后悔。 2018年,还有很多要感谢的人。 首先,是家人。没有他们的支持,我不可能走到今天。无论是高考前的煎熬,还是填报志愿时的纠结,还是选择专业以及准备专业面试时,他们都给了我很大的支持。这里一起说一声,谢谢了,我爱你们。 其次,是老师。古人云:“为师一时,为父一生。”确实,从小学到高中,我遇到了不少好老师。时至今日,我觉得有必要对他们都说一声谢谢。 还有各位学长学姐。高考填报志愿时,问了不少学长学姐,而且还是在他们的考试周——我现在才明白考试周其实比高中忙的多。准备专业面试时,他们也为我提供了很大的帮助。在此一并致谢。 最后是我的朋友们。在我孤独之时,他们能陪陪我。感谢你们。 这是我成人后第一次跨年,学会感谢是人生的重要一课,因而特地在此,再次感谢所有在我成长过程中帮助过我的人。谢谢你们。 2018也有很多实现了的小目标: 进入心仪大学和专业 拿到第一门满绩 参加一次学术竞赛并取得一定名次 改掉高中时不良的睡眠习惯 搭建自己的个人网站/博客(就是这个了,哈哈!) …… 当然2018 也有遗憾,但是不多,不妨把它们放到明年的目标里面。 最后,讲讲我为什么想建立这个网站,以及明年的规划(flag)吧。 建立网站当然不是空穴来风。这个想法的产生是因为我一天无聊,点开求是潮的“关于”页面,发现里面的开发人员(都是在校学生)每个人都有自己的个人网站,有的甚至还有自己的域名。具体看他们的文章,会发现确实技术含量很高。向大佬看齐,是建站的第一个原因。另外,一些刷到的题目中,有很多让我眼前一亮的想法,很难找到一个合适的地方来写这些东西。(我知道CSDN,但是那里盗版太严重,而且做project的经历让我发现上面的代码可以有多不靠谱。)再加上这种东西发到朋友圈、说说并不合适,也很容易淹没,我也不准备让很多人看到我的文章,因此自己建一个站点应该是个不错的选择。目前,它部署在GitHub上,没有被百度收录,而且GitHub是禁百度的spider的,因此百度是找不到这个网站的。我希望在浩瀚的互联网中,做一个淡定的隐士——志同道合者自然能找到我的网站,与我交流——这就足矣。 明年准备就一些简单的算法(高深的我也还没学…….)谈谈自己的感受,可以理解为我的学习笔记。一些想法我也会放到这里来。另外,在MSC比赛中遇到了两个很有意思的语法问题,这个准备就在明年一月份写出来。(flag立在这里了…….)另外,我在明年会参加中控杯,中间遇到的技术问题及其解决方案,我也会放在这里。敬请期待。 2018年的总结差不多就这些吧。期待2019年。 See U, 2018!

December 31, 2018 · 1 min · 27 words · NCJ

Python3 Learning Notes

Chapter 1 Setup import this The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Flat is better than nested. Sparse is better than dense. Readability counts. Special cases aren’t special enough to break the rules. Although practicality beats purity. Errors should never pass silently. Unless explicitly silenced. In the face of ambiguity, refuse the temptation to guess....

December 31, 2018 · 24 min · 4901 words · NCJ