# LearnProgrammingWithMySon **Repository Path**: nablacfd/learn-programming-with-my-son ## Basic Information - **Project Name**: LearnProgrammingWithMySon - **Description**: 和儿子一起学习编程,keep coding!!! - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-02-02 - **Last Updated**: 2021-06-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 和儿子一起学习程序设计 ### 课程目录 #### Topic A 类型系统和数据模型 [Week1~] 程序=数据+逻辑控制 or 程序=数据结构+算法 coding程序需要思考:如何组织数据,哪些数据输入,什么算法处理这些数据,哪些数据结构返回并存储; >计算机系统是由硬件和系统软件组成的,它们共同工作来运行应用程序。系统上执行HelloWorld程序时,系统发生了什么以及为什么会这样。信息就是位(比特)+上下文:同样一个字节(八个位/比特被组织成一组)序列可能表示整数、浮点数、字符串或机器指令取决于上下文,不同上下文可能对应于不同的信息。[浮点数不等价于数学上的实数,浮点数是对真值的有限接近。] Week1 变量、数据类型和对象 + 理解为什么需要定义变量,定义变量为什么要有类型; + 深入理解和区分C语言的数据类型模型和Python语言的数据类型(objects)模型; + variable,constant + type,object(在Python中,有这样一句话是非常重要的:对象有类型,变量无类型。怎么理解呢?) + python的值类型还是引用类型(函数的形参与实参的相互作用) + 基本类型-数值类型-整型、浮点型(单精度、双精度)、逻辑性、字符型;vs 容器类型[list,tuple,set,map]-可变与不可变类型-数据对象与组织 + C语言基础数据类型-整型、存储大小[sizeof(int)]、数据范围和溢出; + 字符常量的尾部字符表示方法和IO-printf,scanf,sprintf,fprintf等的格式化方法; + 字符和字符串,单引号和双引号,'\0',字符操作函数。字符串函数以及和其它类型之间转换的函数。-类型转换、shallow、deep copy; + 存储模型,各类型在内存中的大小和理解类型的相互转换; + IO(输出、输入、sys.stdout、sys.stdin、file) [C语言的数据类型汇总]() Lesson 9 数组:[浙江大学·翁恺【C语言入门:数组】](https://www.bilibili.com/video/av38617241) + 数组 + 初试数组 + 数组的使用:如何定义和使用数组,数组的下标和下标的范围 + 数组的例子:统计个数 + 数组运算 + 数组例子:素数 + 二维数组 Lesson 11 指针与字符串:[浙江大学·翁恺【C语言入门:指针与字符串】](https://www.bilibili.com/video/av38621192) + 指针 + 取地址运算:&运算符取得变量的地址 + 指针:指针变量就是记录地址的变量 + 指针与数组:为什么数组传进函数后的sizeof不对了 + 字符串 + 字符串 + 字符串变量 + 字符串输入输出 + 字符串函数 补充: + [时间类型变量](https://www.bilibili.com/video/BV1Bs411r7N3?t=854) Week 2 位运算和数据的存储 + C语言的数字表示与运算、数值类型及编码基础(有限数量的位来对一个数字进行编码,是整数和实数的子集和逼近) 00-unsigned int基于传统编码 01-signed int基于补码编码(two's-complement) 10-floating-point (float, double, long double)以2为基的科学计算法编码 11-是否满足基本定理(交换律、结合律和分配律)、溢出、数据转换、逼近方法、NaN(Not a Number) 将python的源代码程序编译成exe可执行文件: TIPS: ``` // ESc -> .i.s.o : 编译的各阶段->对应的扩展名 gcc -E hello.c -o hello.i gcc -S hello.c -o hello.s gcc -c hello.c -o hello.o // 一条编译命令 gcc hello.c -o hello --save-temps ``` ``` pip install pyinstaller pyinstaller -F helloAndy.py ``` C编程语言的起源 GNU组织及GCC轶事 ``` man ascii ``` #### Topic B #### 相关辅助学习资源网址 0. 相关网站 + [hackingcpp](hackingcpp.com) + [cppreference](https://en.cppreference.com/w/) + [CODELF-辅助给变量起一个有意义名字的网站](https://unbug.github.io/codelf/) + [GeeksforGeeks](https://www.geeksforgeeks.org/c-programming-language/) + [创客社区](https://www.dfrobot.com.cn/) 1. 基础类 + [CSAPP-2021开课了](https://www.cs.cmu.edu/~213/schedule.html)和相应的[实验](http://csapp.cs.cmu.edu/3e/labs.html) + [CSAPP-2015视频](https://www.bilibili.com/video/av31289365) + [知乎-如何读CSAPP](https://www.zhihu.com/question/20402534/answer/1670374116) + [小土刀-CSAPP读薄/读厚系列](https://wdxtub.com/work/) + [实验的中文系解](https://www.zhihu.com/column/c_1325107476128473088) + [CSAPP书评和可能挖到一些相关资源](http://blog.zhaojie.me/2009/11/recommended-reading-3-csapp.html) + 谭玉刚bilibili-Coding Master-[计算基础-计算原理-汇编](https://space.bilibili.com/41036636/channel/detail?cid=161507) 2. Python + [Python零基础入门](https://study.163.com) + [北京大学-陈斌老师的bilibili主页](https://space.bilibili.com/275008758) + [(2020暑校课)Python语言基础与应用](https://space.bilibili.com/275008758/channel/detail?cid=136365) + [Python语言基础与应用](https://www.bilibili.com/video/BV1fQ4y1N7q5) [备用链接](https://www.bilibili.com/video/BV1V741147QH) + p1-为什么要学习编程 + p2-程序是什么 + p3-Python历史与现状 [2021Feb.09] + [数据结构与算法(Python版)](https://space.bilibili.com/275008758/channel/detail?cid=104657) [备用链接](https://www.bilibili.com/video/BV1cT4y1J7SZ) + [零基础学Python(第二版)](https://docs.pythontab.com/learnpython/) + [坑代码合集](https://github.com/satwikkansal/wtfPython) + [翁恺-C语言程序设计进阶](http://www.icourse163.org/learn/ZJU-200001?tid=1002316004#/learn/content) 3. C programing language + [C语言入门教程(自学版)](www.weixueyuan.net/c/) + [C programing (youtube)](https://www.youtube.com/playlist?list=PLBlnK6fEyqRggZZgYpPMUxdY1CYkZtARR) + [Pointer in C](https://www.bilibili.com/video/BV1s5411J78m) + [数据结构(C语言版)-印度人](https://www.bilibili.com/video/BV1Ev411e7w8) 4. 干就完了 + [C语言怎么学=写出这100个代码](https://zhuanlan.zhihu.com/p/305180250) + [PTA](https://pintia.cn/problem-sets/1298274031405453312/problems/type/6) + [vim-lldb](https://github.com/gilligan/vim-lldb) + [关于大小端](https://manistein.github.io/blog/post/common/understanding_computer_endianness/) + [GDB短教程](https://zhuanlan.zhihu.com/p/347077569) + [GDB教程初步](https://zhuanlan.zhihu.com/p/350786436) + 快速定位段错误 ``` 1、 编译 gcc xx.c -g后,运行可执行文件会自动生成core文件; 2、 若未自动生成core文件则在命令行输入ulimit -c unlimited后重做步骤一后在做下一步; 3、 用gdb调试 gdb a.out core; 4、 输入where查看详细信息,既可精准定位段错误的位置。 ``` 5. SDL2 + [非常好的入门教程](https://www.willusher.io/pages/sdl2/)+[codes](https://github.com/Twinklebear/TwinklebearDev-Lessons) + [更多教程](http://lazyfoo.net/tutorials/SDL/) + [SDL2系列](https://dev.to/noah11012/series/8749) + [在线字体制作](http://www.pentacom.jp/pentacom/bitfontmaker2/) + [有趣的字体素材](http://2ttf.com/) + [FindSDL2.cmake](https://github.com/tcbrindle/sdl2-cmake-scripts)