第三章 程序的控制结构¶
第一节 if选择结构¶
2051:【例 3.1】偶数¶
代码
2052:【例 3.2】范围判断¶
代码
2053:【例 3.3】三个数¶
提示
这个题目,看起来很简单。
实际写代码的时候,会发现,很不好写。
代码
// 这是把所有情况列出来
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
if (a >= b && b >= c) cout << a << ' ' << b << ' ' << c << '\n';
else if (a >= c && c >= b) cout << a << ' ' << c << ' ' << b << '\n';
else if (b >= a && a >= c) cout << b << ' ' << a << ' ' << c << '\n';
else if (b >= c && c >= a) cout << b << ' ' << c << ' ' << a << '\n';
else if (c >= a && a >= b) cout << c << ' ' << a << ' ' << b << '\n';
else if (c >= b && b >= a) cout << c << ' ' << b << ' ' << a << '\n';
return 0;
}
代码02
代码03
2054:【例 3.4】适合晨练¶
代码
2055:【例 3.5】收费¶
代码
2056:【例 3.7】最大的数¶
提示
题面当中没有说明,输入的三个数是什么类型的
但是看样例,你会发现,是小数,所以要用double
代码
1039:判断数的正负¶
代码
1040:输出绝对值¶
提示
正数的绝对值是其本身,负数的绝对值是其相反数
所以,这里可以用if语句进行判断,分情况输出
对于int,取绝对值的函数是 abs()
对于double,取绝对值的函数是 fabs()
代码
代码02
1041:奇偶数判断¶
提示
奇数 odd
偶数 even
代码
代码02
代码03
1042:奇偶 ASCII 值判断¶
代码
1043:整数大小比较¶
代码
1044:判断是否为两位数¶
代码
1045:收集瓶盖赢大奖¶
提示
如果你拥有10个印有“幸运”、或20个印有“鼓励”的瓶盖
这个逻辑是或者的关系,||
代码
1046:判断一个数能否同时被 3 和 5 整除¶
代码
1047:判断能否被 3,5,7 整除¶
提示
这个题目,也是看起来简单,写起来难受的题目
当然,当你知道了用代码这样表达的逻辑,后面就好了
代码
// 先来一个最笨的写法
// 把所有情况列举一遍
#include<bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
if(n%3==0&&n%5==0&&n%7==0) cout << 3 << ' ' << 5 << ' ' << 7;
else if(n%3==0&&n%5==0) cout << 3 << ' ' << 5;
else if(n%3==0&&n%7==0) cout << 3 << ' ' << 7;
else if(n%5==0&&n%7==0) cout << 5 << ' ' << 7;
else if(n%3==0) cout << 3;
else if(n%5==0) cout << 5;
else if(n%7==0) cout << 7;
else cout << 'n';
return 0;
}
代码02
// 这个写法,用flag来控制,3、5、7是否有一个可以整除
// flag 像一个开关一样
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
bool flag = false;
if (n % 3 == 0) {
cout << "3 ";
flag = true;
}
if (n % 5 == 0) {
cout << "5 ";
flag = true;
}
if (n % 7 == 0) {
cout << "7 ";
flag = true;
}
if (!flag) cout << 'n';
return 0;
}
代码03
// 我们利用逻辑运算符
// (a%3== 0 || a%5 == 0 || a%7 == 0) 这句话是有一个成立就成立
// !(a%3== 0 || a%5 == 0 || a%7 == 0) 前面加一个!,就变成了一个都不成立的时候成立
// 绕一点
#include<iostream>
using namespace std;
int main() {
int a;
cin >> a;
if(a%3==0) cout<<"3"<<" ";
if(a%5==0) cout<<"5"<<" ";
if(a%7==0) cout<<"7"<<" ";
if(!(a%3== 0 || a%5 == 0 || a%7 == 0))cout<<"n";
return 0;
}
1048:有一门课不及格的学生¶
代码
第二节 switch语句¶
2057:【例 3.9】星期几¶
代码
#include <iostream>
using namespace std;
int main() {
int n;
cin >> n;
switch (n){
case 1: cout << "Monday" << '\n'; break;
case 2: cout << "Tuesday" << '\n'; break;
case 3: cout << "Wednesday" << '\n'; break;
case 4: cout << "Thursday" << '\n'; break;
case 5: cout << "Friday" << '\n'; break;
case 6: cout << "Saturday" << '\n'; break;
case 7: cout << "Sunday" << '\n'; break;
default: cout << "input error!" << '\n';
}
return 0;
}
2058:【例 3.10】简单计算器¶
提示
输出的时候,直接用cout即可。
代码
#include <bits/stdc++.h>
using namespace std;
double a, b;
char c;
int main() {
cin >> a >> b >> c;
if (c == '+') cout << a + b << '\n';
else if (c == '-') cout << a - b << '\n';
else if (c == '*') cout << a * b << '\n';
else if (c == '/') {
if (b == 0) cout << "Divided by zero!" << '\n';
else cout << a / b << '\n';
} else cout << "Invalid operator!" << '\n';
return 0;
}
2059:【例 3.11】买笔¶
提示
这个题目,我觉得用循环,枚举所有的情况
从大到小枚举,就可以了
网上题解有用数学方法的,那个我没看懂
代码
#include<bits/stdc++.h>
using namespace std;
int main() {
int x;
cin >> x;
for (int i = x / 4; i >= 0; i--)
for (int j = x / 5; j >= 0; j--)
for (int k = x / 6; k >= 0; k--) {
//cout << k << ' ' << j << ' ' << i << '\n';
if (i * 4 + j * 5 + k * 6 == x) {
cout << k << ' ' << j << ' ' << i << '\n';
return 0;
}
}
return 0;
}
1049:晶晶赴约会¶
代码
1050:骑车与走路¶
提示
应用题题面
代码
1051:分段函数¶
提示
分段函数,这个很能小朋友们看不懂
其实就是当什么情况的时候,怎么计算,就是这个东西
在编程里,就是if
代码
1052:计算邮资¶
提示
这个题目,是有点难度的
首先难在读题上,题读不懂
然后难在怎么用代码表达
虽然现在知道了咋回事,但是代码不会表达
我们来捋一下思路
先是8元打底,然后看是否超过1000,超过的部分,每500克4元,向上取整
然后看是否加急
代码
1053:最大数输出¶
代码
代码02
1054:三角形判断¶
提示
两边之和大于第三边,两边之差小于第三边
代码
1055:判断闰年¶
提示
四年一闰,百年不闰,四百年再闰
代码
1056:点和正方形的关系¶
提示
这个题目,在第一次接触的时候,是不好做的
因为不知道怎么用代码表达,点在正方形的里面
其实,我们就是用坐标的范围,进行的判断
代码
1057:简单计算器¶
提示
这道题目,在当前做的题目当中,算得上题面很长的了
逻辑也复杂一点
所以,是个难题
首先要正确的读入数据,两个int,一个char
然后用if判断,字符c是什么,然后对应的进行计算
代码
// 注意观察这份代码换行的使用
// 如果if下面只有一句话,可以不用大括号,也可以提上来写
// 输出的话,一定要复制粘贴,千万不要自己敲,你看不清那些大小写和空格的
#include <iostream>
using namespace std;
int main() {
int a, b;
char c;
cin >> a >> b >> c;
if (c == '+') cout << a + b << '\n';
else if (c == '-') cout << a - b << '\n';
else if (c == '*') cout << a * b << '\n';
else if (c == '/') {
if (b == 0) cout << "Divided by zero!" << '\n';
else cout << a / b << '\n';
} else cout << "Invalid operator!" << '\n';
return 0;
}
1058:求一元二次方程¶
提示
这个题目放在后面做
提示02
一元二次方程的求根公式,是要背的,背一下
此题,当有两个不同的实根时,还需要进行一下比较,题目要求较小的在前面
所以,对读题也是有一定考察
代码
#include <bits/stdc++.h>
using namespace std;
int main() {
double a, b, c;
cin >> a >> b >> c;
double delta = b * b - 4 * a * c;
if (delta < 0) cout << "No answer!" << '\n';
else if (delta == 0) {
printf("x1=x2=%.5lf\n", -b / (2 * a));
} else {
double x1 = (-b - sqrt(delta)) / (2 * a);
double x2 = (-b + sqrt(delta)) / (2 * a);
if (x1 > x2) swap(x1, x2);
printf("x1=%.5lf;x2=%.5lf\n", x1, x2);
}
return 0;
}