.. . .. . . S. . . . . .. 实验__8__实验报告 教学班级:_26_ 学生学号:_201_ 学生:_ _ 实验日期:__5.26___ 实验地点:_________(机房) 指导教师签名:__________ 实验成绩:___________
一、实验目的 1.掌握对数值型一维数组的使用方法; 2.掌握对数组的插入、删除、修改、排序和查找等常用算法。
二、实验任务 1. 设有一批学生的程序设计课程的考试成绩(学生人数最多为N=100人,数据如下: 学号 程序设计成绩 2015112842 余学成 83 2015112324 思德 72 ┇ ┇ ┇
(提示:可以建立三个一维数组来存放学生的数据,其中:学号为一个long类型的数组studentID,为一个string类型的数组name,成绩为一个int类型的数组grade) (1)由键盘获取学生人数n,要求学生人数n的取值围11到N-2; (2)由键盘获取学生的相关数据; (3)用选择排序法将学生的数据按学号进行升序排列并输出排序后的学生数据;
2. 在任务1的基础上,在学生数据中,完成以下任务: (1)键盘输入一个学生的学号,用折半查找法查找是否有该学生,若有该学生则输出该学生的所有信息,按如下格式输出:
学号 程序设计成绩 2015112324 思德 72
若没有该学生,则输出“查无此人”的信息。 (2)插入一个新学生的数据,要求插入后学生的数据任按学号升序排列。
⒊ 在任务1的基础上,在学生数据中,完成以下任务: ⑴ 用选择排序法将学生数据按学生程序设计课程成绩降序排列。 ⑵ 键盘输入一个学生的学号和程序设计课程的新成绩,在学生数据中查找是否有该学生,若有该学生则用键盘输入的新成绩替换该学生的原成绩,否则输出“查无此人”的信息。
三、实验结果(源程序 + 注释) .. . .. . . S. . . . . .. //输入并升序排列学生的成绩 #include #include #include using namespace std; void main() { cout << "Name:" << endl; cout << "Number:20" << endl; long studentID[100], trans1;//定义两个长整型变量,其中一个是数组 string name[100], trans2;//定义两个字符串类变量,其中一个是数组 int grade[100], n, i, j, trans3; cout << "请输入学生人数n (11≤n≤98)" << endl; cin >> n;//从键盘输入学生的人数 for (i = 0; i <= n - 1; i++)//利用循环结构录入各学生的信息 { cout << "请依次输入第" << i + 1 << "个学生的学号、、成绩" << endl; cin >> studentID[i] >> name[i] >> grade[i]; } for (i = 0; i <= n - 1; i++)//利用嵌套循环和条件语句将信息按学号进行升序排列 { for (j = i + 1; j <= n - 1; j++) { if (studentID[i] > studentID[j]) { trans1 = studentID[i]; studentID[i] = studentID[j]; studentID[j] = trans1; trans2 = name[i]; name[i] = name[j]; name[j] = trans2; trans3 = grade[i]; grade[i] = grade[j]; grade[j] = trans3; } } } cout << "按学号升序排序后学生的成绩信息为:" << endl; cout << setw(10) << "学号" << setw(10) << "" << setw(10) << "成绩" << endl;//限定输出结果格式 for (i = 0; i <= n - 1; i++)//按特定格式输出排列后的学生信息 { cout << setw(10) << studentID[i] << setw(10) << name[i] << setw(10) << grade[i] << endl; } /*键盘输入一个学生的学号,用折半查找法查找是否有该学生*/ int bot = n - 1, mid, top = 0; long number; cout << "请输入待查学生的学号" << endl; .. . .. . . S. . . . . .. cin >> number; while (top <= bot)//折半查找法查找信息库中某个学号的学生 { mid = (bot + top) / 2; if (studentID[mid] == number) break; else if (studentID[mid] > number) top = mid + 1; else if (studentID[mid] < number) bot = mid - 1; } if (bot >= top)//当这个学生存在时,以特定格式输出该学生的信息 { cout << "该学生的信息为:" << endl; cout << setw(10) << "学号" << setw(10) << "" << setw(10) << "成绩" << endl; cout << setw(10) << number << setw(10) << name[mid] << setw(10) << grade[mid] << endl; } else if(top>=bot) cout << "查无此人" << endl;//当该学生不存在时,显示“查无此人” /*插入一个新学生的数据,要求插入后学生的数据按学号升序排列*/ cout << "请依次输入要插入的学生学号、、成绩信息:" << endl; cin >> studentID[n] >> name[n] >> grade[n];//录入要插入的学生的信息 for (i = 0; i <= n; i++)//利用嵌套循环和条件语句,将插入后学生的数据按学号升序排列 { for (j = i + 1; j <= n; j++) { if (studentID[i] > studentID[j]) { trans1 = studentID[i]; studentID[i] = studentID[j]; studentID[j] = trans1; trans2 = name[i]; name[i] = name[j]; name[j] = trans2; trans3 = grade[i]; grade[i] = grade[j]; grade[j] = trans3; } } } cout << "插入并排序后学生的成绩信息为:" << endl; cout << setw(10) << "学号" << setw(10) << "" << setw(10) << "成绩" << endl;//限定提示语句的输出格式 for (i = 0; i <= n; i++) { cout << setw(10) << studentID[i] << setw(10) << name[i] << setw(10) << grade[i] << endl;//输出排序结果 } .. . .. . . S. . . . . .. }
/*在任务1的基础上,在学生数据中,完成以下任务: ⑴ 用选择排序法将学生数据按学生程序设计课程成绩降序排列。 ⑵ 键盘输入一个学生的学号和程序设计课程的新成绩,在学生数据中查找是否有该学生,若有该学生则用键盘输入的新成绩替换该学生的原成绩,否则输出“查无此人”的信息。 */ #include #include #include using namespace std; void main() { cout << "Name:" << endl; cout << "Number:201" << endl; long studentID[100], trans1;//定义两个长整型变量,其中一个是数组 string name[100], trans2;//定义两个字符串类变量,其中一个是数组 .. . .. . . S. . . . . .. int grade[100], n, i, j, trans3; cout << "请输入学生人数n (11≤n≤98)" << endl; cin >> n; for (i = 0; i <= n - 1; i++) { cout << "请依次输入第" << i + 1 << "个学生的学号、、成绩" << endl; cin >> studentID[i] >> name[i] >> grade[i];//利用循环结构录入各学生的信息 } for (i = 0; i <= n - 1; i++)//利用嵌套循环和条件语句将信息按学号进行升序排列 { for (j = i + 1; j <= n - 1; j++) { if (studentID[i] > studentID[j]) { trans1 = studentID[i]; studentID[i] = studentID[j]; studentID[j] = trans1; trans2 = name[i]; name[i] = name[j]; name[j] = trans2; trans3 = grade[i]; grade[i] = grade[j]; grade[j] = trans3; } } } cout << "按学号升序排序后学生的成绩信息为:" << endl; cout << setw(10) << "学号" << setw(10) << "" << setw(10) << "成绩" << endl; for (i = 0; i <= n - 1; i++)//输出按学号进行升序排列后的学生信息 { cout << setw(10) << studentID[i] << setw(10) << name[i] << setw(10) << grade[i] << endl; } for (i = 0; i <= n - 1; i++)//利用嵌套循环和条件语句将信息按成绩进行降序排列 { for (j = i + 1; j <= n - 1; j++) { if (grade[i] < grade[j]) { trans1 = studentID[i]; studentID[i] = studentID[j]; studentID[j] = trans1; trans2 = name[i]; name[i] = name[j]; name[j] = trans2; trans3 = grade[i]; grade[i] = grade[j]; grade[j] = trans3; } } } cout << "按成绩降序排序后学生的成绩信息为:" << endl; cout << setw(10) << "学号" << setw(10) << "" << setw(10) << "成绩" << endl; for (i = 0; i <= n - 1; i++)//输出按成绩进行降序排列后的学生信息