C语言自学学习轨迹
文章目录
part1.2
6、浮点数
案例引入:计算英尺英寸
代码块
#include<stdio.h>
int main()
{
double foot,inch;
printf("请输入英尺英寸数");
scanf_s("%lf %lf",&foot,&inch);
double height=(foot+inch/12)*0.3084
printf("身高为%f米",height);
return 0;
}
代码解释
1、double变量类型
double foot,inch;
这里我们定义变量foot和inch用了一个新的类型double
double 双精度浮点值。双精度是1位符号,11位指数,52位小数。
为什么要使用double做变量类型
如果我们在定义变量foot和inch时使用int来定义变量,那么我们得到的结果将是“inch/12”四舍五入后产生的值,计算机中有整数和浮点数两类,而用int定义的变量表明其为整数,而用float和double定义的变量为浮点数。
%lf和double配套使用
如果我们定义了一个变量为double,则我们需要将printf与scanf中%后的d改为lf.
2、其他将整数变为浮点数的办法
int foot,inch;
printf("请输入英尺、英寸数");
scanf_s("%d %d",&foot,&inch);
double height=(foot+inch/12.0)*0.3084;
printf("身高为%lf米",height);
可以将12变为12.0,使foot和inch的整数值变为浮点数值。
7、计算时间差
时间差中包含的玄机
一个时间——比如说一点十分,由两个数字构成,而要求两点四十和一点十分做时间差,则需要用40减去10分,得到三十分钟,两点减去一点得到一个小时,这或许很简单,但如果出现了一点五十到两点三十分这样的计算该怎么样呢?
这或许就需要统一使用一个单位,来进行运算。
解决方法
#include<stdio.h>
int main()
{
int hour1,minute1;
int hour2,minute2;
scanf_s("%d %d",&hour1,&minute1);
scanf_s("%d %d",&hour2,&minute2);
int t1=hour1*60+minute1;
int t2=hour2*60+minute2;
int subtract=t1-t2;
printf("时间差为%d小时%d分钟",subtract/60,subtract%60);
return 0;
}
解决方法核心
int t1=hour1*60+minute1;
int t2=hour2*60+minute2;
int subtract=t1-t2;
printf("时间差为%d小时%d分钟",subtract/60,subtract%60);
这里我们将t1与t2同时化为以分钟为单位的数再进行计算,避免了分钟相减为负数的情况,同样,在printf函数里使用除法与取余的计算也十分智慧。
8、运算符优先级
解释
优先级越高越先计算,这符合数学规律如:a+b✖c先计算b✖c的值,之后再将a与结果相加。
需要注意的是
表格中的第一行与第二行是特例,a*+b在这里的意思是a乘以正b。
而a*-b则为a乘以负b。
这样单目运算是最优先的。
9、练习题
练习一:厘米换算英尺英尺
#include<stdio.h>
int main()
{
int height;
printf("请输入身高:%d(单位:厘米)");
scanf_s("%d",&height);
int foot,inch;
foot=height/30.48;
inch=(height/30.48-foot)*12;
printf("您的身高为%d英尺%d英寸",foot,inch);
return 0;d
}
练习二:然后是几点
一些卡壳的地方
要求输入的是一个四位数(或三位数),所以我们需要将这个数转变为时间再进行计算
#include<stdio.h>
int main()
{
int now;
printf("请输入现在的时间");
scanf_s("%d",&now);
int hour,minute;
hour=now/100;
minute=now%100;
int pass;
printf("请输入经过的时间");
scanf_s("%d",&pass);
int thenhour,thenminute,thentime;
thenhour=hour+(minute+pass)/60;
thenminute=(minute+pass)%60;
thentime=thenhour*100+thenminute;
printf("这段时间过去后是%d",&thentime);
return 0;
}
练习三:逆序的三位数
#include<stdio.h>
int main()
{
int number;
printf("请输入一个三位数");
scanf_s("%d",&number);
int one,two,three;
one=number/100;
two=(number-100*one)/10;
three=number-100*one-10*two;
int a;
a=one+two*10+three*100;
printf("这个数字的逆序数是%d",a);
return 0;
}
练习四:BCD解谜
难点
在于题目的理解,其实就是将十进制数转为十六进制数。
#include<stdio.h>
int main()
{
int x;
scanf_s("%d",&x);
printf("%x".x);
return 0;
}
新的知识点
如果要使输出的内容为十六进制数,则可以将printf中"%d"转换为"%x",以十六进制的形式输出x的值。
以上练习题均来自翁恺老师中国大学MOOC《C语言入门与进阶》。