将 5 个 for 循环压缩为,将数组显示为 1
Condensing for 5 for-loops that display an array into 1?
有没有办法将五个for循环压缩为一个,并让它们为每个循环显示不同的变量和字母?目前,我有一个循环和其他五个循环,如果/否则保持它压缩,但这似乎是多余的,并且违背了制作循环的目的。
所以我决定发布整个源代码,以便人们可以更多地理解我想要得到什么。这是一个每次运行时都会创建 100 个随机成绩的程序,我必须对它们进行排序,然后显示它们。我知道我可以做 5 个循环,但我想编写更精简和高效的代码。
困难的部分是编写一个循环,即使数组的大小每次运行都会变化,该循环也可以一致地显示 5 个数组。
#include <iostream>
#include <vector>
using namespace std;
int main(){
int grades[100];
int sizeA=0, sizeB=0, sizeC=0, sizeD=0, sizeF=0;
std::vector<int> gradeA, gradeB, gradeC, gradeD, gradeF;
srand(time(NULL));
for(int i = 0; i < 100; i++){
grades[i] = rand() % 100 + 1;
}
for(int i = 0; i < 100; i++){
if (grades[i] < 100 || grades[i] > 0){
if (grades[i]>=90)
gradeA.push_back(grades[i]);
else if (grades[i]>=70)
gradeB.push_back(grades[i]);
else if (grades[i]>=50)
gradeC.push_back(grades[i]);
else if (grades[i]>=20)
gradeD.push_back(grades[i]);
else if (grades[i])
gradeF.push_back(grades[i]);
} else {
cout << "uhh.. ";
return(0);
}
}
sizeA = gradeA.size();
sizeB = gradeB.size();
sizeC = gradeC.size();
sizeD = gradeD.size();
sizeF = gradeF.size();
/**toggle ? showgrades(gradeA, size) : (int?)null;**/
}
如何使用函数进行循环并使用所需信息调用它
void printGrades(const std::vector<int>& grades, char level) {
cout << num << " " << level << " students: ";
for(int i = 0; i < grades.size(); i++){
cout << grades[i] << " ";
cout << endl;
}
因此,当您想全部打印它们时:
printGrades(gradeA, 'A');
printGrades(gradeB, 'B');
printGrades(gradeC, 'C');
printGrades(gradeD, 'D');
printGrades(gradeF, 'F');
如果我是你,我会创建一个班级学生,然后创建一个二维数组,其中每一行代表学生的类别,一行的列数,学生的数量。
这可以表示为大小为 5 的固定大小数组,其中每个单元格都是 class Student
的std::vector
。
最小工作示例:
#include <iostream>
#include <vector>
using namespace std;
class Student {
public:
Student(int grade, char category) : grade(grade), category(category) {}
int getGrade(void) { return grade; }
char getCategory(void) { return category; }
private:
int grade; // 0, ..., 20
char category; // A, ..., F
};
int main(void) {
vector<class Student> std[5]; // cell 0 is for A students, ..., cel 4 is for F students
std[0].push_back({20, 'A'}); std[0].push_back({19, 'A'});
std[1].push_back({15, 'B'});
std[2].push_back({17, 'C'}); std[2].push_back({17, 'C'});
std[3].push_back({14, 'D'});
std[4].push_back({15, 'F'});
for (int i = 0; i < 5; ++i) {
if(std[i].size()) {
cout << std[i].size() << " " << std[i][0].getCategory() << " students: ";
for (auto& student : std[i]) {
cout << student.getGrade() << " ";
}
cout << endl;
}
}
return 0;
}
输出:
2 A students: 20 19
1 B students: 15
2 C students: 17 17
1 D students: 14
1 F students: 15
附录:
我知道你想让代码紧凑,但是这个:
for(int a = 0; a < sizeA; a++){
cout << gradeA[a] << " ";
} aS = 1; bS = 0; cout << endl;
并不酷,因为它对读者来说是不可读的。我建议你把它改成:
for(int a = 0; a < sizeA; a++){
cout << gradeA[a] << " ";
}
aS = 1;
bS = 0;
cout << endl;
因为读者希望在右大括号后看不到任何代码。这是一个笼统的说法。
相关文章:
- 显示数组中的学生 ID 和最高分
- 我编写了一个程序来显示数组的内容,但它显示的是它的地址
- 为什么断点显示数组的第二个值是一个大数字?额外学分工作
- 使用指针显示数组的值
- 我无法显示包含整数最大值的索引. 但我可以显示数组中整数的最高值
- 数组:如何在指定索引之前显示数组的第一个和最后一个元素以及数组元素的差异?
- 使用增量/减少操作员在C 中显示数组的奇怪结果
- 将25个甚至整数存储到一个名为intlist的整数阵列中,然后在屏幕上显示数组,并在屏幕上显示名为fivintegers
- 显示数组的问题.一切都放在一个单独的行中,但不放入单独的列中
- strlen 显示数组元素的数量错误
- 我的函数不会用" "替换".",也不会按预期显示数组
- 以C++为单位乘以并显示数组的值
- 找不到标识符,尝试在 C++ 中显示数组值
- 如何显示数组名称中的名称
- 在列表小部件 Qt C++中显示数组内容
- c++将.txt文件中的字符串添加到字符串数组中,并显示数组的值
- C++如何将数组传递给函数,然后调用它来显示数组的值
- 从函数更新(覆盖)和显示数组
- 在单独的数据中显示数组数据
- 仅显示数组文本文件中的第一个字母