第一章 导入:初识C语言你需要了解什么?
C语言一经出现就以其功能丰富、表达能力强、灵活方便、应用面广等特点迅速在全世界普及和推广。C语言不但执行效率高而且可移植性好,可以用来开发应用软件、驱动、操作系统等。C语言也是其它众多高级语言的鼻祖语言,所以说学习C语言是进入编程世界的必修课。
初步了解
- “程序存储思想”是由John Von Neumann即数字计算机之父、美籍匈牙利科学家冯·诺伊曼提出的,他的另一个贡献是建议在电子计算机中采用二进制。
- 所谓二进制数,就是采用0和1作为数符,每个0或1就是一个位,是数据存储的最小单位。
- 内存的的存储单元并不是一个位,而是连续8个位组成的一个字节(B),即B是内存的基本量度单位和存储单元。
- 电子计算机“ENIIAC”于1946年诞生于美国宾夕法尼亚大学。
- 电子计算机经历了4个发展时代,微型计算机出现在大规模集成电路时代。
- 关于软件与程序:
- 软件的核心是程序(而不等于程序)
- 软件=程序+文档
- 软件中文档必不可少
- 关于源程序与目标程序的关系:
- 用机器语言编写的源程序就是目标程序。
- 用汇编语言编写的源程序需要经过汇编程序。
- 用C语言编写的源程序需要经过编译程序编译为目标程序。
- 不同语言对应的编译程序或者说编译器不一样。
- 用汇编语言和高级语言编写的源程序必须经过3种翻译方式中的某一种才能得到对应的目标程序;它们是:编译、汇编、解释。
- 第一个结构化程序设计语言是PASCAI。
- 贝尔实验室的Dennis M.Ritchie于1973年用C语言重写了UNIX操作系统。
- 每个地址总线上可能的符号是0和1,每一个地址号对应于一个字节的存储单位
- 在C程序中,无论是整数还是实数,都能被准确无误的表示(应该加个在精度范围内)
进制转换(重点)
tip:偷懒小妙招:在线进制转换器 | 菜鸟工具 (runoob.com)
位置化数字系统:二进制/八进制/十进制/十六进制
二八,二十六进制转换用8421
ASCII的printf表示:

第二章:初识/C语言程序及其数据类型
mindmap
Root
初时C语言程序及其数据类型
2.1 C源程序与符号
2.2C语言中的数据类型
2.3常量
2.4变量
2.5基本数据类型在计算机内部的表示
2.1 C源程序与符号
源程序的基本组成结构
在现代软件工程中,注释和程序语句具有同等重要性
- 函数(C语言源程序的基本单位)
分为:主函数main 和 用户自定义函数(由main函数调用)
由函数首部和函数体组成

6种基本符号
- 关键字(保留字)
- 标识符:
-
是赋予程序中的变量和函数等的名称,分为系统预定义标识符和用户自定义标识符。
必须由字母或者下划线开头,后面跟字母、数字、下划线的任意字符序列,然后组成一个字符串。
-
标识符是严格区分大小写的。例如
Imooc和imooc是两个不同的标识符。 -
标识符最好选择有意义的英文单词组成做到"见名知意",不要使用中文。
-
标识符不能是C语言的关键字。
- 运算符
- 分割符
- 其他符号
- 数据
程序中处理的数据有常量和变量两种
2.2 C语言中的数据类型
tip: 这部分东西比较杂碎,知识点也比较多,大家如果想学透建议还是要扣书

详解:
【精选】【C语言】数据类型一文详解_c语言数据类型_攻城狮白玉的博客-CSDN博客
C 程序设计教程(03)—— C 语言的数据类型(一):基本数据类型_c语言数据类型程序-CSDN博客

