复习一:
printf与scanf占位符

顺序结构
小鱼的游游泳时间(p1425)

思路: 把小时转换为分钟,计算时间差再换算为时和分
#include <iostream>using namespace std;int main() {int a, b, c, d, e, f;int m;// 输入开始时间与结束时间cin >> a >> b >> c >> d;// 计算游泳时间m = (c * 60 + d) - (a * 60 + b);e = m / 60;f = m % 60;cout << e << " " << endl;// printf("%d %d",e,f);}
成绩

使用 分数计算,避免触及 浮点运算:
printf("%d", a * 2 / 10 + b * 3 /10 + c * 5 / 10);
解法 1: 注意“A,B,C 都是 10 的整数倍”。 每一小项经过加权,即使有乘上一个小数,但是结果一定是整数。 可以把 0.2 变成 2/10, 使程序不接触浮点数,不必考虑浮点误差。
*2 / 10 ,整个运算中都是整型运算,
/运算,自动舍去小数部分。
解法2:
int a, b, c;scanf("%d%d%d", &a, &b, &c);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)

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)

double m, h, BMI;cin >> m >> h;BMI = m / h / h;if (BMI < 18.5)cout << "Underweight";else if (BMI < 24)cout << "Normal";else {cout << BMI << endl;cout << "Overweight" << endl;}
