标准C语言语法基础知识

标准C语言语法
历史:
1969年之前所有的操作系统都是用汇编语言编写
肯.汤普逊 1969年 在BCPL语言的基础之后 编写了B语言 用B语言写了UNIX操作系统的内核代码
丹尼斯.里奇 1972发明C语言 在B语言的基础之上开发了C语言 C语言之父
用C语言重写了UNIX内核代码
标准:
1983年,美国开始制定C语言标准
1989年,制定了第一C语言标准 C89
1999年,C99
2011年,C1X C11
特点:
底层语言 C语言可以直接操作硬件

优点:
(1)高效 这是其它编辑语言所不具有的
算法
(2)功能强大
可以操作硬件 编写应用层软件
(3)巧灵活
数据类型 运算符
(4)标准库
提供基本的操作
(5)基本上所有的语言都可以调用C语言的代码
(6)能够直接操作硬件

缺点:
(1)灵活意味着困难
(2)比较小 不适合特别大的项目
(3)错误隐藏比较深
#include <stdio.h> //包含头文件 实际上是在预处理阶段进行预处理

预处理指定

#define
//C语言中的函数默认返回int类型 void 表示没有返回值
main函数的返回值其实是告诉系统这个程序执行的情况 反馈
int main(){//main是C语言的主函数 C语言程序的入口
printf(“Hello world!\n”);//printf是stdio.h中声明的函数 调用函数
//“字符串”
//\n 转义字符 换行 \t \b ’ " \r
return 0;//返回一个值 表示该程序正确执行正常结束
}

语法规则:
1.C语言源代码都是以.c为结尾
2.注释
方便阅读和理解程序代码的 并且不会编译到可执行程序中去内容
// 单行注释
/*
多行注释
*/

编译的步骤:gcc hello.c
(1)预处理
进行宏替换和头文件导入等 以及 去掉注释内容
(2)编译
(3)汇编
(4)链接

-o 对生成文件进行重命令

程序能做什么?
做数据处理 交互 人–电脑
程序实现 人机交互
什么是数据?
世间万物 都是数据
例如
电影 0和1的无限组合 二进制
图片
帧 一帧其实就是一张图片
图片 像素
一个像素点 颜色(rgb) 0-255的数值
保存一个像素点至少3个0-255的数字
音乐
基本数据类型
年龄 18 整数
余额 0.01 小数
a b ‘中’ 字符

整数类型: 字节
短整型 short 2
整数 int 4
长整型 long 4 重要:不同的操作系统不同 4/8
浮点类型:
单精度浮点类型 float 4
双精度浮点类型 double 8
字符类型:
char 1

C语言为什么要分这些基本数据类型?
1.方便计算 处理器处理数据方便
2.节省内存
3.为了格式化
‘a’ 数值

unsigned 表示无符号类型数据
unsigned int

数字字面值
1 100 168 2019

数据在内存中的形式:二进制
二进制是由 0和1组成的

short int long 取值范围是多少?
1字节 = 8bit 比特位(二进制位)

short能够表示多大的范围:
2字节 16个二进制位

对于signed类型数据 二进制最高位是 符号位 1表示负数 0表示正数
对于unsigned类型的数据 没有符号位
short 最大值 0 15个1
最小值 1 15个0 ???
有符号的数二进制全是1 -1

重要:计算机中保存的数据都是以补码形式存在
为什么需要补码?
1+2 二进制 原码 反码 补码
3+(-3) 3-5 只有用补码进行计算时结果才正确
原码:最高位表示符号位
正数 原码 、反码、 补码一样
负数 原码 最高为1 其它位是 其正数的原码
反码 符号位不变 其它位按位取反
补码 取反+1 且符号位不变
负数不管以哪一种码制存在,最高位是1

八个二进制位
原码形式:
0000 0011 0000 0011
1000 0011 0000 0101


1000 0110 = -6 1111 1110 不等于 -2
反码形式:
0000 0011 0000 0011
1111 1100 0000 0101


 1111 1111 = 不是0 1111 1110 反码 1000 0001 =-1

补码形式:
0000 0011
1111 1101

10000 0000 最高位溢出 结果为0       

1111 1110 补码 最高位是符号位 负数
   1111 1101 按位取反 1000 0010 = -2  

C语言程序中如何保存数据?
变量: 可以临时保存C语言中的数据

(1)变量的定义
数据类型 标识符;
//为什么变量要有数据类型
变量所标识的内存大小
变量所存在数据的类型
一个变量如果没有初始化(第一次赋值),那么变量里面将保存一个随机值(垃圾值)
所以一般定义变量时都会进行初始化操作
变量必须先定义(声明)才能使用
在同一个作用域下面,同名的变量只能有一个
同类型的变量可以一次性声明,中间用逗号隔开,然后每个变量独自初始化

