课后作业
chao_smile 2023/11/11
# 第四课
# 1. 假设有两个整数变量 int num1 = 28
和 int num2 = 36
,使用位运算符计算并输出它们的按位与、按位或、按位异或、按位非运算结果,使用二进制输出。
小提示 使用
bitset
头文件,可以打印表示二进制表示的具体位数值
// 输出示例:
Bitwise AND: 00000100
Bitwise OR: 00111100
Bitwise XOR: 00111000
Bitwise NOT for num1: 11100011
Bitwise NOT for num2: 11011011
- 你的答案
#include <iostream>
#include <bitset>
using namespace std;
int main(){
int num1 = 28 , num2 = 36;
cout <<"Bitwise AND: "<<bitset<8>(num1 & num2)<<endl;
cout <<"Bitwise OR: "<<bitset<8>(num1 | num2)<<endl;
cout <<"Bitwise XOR: "<<bitset<8>(num1 ^ num2)<<endl;
cout <<"Bitwise NOT for num1: "<<bitset<8>(~num1)<<endl;
cout <<"Bitwise NOT for num2: "<<bitset<8>(~num2)<<endl;
return 0;
}
解析
此题主要考查位运算符
以及bitset
头文件使用,需要注意的是,位运算符在大多数试题中为笔试计算,除了程序输出也应掌握自身如何去使用ascii
表查找对应二进制值同时进行位运算
参考答案
无,答案程序输出完全正解
# 2. 设计一个程序,输入两个整数变量 m
,n
,使用赋值运算符实现将 m
除以 n
的商,结果保存在 m
中,再使用赋值运算符将其增加 5
倍,并输出最终的 m
的值。
// 输入输出示例:
请输入m:6
请输入n:2
m最终值:15
- 你的答案
#include <iostream>
using namespace std;
int main(){
int m ;
int n ;
cout <<"请输入m: ";
cin >> m;
cout <<"\n";
cout <<"请输入n: ";
cin >> n;
cout <<"\n";
m /= n;
cout << m += 5<<endl;
return 0;
}
解析
- 当前程序报错这个错误是由于在
main.cpp: In function ‘int main()’: main.cpp:21:24: error: invalid operands of types ‘int’ and ‘’ to binary ‘operator<<’ 21 | cout << m += 5 << endl; | ~~^~~~~~~
cout
语句中错误使用了<<
操作符。直接将表达式进行输出了。
为了解决这个问题,你需要使用括号确保+=
操作首先执行,然后将结果传递给cout
进行输出。以下是修正后的代码行:cout << (m += 5) << endl;
- 当前程序运行结果不符合输入输出示例
运行程序:输入
m=6
,n=2
最终结果得到m=8
此题主要考查赋值运算符
的使用,需要注意的是,题目中描述为将其增加5
倍,5 倍不是加 5,需要注意此误区。 平常作业时需要注意与输入输出示例对照,如有疑问最好先尝试解决,后将其记录询问老师。
- 当前程序报错
参考答案
#include <iostream>
using namespace std;
int main() {
int m, n;
cout << "请输入m:";
cin >> m;
cout << "请输入n:";
cin >> n;
m /= n;
m *= 5;
cout << "m最终值:" << m << endl;
return 0;
}
# 3. 你买了一箱n
个苹果,很不幸的是买完时箱子里混进了一条虫子。虫子每x
小时能吃掉一个苹果,假设虫子在吃完一个苹果之前不会吃另一个,那么经过y
小时你还有多少个完整的苹果?请设计一个程序,输入对应变量得出对应结果。
// 请满足以下所有输入输出示例:
// 示例1:
请输入苹果的数量: 6
请输入虫子吃掉一个苹果的所需时间:2
请输入经过的时间:10
经过10小时,你还有1个完整苹果
// 示例2:
请输入苹果的数量: 6
请输入虫子吃掉一个苹果的所需时间:2
请输入经过的时间:16
经过16小时,你还有0个完整苹果
// 示例3:
请输入苹果的数量: 6
请输入虫子吃掉一个苹果的所需时间:2
请输入经过的时间:5
经过5小时,你还有3个完整苹果
- 你的答案
#include <iostream>
using namespace std;
int main() {
int x,y,n,i,j;
char p;
cin>>n>>p>>x>>p>>y;
j=y%x;
if(j!=0) j=y/x+1;
else j=y/x;
if(j>n)
cout<<"0";
else;
return 0;
}
解析
本题主要考查题目运算,最终的结果我们将会得到一个完整苹果剩余计算器首先需要注意的是依据题目我们可知的是,输入变量为 3 个,你的答案中包含的 5 个输入明显与题不符且不符合输入输出示例应当注意。
此题考点较为丰富,提供了三个输入输出示例,首先我们应该先注意求算的是剩余的完整苹果,所以像被虫子吃了一半的这种我们不计算在内,解法较为丰富,比如先计算经过的时间y
是不是虫子速度x
的整倍数,如果不是,先向上取整再计算,也可先计算根据时间y
与速度x
后吃掉的苹果数是不是整数来向上取整再计算,看自身如何理解容易。
需要注意因苹果总数的限制,虫子最多吃掉全部苹果,不可能剩余负数。参考答案
#include <iostream>
using namespace std;
int main() {
int n, x, y;
cout << "请输入苹果的数量: ";
cin >> n;
cout << "请输入虫子吃掉一个苹果的所需时间:";
cin >> x;
cout << "请输入经过的时间:";
cin >> y;
// 计算经过y时间后已经吃掉的苹果数量
// 注意使用 int 类型定义,截断小数部分,而不进行四舍五入
int haveEaten=(y / x);
// 因为我们需要计算的是完整苹果的剩余,故此将已经吃掉的苹果数量向上取整
// 向上取整的方式有很多
// 比如添加头文件 <cmath> 使用向上取整函数 ceil
// 比如使用 % 查看是否有余数
int integer;
if((y % x) != 0){
integer = haveEaten + 1;
}else{
integer = haveEaten;
}
// 总数减去吃掉的数量得出结果
// 需要注意的是当经过 y 时间时,依据虫子的速度可能吃掉超过总数的苹果
// 但是这明显不符合常理,总数限制的存在导致了上限
int remainingApples = n - integer;
if(remainingApples<0){
remainingApples=0;
}
// 输出结果
cout << "经过" << y << "小时,你还有" << remainingApples << "个完整的苹果" << endl;
return 0;
}
# 4. 一只大象口渴了,要喝20
升水才能解渴,但现在只有一个深h
厘米,底面半径为r
厘米的小圆桶(h 和 r 都是整数)。问大象至少要喝多少桶水才会解渴?请设计一个程序,输入对应变量得出对应结果。(本题圆周率请使用 3.14 计算)
// 输入输出示例:
请输入小圆桶的深度(h,单位:厘米): 5
请输入小圆桶的底面半径(r,单位:厘米): 5
大象至少需要喝 51 桶水才会解渴。
- 你的答案
#include<iostream>
using namespace std;
int main(){
double a,b,pi=3.14;
cin >> a >> b;
int c=20000/(pi*a*b*b)+1;
cout << c <<endl;
return 0;
}
解析
此题考查题目运算,需要掌握圆柱体积公式V = pi*r*r*h
题目易错点:
计算单位为cm
对应体积为cm³
(毫升),而对比结果是升,故此需要*1000
的倍数
至少喝多少桶水,最后一桶只要喝了就需要计算在内 题目已经提供变量名称情况下,需使用变量名称对应编程计算参考答案
#include <iostream>
using namespace std;
int main() {
int h, r;
// 输入小圆桶的深度h和底面半径r
cout << "请输入小圆桶的深度(h,单位:厘米): ";
cin >> h;
cout << "请输入小圆桶的底面半径(r,单位:厘米): ";
cin >> r;
// 计算小圆桶的容积(以升为单位)
double volume = 3.14 * r * r * h / 1000; // 将毫升转换为升
// 计算大象至少需要喝多少桶水
int bucketsNeeded = 20 / volume + 1; // 加1确保向上取整(注意此题 20 / volume 必不可能为整数)
// 输出结果
cout << "大象至少需要喝 " << bucketsNeeded << " 桶水才会解渴。" << endl;
return 0;
}
# 5. 歌手大奖赛上 6 名评委给一位参赛者打分,6
个人打分的平均分为9. 6
分;如 果去掉一个最高分,这名参赛者的平均分为9.4
分;如果去掉一个最低分,这名参赛者的平均分为9. 8
分;如果去掉一个最高分和一个最低分,这名参赛者的平均是多少?请设计一个程序,得出结果。(结果按实数格式输出,保留 2 位小数)
// 输出示例:
这名参赛者的平均是: 9.60
- 你的答案
#include<cstdio>
using namespace std;
int main(){
float a=9.6*6,b=9.4*5,c=9.8*5;
float x=(b+c-a)/4;
printf("%5.2f",x);
return 0;
}
解析
此题考查题目运算,需要理解题目给出的已知条件以及平均分的概念,根据已知我们可以求出每个阶段的总分从而得到最高分与最低分,最后相减相除得到最后的平均分,需要注意的是,对于计算题不应过于省略或约分计算步骤,在数学或编程考试中,省略重要计算步骤可能会导致扣分。参考答案
#include <cstdio> // 包含头文件以使用 printf 函数
using namespace std;
int main() {
float sc_all = 6 * 9.6; // 求 6 名评委的总分
float sc_high = 5 * 9.4; // 求去掉最高分后的总分
float sc_low = 5 * 9.8; // 求去掉最低分后的总分
float high = sc_all - sc_high; // 求最高分
float low = sc_all - sc_low; // 求最低分
float ans = (sc_all - high - low) / 4; // 求平均分
// 使用 printf 函数输出,按实数格式输出,保留2位小数
printf("这名参赛者的平均是:%5.2f\n", ans);
return 0;
}