以下为《新概念C语言教学大纲 (1)》的无排版文字预览,完整格式请下载
下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。
NCCL - New Concept C Language 教学大纲Unit One0 A9 }" J9 D2 L6 sUnit 1 是《新概念C语言》系列课程的第一部分,共有24个Lesson,包含以下4个层次的学习内容:? ? Beginning Lessons (Lesson 1-7)0 U7 g, k* _' P8 g: R? ? 以变量为核心,运用循环语句和条件分支,讲解C程序的基本结构。9 }+ D3 d" r! ]6 ^3 I? ? Intermediate Lessons (Lesson 8-14)? ? 以数组为核心,分析常用数据结构(字符串,结构体,联合),讲解C程序的函数设计。8 F7 v* p" Q' o) m4 q5 O9 K* H+ d? ? Advanced Lessons (Lesson 15-21)? ? 以指针为核心,结合二维数组,位操作和函数指针,讲解C程序的状态机编程思想。? ? Homework Projects (Lesson 22-24)? ? 以任务为核心,通过趣味题,综合使用学习过的知识和技能,实现项目需求功能。& w: J% w7 \! b( nBeginning Lessons7 T" P9 m4 M% q; MLesson 1 What is a simplest C program? 最简单的C程序5 ]; h% y+ \6 M% Q) w? ? C 语言 Language( M4 V! {2 w6 g$ p8 e$ I) ?? ?? ???高级语言 High-level Programming Language? ?? ???汇编语言 Assembly Language& |0 \0 j/ M* V* a; z* {/ t* l? ?? ???机器指令 Instructions? ? 编译器 Compiler5 p& o6 x# k7 e* I- j3 a? ?? ???汇编器 Assembler? ??操作系统?OS? ?? ???加载器 Loader? ?? ???加载地址和执行地址 Load_Addr & Exec_Addr. p8 Q0 ^$ p6 L8 {0 V* c? ? 程序的执行 Program Execution? ?? ???进程的概念 Process? ?? ???执行流程 Execution Sequence# o3 Z* Y* E5 I??}??V& b% I8 Q6 f! O, TLesson 2 Let's say hello to world 打印输出1 e5 P% X) M! ?6 B7 j6 n? ? 库函数 Library" G% D??a+ @0 Y4 Q7 d? ?? ???libc & glibc? ?? ???系统调用 System Call? ?? ???库封装了系统调用??w/ d" C9 x9 `! R) O+ L; _- B? ? 链接器 Linker* \, I! o" g: g, R9 M, P? ?? ???链接脚本?Link Script' Z# O7 U1 g??g$ f& i1 S% J, u? ?? ???程序入口 Entry? ?? ???链接脚本决定了程序的执行地址? ? 程序的编译过程 Program compiling procedure? ?? ???预处理 Preprocessing cpp (.c -> .i)+ _/ e( f, U' d2 d( n, y" D4 v? ?? ???编译 Compilation cc1 (.i -> .s)4 j9 I1 i7 z0 N) D3 X7 Z4 N? ?? ???汇编 Assembly as (.s -> .o), a% r2 V3 E$ H6 Z- M+ H/ g, X: r- e? ?? ???链接 Linking collect2 (.o -> .elf)? ? 虚拟地址 Vitual Memory Address? ?? ???进程独立的地址空间$ Z- ~$ q3 [; F. D' A, f9 L8 M? ?? ???内存管理单元 MMU' A6 S) d, c2 f$ WLesson 3 Count how many fingers do you have? 循环打印! @. p3 m( v2 B) |, |# ~& Y+ ^? ? while 循环 和 do-while 用法5 A# u4 \: b5 I- O, H? ?? ???比较和跳转指令 Compare and Jump Instruction? ?? ???do-while 比 while 有时更有用? ? 变量的初始化 Variable Initialization1 y- C$ v??W, _( [( X? ?? ???变量的存储布局 Data & BSS Section) v3 r( c; O??p- h? ?? ???变量的取名规范 Naming? ? 相对跳转 Relative Jump' L: P# o- q% d$ z2 H8 S? ?? ???位置无关代码 PIC (Position Independent Code)( k1 D& i! E??M; w# f8 HLesson 4 Judge a number odd or even 判断奇偶2 j??V- b- }, J? ? 条件分支 Condition- s3 \% ~$ A; w1 m4 v7 z? ?? ???表达式求值 Expression Value! H??r6 O4 n. b) C( d, |. F2 ]# Z9 V? ? 编码风格 Coding Style??L??g, m. i3 w5 [% v4 O? ?? ???标识符命名 symbol naming1 _# N5 a2 p8 j! g) ?2 a7 W/ u7 U? ?? ???代码缩进 (如果你知道自己在做什么,三层就足够了)? ? 函数的传值和传址 Parameter's value and address? ?? ???程序二进制接口规范 ABI (Application Binary Interface)) U' g1 }1 `' `" A6 s! {4 \! m% j$ b+ B- m) bLesson 5 Summarize all numbers from 1 to 100 从1加到100求和) s' [" U6 l, O" |/ N+ P8 z? ? for 循环? ?? ???两种循环用法比较* ~5 [( Q/ a/ C3 E. N: c? ? 自动变量 auto variable6 E6 V. H) @% D$ K3 D* A8 ?2 m% M? ?? ???C 语言的发展变迁 Old Style C/C89/C99/GNU C# ?" p2 g0 F& w/ u??k# z? ? 预处理过程 Pre-compile9 e6 K2 e??B6 \/ ^% T2 S8 F? ?? ???条件编译8 @! y6 K: q+ {( Z# |? ?? ???# 和 ## 的用法1 u5 [??}8 X??Y8 ?( ~9 H? ? DEBUG 调试宏9 {# Z" w5 ]2 t# T# a? ?? ???__func__, __FUNCTION__? ?? ???__LINE__( ?% j) A9 {2 s6 H7 J? ?? ???args... 和 ##args 的用法' g& @; |: b* r6 @0 I" b7 t1 J% L% eLesson 6 Print 9*9 multiplication table 乘法表? ? 循环嵌套1 w4 k6 S3 o) B1 i: _+ y? ?? ???两重循环的典型用法? ?? ???break 和 continue. d/ q9 c??z* Y% M2 M, ^? ? 程序的调试? ?? ???编译时和运行时错误8 O" s??v/ F# v? ? 函数栈 Function Stack5 z& B5 g8 F1 D* r) ~9 d? ?? ???栈帧 Stack Frame$ l/ q, i( O+ l$ R( A0 g% ILesson 7 Find a max prime number within 100 求100以内的最大素数8 ]. s5 D/ t' ?5 o% k6 {& M? ? 循环中的条件分支; h- B* n% i+ ^( F9 @" [! _? ?? ???break 和 goto 用法? ? 数学库函数 math library? ?? ???静态链接和动态链接 static & dynamic linkage? ? 算法效率? ?? ???算法的时间复杂度分析 O(n)2 y3 ?- f' I2 d. S2 c? ? 结构程序设计5 J% b3 l' ]2 r) N0 x1 O? ?? ???三种基本控制结构就可以写各种程序4 I: ]; S+ G' s& N& ?Intermediate LessonsLesson 8 Find how many 9 in number 1 to 100 1到100有多少个94 \5 Z6 Y. c" g2 `/ u% `' {基本概念讲解7 J# ^4 g# u; m8 f; k? ? 函数 Function? ?? ???函数的入口和出口? ? 分解和分层 stratify? ?? ???小即是美) i, o9 I+ W+ W5 M) q? ? 过程抽象和接口设计 Procedure Abstract, ]0 a$ w6 M, ]4 |? ?? ???可复用的代码 Reuse4 [8 j, r5 s+ N3 Y7 Q! J? ?? ???接口小巧、简洁和正交Lesson 9 Convert a number to a string 整型转字符串8 G2 u2 S% S) A' Z/ `4 R1 j2 `9 Y基本概念讲解? ? 字符数组 String and Character Array9 `( s5 |& P$ H? ?? ???字符编码 ASCII 码表# h" a+ c, p" h# W? ? 字符串逆序 String Reverse0 b- u) f+ t& G3 F1 h) M? ?? ???函数式宏定义 Function-like MacroLesson 10 Josephus ring 约瑟夫环基本概念讲解? ? 整型数组 Array; D5 k) H5 y- @2 |? ?? ???数组的初始化??`??z/ C& W3 |/ T9 M??X6 \" Z5 U/ |? ? 数据结构和算法 DS & AL? ?? ???数据驱动编程 Data-Driven? ?? ???数据压倒一切,编程的核心是数据结构,而不是算法! ~% }+ ^9 w! ]& K. c? ? 链表思想 Link List? ?? ???算法优化 Optimization. t) {. `0 u??O, d9 ^& J7 U! K5 w& T5 E2 G8 iLesson 11 Calculate the distance between 2 point 求两个坐标点之间的距离, x; A2 m" ?6 g3 ~3 q基本概念讲解? ? 结构体 Struct? ?? ???结构体初始化4 W; k/ F0 k' D( m8 S4 f+ A: Y6 D? ? 数组和结构体? ?? ???数组名参数的传址调用? ?? ???结构体参数的传值调用? ? 类型声明 typedef? ?? ???预处理和编译时 Pre-compile & Compiling time? ? C99 中结构体的扩展用法? ?? ???驱动内核模块编写- M: M# e! e??g( g; w( i: rLesson 12 Does your machine use little-endian? 判断机器存储是否小尾端" n: K. k* ]. W' ?- K基本概念讲解8 j0 Z6 O* N/ a' N( v& }% V8 Z2 F1 D1 H8 J? ? 联合 Union? ?? ???存储分配) r4 x1 O9 j8 f2 G( D% i? ? 结构体空洞 Struct Hole? ?? ???对齐和填充 Alignment & Padding) N??x3 u3 Z% _# \? ? 数据的存储表示 Complements? ?? ???原码,反码和补码Lesson 13 Sorry, your car is restricted today 对不起,你的车今天限行' \% h* i; Y; u8 A- V# B基本概念讲解4 }+ l+ B6 g; I; p- ]? ? 分支语句 Switch2 |2 y6 i+ O3 }$ {) w? ? 枚举用法 enum' o) M, Q+ h2 R. S6 Y? ?? ???枚举类型的初始化? ? 增量式开发 Incremental Development% @7 `: v* x9 O, l??o??R? ?? ???步步为营而不是一蹴而就? ? 预定义宏的用法? ?? ???__DATE__? ?? ???__TIME__* ]$ i& h) C* X0 a6 k6 [! y) |* Y" o' d??S, W' f* F' e& J; OLesson 14 Is there a way out? 判断地图上某点是否有出路, ]: l; d8 n' `! I基本概念讲解? ? 二维数组' ?& ?! W7 j' I+ f) E; g5 `? ?? ???循环和分支' V: x7 q4 g! A, b: n! J" V? ? 逻辑表达式 Logical Expression1 T) V0 \4 d- E# z??q4 v? ?? ???或 ||. D7 ]2 N+ s5 ]? ?? ???与 &&? ? 随机数生成 Random* z& m( Q9 F! ]% K? ?? ???时间种子 Time seed% k. h: v2 S7 {, u" rAdvanced Lessons9 q; \: [6 k6 l2 [4 B& zLesson 15 Count bit 1 in a number 统计一个数二进制表示中1的个数7 \2 z& L9 d" z. ]6 F基本概念讲解' ]3 ???x8 f; w; H6 C9 u! t? ? 位操作? ?? ???移位 >>5 r4 U: @+ e1 @6 M' ~- |6 ]! k? ?? ???与 &? ? 异或操作:0 d2 n2 R7 I2 I4 f& {* X% w? ?? ???按位加法? ? 算法效率? ?? ???过早优化是万恶之源? ?? ???先求运行,再求正确,最后求快3 b6 C$ h, L! f$ R6 m? ? 位域操作? ?? ???通过位域实现位操作? ?? ???嵌入式编程中的寄存器配置Lesson 16 How to strcpy 字符串拷贝基本概念讲解+ X0 F??s( }1 [. h7 X7 R? ? 指针- n3 |7 I& W3 M0 {3 k: |? ?? ???计算机存储体系? ? 动态内存分配 Memory Allocate? ?? ???heap & stack? ? assert 宏? ?? ???XX表达式/ G- X/ c8 q9 `? ? 寻址和访存% U5 Q8 w1 y) s% W1 L5 d8 B4 q' x- H: H? ?? ???内存对齐? ?? ???防止编译器优化 volatile' j: y' ^9 P# I??YLesson 17 Find how many words in an artitle 统计单词个数7 g* S0 e* U( ^" C; b! g基本概念讲解6 z4 q# T8 q$ [& s/ B2 K; ]9 b' {? ? 指针数组3 R4 h: H) z$ O. R. W? ?? ???和二维数组的比较? ? 动态内存分配? ?? ???malloc & free? ? 递归 Recursive? ?? ???循环和递归? ? 变量的生存期和作用域8 O??\' U% W. Q: J8 ^3 u* B? ?? ???static 用法? ? 状态机思想的简单应用? ?? ???state machine8 p. J% K% ]5 t9 E2 A/ FLesson 18 My printf 实现 printf4 D9 `" x* F! X! r& b8 m基本概念讲解; H- l" h) ^$ |8 U! _8 Y4 I? ? 字符指针数组? ? 可变长度参数的函数实现? ?? ???字符串常量 const char *& s- d" m" u. }" L! t* `/ ~? ?? ???... 可变参数的用法: V: G. o" a! e? ? 栈帧的应用/ k/ M9 ?8 [7 v??f, J% ?? ?? ???va_list? ?? ???va_start/ z% J/ }. G7 z: e? ?? ???va_arg? ?? ???va_end1 c5 j4 m- {??{??o, @Lesson 19?Shell?command parser 命令解释器8 E% N: U6 o& E$ V基本概念讲解0 r% @" R2 f2 K: I4 i' B# F* z0 U9 I5 s3 V? ? 函数指针? ?? ???回调函数 Call-Back Function/ j5 T5 s8 g2 ?2 J? ? main 参数 argc, argv, O1 t6 }??T3 a+ q- u2 H+ P? ?? ???字符指针数组 vs 指针的指针? ? 进程的环境变量? ?? ???进程栈空间布局" q' ~$ B" Y9 l/ Q3 GLesson 20 Rectangular and Polar 直角坐标和极坐标互换基本概念讲解7 @??]' I' `9 F+ t? ? 函数指针数组( x. `* j& u, m5 l' b3 x? ? 复杂类型声明( L3 C, K8 b9 k. r( K? ?? ???typedef 背后编译器的处理过程? 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 intf(1/3)
[bbk5839]第30集 - 第十八课 - My printf - 实现自己的printf(2/3)
[bbk5851]第31集 - 第十八课 - My printf - 实现自己的printf(3/3)
[bbk5911]第32集 - 第十九课 - Shell命令解释器(1/2)
[bbk5912]第33集 - 第十九课 - Shell命令解释器(2/2)
[bbk5913]第34集 - 第二十课 - 预处理器实现(1/6)
[bbk5914]第35集 - 第二十课 - 预处理器实现(2/6)
[bbk5915]第36集 - 第二十课 - 预处理器实现(3/6)
[bbk5916]第37集 - 第二十课 - 预处理器实现(4/6)
[bbk5917]第38集 - 第二十课 - 预处理器实现(5/6)
[bbk5918]第39集 - 第二十课 - 预处理器实现(6/6)
[bbk5919]第40集 - 第二十一课 - 词法分析器实现(1/2)
[bbk5920]第41集 - 第二十一课 - 词法分析器实现(2/2)
[文章尾部最后500字内容到此结束,中间部分内容请查看底下的图片预览]请点击下方选择您需要的文档下载。
以上为《新概念C语言教学大纲 (1)》的无排版文字预览,完整格式请下载
下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。