C语言的数据类型
在程序执行过程中,其值不发生改变的量
求圆的周长和面积。
#include <stdio.h>
#define PI 3.1415926
void main()
{
int r;
float circum,area;
r = 5;
circum = 2 * r * PI;
area = r * r * PI;
printf("circum=%f,area=%f\n",circum,area);
}
代表内存中具有特定属性的一个的存储单元,用来存放数据,也就是该变量的值。程序编译链接执行时由系统给每个变量名分配内存地址。
int a; //定义
a=10; //使用
例子:area PI _da adw_1_0
int i; //定义为整型变量
i = 10; //给 i 赋值整数10
十进制10的二进制为1010;八进制为012;十六进制为0xA
-10的绝对值的原码:
反码
反码再加1,得到补码
在存放整数的存储单元中,最左面的一位是符号位,该位为0表示该整数位正数,该位为1表示为负数。
类型 | 类型说明符 | 数的范围 | 字节数 |
---|---|---|---|
基本型 | int (16位) | -32768~32767 即-2^15 ~ (2^15-1) | 2 |
无符号基本型 | unsigned[int] (16位) | 0~65535 即0 ~ (2^16-1) | 2 |
基本型 | int (32位) | -2147483648 ~ 2147483647 即-2^31 ~ (2^31-1) | 4 |
无符号基本型 | unsigned[int] (32位) | 0~4294967295 即0 ~ (2^32-1) | 4 |
短整型 | short[int] (16位) | -32768~32767 即-2^15 ~ (2^15-1) | 2 |
无符号短整型 | unsigned short [int] (16位) | 0~65535 即0 ~ (2^16-1) | 2 |
长整型 | long [int] (32位) | -2147483648~2147483647 即-2^31 ~ (2^31-1) | 4 |
无符号长整型 | unsigned long [int] (32位) | 0~4294967295 即0 ~ (2^32-1) | 4 |
整型变量的定义
类型说明符 变量名标识符|,变量名标识符,...|;
int a,b,c; // a、b、c为整型变量
long x,y; // x、y为长整型变量
unsigned q; // q为无符号整型变量
➢注意:
#include <stdio.h>
void main()
{
int a,b;
a = 32767;
b = a + 1;
printf("%d\n",b);
}
a: 01111111 11111111 + 1 = 10000000 00000000 即-32768 ,正确答案应该是 32768,这就是溢出
注意现在的VS编译器默认int为32位,溢出效果看下图
实数(real number) ,又称浮点数(floating-point number) 。
类型 | 类型说明符 | 数的范围 | 字节 | 有效位 |
---|---|---|---|---|
单精度 | float | 1.2E-38 ~ 3.4E+38 | 4 | 7位有效位 |
双精度 | double | 2.3E-308 ~ 1.7E+308 | 8 | 15位有效位 |
长双精度型 | long double | 3.4E-4932 ~ 1.1E+4932 | 16 | 19位有效位 |
float a,b,c; // a、b、c为单精度实数
double x,y; // x、y为双精度实数
long double q; // q为长双精度实数
由于实型变量是用有限的存储空间存储的,因此能提供的有效数字总是有限的,在有效位以外的数字将被舍去,因此会产生舍入误差。
#include <stdio.h>
void main()
{
float a,b;
a = 123456.789e5;
b = a + 20;
printf("a = %f\n,b = %f\n",a,b);
}
理论值:
实际值:
原因:一个单精度实型变量只能保证的有效数字是7位,7位后面的数字是无意义的,并不准确地表示该数。7位是指整数部分 和 小数部分一共7位。
注意:在C程序中,应当避免将一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”小的数
以“\”开头的特殊字符
字符形式 | 含义 |
---|---|
\n | 换行,将当前位置移到下一行开头 |
\t | 水平制表(跳到下一个tab位置,8位为一个tab位置) |
\b | 退格,将当前位置移到前一列 |
\r | 回车,将当前位置移到本行开头 |
\f | 换页,将当前位置移到下页开头 |
\\ | 反斜杠字符 |
\‘ | 单撇号字符 |
\“ | 双撇号字符 |
\ddd | 1到3位8进制数所代表的字符 |
\xhh | 1到2位16进制数所代表的字符 |
除了“r”外,其余转义字符的跳格会取代原来屏幕上该位置显示的字符
char c1,c2;
c1 = 'a'; c2 = 'b';
将一个字符放到一个字符变量中,在内存单元中,是将该字符的相应的ASCII代码放到存储单元中。 如'a'的ASCI代码为97,'b'为98,内存变量c1、 c2的值如下图
效果: 字符数据以ASC1I码存储,与整数的存储形式类似,这样使字符数据和整型数据之间可以通用。因此,一个字符数据既可以以字符形式输出,也可以以整数形式输出,
向字符变量赋以整数。
#include <stdio.h>
void main()
{
char c1, c2;
c1 = 'a';
c2 = 'b';
printf("c1 = %c c2 = %c\n", c1, c2);
printf("c1 = %d c2 = %d\n", c1, c2);
}
练习 1、___是合法的用户自定义标识符。
(A)b-b
(B)float
(C)3sd
(D)_isw
2、以下所列的C语言常量中,错误的是___。
(A)0xFF
(B)1.2e0.5
(C)“asd”
(D)‘a’
3、下面四个选项中,均是不合法的浮点数的选项是___。
(A)160. 0.12 e3
(B)123 2e4.2 .e5
(C)-.18 123e4 0.0
(D)-.e3 .234 1e3
4、若有说明语句: char c='\729';则变量c___。
(A)包含1个字符
(B)包含2个字符
(C)包含3个字符
(D)说明不合法
答案
1、D 2、B 3、B 4、D