西南交大c++实验报告8

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验__8__实验报告

教学班级:_26_ 学生学号:_201_ 学生姓名:_ _

实验日期:__5.26___ 实验地点:_________(机房)

指导教师签名:__________ 实验成绩:___________

一、实验目的

1.掌握对数值型一维数组的使用方法;

2.掌握对数组的插入、删除、修改、排序和查找等常用算法。

二、实验任务

1. 设有一批学生的程序设计课程的考试成绩(学生人数最多为N=100人,数据如下:

(提示:可以建立三个一维数组来存放学生的数据,其中:学号为一个long类型的数组studentID,姓名为一个string类型的数组name,成绩为一个int类型的数组grade)(1)由键盘获取学生人数n,要求学生人数n的取值范围11到N-2;

(2)由键盘获取学生的相关数据;

(3)用选择排序法将学生的数据按学号进行升序排列并输出排序后的学生数据;

2. 在任务1的基础上,在学生数据中,完成以下任务:

(1)键盘输入一个学生的学号,用折半查找法查找是否有该学生,若有该学生则输出该学生的所有信息,按如下格式输出:

学号姓名程序设计成绩

2015112324 张思德72

若没有该学生,则输出“查无此人”的信息。

(2)插入一个新学生的数据,要求插入后学生的数据任按学号升序排列。

⒊在任务1的基础上,在学生数据中,完成以下任务:

⑴用选择排序法将学生数据按学生程序设计课程成绩降序排列。

⑵键盘输入一个学生的学号和程序设计课程的新成绩,在学生数据中查找是否有该学生,若有该学生则用键盘输入的新成绩替换该学生的原成绩,否则输出“查无此人”的信息。

三、实验结果(源程序 + 注释)

//输入并升序排列学生的成绩

#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;

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;//输出排序结果

相关文档
最新文档