【学习轨迹】C语言学习(2)

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语言入门与进阶》。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值