数据类型分类:

关键字:
| auto | const | double | float | int | short | struct | unsigned |
|---|---|---|---|---|---|---|---|
| break | continue | else | for | long | signed | switch | void |
| case | default | enum | goto | register | sizeof | typedef | volatile |
| char | do | extern | if | return | static | union | while |
- 整型 - 100,125,-100,0
- 实型 - 3.14,0.125,-3.789
- 字符型 - ‘a’,‘b’,‘2’
- 字符串型 - “a”,“ab”,“1c34”
变量名、变量值和存储单元的关系:

例如:
sum,_total,month,Student_name,lotus_1_2_3,BASIC,li_ling
是正确的。
而M.D.John,¥123,3D64,a>b
是错误的。
定义整型变量时要使用关键字int:
#include
#define PI 3+2
int main()
{
int i = PI * 2;
printf("i = %d\n",i);
}
最终输出的结果是7,原因是符号常量PI是直接替换的效果,即3+2*2=7,而不是8。
| 小数形式 | 指数形式 |
|---|---|
| 0.123 | 3e-3(为 3 × 1 0 − 3 3×10^{-3} 3×10−3,即0.003) |
正确示例:1e3、1.8e-3、-123e-6、-.1e-3。
错误实例:e3、2.1e3.5、.e3、e。
‘abc’、“a”、" "是错误的字符型常量。
| 转义字符 | 作用 |
|---|---|
| \n | 换行 |
| \b | 退格 |
| \\ | 反斜杠 |
#include
int main()
{
char c = 'A';
printf("%c\n",c+32);
printf("%d\n",c);
}
例如,字符串型常量“CHINA”在内存中占用的内存单元不是5个字符,而是6字符,即大小为6个字节,最后一个字符为’\0’。
在内存中的存储结果:





#include
//强制类型转换
int main()
{
int i = 5;
float f = i / 2;//2.0 - 左右操作数都是整型,这里做整型运算,商为2余数1
//类型强制转换
float k = (float)i / 2;//2.5 - 表达式的类型为浮点型
printf("%f\n", f);//2.0
printf("%f\n", k);//2.5
return 0;
}
j得到的值为2,k得到的值是2.5,因为当我们整数做除法时,默认进行整除,要得到小数,需要首先进行强制类型转换操作。
#include
int printf(const char *format, ...);
int age = 21;
printf("Hello %s, you are %d years old\n","Bob",age);
输出:Hello Bob, you are 21 years old
| 代码 | 格式 |
|---|---|
| %c | 字符 |
| %d | 带符号整数 |
| %f | 浮点数 |
| %s | 一串字符 |
| %u | 无符号整数 |
| %x | 无符号十六进制数,用小写字母 |
| %X | 无符号十六进制数,用大写字母 |
| %p | 一个指针 |
| %% | 一个’%'符号 |
位于%和格式化命令之间的一个整数被称为最小字段宽度说明符,通常会加上空格来控制格式。
#include
//练习printf
//int main()
//{
// int age = 21;
// printf("Hello %s, you are %d years old\n", "Bob", age);
// return 0;
//}
int main()
{
int i = 10;
float f = 96.3;
printf("student number =%d score=%f\n", i, f);
printf("student number =%3d score=%5.2f\n",i,f);//%3d 占三个位置 - 对齐 //%5.2f 5 - 整体占五个位置 2 - 小数点后保留两位
printf("student number =%-3d score=%-5.2f\n",i,f);//默认是右对齐,加一个负号 - %-3d - 左对齐
i = 100;//第一次是定义,再次使用不需要定义
f = 98.21;
printf("student number =%d score=%f\n", i, f);//上下不对齐
return 0;
}
运行结果:

| 进制 | 基数 |
|---|---|
| 二进制 | 0和1 |
| 十进制(%d) | 0-9 |
| 八进制(%o) | 0-7 |
| 十六进制(%x) | 0-9和a-f |
int型常量的大小为4字节,即32位。
0是符号位。#include
int main()
{
int i = 123;
//二进制 0000 0000 0000 0000 0000 0000 0111 1011
printf("%d\n", i);//123
printf("%o\n", i);//173
printf("%x\n", i);//7b
return 0;
}