基本类型的前面可以使用修饰符,常用的修饰符如下:
signed(有符号的)
unsigned(无符号的)
long(长型)
short(短型)
2.3常量
-
在程序执行过程中,值不发生改变的量称为常量。
-
C语言的常量可以分为直接常量和符号常量。
one.直接常量
直接常量也称为字面量,是可以直接拿来使用,无需说明的量,比如:
1. 整型常量:————————————————————————————————————————————————————————————————————————————
- (十进制)13、0、-13;(八进制:由数字0开头);(十六进制:由0x/0X开头)
- 长整型常量的后缀是L/l;无符号整型常量的后缀是U/u;无符号长整型常量的后缀显然就是LU、Lu、lU、lu
2. 实型常量(也叫浮点型):13.33、-24.4,3.0e8,9.9e+20;——————————————————————————————————————
- 常量只采用十进制表示,其表达方式分为小数形式和指数形式
- 小数:小数点左右数字可以缺省,但是不能都省略
- 指数:尾数可表示成小数/整数,但不可省略+e/E+指数必须是整数
- 默认状态为double类型;float类型常量的后缀是F/f;长双精度long double后缀为L/l
3. 字符常量(单引号):‘a’、‘M’————————————————————————————————————————————————————————————
4. 字符串常量(双引号):”I love imooc!”———————————————————————————————————————————————————
TIP:字符常量
ASCII码的转化

字符常量——转义字符
通常使用转义字符表示 ASCII 字符集中不可打印的控制字符和特定功能的字符。
| 字符常量——转义字符 | |
|---|---|
| 转义字符 | 意义 与 ASCII 码 |
| \b | 退格(BS) 008 |
| \f | 换页(FF) 012 |
| \n | 换行(LF) 010 |
| \r | 回车(CR) 013 |
| \t | 水平制表(HT) 009 |
| \v | 垂直制表(VT) 011 |
| \ | 反斜杠 092 |
| ? | 问号字符 063 |
| \’ | 单引号字符 039 |
| \" | 双引号字符 034 |
| \0 | 空字符 000 |
two.符号常量
#define 标识符 常量值- 用一个标识符来表示一个常量,在使用之前必须先定义,符号常量不可以被改变
2.4变量
-
变量就是可以变化的量,而每个变量都会有一个名字(标识符)。
-
变量占据内存中一定的存储单元。使用变量之前必须先定义变量,要区分变量名和变量值是两个不同的概念。
格式化输入语句
- 一般用scanf和printf

- 但是字符型char变量的输入和输出可以用getchar()和putchar()
语法
<变量> = getchar();
putchar(<参数>);
用const修饰符限定变量
C语言在定义变量时可以在其数据类型前加上const修饰符,其作用是限定一个变量的值不允许被修改,这种变量的作用和符号常量类似,称为只读变量(这里我们建议用const只读变量代替符号常量)
第三章:运算符和表达式
mindmap
Root
运算符和表达式
3.1什么是运算符和表达式
3.2运算符的优先级和结合性
3.3常用运算符
3.4运算过程中的数据类型转换
3.5位运算符
3.1什么是运算符和表达式
运算符
使用运算符必须要有运算对象,运算对象也叫操作数,可以是常量、变量、函数或其他表达式
根据所需运算对象的个数,运算符又分为3类:
- 单目运算符(操作数为1,如:取负值运算符)
- 双目运算符(操作数为2,如:加减运算符)
- 三目运算符(操作数为3,如:条件运算符)
表达式
由运算符和运算对象组成(也可以只有一个运算对象)
任何一个表达式都有一个确定的值,称为表达式的值
3.2运算符的优先级和结合性
级数越小的运算符优先级越高
而运算符的结合性只有左结合和右结合


