《C语言程序设计》笔记

因为我们大学是先学raptor再学c语言的,所以C语言的书籍会出的有点晚
目录:

  1. C语言概述
  2. C语言编程基础
  3. 顺序结构程序设计
  4. 选择结构程序设计
  5. 循环结构程序设计
  6. 指针
  7. 数组
  8. 函数
  9. 结构体、公用体与枚举类型
  10. 文件系统

Day 1
1、C语言概述
1.1 C语言的特点

  1. 语言简洁、紧凑,使用方便、灵活
    32个关键字,9种控制语句
  2. 运算符丰富
    45种运算符。C把括号、赋值和强制类型等作为运算符处理。
  3. 数据类型丰富(尤其是指针类型数据)
  4. 具有结构化的控制语句
    如if…else语句等,用函数作为程序的模块单位。C语言是完全模块化和结构化的语言。
  5. 语法限制宽松,程序设计自由度大
  6. C语言允许直接访问物理地址
    C语言既可以进行位操作(位操作就是),有可以实现汇编语言的大部分功能。直接对硬件操作,同时具有高级语言和低级语言的功能。
  7. 用C语言编写的程序移植性好
    C的编译系统简洁,很容易被移植到新的系统,且标准链接库是用可移植的C语言编写的,所以C的编译系统在新的系统上运行时可以喜欢直接编译标准链接库的大部分功能。
  8. 生成代码的质量高,程序执行效率高
    什么是生成代码的质量?

1.2 结构化程序设计思想
1.2.1 结构化程序设计
结构化程序设计方法的基本思路是:把一个复杂问题的求解过程分阶段进行,每个阶段处理的问题控制在人们易处理和理解的范围内。

它的核心内容包括以下内容:

  1. 一个大型程序的开发应当采用自顶而下、逐步求精的模块化方法;
  2. 程序由顺序、选择、循环 3 种基本的结构组成,由这些基本的单元组成一个大结构。
    采用程序化程序设计方法编制的程序从基本模块到整个程序都必须满足结构化程序的标准,由程序模块组成而没有跳转。

程序模块的要求:

  1. 程序只有一个入口和出口(有些选择结构有多个出口但只执行一个)
  2. 没有永远执行不到的程序
  3. 没有死循环

1.2.2 三种基本结构 (此处略过,有一定基础的朋友对此应该不陌生,可以说是学哪一种语言或是计算机基础都会接触到)

1.3 简单的C语言程序介绍

#include <stdio.h>
main()
{printf("Hello, World!\n");
}

有些同学一开始学C语言的时候可能对我们代码第一行的奇怪的英文字母。这个其实是文件包含命令,包含了标准的输入输出函数库。我们在学语言的时候大多数时间都会有看不懂的代码,正如我一次接触Python的的时候,会对 Python 代码的初行的 import和from … import …感到疑惑,有些时候我们可以先把这一部分抛开,在之后我们学到这一块的时候在回过头来看,我们或许会恍然大悟,这种感觉应该会和你学了很长时间的面向对象的编程之后有一天再回头看时你会顿悟。哦,原来面向对象是这么简单的一件事情。一个 C 语言程序的结构有以下特点:

  1. 一个 C 语言程序由函数组成。一个规模较小的程序,往往包括一个主函数,还有其他实现基本功能的函数
  2. 每一个C语言程序有且只有一个main(),程序总是从main()开始进行的
  3. 程序中用到的变量要先定义后后使用,有时候还要加上变量引用说明和函数声明等
  4. 开头代码的#其实是C语言中的编译预处理命令,不是真正的指令。其他预处理指令还有#define等
  5. 程序的对计算机的操作是由函数中的C语句完成的,好了又出现了一个新的概念C语句,我们可以理解为C语言中执行程序的语句。C语言的书写格式比较自由,一行可以写多个一句,但一般为了简洁和读写性起见,一般来说我们每一行只写一行代码。每个数据声明和语句的末尾用;隔开,“;”是C语句中必不可少的组成部分
  6. C语言本身不提供输入输出语句,我们可以这么理解,我们的输入或是输出是导入了一个库函数实现输入输出,所以可以减小C语言的程序规模,编译程序简单,易在各种机器上实现,因此程序具有移植性
  7. 我们用//(单行)或/* */(多行)来使得代码的可读性变高

1.4 C语言的开发过程
有些一开始接触C语言的朋友特别是从别的不用编译的语言转过来的可能会对为什么要先编译再运行有疑问,直接运行它难道不香吗?接下来我们来讲解一下C语言的编译过程:

  1. 编辑源程序
    通俗点来讲就是码代码到编辑器中去。一般它的文件后缀是.c
  2. 编译源程序
    ①预处理
    举个例子:
#include<stdio.h>

