C语言学习第一节

一、c语言历史

历史:1969年之前所有的操作系统都是用汇编语言编写
肯.汤普逊 1969年 在BCPL语言的基础之后 编写了B语言
用B语言写了UNIX操作系统的内核代码
丹尼斯.里奇 1972发明C语言 在B语言的基础之上开发了C语言 C语言之父
用C语言重写了UNIX内核代码
贝尔实验室 太空旅行
C++ 扩展了C语言 只是添加了类、面向对象的特征 斯特劳斯特劳普
java 用C++的写的 简化了C++语法 詹姆斯.高斯林
C# c和java的结合
各种编程语言基本上都是借鉴了C语言的编程规则
标准:
1983年,美国开始制定C语言标准
1989年,制定了第一C语言标准 C89
1999年,C99
2011年,C1X C11
特点:
底层语言 C语言可以直接操作硬件
优点:
(1)高效 这是其它编辑语言所不具有的算法
(2)功能强大 可以操作硬件 编写应用层软件
(3)巧灵活 数据类型 运算符
(4)标准库提供基本的操作
(5)基本上所有的语言都可以调用C语言的代码
(6)能够直接操作硬件
缺点:
(1)灵活意味着困难
(2)比较小 不适合特别大的项目
(3)错误隐藏比较深
写第一个C语言程序 HelloWorld
第一步:编写C语言源代码 vi hello.c
第二步: 编译C语言代码 gcc hello.c
如果没有语法错误 将生成一个a.out的可执行文件
如果有错误 编译会显示错误信息

二、c语言基本数据类型

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(返回)
1.基本数据类型
整型: short int long
浮点: float double
字符: char
unsigned:表示无符号的数
signed :有符号 默认就是有符号的

char                   1字节   8bit    -128,127
unsigned char          1字节   8bit    0,255
short                  2字节  16bit    -32658,32767    -2^15,2^15 -1
unsigned short         2字节  16bit    0,65535
int                    4字节  32bit    -2^31,2^31 -1
unsigned int           4字字  32bit    0,2^32 -1
long                   4/8字节         -2^63,2^63 -1
					   windows下64位  8   以后做开发时不会直接使用long类型 
long long              8字节
float                  4字节  32bit(1符号8指数位23尾数位)  3.4*10^38
							小数点精确6位     6-7
double                 8字节  64bit(1符号11指数位52尾数位) 1.79*10^308
							小数点精确12位    15-16
long double            12字节

内存单位: 单位字节 Byte 4096 文件大小
1T=1024G
1G=1024MB
1MB=1024KB
1KB=1024Byte
1Byte=8个二进制位
#include # 预处理指定
//包含头文件 实际上是在预处理阶段进行预处理
//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
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;
(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 字符串
格式输入
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位
int: 最大值 0(31个1) 最小值 1(31个0)
-1 (32个1)
0 (32个0)
变量
(1)变量的声明
数据类型 变量名;
变量必须先声明后使用
变量必须要有类型, 代表了内存区域的大小,存储数据的类型
在同一个作用域下,变量不能重复定义
变量本质上标识一块内存区域,操作变量操作内存区域的值
(2)变量的初始化
变量定义时如果不初始化,变量是一个随机值(垃圾值)
变量第一次赋值称为初始化 确切的值 可以避免一些错误
如果变量不知道用什么值初始化就用"零"
(3)变量名(标识符)规则
数字、字母、下划线组成
不能由数字开头
不能和C关键字冲突
无限长(C89识别31个字符,C99能识别63个字符)
使用驼峰式、下划线方式命令规则
见名知义、见名知类型
(4)变量的操作
取变量的值
给变量赋值
变量是左值:能放在=左边 可变的

你可能感兴趣的:(C语言学习第一节)