漓江学堂_程序设计与问题求解_期末考试参考程序
- 格式:docx
- 大小:29.66 KB
- 文档页数:14
程序设计期末试题及答案1. 题目描述假设有一个学生成绩管理系统,具有以下功能:- 添加学生信息- 修改学生信息- 删除学生信息- 查询学生信息- 统计学生人数- 计算学生平均分请你设计一个基于面向对象编程思想的学生成绩管理系统。
2. 解题思路首先,我们需要定义一个Student类,该类包含以下属性:- 学生姓名- 学生学号- 学生成绩可以使用构造函数初始化这些属性,同时提供设置和获取属性值的方法。
接下来,我们需要设计一个ManageSystem类,该类用于实现学生成绩管理系统的各种功能。
我们可以将学生信息存储在一个列表中,通过列表的操作来实现添加、修改、删除和查询学生信息的功能。
具体来说,ManageSystem类需要实现以下方法:- 添加学生信息:接受学生姓名、学号和成绩作为参数,创建一个Student对象并将其添加到学生列表中。
- 修改学生信息:接受学生学号和新的学生信息作为参数,遍历学生列表,找到对应学号的学生对象并修改其属性值。
- 删除学生信息:接受学生学号作为参数,遍历学生列表,找到对应学号的学生对象并从列表中删除。
- 查询学生信息:接受学生学号作为参数,遍历学生列表,找到对应学号的学生对象并返回其属性值。
- 统计学生人数:返回学生列表的长度。
- 计算学生平均分:遍历学生列表,累加每个学生的成绩,并返回总成绩除以学生人数的结果。
3. 代码实现```pythonclass Student:def __init__(self, name, student_id, score): = nameself.score = scoredef get_name(self):return def get_student_id(self):return self.student_iddef get_score(self):return self.scoredef set_name(self, name): = namedef set_student_id(self, student_id):self.student_id = student_iddef set_score(self, score):self.score = scoreclass ManageSystem:def __init__(self):self.students = []def add_student(self, name, student_id, score): student = Student(name, student_id, score)def modify_student(self, student_id, name=None, score=None): for student in self.students:if student.get_student_id() == student_id:if name:student.set_name(name)if score:student.set_score(score)def delete_student(self, student_id):for student in self.students:if student.get_student_id() == student_id:self.students.remove(student)def query_student(self, student_id):for student in self.students:if student.get_student_id() == student_id:return studentdef count_students(self):return len(self.students)def calculate_average_score(self):total_score = 0for student in self.students:total_score += student.get_score()return total_score / len(self.students)```4. 程序使用示例```python# 创建学生成绩管理系统对象system = ManageSystem()# 添加学生信息system.add_student("张三", "001", 80)system.add_student("李四", "002", 90)system.add_student("王五", "003", 85)# 修改学生信息system.modify_student("002", name="赵六", score=95) # 删除学生信息system.delete_student("001")# 查询学生信息student = system.query_student("003")print(student.get_name()) # 输出:王五# 统计学生人数count = system.count_students()print(count) # 输出:2# 计算学生平均分average_score = system.calculate_average_score()print(average_score) # 输出:90.0```5. 总结通过以上设计和实现,我们可以得到一个基于面向对象编程思想的学生成绩管理系统。
程序设计题库及答案详解程序设计题库及答案详解是面向计算机科学与技术专业学生以及编程爱好者的一份重要学习资料。
它不仅包含了大量的编程题目,还提供了详细的解题思路和答案,帮助读者深入理解程序设计的原理和技巧。
# 一、基础题目1. 题目1:编写一个程序,实现两个整数的加法。
- 答案详解:首先定义两个整数变量,然后使用加法运算符将它们相加,并将结果存储在一个新变量中。
最后,输出结果。
2. 题目2:编写一个程序,实现字符串的反转。
- 答案详解:可以使用循环结构遍历字符串的每个字符,并将它们添加到一个新的字符串的开始位置。
完成后,输出反转后的字符串。
# 二、数组与循环3. 题目3:编写一个程序,找出数组中的最大值。
- 答案详解:首先初始化一个变量来存储最大值,然后使用循环遍历数组中的每个元素,并与当前最大值进行比较,如果当前元素更大,则更新最大值。
循环结束后,输出最大值。
4. 题目4:编写一个程序,实现数组的排序。
- 答案详解:可以使用冒泡排序或选择排序等算法。
以冒泡排序为例,通过多次遍历数组,比较相邻元素的大小,并在必要时交换它们的位置,直到整个数组有序。
# 三、函数与递归5. 题目5:编写一个函数,计算两个数的乘积。
- 答案详解:定义一个函数,接受两个参数,然后在函数内部使用乘法运算符计算它们的乘积,并返回结果。
6. 题目6:编写一个递归函数,计算阶乘。
- 答案详解:定义一个递归函数,如果输入的数为0或1,则返回1;否则,返回输入数乘以递归调用该函数的结果,输入数减1。
# 四、数据结构7. 题目7:编写一个程序,实现链表的插入操作。
- 答案详解:首先定义链表节点的结构,然后编写一个函数来创建新的节点。
在插入操作中,根据插入位置的不同,调整节点的指针指向。
8. 题目8:编写一个程序,实现二叉树的遍历。
- 答案详解:可以使用前序、中序或后序遍历。
以中序遍历为例,首先遍历左子树,然后访问根节点,最后遍历右子树。
C语言程序设计中国大学mooc课后章节答案期末考试题库2023年1.关于问题与问题求解,下列说法正确的是()。
答案:人类进行问题求解的一般思维过程可分为问题分析、提出假设和检验假设。
2.关于贪心算法(又称贪婪算法是指,在对问题求解时,总是做出在当前看来是最好的选择。
也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。
贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解),下列叙述中正确的是()。
答案:选择能产生问题最优解的最优量度标准是使用贪婪算法的核心。
3.将多个有序序列合并成一个有序序列,属于()。
答案:归并排序4.关于数学模型(Mathematical Model)和数学建模(MathematicalModeling),下列说法正确的是()。
答案:数学模型是对实际问题的数学抽象,是用数学符号、数学式子等对实际问题本质属性的抽象而又简洁的刻画。
5.在“八皇后问题”的问题求解中,采用“试探-失败返回-再试探”的问题求解方法,该方法属于()。
八皇后问题:在8×8格的国际象棋上摆放8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。
答案:回溯法6.关于算法(Algorithm),下列叙述正确的是()。
答案:算法可以用自然语言、流程图或伪代码描述,各有其优点。
7.关于抽象(Abstraction),下列说法正确的是()。
答案:抽象是从众多的事物中抽取出共同的、本质性的特征,而舍弃其非本质的特征。
8.关于哥尼斯堡七桥问题,下列叙述不正确的是()。
哥尼斯堡七桥问题:哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥。
如图所示:我们要解决的问题是可否存在一种方案可以走过所有的桥然后回到起点。
答案:欧拉将七桥问题归结为了一个图形形式的“一笔画”问题,从而得到了问题的解。
桂林电子科技大学试卷2010~2011 学年第二学期课号课程名称程序设计与问题求解II(A卷; 闭卷)适用班级(或年级、专业) __一、阅读程序,写出程序运行结果(每题10分,4题共40分)1.阅读下面程序,写出运行结果2.阅读下面程序,写出运行结果3.阅读下面程序,写出运行结果4.阅读下面程序,写出运行结果二、程序设计1.template<class datatype>bool LIST<datatype>::insert_data(datatype data,int i) //定义插入函数{ NODE<datatype> *current,*previous,*newnode;int j=1;if((i>length()+1)||(i<0)) //判插入位置的合法性{ cout<<"插入位置不正确,不能插入!\n";return false;}newnode=new NODE<datatype>; //申请新结点空间if(newnode==NULL) //判表满否{ cout<<"内存无空闲空间,不能插入!\n";return false;}newnode->data=data;newnode->next=NULL;previous=head;current=head->next;while(current!=NULL&&j<i) //寻找第i个元素{ previous=current;current=current->next; //指向下一个结点j++;};//链入新结点newnode->next=current;previous->next=newnode;return true;}2. scoretable.h的声明如下:class SCORE_TABLE{private:char couse_name[20];int student_score[30];Public:void init_name(char *name);//设置课程名称void init_score(int score[],int count);//使用score数据初始化成绩表student_scorefriend ostream &operator<<(ostram &,SCORE_TABLE &);//重载<<在显示器输出成绩表bool write_to_file(char *filename);//将student_score的内容保存到filename 文件中bool read_from_file(char *filename); //将filename文件中内容读入到student_score中}请完成下面问题:1)在scoretable.cpp中实现friend ostream &operator<<(ostram &,SCORE_TABLE &)函数(5分)ostream &operator<<( ostream &output, SCORE_TABLE &st ){int len,i;len = SCORE_TABLE.get_length();for ( i=0;i<len;i++){output << SCORE_TABLE.getdata(i)<<endl;}return output;}2)在scoretable.cpp中实现bool write_to_file(char *filename)函数,成功保存返回真,否则返回假(5分)bool SCORE_TABLE ::write_to_file(char *filename){int i;ofstream out(filename);if(!out) return 0;for (i=0;i<length;i++){out << student_score[i];}out.close();return 1;}3)在scoretable.cpp中实现bool read_from_file(char *filename)函数,成功读取返回真,否则返回假(5分)bool SCORE_TABLE ::read_from_file(char *filename){int i;ofstream in(filename);if(!in) return 0;i = 0;while(!in.eof){in >> student_score[i];i++;}Length = i;in.close();return 1;}4)在主函数中输入成绩内容,利用上面的类完成成绩的输出、保存、读取、再输出,请写出主函数。
大一c程序设计期末考试题及答案在本次大一C程序设计的期末考试中,我们精心准备了以下题目,旨在考察同学们对C语言基础知识的掌握程度以及编程能力。
以下是考试题目及参考答案。
一、选择题(每题2分,共20分)1. C语言中,哪个关键字用于声明函数?A. intB. voidC. returnD. function答案:A2. 下列哪个选项是C语言中的合法标识符?A. 2variableB. variable-nameC. _variableD. variable$name答案:C3. 在C语言中,哪个运算符用于计算两个数的和?A. +B. -C. *D. /答案:A4. 若有以下代码片段:```cint a = 5;int b = 10;a = b;```执行后,变量a的值是多少?A. 5B. 10C. 15D. 0答案:B5. 下列哪个选项是C语言中的逻辑运算符?A. &&B. ||C. !D. 以上都是答案:D6. C语言中,哪个函数用于输入字符?A. scanf()B. printf()C. getchar()D. getc()答案:C7. 下列哪个选项是C语言中的循环结构?A. ifB. switchC. forD. do-while8. 在C语言中,哪个关键字用于定义数组?A. arrayB. listC. vectorD. int[]答案:D9. 下列哪个选项是C语言中的字符串字面量?A. "Hello World"B. 'Hello World'C. "Hello" "World"D. 'Hello' 'World'答案:A10. 在C语言中,哪个函数用于输出格式化的字符串?A. printf()B. scanf()C. sprintf()D. fprintf()答案:A二、填空题(每空2分,共20分)1. 在C语言中,使用____关键字可以定义一个函数。
计算机基础部《C程序设计》课程试题(A卷)共8 页第1 页考试说明:本课程为闭卷考试,可携带书写与修正文具,满分为:100 分。
考试结束后请将后页答题卡与试卷分开上交....。
一、单选题(每题2分,共30分)1.以下程序的输出结果是 d 。
main(){int x=11,y=11;printf("%d,%d\n”,x--,—-y);}A) 11,11 B) 10,10 C) 10,11 D) 11,102.欲将25和2.5分别赋给a和b,正确的输入方法是 c .int a;float b; scanf(”a=%d,b=%f",&a,&b);A) 25 2。
5 B) 25,2。
5 C) a=25,b=2.5 D)a=25 b=2.53.已知a为int型,b为double型,c为float型,d为char型,则表达式a+b*c—d/a结果的类型为 c 。
A) int 型 B) float型 C) double型 D) char型4.执行下面的程序后,输出为 d 。
void main( ){int m=20,a=20;switch(a){ case 19: m+=1;case 20: m+=1;case 21: m+=1;case 22: m+=1;}printf("%d\n",m);}A) 20 B) 21 C) 22 D) 235.C语言中 while 和do—while循环的主要区别是 a 。
A)do—while的循环体至少无条件执行一次B)while的循环控制条件比do-while的循环控制条件更严格C)do-while允许从外部转到循环体内D)do-while 的循环体不能是复合语句6.下面程序输出的结果是 b 。
void main(){ int i, a[3][3]={1,2,3,4,5,6,7,8,9};for(i=0;i〈3;i++)printf(”%d ”,a[2-i][i]);}A)1 5 9 B)7 5 3 C)3 5 7 D)5 9 1共8 页第2 页A)33,15 B)32,15 c)45,15 D)86,33二、填空题(每空2分,共20分)1.字母’a’的ASCII码为97,且设ch为字符型变量,则表达式ch=’a'+'8'—'3';的值为【1】。
A级难度试题:(最高难度:A档--只需完成一题即可,随机挑选,满分100分)1、编程实现单链表的创建、查询、插入、删除等操作,每次操作之后都要输出单链表,要求在创建单链表的节点时,以输入-1表示结束,所有操作都要求函数实现。
#include <stdio.h>typedef struct node{int data ;struct node *next;}NODE;//定义结点数据类型const int LEN = sizeof(NODE); //一般建议用const常量,而不要用define定义符号常量void Print(NODE *h) //输出链表的内容{NODE *q ;q = h->next;while(q!=NULL) //i:=0;while(i<h->data){printf("本结点地址%x ;数据: %d ,下一个结点地址%x \n ",q,q->data,q->next);q = q->next ;}}void Insert(int x , NODE *h) //将数据x 插入表头为h的链表中{NODE *p = (NODE *) malloc(LEN);p->data = x ;p->next = h->next ;h->next = p;Print(h);}NODE * Create(int n) //创建有n个结点的链表,注意最后生成的结点的数据是与输入顺序相反的{int x ;NODE *q;NODE *p = (NODE *) malloc(LEN);p->next = 0;p->data = n; //链表表头存放链表中有多少个结点printf("请输入整数,若输入-1则表示创建结束:");while(1){scanf("%d",&x);if (x==-1) break;Insert(x ,p); //插入新的结点}Print(p);return p;}NODE * Find(int x, NODE *h) //在表头为h的链表中查找x是否存在{NODE *p;p = h->next ;while(p!=NULL){if(p->data == x ) return 1;p= p->next ;}return 0;}void Del(int x, NODE *h)//删除值为x的结点{NODE *p ,*pre;pre = h ;p = h->next ;while(p!=NULL && p->data!=x) { pre = p; p = p->next;}if (p==NULL) printf("删除不成功");else{pre->next = p->next;free(p);}}2、编程创建一个有序单链表,要求从键盘随机输入若干整数,将它们按照从小到大的顺序链接起来,输入以-1表示结束,输入时的数不能是有序的,创建和输出链表的操作都要求函数实现。
(直打版)《C++程序设计》期末考试及答案(word版可编辑修改)第 1 页共9 页(C++程序设计)(直打版)《C++程序设计》期末考试及答案(word版可编辑修改)编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((直打版)《C++程序设计》期末考试及答案(word版可编辑修改))的内容能够给您的工作和学习带来便利。
同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。
本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快业绩进步,以下为(直打版)《C++程序设计》期末考试及答案(word版可编辑修改)的全部内容。
第 2 页 共 9 页 (C++程序设计 )《C++程序设计》期末考试试卷考生注意:1.本试卷共有四道大题,满分100分。
2.考试时间90分钟。
3.卷面整洁,字迹工整.4.填写内容不得超出密封线.总分题号一二三四核分人题分30212425复查人得分一、单项选择题(每小题2分,共30分)1.C++是一种( )的程序设计语言。
A. 面向对象 B 。
即可面向过程,又可面向对象 C 。
面向过程 D 。
面向系统2.在下面有关析构函数特征的描述中,正确的是( )。
A. 一个类中可以定义多个析构函数 B 。
析构函数名与类名完全相同C. 析构函数不能指定返回类型 D 。
析构函数可以有一个或多个参数3.下面对于友元函数描述正确的是( )。
A. 友元函数的实现必须在类的内部定义B. 友元函数是类的成员函数C. 友元函数破坏了类的封装性和隐藏性 D 。
友元函数不能访问类的私有成员4.下面描述中,表达错误的是( )。
A. 公有继承时基类中的public 成员在派生类中仍是public 的 B. 公有继承时基类中的private 成员在派生类中仍是private 的 C 。
A级难度试题:(最高难度:A档--只需完成一题即可,随机挑选,满分100分)1、编程实现单链表的创建、查询、插入、删除等操作,每次操作之后都要输出单链表,要求在创建单链表的节点时,以输入-1表示结束,所有操作都要求函数实现。
#include <stdio.h>typedef struct node{int data ;struct node *next;}NODE;//定义结点数据类型const int LEN = sizeof(NODE); //一般建议用const常量,而不要用define定义符号常量void Print(NODE *h) //输出链表的内容{NODE *q ;q = h->next;while(q!=NULL) //i:=0;while(i<h->data){printf("本结点地址%x ;数据: %d ,下一个结点地址%x \n ",q,q->data,q->next);q = q->next ;}}void Insert(int x , NODE *h) //将数据x 插入表头为h的链表中{NODE *p = (NODE *) malloc(LEN);p->data = x ;p->next = h->next ;h->next = p;Print(h);}NODE * Create(int n) //创建有n个结点的链表,注意最后生成的结点的数据是与输入顺序相反的{int x ;NODE *q;NODE *p = (NODE *) malloc(LEN);p->next = 0;p->data = n; //链表表头存放链表中有多少个结点printf("请输入整数,若输入-1则表示创建结束:");while(1){scanf("%d",&x);if (x==-1) break;Insert(x ,p); //插入新的结点}Print(p);return p;}NODE * Find(int x, NODE *h) //在表头为h的链表中查找x是否存在{NODE *p;p = h->next ;while(p!=NULL){if(p->data == x ) return 1;p= p->next ;}return 0;}void Del(int x, NODE *h)//删除值为x的结点{NODE *p ,*pre;pre = h ;p = h->next ;while(p!=NULL && p->data!=x) { pre = p; p = p->next;}if (p==NULL) printf("删除不成功");else{pre->next = p->next;free(p);}}2、编程创建一个有序单链表,要求从键盘随机输入若干整数,将它们按照从小到大的顺序链接起来,输入以-1表示结束,输入时的数不能是有序的,创建和输出链表的操作都要求函数实现。
void SortedInsert(int x ,NODE *h)//将数据有序插入,形成有序的链表{NODE *pre,*p;NODE *q = (NODE *) malloc(LEN);q->data = x ;pre = h ; p = h->next;while(p!=NULL && p->data < x){pre = p;p = p->next;}pre->next = q ; q->next = p;}NODE * Create(){int x ;NODE *head = (NODE *)malloc(LEN);head->next = 0; head->data = 0;do{scanf("%d",&x);if(x!=-1)SortedInsert(x , head);}while x!=-1);return head;}void main(){NODE head = Create();Print();//print函数用上面一题的即可,数据结构定义也是}3、编程在当前目录下创建一个文件studinfo.txt,随机的从键盘输入10个学生记录(包括学号、姓名、性别、身高、地址等信息存入到该文件,然后将学生按照身高从高到低的顺序进行排序,并将排序之后的结果换行后保存到文件原始信息的后面。
typedef struct student{char stno[20],name[20],sex,address[50]; //用F表示女,M表示男float height;} STU;STU s[10];//用于保存学生的数据void sort(STU s[], int n)//对有n个学生的数据进行排序,具有通用性{}void Input(STU s[], int n)//输入n个学生的信息,同时保存到数组和文件中{int i ;FILE *fp = fopen("student.txt","w");//以写的方式打开if (fp==NULL){printf("cant open file!");exit(1); //include stdlib.h 就能使用exit函数}for(i = 0;i<n;i++){scanf("%s%s%s%f%c",stu[i].stno,stu[i].name,stu]i].address,&stu[i].height,&stu[i].sex);fprintf(fp,"%s%s%s%f%c\n",stu[i].stno,stu[i].name,stu]i].address,stu[i].height,stu[i].sex);}fclose(fp);}void Output(STU s[] ,int n){int i;FILE *fp = fopen("student.txt","a");//以追加形式打开文件if (fp==NULL){printf("cant open file!");exit(1); //include stdlib.h 就能使用exit函数}for(i = 0;i<n;i++){fprintf(fp,"%s%s%s%f%c\n",stu[i].stno,stu[i].name,stu]i].address,stu[i].height,stu[i].sex);}fclose(fp);}void main(){Input(s, 10);sort(s,10);Output(s,10);}4、编程在当前目录下创建一个文件address.txt文件,随机地从键盘输入10个好友的记录(包括姓名、性别、电话号码、城市等)信息存入到文件中,分别提供3种查询方式:通过姓名查电话,通过城市查在这个城市的所有好友,通过电话号码查人,这3种查询都要求用函数实现。
(注意输入数据的时候至少保证有2个以上好友在同一个城市的情况发生2次)//本题的关键是要能查出在同一城市的多个好友,所以查询时,一定要挨个数据去比较,而不是查到就结束,数据输入和保存参考上题即可5、假设一个班上有48个同学,让系统随机地产生48个同学的姓名、性别、年龄、身高等信息。
输出48个同学的原始信息,每行8个,分6行输出。
然后将数据重新根据性别和身高排序,女生从低到高排在前面,男生从低到高排在后面,然后再将排序之后的结果输出他们的信息,女生在前,男生在后。
【特别要求:(1)必须是全部排序完了之后再进行输出,不能是女生排完后输出女生的,男生排完后输出男生的;(2)排序通过函数调用实现;(3)输出通过函数调用实现;(4)要求随机产生的姓名在3个至8个字符之间长度的随机的26个英文字符构成,年龄在18-20之间,身高在160-190公分之间。
(5)随机函数的备忘使用示例:#include <stdlib.h>#include <stdio.h>#include <time.h>void main( ){ int i;srand( (unsigned)time( NULL ) ); /*将当前时间设置成随机函数的种子,每次产生的数都不一样*//* 输出10个随机数*/for( i = 0; i < 10;i++ ) printf( “ %d\n”, rand() );}可能的运行结果:6929802621987 ... ... ................】B级难度试题:(B档--需完成系统随机挑选出来的2道题,满分90分)1、将一个正整数分解质因数。
(例如:输入90,打印出90=2*3*3*5。
)用自定义函数实现。
每个合数都可以写成几个质数相乘的形式。
其中每个质数都是这个合数的因数,叫做这个合数的分解质因数#include <stdio.h>int a[20];int fjzys(int k){int i=2,j=0;for ( ; i<=k ; i++ ) //当因数i<=k时,实现继续寻找质因数for ( ; k%i==0 ; j++ ) //当k整除当前因数,实现该循环,每次循环下标j自加1{k/=i; //使k=k/ia[j]=i; //存入因数}return j;}void main(){int m ,b,j;printf("请输入一个整数\nk=");scanf("%d", &m);j=fjzys(m);for(b=0;b<(j-1);b++){printf("%d",a[b]);printf("*");}printf("%d\n",a[j-1]); //输出最后一个质因数}2、一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=1+2+3.编程输出10000以内的所有完数。
用自定义函数实现。
#include <stdio.h>void main(){int m,i,s;printf("10000以内的完数有:\n");for(m=1;m<=10000;m++){s=0;//初始化因子之和s为0for(i=1;i<m;i++) //寻找在1到m之间,有多少m的因子if(m%i==0) //如果m能整除i,则i为m的因子s=s+i;//将因子累加if(s==m)printf("%d\t",s);}}3、编程实现:任意给定一个十进制的整数,将其转换成二进制,按位将其存放到数组中,然后输出,要求数制转换通过自定义函数来实现。