先上一张知识结构图
当赋值发生时,如果两边数据类型不一致,C语言中会将等号右边的数据自动转换为等号左边变量的数据类型
double d = 40;
//整型数据赋给双精度浮点型变量
//C系统将整型数据转变为double型数据然后赋值给变量
int i = 3.14;
//double型数据赋给int型变量
//C系统将double数据转变为int型数据然后赋值给变量
//这个转变过程会造成double型数据小数部分的丢失
强制类型转换也叫显式转换
需要转换的数据前面,添加一个括号,括号里面填写目标数据类型
(转换后类型) 表达式
printf(”%d”,(int) 3.5);
printf("%d\n",(int)(3.5+2+4.5));
(1)从较高精度数据类型转换为较低精度数据类型时,一般会发生数据的丢失
如:int a = 3.14 结果:a 为 3;
(2)低精度数据转化为高精度数据不会发生数据的丢失
如:double d = 3 结果:d 为 3.000000;
(3)多个不同类型精度相结合。结果为最高精度值
如:
int a1 = 10;
float b1 = 20;
double c1 = 30;
char d1 = 40;
printf("%f",a1+b1+c1+d1);
sum = sum + 20;
等价与
sum += 20;
+=就是一个复合赋值运算符,含义为使用sum原来的值加上20然后再赋值给sum变量
另外还有-=、*=、/=、%= 复合赋值运算符
a *= b + 20; //等价于a = a * (b + 20);
i++;
表示变量i在原有基础上增加1
i --;
表示变量i在原有基础上减去1
另一个写法:
++i,--i;
(1)符号在变量左边表示先将变量自增或自减1之后再使用其自增1或自减1后的值
(2)符号在变量右边表示首先使用变量中已有的值,然后再对变量进行自增1或自减1
int i=10,j=10;
i++; printf("%d\n", i);//11
++i; printf("%d\n", i);//12
j--; printf("%d\n", j);//9
--j; printf("%d\n", j);//8
int i=10,j=10,w,x,y,z;
w = i++; printf("%d\n", w);//w=10,i=11
x = ++i; printf("%d\n", x);//x=12,i=12
y = j--; printf("%d\n", y);//y=10,j=9
z = --j; printf("%d\n", z);//z=8, j=8;
i = 10;
m = (i++); printf(“m = %d\n”, m);
n = (++i); printf(“n = %d\n”, n);
m = (i++) + 10; printf(“m = %d\n”, m);
n = (++i) + 10; printf(“n = %d\n", n);
结果为:
m = 10
n = 12
m = 22
n = 24
scanf(“控制字符串”,&变量1,&变量2,…&变量n);
— 注意接收数据的变量需要使用&号,表示该变量的地址
控制字符串:
%d int
%f float
%lf double
%c char
一次输入多个数字时,控制字符串有无空格均可,但输入时需要空格隔开每个数字
scanf("%f %f", &f1,&f2);
scanf("%d%d%d%d%d", &d1,&d2,&d3,&d4,&d5);
(1)c语言中,使用scanf()进行字符数据的输入时,回车、Control、Escape等控制字符都被当做字符被放入缓冲区
连续使用scanf()时下一次的输入会直接从缓冲区读入字符型数据
(2)输入字符数据时,控制字符串和实际输入都需要使用空格隔开每个字符
scanf("%c %c %c", &c1, &c2, &c3);
/**
* 某一个星期,周一到周日气温分别为:30℃、32℃、29℃、34℃、31℃、27℃、31℃
为了研究天气情况,需要得到这个星期的平均气温
*/
int t1=30,t2=32,t3=29,t4=34,t5=31,t6=27,t7=31;
int sum = 0;
double avg;//平均温度
int day = 7;
sum += t1;
sum += t2;
sum += t3;
sum += t4;
sum += t5;
sum += t6;
sum += t7;
avg = sum * 1.0 / day;
printf("sum == %d\navg == %g\n",sum,avg);
//交互式输入
/**
* 输入购买数量及单价,然后计算出总金额
*/
int count;//数量
double price;//单价
double sum;//总价
printf("请输入商品数量\n");
//做输入操作
scanf("%d",&count);
printf("请输入商品单价\n");
scanf("%lf",&price);
sum = count * price;
printf("总价格为:%g",sum);
幻影回车符
char firstChar;
char secondChar;
printf("请输入第一个字符\n");
//先用第二个字符,接收回车字符
scanf("%c%c",&firstChar,&secondChar);
printf("请输入第二个字符\n");
scanf("%c",&secondChar);
printf("firstChar = %c--secondChar = %c\n",firstChar,secondChar);
printf("firstChar = %d--secondChar = %d",firstChar,secondChar);
/**
* 编写一个C程序,输入两个点的坐标(x坐标以及y坐标),计算并且打印两个连接点的中点坐标。假设两个连接点坐标为(x1,y2)和(x2,y2),两个点的连接线中点坐标为(x1+x2)/2和(y1+y2)/2
*/
double x1,x2,y1,y2,x3,y3;
printf("请输入第一个点:\n");
scanf("%lf%lf",&x1,&y1);
printf("请输入第二个点:\n");
scanf("%lf%lf",&x2,&y2);
x3 = (x1+x2) / 2;
y3 = (y1+y2) / 2;
printf("两点的中点坐标为(%g,%g)",x3,y3);