C语言_C程序

语言的发展

  1. Procedure
  2. Function
  3. Object
  4. Meta (template)
  5. Component

Visual Studio使用

Solution(解决方案)指的是解决某一问题整个的方案,需要1个或多个Project(项目)来协同完成。不同的项目可以是不同的语言如C++C#等,可以把这些项目放在一个解决方案中联合编译。

项目目录结构

项目编译成功后,可执行exe文件会生成在项目目录下的x64/Debug中,名字为项目名称

第一个C程序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h> /* standard input output. */

// forward declarations.
void bar(void);

int main(void)
{
bar();
return 0;
}

void bar(void)
{
printf("Hello\n");
}

前置声明的主要作用体现在:

  1. 编译器可以在代码中检测函数是否正确调用,如检查函数名、返回类型、参数类型。
  2. 如果代码中函数调用书写正确,则通过编译检测。我们可以写和前置声明中一样的调用书写来欺骗编译器,但是后面链接器会进一步检查是否在下面有函数的正确定义

如果我们删除bar函数定义

1
2
3
4
5
6
7
8
9
10
#include <stdio.h> /* standard input output. */

// forward declarations.
void bar(void);

int main(void)
{
bar();
return 0;
}

则链接器报错:

1
2
3
4
5
1>------ 已启动生成: 项目: Project1, 配置: Debug x64 ------
1>Source.c
1>Source.obj : error LNK2019: 无法解析的外部符号 bar,函数 main 中引用了该符号
1>C:\Users\xcg\source\repos\Solution1\x64\Debug\Project1.exe : fatal error LNK1120: 1 个无法解析的外部命令
1>已完成生成项目“Project1.vcxproj”的操作 - 失败。

什么情况下需要前置声明

  1. 如果把函数实现放在调用处的后面,则需要在调用处前面前置声明;
  2. 如果函数在此文件外,则需要在调用处前面前置声明;
  3. 如果函数在系统库中,也需要在调用处前面前置声明,只不过写到了#include<XXX>中去了,比如printf函数包含在stdio.h中;

尖括号和双引号的区别

  1. 尖括号搜索范围小,编译速度快。
  2. 双引号会优先到当前工程路径下去扫描,没有扫描到则去系统库中搜索。

编译链接步骤

  1. 预处理,如#include
  2. 编译,把每一个.c文件生成一个.obj文件,即目标文件,是CPU可识别的机器码,但无法直接执行。
  3. 汇编
  4. 链接,把所有的.obj文件组合为.exe文件(Linux下为.out

.exe文件由什么组成

  1. 所有.obj文件(自己编写的内容,用户库)
  2. 系统库内容,如printf函数
  3. C启动代码
    1. 首先需要一个调用者来调用main函数,程序才能从入口启动
    2. 其次,有一些全局变量,需要启动代码在main函数执行前加载

C语言程序顶层角度

程序由模块组成,即一个个功能单元。可以说:大的工厂分了好多车间,各个车间有各自的原料。那么,在程序里,语句把这些原料(数据),按多种方法(顺序、分支、循环)送到某一个位置。而表达式则是这些原料(数据)的载体。表达式由运算符、数据组成。

1
2
3
4
5
6
7
8
C Program
functions
statements
expressions __
| \
| \
operators \
elementary data type

英语笔记_概率导论

词汇

  1. devoted to …
    1. 致力于…的
  2. right away
    1. 立刻、马上
  3. accomplish
    1. 完成
  4. mutually exclusive
    1. 互斥的
  5. specify
    1. 列举;指定;特定
    2. specified:规定的、额定的、特定的
    3. spe’cific:特殊的;特定的;明确的;特效药
  6. axiom
    1. 公理;格言;自明之理
    2. 近义词:theory - 理论,theorem - 定理,principle - 原理
  7. consequence
    1. 结果;后果
  8. im’ply
    1. 隐含;暗示;意味
    2. hint指通过时间接而有提示性的话语或表情来暗示某事。
      imply侧重指话语、行为或情景中的一种暗示,听者或读者必须加以逻辑推断才能领会。
      suggest指有意或无意的,直接或间接暗示,强调事物的表征等使人引起联想。
  9. discrete
    1. 离散的;
    2. discrete mathematics - 离散数学
    3. continuous - 连续的
  10. sophisticated/səˈfɪstɪkeɪtɪd/
    1. 老练的、老于世故的;
    2. 精密的、尖端的;
    3. 高雅的、有教养的。
    4. complex 侧重内在关系的复杂,需通过仔细研究与了解才能掌握和运用。
      complicated 与complex的含义接近,但语气更强,着重极其复杂,很难分析、分辨或解释。
      sophisticated 侧重指事物发展到或达到高级的程度所体现出的复杂。
      intricate 着重指错综复杂,令人迷惑理解。
  11. subtle
    1. 微妙的、难以捉摸的、细微的;
    2. I want a girl who’s sexy, but in a subtle way—that’s what gets me going.
      我需要一个性感女孩,不过要隐隐约约地性感的那一种性感——就是能让我兴奋的那种类型。
    3. 敏感的、敏锐的、有辨别力的
    4. Roy. I’m more subtle and discreet(谨慎) than you.
      罗伊,我比你更低调谨慎。
    5. delicate 侧重指需要谨慎处理和对待。
      fine 隐含“不易察觉的”意味。
      subtle 侧重有洞察、领悟事物细微差别以及微妙关系的能力。

句子

  1. A probabilistic model is a quantitative description of a situation, a phenomenon, or an experiment whose outcome is uncertain.
    1. 概率模型是对结果不确定的情况、现象或实验的定量描述。
  2. we specify a probability law, which assigns probabilities to outcomes or to collections of outcomes. The probability law tells us, for example, whether one outcome is much more likely than some other outcome.
    1. 我们指定一个概率定律,该定律将概率分配给结果或结果集合。概率定律让我们知道,比如,一个结果是否比其他结果更有可能。
  3. Probabilities have to satisfy certain basic properties in order to be meaningful.