变量
1.变量是程序的基本组成单位
2.变量的定义:变量相当于内存中一个数据存储空间的表示,你可以把变量看做是一个房间的门牌号,通过门牌号我们可以找到房间,而通过变量名可以访问到变量(值)。
3.变量一定要先声明在使用,否则会报错。
4.[Error] ‘a’ undeclared (first use in this function)
错误‘a’未声明(在此函数中首次使用)
#include <stdio.h>
void main(){
int a=1;//定义一个整型变量a,并赋值为1
int b=2;//定义一个整型变量b,并赋值为2
// b=3;//给变量b赋值为3
printf("a=%d \n",a);//使用输出语句,把变量a的值输出%d(%d表示整形)
printf("b=%d \n",b);//使用输出语句,把变量b的值输出%d(%d表示整形)
getchar();//让控制台不退出
}
5.变量输出按最后一个赋值输出
#include <stdio.h>
void main(){
int a=1;//定义一个整型变量a,并赋值为1
int b=2;//定义一个整型变量b,并赋值为2
b=3;//给变量b赋值为3
printf("a=%d \n",a);//使用输出语句,把变量a的值输出%d(%d表示整形)
printf("b=%d \n",b);//使用输出语句,把变量b的值输出%d(%d表示整形)
getchar();//让控制台不退出
}
6.变量赋值或者改变赋值的时候要给相对应的值,比如int整型就不能赋值小数,否则可能会有数据丢失。(如下图3.4输出后变成3,小数部分丢失)
7.输出:
1)如果输出的整数%d
2)如果输出的是小数%f,如果希望保留小数点%.2f
3)如果输出的是字符%c
4)如果输出的是字符串%s
5)在输出不同数据时,对应的格式化的形式要对应起来
补:long类型输出%ld
基本数据类型
c语言包含的数据类型(变量的基本类型)
1.注意:在c中,没有字符串类型,使用字符数组表示字符串。
2.查看字节数
3.c语言的整型类型,分为有符号signed和无符号unsigned两种,默认是signed
#include<stdio.h>
void main(){
printf("int的字节数=%d",sizeof(int));
getchar(); //让控制台不退出
}
4.float和double型
#include<stdio.h>
void main(){
//浮点数常量默认类型是double型,声明float型常量时后面必须加'f'或'F'
float d1=1.1;//有可能从double到float截断,1.1是double
float d2=1.3f; //1.1f就是float
double d3=1.3;
double d4=5.12;
double d5=.512;//等价于0.512
double d6= 5.12e2;//等价于5.12*(10^2)=512
double d7=5.12e-2;//等价于5.12*(10^-2)=0.0512
printf(" d1=%f\n d2=%f\n d3=%f\n d4=%f\n d5=%f\n d6=%f\n d7=%f\n",d1,d2,d3,d4,d5,d6,d7);
getchar();
}
1)当d1的数值超过float的精度就会被截断,会发生数据丢失(double可以输出15到16位,float只能输出6到7位)
当让float输出超过范围小数就会失去精度
5.bool型
#include<stdbool.h>
bool类型标签库(bool类型只有c++才有)
基本数据类型转换
数据类型自动转换:c程序在运行时,精度小的被自动转成精度大的,这就是自动类型转换
精度从低到高顺序
short --> int --> unsigned int无符号整形 --> long --> unsigned long无符号长整型 --> float --> double --> long double
基本数据类型自动转换规则
说明:1.有多种数据类型在混合运算时,要先将所有数据类型转换成最大的那一种,在进行运算。
2.两种类型的字节数不同,转换成字节数大的类型。
3.两种类型的字节数相同,但一种有符号,一种无符号,则转换成无符号类型。
4.在赋值运算中,赋值号两边量的数据类型不同时,赋值号右边的类型将转换为左边的类型,如果右边变量的数据类型长度比左边长时,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入。
1.例如:当int型和float型相加时,int型就要转成float型(如图一)。如果不转换按int输出,就会有数据丢失(如图二)。
图一
#include<stdio.h>
int main(){
int a = 1;
float b = 1.55;
float c = a + b;
printf ("%f",c);
return 0;
}
图二
4.列如:将double类型的值给float类型,将丢失一部分数据,这样会降低精度,丢失的部分按四舍五入向前舍入(如果double类型的数据没有超过float类型的精度就不会有数据丢失)。
强制转换:
当进行数据的从精度高——>精度低,就需要使用到强制转换(不加强制转换可能会报错)
强转符号只针对于最近的操作数有效,往往会使用小括号提升优先级
强制转换符():只对最近的字符操作有效
加强制转换前
[Error] expected expression before ‘int’
[错误]“int”之前的预期表达式
加强制转换后
强制转换符():只对最近的字符操作有效
这里只对3.5起强制转换作用,所以num1 = 3 * 10 + 6 * 1.5 即num = 39
将式子整个括起来后就是将结果强制转换