在对这行代码进行解释之前,我们先介绍几个概念:

  1. 头文件(后缀.h,没错h就是header的缩写):
    很形象header files,不是指我们人的头,在英文中header是标头、页眉的意思,大家不要理解成是head,那么我们怎么想也不会相通这玩意为什么和自己的头有关(亲身经历),header是标头的头。有点像Python开头的import。所以头文件就是在代码开头的文件,用来引入相关的代码库或者说是能够实现各种功能的库。这里扯开一下,从我现今的知识来讲(大佬不喜勿喷):为什么会有头文件的产生呢,因为我们在C语言要调用一个函数或者使用一个变量,在这之前都需要经过定义或者声明,而如果我们想调用的函数太多怎么办?于是乎我们将日常调用的函数等做成了一个库文件,只要引入就可以直接调用,但一个库肯定不行,涵盖的太多,所以之后就细化出来许多不同的代码库给我们引入,而这些库就是头文件。因此,就有了那么形象的称呼:头文件。常见的头文件有:用来处理字符的头文件ctype.h(character classification functions,即字符分类函数)、用来进行数学计算处理的函数头文件math.h(以数学命名是不是很真实)、当然也有我们最熟悉的处理包括文件或控制台等输入输出设备的头文件stdio.h等等。现在是不是对stdio十分熟悉了呢!
  2. 包含头文件:
    头文件我们知道是什么,那什么是包含呢?为什么要包含头文件?包含就特指#include的预处理指令,这个就直译为包含(include本意),而包含头文件等价于导入相关的语句库,那么包含头文件可以解释为包含我们头文件里的一些函数等,就是导入了语句库的意思 。

这个代码的意思就是使编译程序将另一源文件嵌入带有#include的源文件中,实际上是将一个文件包含引用到本程序总中来,和Python中的import 有点像,我们导入一个非本语言的库里面有集合可用的函数等等可以通过库赖调用,而非在C语言程序中在进行你要实现功能的再实现,而stdio则是standard input& output的缩写,是标准的输入输出语句库,所以我们可以进行正常的输入输出(比如printf),而.h则是这种库的扩展名。如果我们不打第一行,其实在某些C的编辑器里也可以运行但会有一个warning(警告),就是printf函数没有定义,但如果我们一开始调用了stdio.h则不会这样。一般我们有两种预处理的方法,#include< >或是#include“ ”,功能一样,只是前者引用的是编译器自带的头文件引用地址的相关库(.h)文件,一旦该地址确定,之后无论你在哪个文件夹里面,调用的库文件都是那个地址中的,即绝对路径。而后者条件就比较宽松一些,是调用的相对路径,一般用来引用自己的头文件,如果在该目录地址中没有找到目标文件,最后也能定位到用 < >定位到的头文件。

