C语言的概述
1、C语言的发展过程
C语言是在70年代初问世的。一九七八年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。同时由B.W.Kernighan和.M.Ritchit合著了著名的“THE CppOGRAMING LANGUAGE”一书·通常简称为《K&R》也有人称之为《K&R》标准。但是,在《K&口》中并没有定义一个完整的标准C语言·后来由美国国家标准协会(American National Standards Instituto)在此基础上制定了一个C语言标准·于一九八三年发表。涌常称之为ANSIC
2、当代最优秀的程序设计语言
早期的C语言主要是用于UNIX系统。由于C语言的强大功能和名方面的优点逐渐为人们认识·到了八十年代,C开始进入其它操作系统。并很快在各类大、中、小和微型计管机上得到了广泛的应用,成为当代最优秀汐程序设计语言之一。
数据类型、运算符和表达式
C的数据类型结构如下
一些关于数据类型的解释
1、基本数据类型:基本数据类型最主要的特点是,他的值不可以再次分解为其他类型。也就是说,基本数据类是自我说明的。
2、构造数据类型:构造数据类型是根据已定义的一个或多个数据类型用构造的方法来定义的。也就是说,一个构造类型的值可以分解成若干个“成员”或“元素”。每个“成员”都是一个基本数椐类型或又是个构造类型。在C语言中,构造类型有以下几种:
- 数组类型
- 结构体类型
- 共用体(联合类型)
3、指针类型:指针是一种特殊的,同时又是具有重要作用的数据类型。其值用来表示某个变量在内存储器中的地址。虽然指针变量的取值类似于整型量,但这是两个类型完全不同的量,因比不能混为一谈。
空类型:在调用函数值时,通常应向调用者反回一个函数值。这个反回的函数值是具有一定的数据类型的,应在函数定义函数说明中给以说明,但是,也有一类函数,调用后并不需要向调用者反回函数值,这种函数可以定义为“空类型”。其类型说明符为void。
常量和变量
对于基本的数据类型,按其取值是否可以改变又分为常量和变量
在程序执行过程中,其值不发生改变的量叫做常量,可变的叫做变量
-
常量
-
符号常量:用标示符代表一个常量。在C语言中,可以用一个标识符来表示一个常量,称之为符号常量。
符号常量在体用之前必须先定义,其一般形式为:#define 标识符 常量
-
其中#define也是一条预处理命令(预处理命含都以"#"开头),称为宏定义命含,其功能是把该标识符定义为其后的常量值。一经定义,以后在程序中所有出现该标识符的地方都代表该常量值。
-
代码练习,
#include <stdio.h>
是在输入输出语句的时候使用,也就是使用到print#include <stdio.h> #define PI 3.14; void main() { int num, total; num = 10; total = num * PI; printf("total = %d\n", total); }
-
-
变量
- 一个变量应该有一个名字,在内存中占据一定的存储单元。变量定义必须放在变量使用之前。一般放在函数体的开头部分。要区分变量名和变量值是两个不同的概念。
整型变量
整型变量的分类大致如下,这里说的所占的字节是和编译器有关的
- 基本型:类型说明符为int,在内存中占4个字节,取值范围在(-2^31 ~ 2^31-1)
- 短整型:类型说明符为short int 或者short。在内存中占2个字节,取值范围在 (-2^15 ~ 2^15-1)
- 长整型:类型说明符为 long int 或long,在内存占4个字节,取值范围在(-2^31 ~ 2^31-1)
- 无符号型:类型说明符为unsigned
#include <stdio.h>
void main() {
printf("int所占的字节%d\n", sizeof(int));
printf("short所占的字节%d\n", sizeof(short));
printf("long所占的字节%d", sizeof(long));
}
结果
当数值超过他的最大范围就会溢出,就会出错
#include <stdio.h>
void main() {
short int a, b;
a = 32767;
b = a + 1;
printf("a=%d,b=%d", a, b);
}
结果
实型(浮点型)
作用:用于表示小数
浮点型变量分为两种:
- 单精度float
- 双精度double
两者的区别在于表示的有效数字范围不同。
数据类型 | 占用空间 | 有效数字范围 |
---|---|---|
float | 4字节 | 7位有效数字 |
double | 8字节 | 15~16位有效数字 |
double c = 3e2;
上面的代码的结果是300,计算过程3 * 10 ^2
数值型数据自动转换
变量的数据类型是可以转换的。转换的方法有两种,一种是自动转换,一种是强制转换。自动转换发生在不同数据类型的变量混合运算时,编译系统自动完成。自动转换遵循以下规则:
- 若参与运管量的类型不同,则先转换成同一类型,然后进行运算
- 转换按数据长度增加的方向进行,以保证精度不降低。long型和int型运算时,先把int量转成long型后再进行运算。
- 所有的饭店运算都是双精度的,即使仅含float单精度量运算的表达式,也要先转换成double类型,在做运算
- char型和short型参与运算时,必须先转换成int型
- 在赋值云算中,赋值号两边量的数据类型不同时,随值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分四舍五入向前舍入。
类型自动转换的规则
数值型数据强制转换
强制类型转换是通过类型转换运算实现的
他的一般形式为:(类型说明符)(表达式)
//将a转换为实型
(float) a
//把x+y的结果转换为整型
(int)(x+y)
强制转换需要注意:
- 类型说明符和表达式都必须加括号(单个变量可以不加)
- 无论是强制转换还是自动转换都是临时的,不改变初始定义的数据的类型
基本的算数运算符
加法运算符’+’:加法运算符为双目运算符,即应有俩个量参加加法运算,具有右结合性。
减法运算符’-’:减法运算符为双目运算符。但是减号也可作负值运算符,此时为单目运算符,具有左结合性。
乘法运算符’*’:乘法运算符为双目运算符,具有左结合性。
除法运算符’/’:双目运算符具有左结合性。参与运算量全是整型时,结果也就为整型,舍去小数。如果运算量有一个是实型,则结果为双精度实型。
运算符的优先级
自增、自减运算符
i++,i参与运算之后,i的值再加1
i–,i参与运算后,i的值再减1
++i,先加1,再参与其他运算
–i,先减1,在参与其他运算