C语言学习笔记(408版本-初级阶段)

一、基础阶段

1.C语言背景、环境安装、调试

背景

可移植:C语言

跨平台:Java、Python

C语言不是跨平台,因为C语言中,系统硬件操作的接口,windows、Linux不一样

408目前不涉及这些接口,掌握标准C够用

环境安装

下载使用社区版够用,目前推荐2019版,启动安装包之后如果下载失败,需要修改host

创建新项目

  • 创建新项目->空项目
  • 一个解决方案里可以包含多个项目,先不用勾选“解决方案名称和项目名称放同一目录”
  • 右键源文件->添加->新建项
  • 选C++,命名用.c后缀,如main.c(习惯);因为写成.c就用C语法编译,写成.cpp就用C++语法编译(更严格),初学者用.c即可

用printf输出个hello world

  • 绿色按钮,启动程序
  • 2012版需要添加pause,否则命令行弹框会一闪而过,2017/2019无需写就能自动暂停
  • 暂停是visual自带功能,如果直接执行.exe文件则不会暂停

理解编译过程

  • .c文件(编译)->.obj目标文件(链接)->.exe可执行文件
  • .obj文件没有我们需要用的函数,而是将动态库的函数链接过来生成可执行文件
  • 实际应用时要注意是编译错误还是链接错误

调试

  • 把行号设置显示,方便定位问题
  • 设置内存、监视窗口
  • 通过调试,非常清楚内存的变化过程,才能理解C语言

2.数据类型、运算符与表达式

mac使用vs code

vscode安装插件,安装编译器,

编译运行,调试

数据类型

看笔记图:基本类型,构造类型,指针类型,空类型

C语言关键字(32个),写代码时不能用关键字命名

常量,""空字符串

变量

  • 命名规范:字母、数字、下划线,第一个字符不能是数字
  • 体验如何查看内存并调试

符号常量

  • 不能被赋值

进制的转换

  • 十进制转为二进制,不断的除2,余数倒着写上去

Scanf简单使用

  • 不要使用微软的scanf_s,因为机试不用scanf_s
  • 解决scanf编译报错问题,#define _CRT_SECURE_NO_WARNINGS

3.进制讲解,浮点数,字符型

OJ使用

  • 校招也会用来出题
  • 不要有无用代码,比如printf请输入提示语之类的,否则会判题失误

进制变换

  • 调试查看内容,用的就是十六进制,因为看内存很高效
  • 二进制转成八进制、十六进制非常方便
  • 英特尔CPU使用小端存储,所以低位在前
  • 64位电脑的寻址寻址空间已经足够使用

4.混合运算,scanf标准输入

学C语言注重调试能力,注重计算机原理的解析,

字符常量,字符串常量

  • 大小写字母转换:在内存中的数值相差32
  • C语言没有字符串变量,而是用字符数组存储字符串;
  • 单引号是字符型常量,双引号是字符串型常量
  • 字符串常量:一个字符占一个字节,外加一个\0占一个字节作为结束符

混合运算

  • 隐式转换
  • 强制类型转换

数据输入和输出函数

  • scanf读取的是标准输入;printf输出到黑窗口(控制台),输出到了标准输出
  • scanf常用的输入类型:%d,%f,%c,%s,可以混合使用
  • …是可变参数,参数的数目要与%字母的数量一致

scanf缓冲区原理:初试不考,机试必须掌握

  • #define _CRT_SECURE_NO_WARNINGS放在最前面,可以正常使用scanf,只有微软这么要求
  • 进程运行到scanf函数时,会阻塞,因为需要从标准输入缓冲区读取数据
  • 标准输入使用缓冲,也就是说只有按回车,才会触发IO,把这一行的输入内容存入缓冲区
  • 标准输入的时候,不管输入什么都是字符,通过%字母的方式转成对应类型,回车本身也是输入了\n
  • 按下回车,将输入存入内存,然后触发scanf,从缓冲区读取字符,但是留下了\n
  • 只有缓冲区为空的时候,scanf才会阻塞,如果缓冲有数据或者\n,缓冲区都会读取并直接运行
  • scanf在读取整型,浮点,字符串时,会忽略回车符,空格符等字符;即scanf会首先删除这些字符,再阻塞

5.scanf循环读取,多种数据类型混合读取,printf讲解

内存地址原理解析

  • cpu与内存通过地址总线(类比32/64根线)上高低电平对应的编址找到对应的内存位置,在通过数据总线(32/64跟)将数据传给内存;因此内存里并没有保存所谓的地址,只保存数据总线传来的数据
  • 32位与64位原理一样,我们按照32位考虑,因为考试考32位

scanf循环读取整型数%d

  • scanf编程出错时返回EOF,EOF是常量,值为-1,所以EOF可以作为判断,用来结束循环
  • scanf什么时候会出错:一开始什么都不输入(行首)输入ctrl z,回车,连续三次,
  • 如何疯狂打印:读取整型状态下,先输入整数,回车,再输入字符,在回车,开始疯狂打印
  • 疯狂打印原因:输入字符不匹配整型接收,不匹配则返回的是0,不是EOF,所以while不能停止,缓冲区保存的还是上一次的数据,
  • 如何解决疯狂打印:加rewind(stdin)ÿ

你可能感兴趣的:(408学习专区,c语言,学习,开发语言)