常量
C 语言中,程序执行时值不变的量称为常量
1.直接常量(也称字面常量):数据直接表现出来
如:3.14、26、'c'、2.1E3等
2.符号常量: 用一个标识符表示在程序中出现的常量(这样可以利于修改)
符号常量可以用两种方法来定义:
//第一种:宏定义#define
#include <stdio.h>
//#define 符号常量名 宏表达式
#define PI 3.14 //在预处理阶段将程序中所有符号PI替换为3.14
//第二种 :const语句定义符号常量
//const 类型 符号常量=表达式;
const float PI=3.14;
变量
在程序过程中,值可以变化的量
在C语言中个,变量要求先声明后使用,同时也可以在声明的同时进行初始化,未初始化的变量是一个不确定的随机值。
数据类型
基本数据类型(不可以再分解成其他的数据类型)
1.整数类型int(即没有小数部分的数据)
如:10、256、10648等
C语言中根据计算机的字长的不同,为int类型分配的存储空间也不一样。同时,还可以给int添加各种类型的修饰符,改变int类型的含义。以32位计算机为例
变量类型 | 关键字 | 字节 | 取值范围 | 输出格式 |
---|---|---|---|---|
有符号短整型 | short | 2 | -32768~32767 | %hd |
无符号短整型 | unsigned short | 2 | 0~65535 | %hu |
有符号整型 | int | 4 | -2147483648~214783647 | %d |
无符号整型 | unsigned int | 4 | 0~429467295 | %u |
有符号长整型 | long | 4 | -2147483648~214783647 | %ld |
无符号长整型 | unsigned long | 4 | 0~429467295 | %lu |
特长整型 | long long | 8 | -9223372036854775808~9223372036854775807 | %lld |
无符号特长整型 | unsigned long long | 8 | 0~18446744073709551615 | %llu |
计算机中都是以补码来保存数据,以有符号短整型数为例:
1.两个字节用原码表示时:
最大正整数为 0 111 1111 1111 1111,即+(2的15次方-1)
最小负整数为 1 111 1111 1111 1111,即-(2的15次方-1)
存在+0和-0;
2.用补码表示时:
-0原码表示为-1000 0000 0000 0000,补码表示为0000 0000 0000 0000与+0的补码0000 0000 0000 0000相同。即在补码中“0”只有一种表示形式。因此补码表示的范围可扩展到负的2的15次方。
最大负整数为(1 111 1111 1111)补码,即-1;
最小负整数为(1 000 0000 0000)补码,即-32768
整型常量的表达形式
后缀
a1=100L,a2=100l; //L或l表示一个long型常数
a3=10LL,a4=100ll; //LL或ll表示一个long long型常数
/*编译器一般自动识别程序中出现的整数常量的类型,使用占空间最少的数据类型保存整型常量,如数字1200,采用int类型存储,数字24674665575使用long型存储
在使用LL或L可以告诉编译器用更大的内存空间存储一个较小的整数*/
b1=3U,b2=3u; //U或u表示无符号的整数
b3=10UL; //u和L可以组合使用
前缀
c=056; //前缀0 表示这个56这个数为八进制数
printf("%#o",c); //以八进制的方式输出
d=0X34; //前缀0X表示34这个数为十六进制数,A`F用大写字母表示
f=0x34; //前缀表示34这个数字为十六进制数,a~f用小写字母表示
printf("%#x",f); //以十六进制输出,a~f用小写字母表示
printf("%#X",d); //以十六进制输出,a~f用大写字母表示
2.字符型char(字母、数字、和特殊字符)
存储:以ASCII码的方式存储,本质上还是一个整数
//声明并初始化
char ch='A';
char ch2=66; //当用数字给字符变量赋值时,不能超过其取值范围
/*有的编译器将char 作为有符号类型,这样取值范围为-128~127
而有的编译器将char作为无符号类型,这样的取值范围为0·255*/
char ch3='\n'; //转义字符
printf("%c %d\n",ch,ch);
printf("%c %d\n",ch2,ch2);
printf("%c %d\n",ch3,ch3);
return 0;
}
输出结果:
3.实数类型(带小数点的)
分类:
1.单精度类型float
C标准规定,float类型必须至少能表示6位有效数字,且取值范围至少是
10 -37 ~10 +37 .超过该有效位时,系统用近似的数表示。
2.双精度类型double
double类型和float类型的最小取值范围相同,但至少必须能表示10位有效数字。通常double类型的值至少有13位有效数字,超过了标准的最低位数规定。
3.长双精度类型 long double
满足比double类型更高的精度要求。不过,C只保证long double类型至少与double类型的精度相同
实型常量的表示方法
int main()
{
//小数表示法
const float a1=12.12345078;
const long double a2=124568.45767;
//指数表示法
const double b1=6.0E9;
const double b2=6.1e+8;
const double b3=6.1e-6;
printf("%f %f %f %f\n",a1,b1,b2,b3); //以小数形式输出
printf("%e %e %E %E\n",a1,b1,b2,b3); //以指数形式输出
printf("%g %g %G %G\n",a1,b1,b2,b3); //以指数和小数相对较短的输出
return 0;
}
运行结果
C编译器默认的实数类型是double类型。
若要按照float类型存储,可以添加后缀f(或F)
245.34f;
若要强制保存为long double 类型,添加后缀 l(或L)
238.356L
4.逻辑型(_Bool)
用于表示布尔值,即逻辑值true和false。因为C语言用值1表示true,值0表示false,所以_Bool类型实际上也是一种整数类型。
5.复数和虚数类型
C语言有3种复数类型:float_Complex、double_Complex和long double _Complex。例如,float _Complex类型的变量应包含两个float类型的值,分别表示复数的实部和虚部。类似地, C语言的3种虚数类型是float_Imaginary、double _Imaginary和long double _Imaginary。
#include<stdio.h>
int main()
{
_Bool c=0;
double _Complex a,b;
a=2+5i;
b=a+1+2i;
printf("%d\n",c);
printf("(%g+%gi)+(%g+%gi)=(%g+%gi)\n",a,(double _Complex)(1+2i),b);
return 0;
}
输出结果
6.枚举类型(enum)
枚举是一个被命名的整型常数的集合。
#include<stdio.h>
/*定义枚举类型格式:
enum 枚举名
{
标识名[=整型常数],
标识名[=整型常数],
标识名[=整型常数],
标识名[=整型常数],
} 枚举变量;
*/
enum weekday{
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
}; //SUNDAY值为0,编译器自动依次加一
int main()
{
enum weekday wk; //定义枚举变量
wk=FRIDAY; //使用枚举常量
printf("%d\n",wk);
wk=(enum weekday)6; //将一个整数值保存在枚举变量中
printf("%d\n",wk);
return 0;
}
输出结果:
基本数据类型进行函数传递参数时,都是把实参的值复制一份给形参,所以形参在函数里改变不影响原来函数里的值。
构造数据类型
由基本数据类型和其他数据类型构造而成的。
数组类型
结构类型(struct)
联合类型(union)
指针类型
特殊的,值表示内存地址的一个数据类型
空类型
关键字是void,主要用于:
1.对函数返回进行限定(函数不返回值时)
2.对函数的参数进行限定(函数没有参数时)