3.3常用运算符
总的来说
- 运算符的优先级与结合性只是决定了表达式的语义,即如何划分子表达式,而与表达式中子表达式的计算次序无关
- 算术运算符>关系运算符>逻辑运算符(&&和||,不包括!非)> 条件运算符>赋值运算符>逗号运算符
- 所有单目运算符的优先级都比其他运算符高
- 条件运算符是C语言中唯一的一个三目运算符
- 所有双目运算符中,除了赋值运算符是由右到左,其余都是由左到右
1.算术运算符
即【-(取负数) 】(单目)> 【 乘*、/、%】(双) > 【 +、-】(双)
tip:
- 除法运算符的两个含义:整数除和实数除
在C语言中,整型与整型运算的结果还是整型,而实型与整型运算的结果为实型(比如1/2和1.0/2)
- 求余%:要求两个操作数都必须为整型,且余数的符号与被除数的相同
- 数字函数的使用: 在
#include<math.h>中(详详详详情见附录E)
| 数字函数(部分常用) | |
|---|---|
| sqrt(x) | 计算x的平方根 |
| fabs(x) | x的绝对值 |
| log(x) | 计算lnx |
| log10(x) | 计算lgx |
| exp(x) | 计算e的x次方 |
| pow(x,y) | 计算x的y次方 |
| sin(x) | 计算sinx,且x为弧度值 |
| cos(x) | 计算cosx,且x为弧度值 |
2.关系运算符
关系运算符是用来比较两个操作数的值的运算,比较的结果是一个逻辑值,即只能是真(非0) 或假0
包括(都是双目):<,<=,>,>=,==,!=
3.逻辑运算符
逻辑运算的对象是逻辑值,运算结果仍是逻辑值
逻辑运算对象除了关系表达式外,还可以是整型、实型、字符型数据以及其他表达式,且两者类型不一定相同
C语言提供了三种逻辑运算符:非!(单) > 与&&(双) > 或||(双)
其中,逻辑运算中可能会出现一种特殊情况:逻辑短路↓

4.条件运算符 — ?和:(唯一的三目运算符,右结合)
案例(求最大最小值 )
编写程序,从键盘任意输入四个整数,要求输出最大值和最小值(利用条件运算符)
#include <stdio.h>
int main() {
int a, b, c, d;
int max, min;
printf("请输入四个整数:\n");
scanf_s("%d %d %d %d", &a, &b, &c, &d);
max = (a > b) ? ((a > c) ? ((a > d) ? a : d) : ((c > d) ? c : d)) : ((b > c) ? ((b > d) ? b : d) : ((c > d) ? c : d));
min = (a < b) ? ((a < c) ? ((a < d) ? a : d) : ((c < d) ? c : d)) : ((b < c) ? ((b < d) ? b : d) : ((c < d) ? c : d));
printf("最大值:%d\n", max);
printf("最小值:%d\n", min);
return 0;
}
5.赋值及复合赋值运算符(都是双目,右结合)
- 赋值运算符为"="
- 复合赋值运算符:例如
a*=b
6.逗号运算符(,左结合)
7.自增、自减运算符(都是单目,右结合)
都是单目运算符,只需要一个操作数,而且操作数必须是变量
8.用 运算符sizeof 可以计算某一数据类型的变量所占的内存字节数,sizeof(数据类型)
3.4 运算过程中的数据类型转换

自动类型转换(两种情况:一个是表达式中,一个是赋值式中)
1.表达式中:
就是在运算过程中,当有两种不同类型的数据要做运算的时候,会把级别低类型的数据转为级别高类型的数据后,再做运算(也就是数据类型的长度由低向高转换,以防止精度缺失)
C语言 数值运算中的类型转换_unsigned short和char能相加吗_一起躺躺躺的博客-CSDN博客
2.赋值式中:
在赋值语句中,若赋值运算符右边表达式的类型与左边变量的类型不一致时,系统也会进行自动类型转换,其类型转换的规则是:将右边表达式的值转成左边变量的类型
但是由高转向低的时候,会出现精度丢失的情况:↓

强制类型转换
(<类型>) <表达式>
其中<表达式>是待转换的对象,<类型>是要转换的目标类型
类型转换的优先级高于运算
如果看完后还有哪里不懂的话,可以看这篇文章进行补充,希望大家都可以成功入门C语言^^