小技巧:


#include
//scanf用来读取标准输入,scanf把标准输入内的内容,需要放到某个变量空间里,因此变量必须取地址
//scanf会阻塞,是因为标准输入缓冲区是空的
//scanf %d %f 发现里边有\n空格,忽略
//scanf %c 不忽略内容
int main()
{
int i = 10;
char c;
float f;
scanf("%d", &i);//注意一定要取地址
printf("i = %d\n", i);//把标准缓冲区中的整型数读走了
//rewind(stdin);//清空标准输入缓冲区
//scanf("%c", &c);//读取走了转义字符\n!!!
//printf("c = %c\n", c);//没有等待输入c - 输出了换行!!!
scanf("%f", &f);//忽略转义字符\n
printf("f = %f\n", f);
//fflush(stdin);//清空标准输入缓冲区
return 0;
}//直接运行程序卡住 - 阻塞
为什么第二个scanf函数不会被阻塞呢?
但是如果将注释的 fflush(stdin)打开,就会发现第二个scanf(“%c”,&c)会阻塞,这是什么原因呢?
#include
int main()
{
int i,ret;//ret是scanf匹配成功的个数
char c;
float f;
//输入100 a 98.2
//ret = scanf("%d%c%f", &i, &c, &f);//"%d%c%f"之间不加空格 i=100,c= ,f=0.00
//ret = 2 只匹配成功了两个,因为&c不会忽略任何字符 - %d读走100后,%c读走空格,%f读a时报错返回,所以只匹配成功两个。
ret = scanf("%d %c%f", &i, &c, &f);//要在%c之前加个空格
printf("i=%d,c=%c,f=%f\n", i, c, f);
return 0;
}
格式字符串中的空白字符的含义(来自http://www.cplusplus.com/reference/cstdio/scanf/?kw=scanf):
空白字符:该函数将读取并忽略在下一个非空白字符之前遇到的任何空格字符(空格字符包括空格,换行符和制表符 -
请参阅isspace).格式字符串中的单个空格验证从流中提取的任何数量的空白字符(包括无).
当您的代码是:scanf("%d%c", &x, &ch)
- 1
然后你进入
10
- 1
在你的控制台:
10被读取并存储在x.- 读取并存储换行符
ch.
如果你使用scanf("%d %c", &x, &ch)
- 1
然后你进入
10
- 1
10被读取并存储在x.- 消费换行符和其他空白字符.程序等待非空白字符.输入一行输入并且该行中至少存在一个非空白字符后,将读入该行的第一个非白色字符
ch.这是因为stdin通常是行缓冲的.
用单引号括起来的一个字符是字符型常量,且只能包含一个字符! 例如, ‘a’、‘A’、‘1’。
转义字符:以“\”开头的特殊字符,转义字符可用来表示回车、退格等功能键。
字符型变量使用关键字char进行定义,一个字符型变量占用1字节大小的空间。
一个字符常量把该字符的ASCII码值放到存储单元中。
字符型数据和整型数据之间可以通用。
字符型数据既可以以字符形式输出,又可以以整数形式输出,还可以通过运算获取想要的各种字符:
字符型变量,用%c打印输出时得到字符,用%d打印输出时得到ASCII码值。
将小写字母转换为大写字母时,由ASCII码表发现小写字母与大写字母的差值为32,因此将a减去32就可以得到大写字母A。





位于%和格式化命令之间的一个整数被称为最小字段宽度说明符,通常会加上空格来控制格式。
| 进制 | 基数 |
|---|---|
| 二进制 | 0和1 |
| 十进制(%d) | 0-9 |
| 八进制(%o) | 0-7 |
| 十六进制(%x) | 0-9和a-f |
int型常量的大小为4字节,即32位。
0是符号位。十进制数转换为二进制的方法:

小技巧: