书签 分享 收藏 举报 版权申诉 / 39
上传文档赚钱

类型程序设计与问题求解下实验答案(DOC 39页).doc

  • 上传人(卖家):2023DOC
  • 文档编号:5868030
  • 上传时间:2023-05-12
  • 格式:DOC
  • 页数:39
  • 大小:2.47MB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《程序设计与问题求解下实验答案(DOC 39页).doc》由用户(2023DOC)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    程序设计与问题求解下实验答案DOC 39页 程序设计 问题 求解 实验 答案 DOC 39
    资源描述:

    1、.实验 数组、结构体和函数综合编程练习1学生成绩统计从键盘输入一个班(全班最多不超过 30 人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:(1)统计不及格人数并打印不及格学生名单;(2)统计成绩在全班平均分及平均分之上的学生人数, 并打印这些学生的名单;(3)统计各分数段的学生人数及所占的百分比。注:将成绩分为六个分数段, 60 分以下为第 0 段,6069 为第 1 段,7079 为第2 段,8089 为第 3 段,9099为第 4 段,100 分为第 5 段。编程要求 :1. 较好的用户输入输出提示信息2. 使用子函数来实现上述各个功能, 并且要使用结构体数组来实现

    2、, 该结构体中包括学生学号和成绩3. 最好不要使用全局变量#include #define ARR_SIZE 30typedef struct tagStudentlong num;/学生学号float score;/学生分数Student;int ReadScore(Student stu);int GetFail(Student stu, int n);float GetAver(Student stu, int n);int GetAboveAver(Student stu, int n);void GetDetail(Student stu, int n);main().int n,

    3、fail, aboveAver;Student stuARR_SIZE;printf(Please enter num and score until score= 0)i+;scanf(%ld%f, &stui.num, &stui.score);return i;/* 函数功能:统计不及格人数并打印不及格学生名单函数参数:存放学生信息的 Student 结构体数组整型变量 n,存放学生总数函数返回值:不及格人数*/int GetFail(Student stu, int n)int i, count;printf(Fail:nnumber-scoren);count = 0;for (i=

    4、0; in; i+)if (stui.score 60)printf(%ld-%.0fn, stui.num, stui.score);count+;return count;/* 函数功能:计算全班平均分函数参数:存放学生信息的 Student 结构体数组整型变量 n,存放学生总数函数返回值:平均分*/float GetAver(Student stu, int n)int i;float sum = 0;for (i=0; in; i+)sum = sum + stui.score;return sum/n;/* 函数功能:统计成绩在全班平均分及平均分之上的学生人数并打印其学生名单函数参数

    5、:存放学生信息的 Student 结构体数组整型变量 n,存放学生总数函数返回值:成绩在全班平均分及平均分之上的学生人数*/int GetAboveAver(Student stu, int n)int i, count;float aver;aver = GetAver(stu, n);printf(aver = %fn, aver);printf(Above aver:nnumber-scoren);count = 0;for (i=0; i= aver)printf(%ld-%.0fn, stui.num, stui.score);count+;return count;/* 函数功能:

    6、统计各分数段的学生人数及所占的百分比函数参数:存放学生信息的 Student 结构体数组整型变量 n,存放学生总数函数返回值:无*/void GetDetail(Student stu, int n)int i, j, stuLevel6;for (i=0; i6; i+)stuLeveli=0;for (i=0; in; i+)if (stui.score 60)j = 0;elsej = (int)stui.score - 50) / 10;stuLevelj+;for (i=0; i6; i+)if (i = 0)printf( 60 %d %.2f%n, stuLeveli,(floa

    7、t)stuLeveli/(float)n*100);else if (i = 5)printf( %d %d %.2f%n, (i+5)*10, stuLeveli,(float)stuLeveli/(float)n*100);elseprintf(%d-%d %d %.2f%n, (i+5)*10,(i+5)*10+9,stuLeveli,(float)stuLeveli/(float)n*100);2成绩排名次某班期末考试科目为数学( MT)、英语(EN)和物理( PH),有最多不超过 30 人参加考试。要求:(1)计算每个学生的总分和平均分;(2)按总分成绩由高到低排出成绩的名次;(3)

    8、打印出名次表,表格内包括学生编号、各科分数、总分和平均分;(4)任意输入一个学号,能够查找出该学生在班级中的排名及其考试分数#include #define STU 30typedef struct tagStudentlong num;/ 学号float aver;/ 平均分int sum;/ 总分int math;/ 数学( MT)int english;/ 英语( EN)int physics;/ 物理( PH)Student;void Input(Student stu, int n);void GetSumAver(Student stu,int n);void Sort(Stude

    9、nt stu,int n);void Print(Student stu,int n);int Search(Student stu,int n,long x);main()int n, pos;long x;Student stuSTU;printf(Please enter the total number of the students(n=30):);scanf(%d, &n); /* 输入参加考试的学生人数 */printf(Enter No. and score as: MT EN PHn);Input(stu, n); /* 输入学生成绩 */GetSumAver(stu,n);

    10、 /* 计算总分和平均分 */printf(Before sort:n);Print(stu,n);Sort(stu,n); /* 排名次 */printf(After sort:n);Print(stu,n);printf(Please enter searching number:);scanf(%ld, &x); /* 以长整型格式输入待查找学生的学号 */pos = Search(stu, n, x); /* 名次查询 */if (pos != -1)printf(position:t NO t MT t EN t PH t SUM t A VERn);printf(%8dt%4ldt

    11、%4dt%4dt%4dt%5dt%5.0fn,pos+1,stupos.num, stupos.math,stupos.english,stupos.physics, stupos.sum,stupos.aver);elseprintf(Not found!n);/* 函数功能:输入某班学生期末考试三门课程成绩函数参数: 结构体数组 stu,存放学生信息整型变量 n,存放学生人数函数返回值:无*/void Input(Student stu, int n)int i;for (i=0; in; i+)scanf(%ld, &stui.num);scanf(%d, &stui.math);sca

    12、nf(%d, &stui.english);scanf(%d, &stui.physics);/* 函数功能:计算每个学生的总分和平均分函数参数: 结构体数组 stu,存放学生信息整型变量 n,存放学生人数函数返回值:无*/void GetSumAver(Student stu,int n)int i;for (i=0; in; i+)stui.sum = stui.english+stui.math+stui.physics;stui.aver = (float)stui.sum / 3;/* 函数功能:按总分成绩由高到低排出成绩的名次函数参数: 结构体数组 stu,存放学生信息整型变量 n

    13、,存放学生人数函数返回值:无*/void Sort(Student stu,int n)int i,j,k;Student tempStu;for (i=0; in-1; i+)k = i;for (j=i+1; j stuk.sum) k = j;if (k != i)tempStu=stui;stui=stuk;stuk=tempStu;/* 函数功能: 打印名次表,表格内包括学生编号、各科分数、总分和平均分函数参数: 结构体数组 stu,存放学生信息整型变量 n,存放学生人数函数返回值:无*/void Print(Student stu,int n)int i;printf( NO t|

    14、 MT t EN t PH t SUM t A VERn);printf(-n);for (i=0; in; i+)printf(%ldt| , stui.num);printf(%4dt%4dt%4dt, stui.math,stui.english,stui.physics);printf(%5dt%5.0fn, stui.sum, stui.aver);/* 函数功能:查找学生的学号函数参数: 结构体数组 stu,存放学生信息整型变量 n,存放学生人数长整型变量 x,存放待查找学生的学号函数返回值:找到时,返回学生学号在数组中的下标位置,否则返回值 -1*/int Search(Stud

    15、ent stu,int n,long x)int i;for (i=0; in; i+)if (stui.num = x) return(i);return (-1);实验 递归程序设计求游戏人员的年龄4. 求游戏人员的年龄#include int age(int n);int main()int age5;age5=age(5);printf( 第 5 个人的年龄为 %dn,age5);int age(int n)if(n=1)return 10;elsereturn age(n-1)+2;求最大公约数#include int gcd(int x,int y);int main()int x

    16、,y;int gcdResult;printf( 输入要计算最大公约数的两个数: );scanf(%d%d,&x,&y);gcdResult=gcd(x,y);printf( 最大公约数为 %dn,gcdResult);int gcd(int x,int y)if (x=y)return x;else if (xy)return gcd(x-y,y);else return gcd(x,y-x);/*xy*/实验 链表编程/注:该程序并没有出错控制,假设用户输入都是正常的范围内#include using namespace std;struct Nodeint data;Node *next

    17、;void createList(Node *head,int num);int findByNo(Node *head,int num);int findByData(Node *head,int data);void insertData(Node *head,int data,int num);void deleteData(Node *head,int num);void printOut(Node *head);void main()/int a6=21,23,25,27,29,31;int num;int data;Node *head=new Node();cout 请输入 6

    18、个结点的值: ;createList(head,6);coutnum;data=findByNo(head,num);cout 查找到的结点的值为 datadata;num=findByData(head,data);cout 查找到的结点的序号为: numendl;coutnum;coutdata;insertData(head,data,num);coutnum;deleteData(head,num);int findByNo(Node *head,int num)int count=0;Node *p=head;while (p-next!=NULL)p=p-next;count+;i

    19、f (count=num)return p-data;int findByData(Node *head,int data)Node *p=head;int count=0;while (p-next!=NULL)p=p-next;count+;if (p-data=data)return count;/输入序号 num 和值 data。在序号为 num 的结点后插入 data,并输出该链表void insertData(Node *head,int data,int num)int count=0;Node *p=head;while (p-next!=NULL)p=p-next;count

    20、+;if (count=num)Node *q=new Node();q-data=data;q-next=p-next;p-next=q;printOut(head);return;/输入序号 num,删除序号为 num 的结点,并输出该链表void deleteData(Node *head,int num)int count=0;Node *p=head-next;Node *pre=head;while (p!=NULL)count+;if (count=num)/ 删除节点pre-next=p-next;delete p;printOut(head);return;elsepre=p

    21、;p=p-next;void printOut(Node *head)Node *p=head-next;while (p!=NULL)printf(%d ,p-data);p=p-next;coutendl;void createList(Node *head,int num)Node *p;Node *q=head;for (int i=0;ip-data;p-next=NULL;q-next=p;q=q-next;实验 结构、链表综合编程注意:下面的代码用到了文件,但是学生编程并不要求使用文件【编写程序】:建立多个班级学生成绩链表,其中,每个结点包含下面这些信息:学号、姓名、成绩要求完成

    22、下面的功能:1建立 2 个班学生成绩的无序链表,其中每个班包含 10 个结点数据(输入或从文件中读取每个同学的信息) ,将每个班的成绩链表按成绩高低排序后分别输出该链表;2将 2 个班级学生成绩合并(按成绩高低排序)后输出;3查找学生成绩:通过输入同学的学号,将该同学从链表中找出,并输出该同学信息;如果找不到,则输出“无此学生” 。/class1.txt101 a 56102 b 78103 c 69104 d 26105 e 60106 f 66107 g 70108 h 90109 i 92110 j 99/class2.txt201 aa 26202 bb 55203 cc 78204

    23、dd 46205 ee 89206 ff 65207 gg 99208 hh 85209 ii 73210 jj 96代码如下:#include using namespace std;#include struct Nodechar no5;char name6;double perform;Node *next;void printOut(Node *head)Node *p=head-next;while (p!=NULL)coutno name performnext;coutendl;void main()Node *q;Node *p;int i;/读入班级 1,构成链表Node

    24、*headClass1=new Node();q=headClass1;ifstream fin1(class1.txt);if (!fin1)cout 文件 1 打开失败! endl;return;for (i=0;ip-nop-namep-perform;p-next=NULL;q-next=p;q=q-next;cout 班级 1 原始数据为: endl;printOut(headClass1);/读入班级 2,构成链表Node *headClass2=new Node();q=headClass2;ifstream fin2(class2.txt);if (!fin2)cout 文件

    25、1 打开失败! endl;return;for (i=0;ip-nop-namep-perform;p-next=NULL;q-next=p;q=q-next;cout 班级 2 原始数据为: next;Node *temp=new Node();Node *max;while (q!=NULL)temp-perform=q-perform;max=q;p=q-next;while (p!=NULL)if (p-performtemp-perform)max=p;temp-perform=p-perform;p=p-next;strcpy(temp-no,q-no);strcpy(temp-n

    26、ame,q-name);temp-perform=q-perform;strcpy(q-no,max-no);strcpy(q-name,max-name);q-perform=max-perform;strcpy(max-no,temp-no);strcpy(max-name,temp-name);max-perform=temp-perform;q=q-next;delete temp;temp=NULL;cout 班级 1 排序后数据为: next;temp=new Node();while (q!=NULL)temp-perform=q-perform;max=q;p=q-next;w

    27、hile (p!=NULL)if (p-performtemp-perform)max=p;temp-perform=p-perform;p=p-next;strcpy(temp-no,q-no);strcpy(temp-name,q-name);temp-perform=q-perform;strcpy(q-no,max-no);strcpy(q-name,max-name);q-perform=max-perform;strcpy(max-no,temp-no);strcpy(max-name,temp-name);max-perform=temp-perform;q=q-next;del

    28、ete temp;temp=NULL;cout 班级 2 排序后数据为: next;q=headClass2-next;while (p!=NULL & q!=NULL)if (p-performq-perform)h-next=p;p=p-next;(h-next)-next=NULL;h=h-next;elseh-next=q;q=q-next;(h-next)-next=NULL;h=h-next;if (p!=NULL)h-next=p;else if(q!=NULL)h-next=q;headClass1=NULL;headClass2=NULL;/打印合并链表cout 合并后的结果

    29、为: endl;printOut(head);/查找学生 -/此时只有 head 合并为有学生的,别的两个链表都是空的了。char no5;coutno;h=head;bool isFind=false;while (h-next!=NULL)h=h-next;if (strcmp(h-no,no)=0)coutno name performendl;isFind=true;break;if (!isFind)cout 无此学生 endl;实验 类与对象/linkedList.h#ifndef LINKEDLIST_H_#define LINKEDLIST_H_#include using n

    30、amespace std;struct Nodeint data;Node *next;class LinkedListpublic:LinkedList(void)/ 生成头结点,方便后面的操作head=new Node;head-next=NULL;void readList(int num);/num 表示在初始构造链表时,读入结点的个数int findByNo(int num);int findByData(int data);void insertData(int data,int num);void deleteData(int num);void printOut();priva

    31、te:Node *head;#endif/linkedList.cpp#include linkedList.hint LinkedList:findByNo(int num)int count=0;Node *p=head;while (p-next!=NULL)p=p-next;count+;if (count=num)return p-data;return 0;int LinkedList:findByData(int data)Node *p=head;int count=0;while (p-next!=NULL)p=p-next;count+;if (p-data=data)re

    32、turn count;return 0;/输入序号 num 和值 data。在序号为 num 的结点后插入 data,并输出该链表void LinkedList:insertData(int data,int num)int count=0;Node *p=head;while (p-next!=NULL)p=p-next;count+;if (count=num)Node *q=new Node();q-data=data;q-next=p-next;p-next=q;printOut();return;/输入序号 num,删除序号为 num 的结点,并输出该链表void LinkedLis

    33、t:deleteData(int num)int count=0;Node *p=head-next;Node *pre=head;while (p!=NULL)count+;if (count=num)/ 删除节点pre-next=p-next;delete p;printOut();return;elsepre=p;p=p-next;void LinkedList:printOut()Node *p=head-next;while (p!=NULL)coutdata;p=p-next;coutendl;void LinkedList:readList(int num)Node *p;Nod

    34、e *q=head;for (int i=0;ip-data;p-next=NULL;q-next=p;q=q-next;/main.cpp#include using namespace std;#include linkedList.hvoid main()/int a6=21,23,25,27,29,31;int num;int data;LinkedList *pList=new LinkedList();coutreadList(6);coutprintOut();printf( 请输入要查找的结点的序号( 1-6):);cinnum;data=pList-findByNo(num)

    35、;cout 查找到的结点的值为 datadata;num=pList-findByData(data);cout 查找到的结点的序号为: numendl;coutnum;coutdata;pList-insertData(data,num);coutnum;pList-deleteData(num);实验 继承与多态/myShape.h#ifndef MYSHAPE_H_#define MYSHAPE_H_#include using namespace std;class shapepublic:virtual void area(void)=0;virtual void showarea(

    36、void)=0;protected:double m_area;class circle:public shapepublic:circle(double r)radius=r;void area(void);void showarea(void);protected:double radius;class rectangle:public shapepublic:rectangle(double l=0,double w=0)length=l;width=w;void area(void);void showarea(void);protected:double length;double width;#endif/myShape.cpp#include myShape.hvoid circle:area(void)m_area=3.14*radius*radius;void rectang

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:程序设计与问题求解下实验答案(DOC 39页).doc
    链接地址:https://www.163wenku.com/p-5868030.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库