前言
第1章 C语言的流程
1.C程序经历的六个阶段
- 编辑(Edit)
- 预处理(Preprocess)
- 编译(Compile)
- 汇编(Assemble)
- 链接(Link)
- 执行(Execute)
2.C语言编写代码到运行
都是先编译,后链接,最后运行。(.c ---> .obj --->.exe)这个过程中注意.c和.obj文件时无法运行的,只有.exe文件才可以运行。
3.C程序流程图
4.计算机基础
计算机的数据在电脑中保存是以 二进制的形式。 数据存放的位置就是它的地址。
bit 是位 是指为0 或者1。 byte 是指字节, 一个字节 = 八个位(1 byte = 8 bit)。
(1) 十进制转 N 进制
万能公式 十进制 转 N进制
x 一直 除 n(n表示n进制),取余数倒排
例1 十进制转二进制
x = 25(十进制) 转二进制
25 / 2 = 12 ... 1
12 / 2 = 6 ... 0
6 / 2 = 3 ... 0
3 / 2 = 1 ... 1
1 / 2 = 0 ... 1
得到 二进制 11001,对应十进制 25
例2 十进制转八进制
x = 25(十进制) 转八进制
25 / 8 = 3 ... 1
3 / 8 =0 ... 3
得到 八进制 31,对应十进制的 25
例3 十进制十六进制
x = 25(十进制) 转十六进制
25 / 16 = 1 ... 9
1 / 16 =0 ... 1
得到 十六进制 19,对应十进制的 25
特别注意
十六进制中 没有 10 ~ 15的阿拉伯数字,
用的是 a ,b ,c ,d ,e ,f 字母代替 数字10 ,11 ,12 ,13 ,14 ,15
(2) N 进制 转十进制
万能公式 N进制转十进制
右边第一位开始,第一位的数字,从0次幂开始 ~ i次幂结束,依次递增1。
n进制转成十进制 = x * n^1 + x * n^2 + x * n^i
例1 二进制转十进制
(二进制)11001
= 1 * 2^4 + 1 * 2^3 + 1 * 2^0
= 25
例2 八进制转十进制
(八进制)31
= 3 * 8^1 + 1 * 8^0
= 25
例3 十六进制转十进制
(十六进制)19
= 1 * 16^1 + 9 * 16^0
= 25
(3) 原码反码补码
在计算机中,所有的数据都是用机器码存储的,也就是有0 和 1 组成
二进制最高是符号位
0 表示正数
1 表示负数
正数的原码,反码,补码都一样
负数的反码 = 它的原码符号位不变,其他位置取反
负数的补码 = 它的反码 + 1
负数的反码 = 它的补码 - 1
这里我们 用 16 位的short类型来举例,-1512在二进制数据中,补码怎么计算得到
0的反码 ,补码都是0
计算机是以 补码的方式来运算 的
当人类看运算结果的时候,要看他的原码
第2章 数据类型、运算符和表达式
1.变量
(1) 变量的概念
内存中有个存储区域,这个地方的数据可以在同一类型范围内不断变化通过变量名,可以访问这块内存区域,获取里面的值;
变量名的构成:数据类型 变量名 值
C语言中变量声明格式: 数据类型 变量名 = 值
(2) 变量的注意
全局变量
定义在函数外部的叫全局变量,默认初始化为0静态变量 static
带有static开头的关键字叫静态变量,默认初始化为0
局部变量
声明局部变量以后,要初始化赋值!定义变量时,这个变量使用的内存不一定被清空,它可能是垃圾值,运行程序会异常退出
(3) 变量的作用域
局部变量
在函数中定义的,有效范围在 定义开始到{ }结束
全局变量在函数外定义,有效范围从定义位置开始,到程序结束!
2.标识符
(1)标识符的概念
C语言中,凡是可以自己命名的地方,都叫做标识符 例如:函数名,变量名,数组名,结构体名
(2)C语言标识符的命名规范
1.只由英文大小写字母、数字、或 _(下划线) 组成
2.第一个字符只能是英文字母或下划线,不能数字开头!!!
3.大小写英文字母代表不同的字符
4.不能是C语言的关键字
(3)C语言 32个关键字
auto | short | int | long |
float | double | char | struct |
union | enum | typedef | const |
unsigned | signed | extern | register |
static | volatile | void | if |
else | switch | case | default |
for | do | while | continue |
break | goto | sizeof | return |
数据类型的分类
3.运算符
(1)C语言运算符优先级
优先级 | 运算符 | 名称或含义 | 使用形式 | 结合方向 | 说明 |
1 | [] | 数组下标 | 数组名[常量表达式] | 左到右 | -- |
() | 圆括号 | (表达式)/函数名(形参表) | -- | ||
. | 成员选择(对象) | 对象.成员名 | -- | ||
-> | 结构体选择(指针) | 对象指针->成员名 | -- | ||
2 | - | 负号运算符 | -表达式 | 右到左 | 单目运算符 |
~ | 按位取反运算符 | ~表达式 | |||
++ | 自增运算符 | ++变量名/变量名++ | |||
-- | 自减运算符 | --变量名/变量名-- | |||
* | 取值运算符 | *指针变量 | |||
& | 取地址运算符 | &变量名 | |||
! | 逻辑非运算符 | !表达式 | |||
(类型) | 强制类型转换 | (数据类型)表达式 | -- | ||
sizeof | 长度运算符 | sizeof(表达式) | -- | ||
3 | / | 除 | 表达式/表达式 | 左到右 | 双目运算符 |
* | 乘 | 表达式*表达式 | |||
% | 余数(取模) | 整型表达式%整型表达式 | |||
4 | + | 加 | 表达式+表达式 | 左到右 | 双目运算符 |
- | 减 | 表达式-表达式 | |||
5 | << | 左移 | 变量<<表达式 | 左到右 | 双目运算符 |
>> | 右移 | 变量>>表达式 | |||
6 | > | 大于 | 表达式>表达式 | 左到右 | 双目运算符 |
>= | 大于等于 | 表达式>=表达式 | |||
< | 小于 | 表达式<表达式 | |||
<= | 小于等于 | 表达式<=表达式 | |||
7 | == | 等于 | 表达式==表达式 | 左到右 | 双目运算符 |
!= | 不等于 | 表达式!= 表达式 | |||
8 | & | 按位与 | 表达式&表达式 | 左到右 | 双目运算符 |
9 | ^ | 按位异或 | 表达式^表达式 | 左到右 | 双目运算符 |
10 | | | 按位或 | 表达式|表达式 | 左到右 | 双目运算符 |
11 | && | 逻辑与 | 表达式&&表达式 | 左到右 | 双目运算符 |
12 | || | 逻辑或 | 表达式||表达式 | 左到右 | 双目运算符 |
13 | ?: | 条件运算符 | 表达式1? 表达式2: 表达式3 | 右到左 | 三目运算符 |
14 | = | 赋值运算符 | 变量=表达式 | 右到左 | -- |
/= | 除后赋值 | 变量/=表达式 | -- | ||
*= | 乘后赋值 | 变量*=表达式 | -- | ||
%= | 取模后赋值 | 变量%=表达式 | -- | ||
+= | 加后赋值 | 变量+=表达式 | -- | ||
-= | 减后赋值 | 变量-=表达式 | -- | ||
<<= | 左移后赋值 | 变量<<=表达式 | -- | ||
>>= | 右移后赋值 | 变量>>=表达式 | -- | ||
&= | 按位与后赋值 | 变量&=表达式 | -- | ||
^= | 按位异或后赋值 | 变量^=表达式 | -- | ||
|= | 按位或后赋值 | 变量|=表达式 | -- | ||
15 | , | 逗号运算符 | 表达式,表达式,… | 左到右 | -- |
简记版:
括号 > 单目运算符 > 算术运算符 > 移位 > 关系> 位运算符 > 逻辑 > 三目 > 赋值 > 逗号
4.表达式
(1)表达式的定义
表达式是一种有值的语法结构,它由运算符和常量、变量、函数调用返回值等结合而成,每个表达式一定有一个值
例 1+1 就是一个表达式,它的值为 2
第 3 章 顺序结构程序设计
1.顺序结构的介绍
什么是顺序结构
顺序结构是按照代码的书写顺序从前到后执行的结构。是C语言最简单、最基本的结构。
顺序结构的特点
1. 自上而下
2. 没有分支
3. 依次执行
#include<stdio.h>
int main()
{
printf("程序开始了~\n");
printf("执行语句...\n");
printf("程序结束\n");"
return 0;
}
2.格式化输出函数 printf()
(1)printf()函数简介
作用:将格式化后的字符串输出(打印东西)
printf("Good job!");
函数原型
int printf ( const char * format, ... );
返回值:输出的字符总数
int a = printf("%d",123);
printf("\na = %d",a);
(2)常见占位符
%c | 字符类型 |
%d | 十进制的int类型(或%i) |
%ld | 十进制的long类型 |
%hd | 短整型short int |
%f | 单精度浮点类型(float) |
%lf | 双精度浮点类型(double) |
%u | 十进制的无符号的整数 |
%p | 指针(地址) |
%x | 十六进制整型(int、long、short)输出 |
%o | 八进制整型(int、long、short)输出 |
%s | 字符串 |
%e | 科学计数法输出(以指数形式(e表示指数部分)输出实数) |
%% | 输出 % |
格式修饰符
英文字母 l | 修饰格式字符d、u、o、x时,用于输出long型数据 |
英文字母 L | 修饰格式字符f、e、g时,用于输出long double型数据 |
英文字母 h | 修饰格式字符d、o、x时,用于输出short型数据 |
输出格式说明
%(正整数)d 限定宽度(右对齐)
printf("%10d\n",123);
%(负整数)d 限定宽度(左对齐)
printf("%-10d\n",123);
(3)%+d 显示正负号
printf("%+d\n",123);
printf("%+d\n",-567);
(4)%.数字f 限定小数位数
printf("num = %.2f\n",3.1415926);
(5)%e 科学计数法(e是浮点类型)
printf("%le\n",123450.0);
(3).转义字符
\? | 在书写连续多个问号时使用,(在某些编译器下 ,会将 “ ??) ” 解析成 三字母词 “ ] ” ) |
\' | 用于表示字符常量 ' |
\" | 用于表示一个字符产内部的双引号 |
\\ | 用于表示一个反斜杠,防止它被解释为一个转义序列符 |
\a | 警告字符,蜂鸣 |
\b | 退格符 |
\f | 进纸符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\ddd | ddd表示1~3个八进制的数字。如:\031 = 十进制 25 |
\xdd | dd表示2个十六进制数字。如:\x20 = 十进制 32 |
3.格式化输入函数 scanf()
第4章