C语言学习笔记(三)—— 数据和C

一、一个示例程序

#include <stdio.h>
int main(void){
	float weight,value;//声明两个浮点型的变量
	printf("please enter your weight:");
	scanf("%f",&weight);//%f用来处理浮点值,scanf()是读取用户输入的浮点数,&weight告诉scanf()将输入的浮点数赋给名为weight的变量
	value=weight*233.55;//进行乘法运算
	printf("gold price is %.2f",value);//.2代表小数点后保留2位小数,gold price is 28026.00
	return 0;
}

二、变量与常量数据

有些数据在程序使用之前已经设定好了,在整个程序的运行过程中没有变化,这些被称为常量,比如上面示例中的233.55。

其他数据类型在程序运行中可能被改变或赋值,这些被称为变量,比如上面示例中的weight。

三、数据:数据类型关键字

最初K&R给出的关键字 C90标准添加的关键字 C99标准添加的关键字
int signed _Bool(布尔值)
long void _Complex(复数)
short   _Imaginary(虚数)
unsigned    
char    
float    
double    

按计算机的存储方式可以分为两大基本类型:整数类型和浮点数类型。

计算机把浮点数分为小数部分和指数部分来表示,而且分开存储这两部分。例如:7.00和7的存储方式是不同的,7.0可以写成0.7E1,0.7是小数部分,1是指数部分。

1、整数和浮点数存储的区别

① 整数没有小数部分,浮点数有小数部分;

② 浮点数可以表示的范围比整数大;

③ 对于一些算术运算,浮点数损失的精度更多;

④ 在区间内都存在无穷个实数,所以计算机的浮点数不能表示区间内的所有值,通常只是实际值的近似值;

⑤ 浮点运算比整数运算慢。

四、C语言的数据类型

1、int类型

int值目前是32位,取值范围是-2^31~2^31-1

① 声明int变量

可以单独声明一个变量,也可以在int后列出多个变量名
        //声明int变量,但还没有赋值
	int num1;
	int num2,num3;

② 初始化变量

就是为变量赋一个初始值,可以先声明再赋值,也可以在声明中赋值

        //初始化变量
	int num4;
	num4 = 10; //先声明再赋值

	int num5 = 20; //声明并赋值

	int num6, num7 = 30; //声明两个变量并为其中一个变量赋值,可以但不建议

③ int常量

如上面出现的10、20、30都是int常量

④ 打印int值

void example3() {
	int ten = 10;
	int two = 2;
	printf("%d - %d = %d\n", ten, two, ten - two);
	/**
	 * 输出结果:10 - 2 = 8
	 * %d称为转换说明,它指明了在一行中打印整数的位置,每个%d都与变量列表中的值相匹配,所以要确保要打印的值与列表中的值数量相同
	 */
}

⑤ 八进制与十六进制

以十进制显示数字使用%d

以八进制显示数字使用%o,前缀0,要显示前缀使用%#o

以十六进制显示数字使用%x,前缀0x,要显示前缀使用%#x

void example4() {
	int num = 10;//10在十六进制中是a
	printf("十进制:%d 八进制:%o 十六进制:%x\n", num, num, num);//十进制:10 八进制:12 十六进制:a
	printf("十进制:%d 八进制:%#o 十六进制:%#x", num, num, num);//十进制:10 八进制:012 十六进制:0xa
}

2、其他整数类型

使用时再百度

3、字符:char类型

        char类型用于存储字符,但从技术层面上看,char是整数类型,因为char类型实际上存储的是整数而不是字符。计算机使用数字编码来处理字符,它用特定的整数来表示特定的字符,例如在ASCII编码中,整数65代表大写字母A,因此存储字母A实际上存储的是整数65。

① 声明char类型变量并初始化

用单引号括起来的字符称为字符常量,编译器发现'A',会将其转化为相应的代码值

char c='T';
因为字符是以数值的形式存在的,所以也可以用数字代码赋值,如下:
char c = 65;//可以这样做,但这不是一种好的编程习惯
② 转义序列

③ 打印字符

%d转换说明打印类型变量的值是一个整数,而%c转换说明则是打印该整数对应的字符。

void example5() {
	char c;
	scanf("%d", &c);//使用%d时输入整数,使用%c时输入字符
	printf("use d is:%d\n", c); //use d is:65
	printf("use c is:%c\n", c); //use c is:A
}
注意:printf()中的转换说明决定了数据的显示方式,而不是数据的存储方式,存储都是整数。

4、布尔类型_Bool

值1表示true,值0表示false,所以_Bool实际上也是一种整数类型,它仅占一位存储空间

void example6() {
	int i = 5;
	_Bool b = i > 3;
	if (b) {
		printf("%d", b); //1
	} else {
		printf("test");
	}
}

5、float和double

① float和double的区别


float double
至少能表示的有效数字 6位 6位
取值范围 10^-37~10^+37  
所占位数 32位,8位表示指数值和符号,24位表示非指数部分 64位,多出的32位全部表示非指数部分
变量声明 带f或F后缀 系统默认
转换说明 %f %f

② 声明浮点数变量并赋值

void example7() {
	float f = 1.2e3;
	double d = 2.5e2;
	float t = 30.15f;
	printf("%f\n", f * 10); //12000.000000至少6个有效数位
	printf("%.2f\n", d * 10); //2500.00,.2表示保留两位有效数位
	printf("%.1e\n", d * 10); //2.5e+003,使用指数记数法表示,并保留一位有效数位
	printf("%e", t); //3.015000e+001
}

6、类型大小

%zd转换说明匹配sizeof的返回类型,不支持c99和c11的可以使用%u或%lu

void example8() {
	printf("%u\n", sizeof(int)); //4 bytes
	printf("%u\n", sizeof(char)); //1 byte
	printf("%u\n", sizeof(float)); //4 bytes
	printf("%u\n", sizeof(double)); //8 bytes
	printf("%u\n", sizeof(_Bool)); //1 byte
	printf("%u\n", sizeof(long double));//12 bytes
}

7、刷新输出

        printf()语句把输出发送到一个叫缓冲区的中间存储区域,当缓冲区满、遇到换行字符或需要输入的时候,然后缓冲区中的内容就会被刷新到屏幕上。

猜你喜欢

转载自blog.csdn.net/alexshi5/article/details/79783728