1.常量与变量
1.1 数据类型
数据类型的作用:编译器预算对象(变量)分配的内存空间大小。
1.2 常量
- 在程序运行过程中,其值不能被改变的量
- 常量一般出现在表达式或赋值语句中
整型常量 | 100,200,-100,0 |
---|---|
实型常量 | 3.14 , 0.125,-3.123 |
字符型常量 | ‘a’,‘b’,‘1’,‘\n’ |
字符串常量 | “a”,“ab”,“12356” |
1.3 变量
-
变量的定义
- 在程序运行过程中其值可以改变
- 变量在使用前必须先定义,定义变量前必须有相应的数据类型
-
标识符命名规则:
- 标识符不能是关键字
- 标识符只能由字母、数字、下划线组成
- 第一个字符必须为字母或下划线
- 标识符中字母区分大小写
-
变量的特点
- 变量在编译时为其分配相应的内存空间
- 可以通过其名字和地址访问相应内存
-
声明和定义的区别
- 声明变量不需要建立存储空间,如:
extern int a;
- 定义变量需要建立存储空间,如:
int b;
- extern 关键字只做声明,不能做任何定义,没有空间就不可以赋值。
- 从广义的角度来讲声明中包含着定义,即定义是声明的一个特例,所以并非所有的声明都是定义:
int b
它既是声明,同时又是定义- 对于
extern b
来讲它只是声明不是定义
- 一般的情况下,把建立存储空间的声明称之为“定义”,而把不需要建立存储空间的声明称之为“声明”。
- 声明变量不需要建立存储空间,如:
1.4 示例
#include <stdio.h>
//声明了一个常量,名字叫MAX,值是10,常量的值一旦初始化不可改
#define MAX 10
int main()
{
//定义了一个变量,其类型为int,名字叫a
int a;
//extern 告诉编译器有这个变量,并没有定义,不能赋值
//声明变量 b 并没有开辟空间
extern short b;
//可以将常量的值赋给变量
a = MAX;
//%d以整型输出
printf("%d\n",a);
//const 修饰的变量,不能通过变量名去修改变量的内容
const int c = 100;
printf("%d\n",c);
}
2. 整数
2.1 整型变量的输入和输出
打印格式 | 含义 |
---|---|
%d | 输出一个有符号的10进制int类型 |
%o(字母o) | 输出8进制的int类型 |
%x | 输出16进制的int类型,字母以小写输出 |
%X | 输出16进制的int类型,字母以大写输出 |
%u | 输出一个10进制的无符号数 |
#include <stdio.h>
int main()
{
int a;
printf("请输入a的值:");
//scanf() 从键盘(标准输入)获取数据
//不能加"\n"
scanf("%d",&a);
printf("a = %d\n",a);
printf("a = %o\n", a);
printf("a = %x\n", a);
printf("a = %X\n", a);
printf("a = %u\n", a);
}
2.2 short、int、long、long long
数据类型 | 占用空间 |
---|---|
short(短整型) | 2字节 |
int(整型) | 4字节 |
long(长整形) | Windows为4字节,Linux为4字节(32位),8字节(64位) |
long long(长长整形) | 8字节 |
注意:
- 需要注意的是,整型数据在内存中占的字节数与所选择的操作系统有关。虽然 C 语言标准中没有明确规定整型数据的长度,但 long 类型整数的长度不能短于 int 类型, short 类型整数的长度不能长于 int 类型。
- 当一个小的数据类型赋值给一个大的数据类型,不会出错,因为编译器会自动转化。但当一个大的类型赋值给一个小的数据类型,那么就可能丢失高位。
整型常量 | 所需类型 |
---|---|
10 | 代表int类型 |
10l, 10L | 代表long类型 |
10ll, 10LL | 代表long long类型 |
10u, 10U | 代表unsigned int类型 |
10ul, 10UL | 代表unsigned long类型 |
10ull, 10ULL | 代表unsigned long long类型 |
打印格式 | 含义 |
---|---|
%hd | 输出short类型 |
%d | 输出int类型 |
%ld | 输出long类型 |
%lld | 输出long long类型 |
%hu | 输出unsigned short类型 |
%u | 输出unsigned int类型 |
%lu | 输出unsigned long类型 |
%llu | 输出unsigned long long类型 |
#include <stdio.h>
int main()
{
short a = 10;
int b = 100;
long c = 1000L;
long long d = 10000LL;
//sizeof不是函数,所以不需要包含任何头文件,它的功能是计算一个数据类型的大小,单位为字节
printf("short长度 = %u\n", sizeof(a));
printf("int长度 = %u\n", sizeof(b));
printf("long长度 = %u\n", sizeof(c));
printf("long long长度 = %u\n", sizeof(d));
printf("short a = %hd\n",a);
printf("int b = %d\n", b);
printf("long c = %ld\n", c);
printf("long long d = %lld\n", d);
unsigned short a2 = 20u;
unsigned int b2 = 200u;
unsigned long c2 = 2000ul;
unsigned long long d2 = 20000ull;
printf("unsigned short a = %hu\n",a2);
printf("unsigned int a = %u\n", b2);
printf("unsigned long a = %lu\n", c2);
printf("unsigned long long a = %llu\n", d2);
return 0;
}
3.字符型
字符型变量用于存储一个单一字符,在 C 语言中用 char 表示,其中每个字符变量都会占用 1 个字节。在给字符型变量赋值时,需要用一对英文半角格式的单引号(' ')把字符括起来。
字符变量实际上并不是把该字符本身放到变量的内存单元中去,而是将该字符对应的 ASCII 编码放到变量的存储单元中。char的本质就是一个1字节大小的整型。
3.1 字符变量的输入和输出
#include <stdio.h>
int main()
{
char ch;
printf("请输入ch的值:");
scanf("%c",&ch);
//打印输入的字符
printf("ch = %c\n",ch);
//打印输入字符的ASCII的值
printf("ch = %d\n", ch);
char ch1 = ' ';
//空字符的ASCII值为32
printf("空字符:%d\n",ch1);
//大小写转换
printf("A = %c\n",'a'-ch1);
printf("a = %c\n", 'A' + ch1);
return 0;
}
3.2 转义字符
转义字符 | 含义 | ASCII码值(十进制) |
---|---|---|
\a | 警报 | 007 |
\b | 退格(BS) ,将当前位置移到前一列 | 008 |
\f | 换页(FF),将当前位置移到下页开头 | 012 |
\n | 换行(LF) ,将当前位置移到下一行开头 | 010 |
\r | 回车(CR) ,将当前位置移到本行开头 | 013 |
\t | 水平制表(HT) (跳到下一个TAB位置) | 009 |
\v | 垂直制表(VT) | 011 |
\ | 代表一个反斜线字符"" | 092 |
' | 代表一个单引号(撇号)字符 | 039 |
" | 代表一个双引号字符 | 034 |
? | 代表一个问号 | 063 |
\0 | 数字0 | 000 |
\ddd | 8进制转义字符,d范围0~7 | 3位8进制 |
\xhh | 16进制转义字符,h范围09,af,A~F | 3位16进制 |
4. 浮点型:float、double
实型变量也可以称为浮点型变量,浮点型变量是用来存储小数数值的。在C语言中, 浮点型变量分为两种: 单精度浮点数(float)、 双精度浮点数(double), 但是double型变量所表示的浮点数比 float 型变量更精确。
由于浮点型变量是由有限的存储单元组成的,因此只能提供有限的有效数字。在有效位以外的数字将被舍去,这样可能会产生一些误差。
不以f结尾的常量是double类型,以f结尾的常量(如3.14f)是float类型。
#include <stdio.h>
int main()
{
//传统方式赋值
float a = 3.14F;
double b = 3.14F;
//打印时默认输出6位小数点
printf("a = %f\n",a);
printf("b = %lf\n", b);
//科学法赋值
a = 3.2E3F;//3.2*1000
printf("a = %f\n", a);
a = 3.2E-3F;//3.2*0.001
printf("a = %f\n", a);
//精度损失
a = 3.1415926;
//float类型能够保证的精度是7位有效数字
printf("a = %.8f\n",a);//3.14159250
//double类型能够保证的精度是15位有效数字
b = 3.1415926535897939;
printf("b = %.16lf\n",b);//3.1415926535897940
return 0;
}
5. 类型限定符
限定符 | 含义 |
---|---|
extern | 声明一个变量,extern声明的变量没有建立存储空间。 extern int a;//变量在定义的时候创建存储空间 |
const | 定义一个常量,常量的值不能修改。 const int a = 10; |
Volatile | 防止编译器优化代码 |
register | 定义寄存器变量,提高效率。register是建议型的指令,而不是命令型的指令,如果CPU有空闲寄存器,那么register就生效,如果没有空闲寄存器,那么register无效。 |
6. 字符串
- 字符串是内存中一段连续的char空间,以'\0'(数字0)结尾。
- 字符串常量是由双引号括起来的字符序列,如“china”、“C program”,“$12.5”等都是合法的字符串常量。
打印格式 | 对应数据类型 | 含义 |
---|---|---|
%d | int | 接受整数值并将它表示为有符号的十进制整数 |
%hd | short int | 短整数 |
%hu | unsigned short | 无符号短整数 |
%o | unsigned int | 无符号8进制整数 |
%u | unsigned int | 无符号10进制整数 |
%x,%X | unsigned int | 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF |
%f | float | 单精度浮点数 |
%lf | double | 双精度浮点数 |
%e,%E | double | 科学计数法表示的数,此处"e"的大小写代表在输出时用的"e"的大小写 |
%c | char | 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 |
%s | char * | 字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符) |
%p | void * | 以16进制形式输出指针 |
%% | % | 输出一个百分号 |
printf附加格式:
字符 | 含义 |
---|---|
l(字母l) | 附加在d,u,x,o前面,表示长整数 |
- | 左对齐 |
m(代表一个整数) | 数据最小宽度 |
0(数字0) | 将输出的前面补上0直到占满指定列宽为止不可以搭配使用- |
m.n(代表一个整数) | m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度,用于说明输出的实型数的小数位数。对数值型的来说,未指定n时,隐含的精度为n=6位。 |
#include <stdio.h>
int main()
{
char ch1;
char ch2;
char ch3;
int a;
int b;
double c;
printf("请输入ch1的字符:");
ch1 = getchar();
printf("ch1 = %c\n", ch1);
getchar(); //测试此处getchar()的作用
printf("请输入ch2的字符:");
ch2 = getchar();
////putchar只有一个参数,就是要输出的char
putchar(ch2);
putchar('\n');
getchar(); //测试此处getchar()的作用
printf("请输入ch3的字符:");
scanf("%c", &ch3);
printf("ch3 = %d\n", ch3);
printf("请输入a的值:");
scanf("%d", &a);
printf("a = %d\n", a);
printf("%ld, %lx, %lo\n", a, a, a);//%ld, %lx, %lo分别表示以十进制,十六进制,八进制输出a的值
printf("请输入b的值:");
scanf("%d", &b);
printf("b = %d\n", b);
printf("b = '%6d'\n", b);//数据宽度为6,不足部分用空格填充
printf("b = '%-6d'\n", b);//左对齐且数据宽度为6,不足部分用空格填充
printf("b = '%06d'\n", b);//数据宽度为6,不足部分用0填充
printf("b = '%-06d'\n", b);//左对齐且数据宽度为6,不足部分用0填充
printf("请输入c的值:");
scanf("%lf", &c);
printf("c = %lf\n", c);
printf("c = \'%-10.3f\'\n", c);//数据宽度为10,小数点后保留3位,不足部分用空格填充;
return 0;
}
标签:字符,变量,int,数据类型,unsigned,long,printf
From: https://www.cnblogs.com/xyzsstudy/p/18148261