-
%.2f输出的浮点数只显示小数点后两位
-
42是整数,42.0是浮点数
-
最小的储存单位是位——bit(可以储存0或1),是计算机内存的基本构建块
-
字节——byte,1字节=8位(c语言有不同定义3.4.3),是常用的计算机储存单位
-
字——word,是设计计算机是给定的自然存储单位。8位机~64位机
-
char类型在C语言中占1字节,在Java中占2字节
-
声明:
int a;
int a,b,c; -
初始化变量——为变量赋值:
可在声明时直接初始化:int a = 10; -
用printf()函数时,转换说明的数量与待打印的值的数量要相同
-
- 0x或0X前缀表示16进制:0x10=16(10进制)
-
0前缀表示8进制:010=8, 0x10=020
数据类型 | 转换说明 | 备注 |
---|---|---|
int | %d /%i | 带符号的十进制形式整数 |
unsighed(int) | %u | 无符号的十进制形式整数 |
float | %f | 小数点形式的单精度实数,浮点数,十进制记数法(默认小数点后6位) |
double | %lf | 小数点形式的双精度实数,浮点数,十进制记数法(默认小数点后10位) |
char | %c | 字符 |
char[ ] | %s | 字符串 |
*p | %p | 指针(地址) |
%a或%A | 浮点数,十六进制数和p计数法 | |
%e %E | 标准指数形式的单、双精度实数,浮点数,e记数法 | |
%o | 无符号的八进制形式整数 | |
%x或%X | 无符号的十六进制形式整数 | |
%g | 选用宽度较小的格式输出实数,自动选择合适的表示方法 | |
%% | 打印% |
ps.虽然C语言允许用大小写的常量后缀,但是转换说明只能用小写
13. int为32位为前提
类型描述 | 关键字 | 字节数 | 取值范围 | 默认值 |
---|---|---|---|---|
字节型 | byte | 1 | -128 ~ 127 | 0 |
短整型 | short | 2 | -32768~32767 | 0 |
整型 | int | 4 | -2147483648~2147483647 | 0 |
长整型 | long | 8 | -9223372036854775808~9223372036854775808 | 0 |
单精度浮点型 | float | 4 | 大约+ - 3.40282347+38F | 0.0f |
双精度浮点型 | double | 8 | 大约1.79769313486231570E | 0.0e |
字符型 | char | 1 | 0 ~ 65535 | \u0000 |
布尔型 | boolean | 1 | true / false | false |
ps:
unsigned int / unsigned:0~4294967295
char类型在C语言中占1字节,在Java中占2字节
- 字符常量——用单引号括起来的单个字符
eg:
‘T’是一个字符
“T”是一个字符串
T是一个变量名
- 字符一数值的形式储存的所以可以用数字代码赋值,但最好使用字符常量,而不是数字代码。
eg:
char grade = 65;(65是int类型但它在char的表示范围内,所以此时不会出错,但不推荐,应该用‘A’代替65才好)
16.C将字符常量视为int而不是char
eg:
在int为32位、char为8位的ASCII 系统中,有下面的代码:
char grade = 'B';
本来'B'对应的数值66储存在32位的存储单元中,现在却可以储存在8位的存储单元中(grade)
利用字符常量的这种特性,可以定义一个字符常量'FATE',即把4个独立的8位ASCII 码储存在一个32位存储单元中。
如果把这样的字符常量赋给char类型变量grade,只有最后8位有效。因此,grade的值是'E'。
17.把转义序列赋给字符变量时,要用单引号把转义序列括起来
eg:
char 换行 = ‘\n’
双引号括起来的字符串,就无需用单引号
ps:.ASCII码时真的难
-
printf()转换说明决定数据的显示方式而不是存储方式。
-
默认情况下(没有后缀的)浮点型常量时double类型
eg:
7.0——double
7.0f——float
7.0L——long double (l也可以但比较容易和1混淆,推荐L)
3.10复习题:
复习题:
-
a. int类型,也可以是short类型或unsigned short类型。人口数是一个整数。
b. float类型,价格通常不是一个整数(也可以使用double类型,但实际上不需要那么高的精度)。c. char类型。
d. int类型,也可以是unsigned类型。 -
原因之一:在系统中要表示的数超过了int可表示的范围,这时要使用long类型。原因之二:如
果要处理更大的值,那么使用一种在所有系统上都保证至少是32位的类型,可提高程序的可移植性。 -
int 32_t——正好
int_least 32_t——最小
int_fast 32_t——最快 -
a. char类型常量(但是存储为int类型)
b. int类型常量
c. double类型常量 默认情况下(没有后缀的)浮点型常量时double类型
d. unsigned int类型常量,十六进制格式 八进制和十六进制整型,系统优先解释为无符号类型;
e.double类型常量 默认情况下(没有后缀的)浮点型常量时double类型 -
找出程序中的错误;
#include<stdio.h>
int main()
{
float g, h;
float tax, rate;
rate = 0.08;
g = 1.0e5;
tax = rate * g;
h = g + tax;
printf("You owe $%f plus $%f in taxes for a total of $%f.\n",g,tax,h);
return 0;
}
-
写出下列常量在声明中使用的数据类型和在printf()中对应的转换说明。
-
0x3是用16进制表示值
%x不带前缀0x
当八进制和十六进制数据需要显示前面的 0和 0x时,要使用 %#o和 %#x 转换说明符。
为了显示大写 X,转换说明中也需要使用大写 X。即 %#X -
0x5.b6p12 是浮点类型数据的p记数法。
p记数法 :c99里的16进制浮点数计数法,非c99不可用。数以0x开头,后面紧跟16进制小数,后跟p,再跟以2为底的阶码。
5.b6=5乘16的0次方+11乘16进制的-1次方+6乘16进制的-2次方。
p12=2的12次方;
所以0x5.b6p12=[5 * 16^0 + 11 * 16^(-1) + 6 * 16^(-2) ] * (2^12);
- 写出下列常量在声明中使用的数据类型和在printf()中对应的转换说明(假设 int 为16位)
- 2.9e05L默认是double但是L后缀所以是long double
- 0x44的转换说明有误,应为%#x
%x不带前缀0x - 100000是long因为int是16位,取值范围是-32768~32768(2^15-1)
- 假设程序的开头有以下声明。
int imate =2;
long shot =53456;
char grade = ‘A’
float log =2.71828;
把下面printf()语句中的转换字符补充完整:
printf("The odds against the %d were%ld to 1.\n",imate,shot);
printf("A score of %f is not an %c grade.\n",log,grade);
- 假设ch是char类型的变量。分别使用转义序列,十进制值,八进制字符常量和十六进制字符常量把回车字符赋给ch(假设使用ASCII编码值).
1.转义序列:ch='\r'
2.十进制值:ch=13
3.八进制值:ch='\015'
4.十六进制值:ch='\xD'
- %c转换说明告诉printf()打印盖整数对应的字符
- 把转义序列赋给字符变量时,要用单引号
#include<stdio.h>
int main()//this program is perfect
{
int cows, legs;
printf("How many cow legs did you count?\n");
scanf_s("%d", &legs);
cows = legs / 4;
printf("That implies there are %d cows.\n", cows);
return 0;
}
- 指出下列转义序列的含义:
a.\n——换行
b.\——反斜杠( \ )
c."——双引号( " )
d.\t——水平制表符
3.11 编程练习:
1.通过试验(即编写带有此类问题的程序)观察系统如何处理整数上溢,浮点数上溢和浮点数下溢的情况。
- 整数上溢:
#include<stdio.h>
int main()
{
int a = 2147483647;
unsigned int b = 4294967295;
printf("%d %d %d\n", a, a + 1, a + 2);
printf("%u %u %u\n", b, b + 1, b + 2);
return 0;
}
整数上溢:
由最大值~最小值,随后从最小值开始递加。
(有无符号类型规律相同)
- 浮点数上溢:
#include<stdio.h>
int main()
{
float a = 3.4e38 * 100;
printf("%e\n",a);
return 0;
}
inf(infinity)——无穷
ps:
#include<stdio.h>
int main()
{
float a = 3.4e100 * 100.0;
printf("%e\n"//这里忘打了printf()函数的参数,得出了不一样的结果,且同一个代码得出的值不同,说明是随机取值。);
return 0;
}
- 浮点数的下溢:
#include<stdio.h>
int main()
{
float a = 0.123456789e-10;
printf("%e\n",a/10);
return 0;
}
2.编写一个程序,要求提示输入一个ASCII码值(如66),然后打印输入的字符:
#include<stdio.h>
int main()
{
int input;
printf("Enter an ASCII value\n");//提醒输入一个ASCII码的值
scanf_s("%d", &input);//通过scanf()函数读取输入值,将其赋给 input 变量
printf("%c\n", input);//输出结果。
return 0;
}
3. 编写一个程序,发出一声警报,然后打印下列文本:
Starled by the sudden sound, Sally shouted,
“By the Great Pumpkin, what was that ! ”
#include<stdio.h>
int main()
{
char BEL = '\a';
//警报是 \a 或者 7 ,但建议使用转义序列 \a ,避免使用整数赋值。
printf("%c", BEL);
printf("Starled by the sudden sound, Sally shouted,\n\"By the Great Pumpkin, what was that !\"\n");
//用 \" 打印"是好习惯
return 0;
}
- 编写一个程序,读取一个浮点数,先打印小数形式,然后打印指数形式。然后,如果系统支持,再打印p记数法(即十六进制记数法):