复习一:

printf与scanf占位符

复习一 - 图1

顺序结构

小鱼的游游泳时间(p1425)

复习一 - 图2

思路: 把小时转换为分钟,计算时间差再换算为时和分

  1. #include <iostream>
  2. using namespace std;
  3. int main() {
  4. int a, b, c, d, e, f;
  5. int m;
  6. // 输入开始时间与结束时间
  7. cin >> a >> b >> c >> d;
  8. // 计算游泳时间
  9. m = (c * 60 + d) - (a * 60 + b);
  10. e = m / 60;
  11. f = m % 60;
  12. cout << e << " " << endl;
  13. // printf("%d %d",e,f);
  14. }

成绩

复习一 - 图3

使用 分数计算,避免触及 浮点运算:

printf("%d", a * 2 / 10 + b * 3 /10 + c * 5 / 10);

解法 1: 注意“A,B,C 都是 10 的整数倍”。 每一小项经过加权,即使有乘上一个小数,但是结果一定是整数。 可以把 0.2 变成 2/10, 使程序不接触浮点数,不必考虑浮点误差。

*2 / 10 ,整个运算中都是整型运算, /运算,自动舍去小数部分。

解法2:

  1. int a, b, c;
  2. scanf("%d%d%d", &a, &b, &c);
  3. printf("%d", int(a * 0.2 + b * 0.3 + c * 0.5 + 0.5)); return 0;

直接加权计算。

int(……) 是指不是整数的内容 强制转换 为 int 类型,舍掉小数位数 只保留整数 。double(……) 可以强制转换为 double 。

为什么最后加上了一个 0.5?是因为浮点误差(例如 89.9999)。

小玉买文具(p1421)

复习一 - 图4

  1. cout << (a * 10 + b) /(1*10 +9);

总结

  • double: 用于存放小数的变量类型。
  • char: 用于存放字符的变量类型。 ASCII将每个字母和数字对应。
  • cin>>a: 用于读入输入的信息给表示变量 a 。 一道题目如果按照题意不好解决,不妨想想能不能换一种数据处 理的方式,比如把数字当成字符

短路判断

计算表达式时,如果只计算部分内容就可以确保一个表达式的结 果,那么剩余部分计算机就不会继续运算下去了。 例如:

  • a||(b&&!c),当a 为真,表达式肯定也是真,不用继续算
  • a&&(b||c||d||e||f),当a 为假,表达式肯定为假
  • x>0&&sqrt(x)-round(sqrt(x))<1e-6,当x是负数时,后面的就不
  • 会继续运算,也不会造成RE。

嵌套条件

if …… else if …… else ……

体重BMI(p5714)

复习一 - 图5

  1. double m, h, BMI;
  2. cin >> m >> h;
  3. BMI = m / h / h;
  4. if (BMI < 18.5)
  5. cout << "Underweight";
  6. else if (BMI < 24)
  7. cout << "Normal";
  8. else {
  9. cout << BMI << endl;
  10. cout << "Overweight" << endl;
  11. }