②检查语法错误:有错误则报错编辑修改,没错误则转换成二进制形式的目标程序,其扩展名是.obj
注意:编译系统出错一共有两种,语法错误信息和警告信息,语法错误大家都比较重视,但对于警告信息,处理起来的态度就比较暧昧了,有些程序员不会重视警告信息,虽然不影响程序的运行(有时候我们会发现,虽然我们的程序没用通过编译,但最终还是运行了,大家一定要注意自己代码报错的警告提示,我们也不想我们后期维护所面对的是一个漏洞百出的代码块)

  1. 连接目标程序
    经过编译的二进制程序无法由计算机直接执行。一个程序可能包含若干个源文件(就是指一般我们在编辑器中码好相关的C的代码,再保存为.c的文件,那么这个包含我们代码也就是源代码(怎么理解这个概念呢?源字的意思是最初的,开始的意思,所以源代码就是我们最初开始写的没有经过编译的代码的集合,如此我们也可以理解源文件的概念,就是由源代码集合成文件),在明白了源家族的意思后我们来解释一下为什么一个程序可以包含若干源程序,举个例子:我们可以提前写好一个1.c的源程序文件,之后我在2.c中开头包含该源文件也就是#include<1.c>,那么我们在2.c文件中就可以调用自己在1.c中的一些函数等等,那么我们继续讲连接。编译则是以源文件为对象的,一次编译只能得到与一个源程序文件相对应目标文件(也称为目标模块),仅仅是整个程序的一部分。再把一个个编译之后目标模块连接装配起来,再与函数库连接成一个整体,生成可供计算机执行的程序(.exe)(即使一个程序只包含一个源程序文件,编译后得到的目标程序也要喝函数库连接才能生成可执行程序)
  2. 运行exe
    如果编译没有错误,则可生成可执行程序,若运算结果不正确,问题可能处在了程序逻辑上,因为通过编译的文件语法是没有错误,问题只可能出现在代码逻辑本身

此外:为了编辑、连接和运行C程序,必须有相应的编译系统,目前使用的很多C语言编译系统都是集成开发环境(Integrabed Development Environment,也就是我们常称的IDE),在Python里面自带的大家熟悉的集成开发环境——IDLE(Integrated Development and Learning Environment)把程序的编辑、编译、连接和运行等操作集中在一个界面上进行。目前流行的有:C-Free、Microsoft Visual C等,而我们机房应该是Dev C++,值得注意的是不同的编译系统的运行结果可能有差别。

--------未完待续--------

《C语言程序设计》笔记相关推荐

  1. 《信贷的逻辑与常识》笔记

    序 银行信贷风险管理的反思 现状与趋势 银行贷款的质量变化与经济周期.宏观调控政策等存在很高的相关性 现在银行不良贷款的增加主要是前几年经济快速增长时企业过度投资.银行过度放贷所带来的结果. 从历史情 ...

  2. AI公开课:19.02.27周逵(投资人)《AI时代的投资逻辑》课堂笔记以及个人感悟

    AI公开课:19.02.27周逵(投资人)<AI时代的投资逻辑>课堂笔记以及个人感悟 目录 课堂PPT图片 精彩语录 个人感悟 课堂PPT图片 精彩语录 更新中-- 文件图片已经丢失-- ...

  3. 人工智能入门算法逻辑回归学习笔记

    逻辑回归是一个非常经典的算法,其中也包含了非常多的细节,曾看到一句话:如果面试官问你熟悉哪个机器学习模型,可以说 SVM,但千万别说 LR,因为细节真的太多了. 秉持着精益求精的工匠精神不断对笔记进行 ...

  4. 【逻辑回归学习笔记】

    算法描述 1.逻辑回归要做的事就是寻找分界面实现二分类. 2.问题假设:对一堆三角形和正方形分类. 3.数据输入:已知正方形和三角形的坐标和标签. 4.算法过程: 知识储备 1.分类和回归 ①分类的目 ...

  5. 逻辑回归函数学习笔记

    继续逻辑回归学习,今日笔记记录. 1.逻辑回归和线性回归的关系:对逻辑回归的概率比取自然对数,则得到的是一个线性函数,推导过程如下. 首先,看逻辑回归的定义 其次,计算两个极端y/(1-y),其值为( ...

  6. 2.2 逻辑回归-机器学习笔记-斯坦福吴恩达教授

    逻辑回归 上一节我们知道,使用线性回归来处理 0/1 分类问题总是困难重重的,因此,人们定义了逻辑回归来完成 0/1 分类问题,逻辑一词也代表了是(1) 和 非(0). Sigmoid预测函数 在逻辑 ...

  7. LVM逻辑卷分区笔记

    磁盘的静态分区有其缺点:分区大小难评估,估计不准确,当分区空间不够用的时候,系统管理员可能需要先备份整个系统,清除磁盘空间,然后重新对磁盘进行分区,然后恢复磁盘数据到新分区,且需要停机一段时间进行恢复 ...

  8. 适合理工直男的钟平老师逻辑英语学习笔记

    一切的一切都只是套路!             --鲁迅 核心公式: En: (状语1) 主(定语1) 谓(状语2) (宾)(定语2) (状语1) Ch: (状语1) (定语1)主 (状语2)谓 (定 ...

  9. 【数字逻辑】学习笔记 第四章 Part2 常用组合逻辑电路与竞争、险象

    文章目录 一.常用组合逻辑电路 1. 译码器 (1) 二进制译码器 74LS138(3/8译码器) a. 一般符号和图形符号 b. 74LS138功能表 c. 两片 `74LS138` 构成 `4-1 ...

  10. 线性回归、逻辑回归学习笔记

    学习源代码 import numpy as np import matplotlib.pyplot as plt def true_fun(X): # 这是我们设定的真实函数,即ground trut ...

最新文章

  1. 关于学习Python的一点学习总结(28->收集参数及分配参数)
  2. (28)SpringBoot启动时的Banner设置【从零开始学Spring Boot】
  3. linux 进程防火墙连接管理,Linux系统管理初步(五)系统防火墙控制程序firewalld...
  4. matlab程序崩溃怎么解决,跪求matlab达人帮我看看程序,我实在是要崩溃了......
  5. C++(一)——存储持续性、作用域、链接性
  6. java面向对象的特征二:继承性 —(14)
  7. 安卓3d游戏开发引擎_微信小游戏开发怎么选游戏引擎
  8. c iostream.源码_通达信三线注意买入主图指标公式【源码分享】
  9. 模二运算,模二加减乘除
  10. 数字化工厂-Process Simulate中的运动学定义
  11. 苹果手机如何查看html代码,苹果手机怎么利用代号查看硬件信息
  12. Windows的截图快捷方式
  13. 弘辽科技:抖加投放后会增粉吗?有什么技巧?
  14. Fragment运行时错误
  15. 对话李国权:新加坡为什么能成为全球Web3.0创业的节点?
  16. 机器学习实战之信用卡欺诈案列
  17. CRM软件的未来发展趋势
  18. Mac升级python版本
  19. 用python画微笑脸表情_python画表情包
  20. 虚拟机玩转 Veritas NetBackup(NBU)之服务端安装部署

热门文章

  1. 微信支付账单修改数字
  2. web端自动化测试1--selenium基础
  3. java对台湾同胞身份证号码验证
  4. php中文的正则表达式_php汉字正则表达式
  5. 动画练习:Punch
  6. 小话设计模式(番外二)委托模式
  7. 咸鱼前端—CSS浮动
  8. winscp 进入mysql命令_WinSCP命令行操作
  9. 软件流程图及功能节点图
  10. Android 优化开机启动