整型
int 类型
没有小数部分的数
大小
4字节
声明&赋值
八进制:以0开头
十进制:正常输入
十六进制:以0X或0x开头
int i; //声明
i=10; //1.通过 = 赋值
scanf("%d",&i); //2.通过函数获取值(例如:scanf())
初始化
在变量声明的同时,为变量赋一个初始值。
int i=10; //初始化,十进制
int eight=020; //八进制
int sixteen=0xff; //十六进制
打印int值
#include<stdio.h>
int main()
{
int i=25;
printf("%d",i); //十进制,常用
printf("%o",i); //八进制
printf("%x",i); //十六进制
printf("%#o",i); //带八进制标识,八进制
printf("%#x",i); //带十六进制标识,十六进制
return 0;
}
其他类型整形
short s=128; //短整型——2字节,适用于小于int的数
//显示 %hd
long l=1000; //长整型——4字节,适用于大于int的数
//显示 %ld
long long ll=100000; //更长的整形——8字节
//显示 %lld
unsigned int u = 123;//无符号位 适用于计数(无负数)
//unsigned (short, int, long, long long)
//显示 %hu,%u,%lu,%llu
整形溢出
当数值,超过整型类型表数范围时。(属于未定义行为)
代表性行为:循环。(可以理解为圆圈、钟表)
#include<stdio.h>
int main()
{
int i=2147483647;
unsigned int ui=4294967295;
printf("%d %d %d\n",i,i+1,i+2);
ptintf("%u %u %u\n",ui,ui+1,ui+1);
return 0;
}
输出:
2147483647 -2147483648 -2147483647
4294967295 0 1
字符型
char类型
char类型用于存储字符,从技术层面,char类型是整数类型。计算机使用数字编码来处理字符,常用编码为ASCII编码。
大小
1字节
声明&赋值
以整数对char赋值时,为字符对应ASCLL码值!
char c,ch; //声明
c='a'; //1.赋值,单引号括起为字符,其内只能有一个字符
c=65; //1.1 c='A'
scanf("%c",&c) //2.通过函数赋值
打印字符值
#include<stdio.h>
int main()
{
char c='a';
printf("%c",c); //使用%c转换说明,打印char类型
return 0;
}
有符号还是无符号
有些C编译器将char实现为有符号类型,(-128~127),有些实现为无符号类型,(0~255)。
根据C90标准,C语言允许在关键字char前面使用signed或unsigned。这样无论编译器默认char是什么类型,singed char表示有符号类型,而unsigned char表示无符号类型(处理小整数时,很有用)。如果只是char处理字符,则char前无需使用任何修饰符。
字母对应ASCII
A~Z 65~90
a~z 97~122
#include<stdio.h> //字母大小写转换
int main()
{
char c;
scanf("%c",&c); //输入字符值
if(c<'Z'&&c>'A')
printf("%c",c+32); //大写转小写
else if(c<'z'&&c>'a')
printf("%c",c-32); //小写转大写
else
printf("输入不为字母")
}
浮点型
浮点值的上溢和下溢
上溢:计算导致数字过大,超过当前类型的表数范围。
在这种情况下,会给一个表示无穷大的特定值
下溢:超过表数的最小值。
造成有效数字丢失
float类型
单精度,必须至少精确表示小数点后六位有效数字
大小
4字节
声明&赋值
浮点常量,系统默认为double类型,计算后会的值会截断为float
可在浮点数后,加上f或F可覆盖默认设置
float f; //声明
f=1.2f; //1.赋值
scanf("%f",&f); //2.通过函数赋值
double类型
双精度,至少13位有效数字
减小了舍入误差
大小
8字节
声明&赋值
double d; //声明
d=3.1415926; //1.赋值
scanf("%lf",&d); //2.通过函数
输入&输出
输入%lf
输出%f
printf()函数中没有%lf(标准定义)
float&double
float运算快于double
double精度大于float
(详解见数据存储)
#include<stdio.h>
#define _CRT_SECURE_NO_WARNINGS
int main()
{
float f1, f2,f3;
f1 = 92.0;
f2 = 22.3;
f3 = f1 * f2;
double d1, d2,d3;
d1 = 92.0;
d2 = 22.3;
d3 = d1 * d2;
printf("%.4f*%.4f=%.3f\n", f1, f2, f3);
printf("%.4f*%.4f=%.4f\n", d1, d2, d3);
return 0;
}
long double类型
可以满足比double更高的精度要求
大小
8字节
声明&赋值
long double ld; //可以满足比double更高的精度要求
ld=5.32e-5; //1.赋值
scanf("%lf",&ld); //2.通过函数
打印浮点值
#incldue<stdio.h>
int main()
{
float f=3.1;
double d=3.14;
long double ld=3.14159;
printf("%f %e\n",&f,&f); //使用%f转换说明,打印float、double类型
printf("%f %e\n",&d,&d); //使用%e转换说明,打印指数计数法的浮点数
printf("%lf %le\n",&ld,&ld); //使用%lf转换说明,打印long double类型
//使用%le转换说明,打印指数计数法的浮点数
return 0;
}
类型大小输出
#include<stdio.h>
int main()
{
printf("%d\n", sizeof(char));
printf("%d\n", sizeof(short));
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(long));
printf("%d\n", sizeof(long long));
printf("%d\n", sizeof(float));
printf("%d\n", sizeof(double));
printf("%d\n", sizeof(long double));
return 0;
}
变量&常量
变量:在整个程序运行过程中可能会发生变化。
常量:在整个程序运行过程中不会发生变化。
变量
- 局部变量
- 全局变量
#include<stdio.h>
int global=520; //全局变量
int main()
{
int local=521; //局部变量
int global=1314; //局部变量
printf("global=%d\n",global);
return 0;
}
输出
global=1314
- 局部变量和全局变量同名时,优先使用局部变量;
- 变量在同一范围(作用域)内只能声明一次;
作用域(scope)
程序设计概念,通常来说,一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域。
- 局部变量的作用域是变量所在的局部范围。
- 全局变量的作用域是整个工程。
生命周期
变量的生命周期指的是变量的创建到变量的销毁之间的一个时间段
- 局部变量的生命周期是:进入作用域生命周期开始,出作用域生命周期结束。
- 全局变量的生命周期是:整个程序的生命周期。
常量
- 字面常量
- const 修饰的常变量(只读)
- #define 定义的标识符常量
- 枚举常量
#include<stdio.h>
#define PI 3.14 //#define定义的标识符常量
enum Sex //MALE、FEMALE 为枚举常量
{
MALE,
FEMALE,
};
int main()
{
3.14 //字面常量
100; //字面常量
const char c='a'; //const修饰的常量
printf("%f",PI*2);
return 0;
}
最难不过坚持!