新概念C语言教学大纲 (1)

本文由用户“JJDDJH1”分享发布 更新时间:2021-11-23 14:14:42 举报文档

以下为《新概念C语言教学大纲 (1)》的无排版文字预览,完整格式请下载

下载前请仔细阅读文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

NCCL - New Concept C Language 教学大纲 Unit One 0 A9 }" J9 D2 L6 s Unit 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) m 4 q5 O9 K* H+ d ? ? Advanced Lessons (Lesson 15-21) ? ? 以指针为核心,结合二维数组,位操作和函数指针,讲解C程序的状态机编程思想。 ? ? Homework Projects (Lesson 22-24) ? ? 以任务为核心,通过趣味题,综合使用学习过的知识和技能,实现项目需求功能。& w: J% w7 \! b( n Beginning Lessons7 T" P9 m4 M% q; M Lesson 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, T Lesson 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$ W Lesson 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 H Lesson 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) b Lesson 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% e Lesson 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% I Lesson 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 Lessons Lesson 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 Macro Lesson 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, d 9 ^& J7 U! K5 w& T5 E2 G8 i Lesson 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: r Lesson 12 Does your machine use little-endian? 判断机器存储是否小尾端" n: K. k* ]. W' ?- K 基本概念讲解8 j0 Z6 O* N/ a' N( v& }% V 8 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; O Lesson 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" r Advanced Lessons9 q; \: [6 k6 l2 [4 B& z Lesson 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??Y Lesson 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/ F Lesson 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 G Lesson 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字内容到此结束,中间部分内容请查看底下的图片预览]请点击下方选择您需要的文档下载。

  1. 公司人格确认原则确立案例 - 副本
  2. 中考英语D短文
  3. 高考前复习 易错单词
  4. 任务型阅读阅读练习
  5. The purpose of business final edition
  6. Unit 1 Hobbies Leisure time and hobbies电子教案 20
  7. 六级习题二(2)
  8. 英语六级作文高级句子及万能模板句式

以上为《新概念C语言教学大纲 (1)》的无排版文字预览,完整格式请下载

下载前请仔细阅读上面文字预览以及下方图片预览。图片预览是什么样的,下载的文档就是什么样的。

图片预览