1. 数据类型
程序运行时要做的就是处理数据。程序要解决复杂的问题,就要处理不同的数据。不同的数据都是以自己本身的一种特定形式存在的(如整型、实型。字符型等),不同的数据类型占用不同的存储空间。C语言有多种不同的数据类型,如图:
1.1 基本类型
基本类型就是C语言中的基础类型,包括整型、字符型、实型(浮点型)、枚举类型。
1.2 构造类型
构造类型就是基本类型的数据,或者使用已经构造的=好的数据类型,设计构造出新的数据类型。构造类型可以由多种类型组合而成,其中每一组成部分称为构造类型的成员。构造类型包括数组类型、结构体类型和共用体类型3种形式。
1.3 指针类型
C语言的精华,指针类型不同于其他类型的特殊性在于,指针的值表示某个内存地址。
1.4 空类型
空类型的关键字是void,其主要作用有两点:
对函数返回的限定
对函数参数的限定
也就是说,一般一个函数都就有一个返回值,将其值返回调用者。这个返回值是具有特殊的类型的,如整型int。但是当函数不必返回一个值时,就可以使用空类型设定返回值。
2. 常用的数据类型
2.1 字符类型char
占用内存:1个字节。
用来存储小范围的整数(-128 ~ 127),和“字符”(所有ASCII字符,128个)。
使用:
char a = 100;
char b = ‘a’;
2.2 整数类型int
占用内存:4个字节
用来存储整数,范围:-(2^31) ~ 2^31-1。
(模糊记忆:±20亿左右) 使用:
int c = 123;
int d = -345;
2.3 短整数类型short
占用内存:2个字节
用来存储整数,和int类似,范围:-(2^15) ~ 2^15-1。
(模糊记忆:±3万左右) 使用:
short i = 6666;
2.4 长整形long
占用内存:
在32位系统上,占4个字节,和int相同
在64位系统上,占8个字节。
long 也就是 long int,用来存储整数。
使用:
long e = 123456789;
- 长长整形long long
占用内存:8字节。
(所以一般多使用long long来定义较长的整型)
用来存储整数。范围:-(2^63) ~ 2^63-1。
(模糊记忆:±900亿亿左右) 使用:
long long ee = 123456789987654321;
2.5 float 类型(单精度浮点类型)
占用内存:4个字节
用来存储带小数部分的数据。
表示范围:-3.410^38~+3.410^38
精度:最长7位有效数字(指7位10进制位)
第7位(整数部分不算)是四舍五入后的值。
表示方式:
按科学记数法存储,也就是需要存储“尾数”和“指数”
float x = 1.75E5;1.75E5就是1.75乘以10的5次方,只需保存尾数(1.75)和指数(5)
float y = 1.123456789;精度只能取值到 1.1234568, 在第7位(整数部分不算)是四舍五入后的值。
2.6 double 类型(双精度浮点类型)
占用内存:8个字节
用来存储带小数部分的数据。(比float更加精确)
表示范围:-1.710^308~1.710^308(不需记忆)
精度:最长16位有效数字(是指16位10进制位)
表示方式:
按科学记数法存储,也就是需要存储“尾数”和“指数”
double xx = 8.246E20;8.246E20就是8.246乘以10的20次方,只需保存尾数(8.246)和指数(20)
double yy = 1.123456789;精度能取值到小数点后面16位,yy就等于1.123456789。
3. 常量
常量的值在程序运行过程中是不会改变的。常量可以分为以下三大类:
(1)数值型常量 (又分为①整型常量 ②实型常量)
(2)字符型常量
(3)符号常量
3.1 整型常量
整型常量就是直接使用的整型常数。主要有3种表达形式八进制、十六进制、十进制。
八进制:常数前加上‘0’进行修饰,包含数字0~7。
十六进制:常数前加上‘0x’进行修饰,包含数字0~9和字母A-F。
十进制:不需要添加前缀,包含数字0~9.
3.2 实型常量
实型又叫浮点型,由整数部分和小数部分组成。实时有两种方式表示:
Num1 = 1.23456;//科学计数方式
Num2 = 9.87654e2;//指数方式,Num2值为987.654
3.3 字符型常量
3.3.1 字符常量
使用单括号引起一个字符,这种形式就是字符常量。如'A'、'#'、'b'(''是定界符,不属于字符常量的一部分)
注意:字符常量区是分大小写的。'A'与'a'是不一样的
3.3.2 字符串常量
字符串常量是一组双括号引起来的字符序列。如果字符串中一个字符都没有,则称其为空串,空串字符串成长度为0。例如,"MyCLanguage"和"Fun Day"都是字符串常量。
注意:C语言存储字符串常量时,系统会在字符串末尾自动加一个"\0"作为字符串的结束标志。
3.4 转义字符
转义字符在字符常量中是一种特殊的字符。转义字符以反斜杠""开头,常见的转义字符如下表:
| 转义字符 | 意义 |
|---|---|
| \n | 回车换行 |
| \t | 横向制表 |
| \v | 竖向跳格 |
| \b | 退格 |
| \r | 回车 |
| \\ | 反斜杠“\” |
| \a | 鸣铃 |
| \' | 单引号 |
3.5 符号常量
符号常量用来以一个符号名代替固定的常量值,可以为编程和阅读带来方便。
例如:常用符号常量表示圆周率:
#include <stdio.h>
#definf PAI 3.14
4. 变量
程序在运行时,需要保存很多内容常常变化的数据。比如,射击类游戏不断变化的“分数”。变量中的值,是可以改变的。
4.1 变量的实质
变量,不是数学中的变量。变量是一个内存中的一块存储空间,即一小块内存。
内存的存储单位- “字节”
内存的记本存储单位,是字节。
一个字节,包含8位二进制位。
4.2 变量名的命名规范
变量由一个类型名与若干所要说明的变量名组成,变量名的命名规范如下:
只能包含3种字符(数字、q大/小写字母,下划线)
不能以数字开头(即,只能以字母或下划线开头)
不能和“关键字”同名(C语言内部已经使用的“名称”),比如类型名“int”。
变量名的最大长度,C语言没有规定。最大长度限制,取决于编译器,一般都在32以上。
变量名,最好能“顾名思义”,不要使用汉语拼英!
比如:用name表示姓名,用power表示功率。
4.3 变量命令的风格
-
intstudent_age;下划线隔开风格 -
intstudentAge;驼峰命名风格
4.4 变量的定义
C语言中,所有变量都必须先定义后使用,定义通常放在函数开始处的可执行语句之前。定义用于声明变量的性质,它由一个类型名与若干所要说明的变量名组成。
实例:
int x;
定义了一个变量,变量名是x,属于int类型,此时变量x还没有确定的值。
int y = 100;
定义了一个int类型变量,变量名是y,变量的值是100。
理解:
变量保存在内存中
v变量是一个“盒子”
变量名是这个盒子的名称
变量的值,是盒子内存储的物品
5. scanf输入语句
5.1 scanf说明
scanf函数是格式化输入函数,用于接受从键盘输入的数据(给程序中的变量赋值),用户输入数据完成后,按回车键(Enter)来结束输入。
用法:
scanf("输入控制符",输入参数);
scanf("%d",&a);
%d的函数是将从键盘输入的字符转化为一个十进制的数字。
&是一个取地址运算符,“&a”就是取地址a,会将数据存入以“a”的地址为地址的变量中。
scanf("非输入控制符 输入控制符",输入参数);
scanf("b=%d",&b);
在scanf中,所有的“非输入控制符”都要原样输入,故输入时必须输入“b=”在前面,如:b=175
5.2 输入机制
使用scanf函数时,系统会根据“输入控制符”的格式去输入缓存区读取数据,若输入缓存区为空,则会让用户从键盘输入一些数据,遇到“回车符”时,会将输入的数据传到一个输入缓存区(类似于一个内存仓库),然后再根据“输入控制符”的格式读取数据。
空白字符有:空格,制表符(Table),回车符(Enter)
5.3 各类型输入
输入整数
输入字符的格式用“%d”表示,用于int变量的输入。
int a; //定义一个整型变量
scanf("%d", &a); //输入100
printf("a=%d\n", a); //输出a=100
输入字符
输入字符的格式用“%c”表示,用于char变量的输入。
注意:“%c”只会读取一个字符,若输入字符大于一个,仍只会读取一个字符,将剩余的字符留在输入缓存区,会影响后续scanf函数的使用。
char c; //定义一个字符型变量
scanf("%c", &c); //输入 100 ,实际只读取了字符1
printf("%c\n", c); //输出 1
printf("%d\n", c); //输出49, 字符'1'的ASCII值就是49
其他插入数据类型的输入输出函数:
getchar(输入字符)
char c;
c = getchar();//输入1个字符putchar(输出字符)
char c = 'a';
putchar(c);//输出1个字符getc(输入字符)
char c;
c = getc(stdin);//输入1个字符stdin表示“标准输入设备”,默认是键盘,
putc(输出字符)
char c = 'b';
putc(c, stdout);//输出1个字符stdin表示“标准输出设备”。
输入float类型浮点数
输入float类型浮点数用“%f”表示。
float x; //定义一个单精度浮点型变量
scanf("%f", &x); //输入3.14
printf("x=%f", x); //输出 x=3.140000
输入double类型浮点数
输doublet类型浮点数用“%lf”表示。
double x; //定义一个双精度浮点型变量
scanf("%lf", &x); //输入3.141592666666
printf("x=%lf", x); //输出 x=3.140000
printf("x=%.15lf", x); //输出 x=3.141592666666000
(%后面用“.”加数字可以设置保留几位有效数字)
注意:
输入double类型变量的值, 必须使用"%lf" 而不是"%f", 否则输入失败。
输出double类型变量的值,则可以使用"%lf"或者"%f", 没有区别。
3.4 scanf 注意
-
当使用%s读取字符串串时,遇到空白字符(空格、制表符,回车符)就结束。
-
使用%c读取字符时,任何字符都能读取,但只读一个。
-
使用%d、%f、%lf 读取int、float、double类型数据时,会自动转换成对应数据。但是如果遇到其他字符(比如a),就会读取失败。