使用c++编写一个向上取整函数 ,不要用ceil函数
时间: 2024-02-01 18:14:51 浏览: 204
可以使用以下代码实现向上取整函数:
```c++
#include <iostream>
int ceil(double x) {
int result = static_cast<int>(x);
if (result < x) {
result++;
}
return result;
}
int main() {
double x = 3.14;
std::cout << "ceil(" << x << ") = " << ceil(x) << std::endl;
return 0;
}
```
这个函数的实现思路是先将传入的 `double` 类型参数转换成 `int` 类型,然后判断是否需要向上取整。如果转换后的 `int` 值小于原始值,则需要向上取整,即将结果加 1。最后返回向上取整后的值。
需要注意的是,这个函数只适用于正数和 0,如果对负数进行向上取整,需要做一些额外的处理。
相关问题
从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,编写函数分别实现下列功能: (1)统计不及格人数并打印不及格学生名单; (2)统计成绩在全班平均分(向上取整)及平均分
以下是使用 C++ 实现上述功能的代码:
```cpp
#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
void printFailList(vector<string>& names, vector<int>& scores) {
int count = 0;
cout << "不及格的学生有:" << endl;
for (int i = 0; i < names.size(); i++) {
if (scores[i] < 60) {
cout << names[i] << ",成绩为:" << scores[i] << endl;
count++;
}
}
cout << "不及格人数为:" << count << endl;
}
void printAverage(vector<string>& names, vector<int>& scores) {
int sum = 0;
for (int i = 0; i < scores.size(); i++) {
sum += scores[i];
}
int average = ceil((double)sum / scores.size());
cout << "全班平均分为:" << average << endl;
int count = 0;
cout << "高于等于平均分的学生有:" << endl;
for (int i = 0; i < names.size(); i++) {
if (scores[i] >= average) {
cout << names[i] << ",成绩为:" << scores[i] << endl;
count++;
}
}
cout << "高于等于平均分的人数为:" << count << endl;
}
int main() {
vector<string> names;
vector<int> scores;
cout << "请输入学生的名字和成绩(成绩为负数时结束输入):" << endl;
string name;
int score;
while (true) {
cin >> name >> score;
if (score < 0) {
break;
}
names.push_back(name);
scores.push_back(score);
}
printFailList(names, scores);
printAverage(names, scores);
return 0;
}
```
代码说明:
1. 使用 vector 存储学生名字和成绩,分别对应 `names` 和 `scores` 向量。
2. `printFailList` 函数用于统计不及格人数并打印不及格学生名单。遍历 `scores` 向量,如果成绩小于 60,则输出对应的学生名字和成绩,并将计数器加一。最后输出不及格人数。
3. `printAverage` 函数用于统计成绩在全班平均分及平均分以上的学生人数,并打印学生名字和成绩。首先计算全班平均分,并向上取整。然后遍历 `scores` 向量,如果成绩高于等于平均分,则输出对应的学生名字和成绩,并将计数器加一。最后输出高于等于平均分的人数。
4. 在 `main` 函数中,使用循环从键盘读入学生名字和成绩,直到成绩为负数时结束输入。然后调用 `printFailList` 和 `printAverage` 函数分别输出不及格学生名单和成绩在全班平均分及平均分以上的学生人数。
以下代码使用C++编写:在 Minecraft 中,基本的建筑元素是边长为 1 个单位的立方体,Tony 想用 N 个这种小立方体搭建一个长方体,并用他珍藏已久的贴纸对其进行装饰。如果一张贴纸可以贴满小立方体的一个面。 那么,他最少需要用掉多少张贴纸呢? 输入格式 一个整数 � N ,表示小明所拥有的小立方体的个数。 输出格式 一个整数,表示拼出的长方体最少需要用掉多少张贴纸。
以下是使用C++编写的代码实现:
```c++
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int n;
cin >> n;
int l = ceil(pow(n, 1.0 / 3)); // 计算长方体可能的边长
// 计算长方体每个面的贴纸需求
int s1 = ceil(1.0 * l * l / 2);
int s2 = ceil(1.0 * l * (n / l) / 2);
int s3 = ceil(1.0 * l * (n / l) / 2);
// 计算长方体剩余面的贴纸需求
int s4 = 0;
if (n % l != 0) {
s4 = ceil(1.0 * l * ((n / l) + 1) / 2);
}
// 计算总贴纸需求
int ans = s1 + s2 + s3 + s4;
cout << ans << endl;
return 0;
}
```
其中,ceil()函数用于向上取整,pow()函数用于计算次方。
阅读全文