(2)变量名(标识符)规则
a.由数字、字母、_(下划线)组成
b.不能由数字开头
c.不能和C语言的关键字冲突
C89有32个关键字
d.允许标识符无限长 但是C89只识别前31个字符 C99中有63个字符
e.标识符区分大小写
建议:
(i) 标识符驼峰式/下划线方式
nameOfStudent name_of_student
驼峰式: 从第二个单词开始首字母大小,其余全部小写
下划线: 单词之间用_连接
(ii)见名知义
int a = 10;
int age = 18;
(iii)见名知类型
int iAge = 18;
double dSalary = 323.325;
C语言32个关键字:
a.数据类型
char short int long float double
unsigned signed void
enum struct union
b.循环
for while do goto break continue
c.分支选择
if else switch case default
d.数据存储
auto static extern const register volatile
e.其它
typedef sizeof return

(3)变量的初始化
变量初始化之后是一个确切的值
局部变量和块变量在声明的时候是一个垃圾值,所以一般会选择初始为0或者其它有意义的值

变量是一个左值(可以放在=左边)

变量的本质是标识一块内存空间 操作变量其实是操作这一块内存空间

(4)变量的操作
变量 = 值; 往变量所标识的内存区域写入一个数据
printf("%x",变量) 取得变量所标识内存区域的数值

(5)变量的作用
a.保存数据 方便计算

格式输入输出
格式输出:
printf(格式字符串,列表)
格式字符串 占位符 %
%- m.n h|l 占位符
-左对齐 省略默认右对齐
m 域宽 总位数
n 小数点后位数
h 短整型
l 长整型 lf 双精度浮点类型
i/d 十进制整数 %i %d没有区别
u 无符号整数
f 单精度浮点数
e 浮点类型科学计数法形式
g 以简短形式显示浮点类型 省略多余的0
x 十六进制
o 八进制
c 字符
s 字符串
p 输出地址(指针)
格式输入
scanf(格式字符串,地址列表)
地址列表: 即对变量名进行&运算 请记住&
%d %i
%d 输入十进制的数据
%i 可以输入任意进制的数据

负数补码
正数按位取反+1

char类型
ascii码表
十进制 字符
65 ‘A’
97 ‘a’
48 ‘0’

进制:
二进制
八进制
十进制
十六进制
在C语言程序中允许使用八进制、十进制、十六进制的数字
十六进制: 0x 0X 例: 0x32af
八进制: 0 例: 0773

十进制的数据:
25 234 -7 -15
求二进制(补码)
八进制 从右往左 三个二进制位为一个八进制位转换
十六进制 从右往左 四个二进制位为一个八进制位转换

十进制转二进制:
除2求余
234 24个0 1110 1010 从右往左 三个二进制位为一个八进制位转换
011 101 010 000000000352 0x000000ea

-15 24个1 1111 0001 037777777761 0xfffffff1

二进制转十进制:
0101 1011 = 累加和 基*2^权
2^6 + 2^4 + 2^3 + 2^1 + 2^0

1024 512 256 128 64 32 16 8 4 2 1
1 1 1 0 1 0 1 0

奇数 二进制末尾为1
偶数 二进制末尾为0
234-128=106-64=42-32=10-8=2-2=0

0x37f6a = 316^4 + 716^3 + 1516^2 + 616^1 + 10;

浮点数:
IEEE
float 4字节 32个二进制位
1符号位 8个指数位 23尾数位
13.25 ==> 1101.01
处理成 1.10101 * 2^3 1.xxxx * 2^n
0.75 ==> 0.11
处理成 1.1 * 2^-1
1.尾数位 * 2^指数位

    8个二进制位取值范围 [-128,127]
    +- 1.(23个1)*2^127
    = (2- 2^-23) * 2^127
    = 2^128 - 2^104
    = 3.4*10^38

小数点后精确6位 6-7位

浮点类型表示一个不精确的数值
单精度浮上数怎么表示"零" 用一个取值范围
(-0.0000001,0.0000001)
double 8字节 64个二进制位
1符号位 11指数位 52尾数位
11 指数位 [-1024,1023]
1.(52个1) * 2^1023
= (2 - 2-52)*21023
= 2^1024 - 2^971
= 1.79*10^308
小数点后精确12 15-16位

double
操作符(运算符)
1.算术运算符

      • / %
        +,-,* 可能数据溢出
        / 除法
        注意:对于整数 只保留整数部分
        除数不能为0 浮点类型除外
        同类型数据在进行算术运算时结果也是同类型的
        混合运算
        char->short->int->long->float->double
        unsigned+signed ==> unsigned

% 取余数
只有整数才能进行取余运算
%对于浮点类型数据 报错

2.赋值运算符

混合赋值 += -= *= /= %=
int a = 10;
float f = a = 3.14;
int b = 10;
f = (a=b) = 7; //Error
3.自增减
++ –
++ 自增1
x++; ++x; x = x+1;
int y = ++x; //x = x+1; y = x; 先自增 后运算
int y = x++; //y = x; x = x+1; 先运算 后自增
– 自减1

建议:
(i)不要在一个表达式中对同一个变量进行多次+±-运算
(ii) 最好不要对浮点类型进行+±-
(iii) 最好不要在调用函数传递时用+±-

指针+±-

4.关系运算符

= < <= == !=

5.逻辑运算符
&& || !

6.位运算符
& | ^ ~ >> <<

7.条件运算符 三目运算符
?:

8.其它
[]
()
,
.
*
&
->
sizeof

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值