有我们101个学生的成绩,编程实现:“查找成绩等于某一个特定的成绩,若查找成功则输出该生学号、班级、姓名,若失败则提示成绩不存在”
(1)用数组存放这组成绩,实现冒泡排序算法;
(2)在排序结果中,实现二分查找算法;
要求:1.编写C语言或C++源代码,调试成功,运行结果截图;2.形成实验报告(电子版),包括:(1)题目要求及分析;(2)设计:逻辑结构,存储结构,算法描述(如流程图);(3)运行过程,结果分析,效率分析;(4)结论
#include <iostream>
#include <string>
using namespace std;
struct Student {
int id; // 学号
string name; // 姓名
string className; // 班级
double score; // 成绩
};
void bubbleSort(Student arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j].score > arr[j + 1].score) {
swap(arr[j], arr[j + 1]);
}
}
}
}
int binarySearch(Student arr[], int n, double target) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid].score == target) {
return mid;
} else if (arr[mid].score < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
int main() {
Student students[101] = {
{1, "张三", "一班", 88.5},
{2, "李四", "一班", 92.0},
// ... 其他学生的信息
{101, "王五", "五班", 73.5}
};
int n = 101;
double targetScore = 90.0;
bubbleSort(students, n);
int index = binarySearch(students, n, targetScore);
if (index != -1) {
cout << "该学生的信息为:" << endl;
cout << "学号:" << students[index].id << endl;
cout << "班级:" << students[index].className << endl;
cout << "姓名:" << students[index].name << endl;
} else {
cout << "成绩不存在" << endl;
}
return 0;
}
上述代码中,我们使用了结构体 Student
存储每个学生的信息,然后使用冒泡排序算法对学生信息按照成绩从小到大进行排序,最后使用二分查找算法查找成绩等于特定成绩的学生信息。
运行结果截图:
实验报告:
本题要求我们使用 C++ 编写一个程序,实现对 101 个学生的成绩进行排序和查找。具体要求如下:
2.1 逻辑结构
本程序的逻辑结构如下:
2.2 存储结构
本程序使用结构体 Student
存储每个学生的信息,包括学号、姓名、班级和成绩。使用数组存储这组成绩。
2.3 算法描述
2.3.1 冒泡排序算法
冒泡排序算法的基本思想是通过不断比较相邻两个元素的大小,将较大的元素向后移动,直到整个序列都有序为止。
具体实现如下:
void bubbleSort(Student arr[], int n) {
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - i - 1; j++) {
if (arr[j].score > arr[j + 1].score) {
swap(arr[j], arr[j + 1]);
}
}
}
}
2.3.2 二分查找算法
二分查找算法的基本思想是将查找区间一分为二,然后判断目标元素在哪个子区间中,不断缩小查找范围,直到找到目标元素或者查找区间为空为止。
具体实现如下:
int binarySearch(Student arr[], int n, double target) {
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (arr[mid].score == target) {
return mid;
} else if (arr[mid].score < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
本程序的运行过程如下:
students
,并定义了一个特定的成绩 targetScore
;本程序的结果如下:
本程序的效率分析如下:
因此,本程序的时间复杂度为 O(n^2 + logn),其中 n = 101。由于 n 的值较小,因此本程序的时间复杂度较低,可以满足实际需求。
引用 皆我百晓生 小程序回复内容作答:
以下是使用C++实现冒泡排序和二分查找的示例代码:
#include <iostream>
#include <string>
struct Student {
int id;
std::string className;
std::string name;
int score;
};
// 冒泡排序算法
void bubbleSort(Student arr[], int size) {
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j].score > arr[j + 1].score) {
std::swap(arr[j], arr[j + 1]);
}
}
}
}
// 二分查找算法
int binarySearch(Student arr[], int left, int right, int target) {
while (left <= right) {
int mid = left + (right - left) / 2;
if (arr[mid].score == target) {
return mid;
}
if (arr[mid].score < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1; // 查找失败
}
int main() {
const int size = 101;
Student students[size] = {
// 初始化学生数据,请根据实际情况自行修改
// {id, className, name, score}
{1, "Class A", "Alice", 80},
{2, "Class A", "Bob", 90},
// ...
{101, "Class B", "Zoe", 85},
};
int targetScore; // 目标成绩
std::cout << "请输入要查找的成绩:";
std::cin >> targetScore;
// 使用冒泡排序对学生数组进行排序
bubbleSort(students, size);
// 使用二分查找算法查找目标成绩
int index = binarySearch(students, 0, size - 1, targetScore);
if (index != -1) {
std::cout << "查找成功!学生信息如下:" << std::endl;
std::cout << "学号: " << students[index].id << std::endl;
std::cout << "班级: " << students[index].className << std::endl;
std::cout << "姓名: " << students[index].name << std::endl;
} else {
std::cout << "成绩不存在!" << std::endl;
}
return 0;
}
请根据需要自行修改学生数据部分,并运行代码进行测试。根据题目要求,你还需要完成实验报告的其他部分,例如逻辑结构、存储结构、算法描述、运行过程和结果分析等。希望这能帮助到你。
【相关推荐】