大连理工 程序设计 第5次上机作业
- 格式:docx
- 大小:321.55 KB
- 文档页数:8
大连理工大学C++程序设计大作业班级:111111111姓名:暗暗暗暗暗暗暗暗学号:1111111111邮箱:1111111111111111任课教师:赵国辉上交时间:2013.7.22目录1.第一次上机作业 (3)2.第二次上机作业 (6)3.第三次上机作业 (10)4.第四次上机作业 (15)5.结课大作业 (18)6.课堂总结 (48)1. 第一次上机作业1.1作业要求1.整型和浮点型的二进制表示2.一个整数的二进制(64位)转换成十进制表示。
1.2 核心代码说明整型和浮点型的二进制表示#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#include <stack>using namespace std;void getint(int x){stack<int>s;while(x){s.push(x&1);x>>=1;}while(!s.empty()){cout<<s.top();s.pop();}} //将整型转换成二进制函数void getfloat(float y){queue<int>q;int x=(int)y;getint(x);y-=x; //将浮点型转换成二进制函数if(!y) return ;putchar('.');while(y){y*=2.0;if(y>=1.0){q.push(1);y-=1.0;}else q.push(0);}while(!q.empty()){cout<<q.front();q.pop();}}int main(){int x;float y;cin>>x;//输入一个整数getint(x);cout<<endl;cin>>y;//输入一个浮点数getfloat(y);cout<<endl;return 0;}一个整数的二进制(64位)转换成十进制表示。
大连理工大学22春“计算机科学与技术”《Java程序设计》作业考核题库高频考点版(参考答案)一.综合考核(共50题)1.JPanel默认的布局管理器是()。
A.FlowLayoutB.CardLayoutC.BorderLayoutD.GridLayout参考答案:A2.下列特性中,不属于面向对象程序设计的三个特征的是()。
A.封装B.指针操作C.多态D.继承参考答案:B3.以下哪个是处理可变字符串的类()。
A.StringB.StringBufferC.ObjectD.Math参考答案:B4.Java 2平台分为3个体系J2SE、J2EE、J2ME。
()A.正确B.错误参考答案:A5.Java源程序是由类定义组成的,每个程序可以定义若干个类,但只有一个类是主类。
()A.正确B.错误参考答案:A6.下列java标识符的写法,错误的是()。
A._sysB.$changeer_nameD.1_file参考答案:D7.下面不是面向对象技术特点的是()。
A.模块化B.封装C.继承性D.多态参考答案:A8.final修饰的方法一定要存在于final类中。
()A.正确B.错误参考答案:B9.关于Java异常,不论try块中是否发生了异常,是否执行过catch语句,如果有finally语句,都要执行finally语句。
()A.正确参考答案:A10.对象m具有属性a,则访问该属性的方法为()。
A.a.mB.a.m()C.m.aD.m.a()参考答案:C11.下面赋值语句中,哪个选项不正确?()A.float f=11.1B.double d=5.3E12C.double d=3.14DD.Object a=new String(“abc”)参考答案:A12.执行下列代码:int[]x=new int[5]; 后,下面说明正确的是()。
A.x[4]为0B.x[4]未定义C.x[5]为0D.x[0]为空参考答案:A13.流是Java通信的一个基本概念,流的传递方式是()。
大连理工大学智慧树知到“计算机科学与技术”《C C++语言程序设计》网课测试题答案(图片大小可自由调整)第1卷一.综合考核(共15题)1.在执行int a[][3]={1,2,3,4,5,6};语句后,a[1][1]的值是5。
()T、对F、错2.预处理命令在程序中都是以*符号开头的。
()T、对F、错3.定义类的静态函数成员的关键字为(),可通过对象名或类名访问它。
A.staticB.voidC.friendD.virtual4.预处理命令在程序中都是以'*'符号开头的。
()A.正确B.错误5.定义数组 float a[2][3];选出不属于该数组的数据元素是()。
A.a[0][0]B.a[2][3]C.a[1][2]D.a[0][2]6.下列运算符中,()运算符在C++中不能重载。
A、&&B、[]C、::D、new 7.若需要把一个函数“void F();”定义为一个类AB的友元函数,则应在类AB的定义中加入一条语句()。
A.friend void F();B.class void F();C.void ~F();D.以上都不是8.在析构函数前面加上关键字virtual进行说明,则称该析构函数为()。
A.虚构造函数B.虚成员函数C.虚析构函数D.以上都不是9.定义数组 float a[2][3];选出不属于该数组的数据元素是()。
A、a[0][0]B、a[2][3]C、a[1][2]D、a[0][2]10.以下基类中的成员函数,表示纯虚函数的是()。
A.virtual void vf(int)B.void vf(int)=0C.virtual void vf()=0D.virtual void vf(int){ }11.定义类的静态函数成员的关键字为(),可通过对象名或类名访问它。
A、staticB、voidC、friendD、virtual12.在每个C++程序中都必须包含有这样一个函数,该函数的函数名为()。
第一次上机作业(2021):要求:独立完成,上机调试通事后上交作业提交邮件主题命名:班级学号姓名(第1次作业),例如:电1301班2王鹏(第1次作业)以附件形式将每次作业的所有程序源程序紧缩打包后提交,紧缩文件命名格式同上。
程序必需采用缩进格式1.大写字母转换成小写字母从键盘输入一个大写英文字母,输出相应的小写字母。
例:输入G输出g2.求平方根输入一个实数x,计算并输出其平方根(保留1 位小数)。
例:输入17输出The square root of is3.温度转换设计一个程序将华氏温度转换成摄氏温度c = 5/9(f-32)a)输入华氏温度(实型)b)输出的摄氏温度结果保留两位小数例:Please input Fahrenheit temperature:The corresponding Celsius temperature is4. 计算旅途时刻输入二个整数time1 和time2,表示火车的起身时刻和抵达时刻,计算并输出旅途时刻。
(输入的有效的时刻范围是0000 到2359,不需要考虑起身时刻晚于抵达时刻的情形。
)例:输入712 1411 (起身时刻是7:12,抵达时刻是14:11)输出The train journey time is 6 hours 59 minutes.5. 数字加密输入一个四位数,将其加密后输出。
方式是将该数每一名上的数字加9,然后除以10 取余,做为该位上的新数字,最后将第1 位和第3 位上的数字互换,第2 位和第4 位上的数字互换,组成加密后的新数。
例:输入1257输出The encrypted number is 4601试探题:你可否编程找出谁做的好事?有四位同窗中的一名做了好事,不留名,夸奖信来了以后,校长问这四位是谁做的好事。
⏹A说:不是我。
⏹B说:是C。
⏹C说:是D。
⏹D说:他乱说。
已知三个人说的是实话,一个人说的是谎话。
此刻要依照这些信息,找出做了好事的人。
教材P168页第11题的1、2、3、4、5、10、17、18、19、20,其中第2小题需要拟定指令流程和操作时间表,其它只需要拟定指令流程。
解:(1)MOV (R0),(SP)+FT0:M→IR,PC+1→PCSTO:SP→MARST1:M→MDR→CST2:SP+1→SPDT0:R0→MARET0:C→MDRET1:MDR→MET2:PC→MAR(2)MOV (R1)+,X(R0)FT0:M→IR,EMAR、R、SIRPC+1→PC PC→A、输出A、DM、CPPC、1→ST、CPT(P)、CPFT(P)~CPET(P)ST0:PC→MAR PC→A、输出A、DM、CPMAR、T+1、CPT(P)ST1:M→MDR→C EMAR、R、SMDR、MDR→B、输出B、DM、CPC、T+1、CPT(P)ST2:PC+1→PC PC→A、A+1、DM、CPPC、T+1、CPT(P)ST3:R0+C→MAR R0→A、C→B、A+B、DM、CPMAR、T+1、CPT(P)ST4:M→MDR→C EMAR、R、SMDR、MDR→B、输出B、DM、CPC、1→DT、CPT(P)、CPFT(P)~CPET(P)DT0:R1→MAR R1→A、输出A、DM、CPMAR、T+1、CPT(P)DT1:R1+1→R1R1→A、A+1、DM、CPR1、1→ET、CPT(P)、CPFT(P)~CPET(P)ET0:C→MDR C→A、输出A、DM、CPMDR、T+1、CPT(P)ET1:MDR→M EMAR、W、T+1、CPT(P)ET2:PC→MAR PC→A、输出A、DM、CPMAR、1→ST、CPT(P)、CPFT(P)~CPET(P)(3)MOV R2,(PC)+FT0:M→IR,PC+1→PCSTO:PC→MARST1:M→MDR→CST2:PC+1→PCET0:C→R2ET1:PC→MAR(4)MOV –(SP),(R3) FT0:M→IR,PC+1→PC ST0:R3→MARST1:M→MDR→CDT0:SP-1→SP、MAR ET0:C→MDRET1:MDR→MET2:PC→MAR(5)ADD R1,X(R0)FT0:M→IR,PC+1→PC ST0:PC→MARST1:M→MDR→CST2:PC+1→PCST3:R0+C→MARST4:M→MDR→CET0:C+R1→R1ET1:PC→MAR(10)INC X(PC)FT0:M→IR,PC+1→PC DTO:PC→MARDT1:M→MDR→D DT2:PC+1→PCDT3:PC+D→MARDT4:M→MDR→D ET0:D+1→MDRET1:MDR→MET2;PC→MAR(17)JMP R0FT0:M→IR,PC+1→PC ET0:R0→PC、MAR(18)JMP X(PC)FT0:M→IR,PC+1→PC ET0:PC→MARET1:M→MDR→CET2:PC+C→PC、MAR(19)RST (SP)+FT0:M→IR,PC+1→PCET0:SP→MARET1:SP+1→SPET2:M→MDR→PC、MAR(20)JSR (R1)FT0: M→IR,PC+1→PCST0:R1→MARST1:M→MDR→CET0:SP-1→SP、MARET1:PC→MDRET2:MDR→MET3:C→PC、MAR2.什么是指令周期。
图用0和1表示是否相邻,对于有向图有向网用权值类型表示InfoType* info; //该弧相关信息的指针}ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM];typedef struct {//点的值char name;char* data;}VertexType[MAX_VERTEX_NUM];typedef struct{VertexType vexs; //顶点向量AdjMatrix arcs; //邻接矩阵int vexnum; //图的当前顶点数int arcnum; //图的当前弧数GraphKind kind; //图的种类标志}MGraph;//***********************以下操作默认是无向网,即Kind = AG**************************//***********************顶点是名称字母。
书上的是数字,例如v************************Status LocateVex(MGraph G,char u){if(G.vexnum == 0) return -1; //图不存在int i;for(i = 0;i < G.vexnum;i++)if(G.vexs[i].name == u)return i;return -2; //图中不存在与u相等的点}Status CreateGraph(MGraph& G){int i,j,k;VRType w;char v1,v2;char data[50];cout << "你想要创建几个顶点? " << endl;cin >> G.vexnum;cout << "你想要创建几条弧? " << endl;cin >> G.arcnum;cout << "依次输入顶点名称:" << endl;for(i = 0;i < G.vexnum;i++)cin >> G.vexs[i].name; //构造顶点向量for(i = 0;i < G.vexnum;i++)for(j = 0;j < G.vexnum;j++){G.arcs[i][j].adj = INFINITY; //初始化邻接矩阵G.arcs[i][j].info = NULL;}for(k = 0;k < G.arcnum;k++){ //构造邻接矩阵cout << "输入一条边依附的两个顶点: ";cin >> v1 >> v2;cout << "输入这条边的权值: " << endl;cin >> w;cout << "输入这条边的信息: " << endl;cin >> data;i = LocateVex(G,v1);j = LocateVex(G,v2);G.arcs[i][j].adj = w;G.arcs[i][j].info = data;G.arcs[j][i] = G.arcs[i][j];}return 1;}Status DestroyGraph(MGraph& G){G.vexnum = NULL;G.arcnum = NULL;return 1;}char* GetVex(MGraph G,char v){if(G.vexnum == 0) return NULL;int i;i = LocateVex(G,v);if(i >= 0) //判断是否是图上的顶点,后面的函数省略了这一步return G.vexs[i].data;elsereturn NULL;}Status PutVex(MGraph& G,char v,char* value){if(G.vexnum == 0) return 0;int i;i = LocateVex(G,v);G.vexs[i].data = value;return 1;}//VertexType FirstAdjVex(MGraph G,char v) {}//返回第一个邻接顶点,邻接表操作//VertexType NextAdjVex(MGraph G,char v,char w) {} //邻接表操作Status InsertVex(MGraph& G,char v){if(G.vexnum == 0) return 0;int i;G.vexs[G.vexnum].name = v;G.vexnum++;for(i = 0;i < G.vexnum;i++){G.arcs[i][G.vexnum - 1].adj = INFINITY;G.arcs[G.vexnum - 1][i].adj = INFINITY;}return 1;}Status DeleteVex(MGraph& G,char v){if(G.vexnum == 0) return 0;int i,j,k;k = LocateVex(G,v);for(i = 0,j = 0;i < G.vexnum;i++)if(G.arcs[i][k].adj != INFINITY)j++;for(i = k;i < G.vexnum - 1;i++)G.vexs[i] = G.vexs[i+1];G.vexs[i].name = NULL;G.vexs -> data = NULL;G.vexnum--;G.arcnum = G.arcnum - j;return 1;}Status InsertArc(MGraph& G,char v,char w){ if(G.vexnum == 0) return 0;int i,j;VRType q;char data[50];i = LocateVex(G,v);j = LocateVex(G,w);cout << "输入这条边的权值: " << endl;cin >> q;cout << "输入这条边的信息: " << endl;cin >> data;G.arcs[i][j].adj = q;G.arcs[i][j].info = data;G.arcs[j][i] = G.arcs[i][j];G.arcnum = G.arcnum + 2;return 1;}Status DeleteArc(MGraph& G,char v,char w){if(G.vexnum == 0) return 0;int i,j;i = LocateVex(G,v);j = LocateVex(G,w);G.arcs[i][j].adj = INFINITY;G.arcs[i][j].info = NULL;G.arcs[j][i] = G.arcs[i][j];G.arcnum = G.arcnum - 2;return 1;}Status Print(MGraph G){int i,j;for(i = 0;i < G.vexnum ;i++){for(j = 0;j < G.vexnum ;j++)cout << G.arcs [i][j].adj << " ";cout << endl;}return 1;}int main(){int j;char i,c,d;MGraph G;CreateGraph(G);cout << "此时矩阵为: " << endl;Print(G);cout << "输入i::";cin >> i;j = LocateVex(G,i);cout << "i为第"<< j+1 << "个顶点" << endl;cout << "为两个点添加边,输入添加边的两个顶点: " << endl;cin >> c >> d;InsertArc(G,c,d);cout << "此时矩阵为: " << endl;Print(G);DeleteArc(G,c,d);cout << "添加顶点V;" << endl;cout << "此时矩阵为: " << endl;Print(G);c = 'V';InsertVex(G,c);cout << "此时矩阵为: " << endl;Print(G);cout << "删除顶点B;" << endl;d = 'B';DeleteVex(G,d);cout << "此时矩阵为: " << endl;Print(G);DestroyGraph(G);return 0;}运行结果:2、题目:2. 哈夫曼树的建立。
1.定义了一个手机类,请完成该类成员函数的定义。
#include <iostream>using namespace std;classiphone{double card;//11位本机号码int password;//4位锁定密码int status;//手机状态,0:正常,1:自动锁定public:iphone (double num);//构造函数/* 创建的对象本机号码card为形式参数num,4位锁定密码password为0,手机状态status为正常*/intsetpassword(int code);//设置4位锁定密码password/* 若形式参数code的位数全部相同,设定失败,函数结束,返回值-1。
否则设置4位锁定密码password的值为code,手机为自动锁定状态,函数返回0*/int unlock(int code);//手机解锁/* 手机为正常状态,函数结束,返回值0。
手机为自动锁定状态,则当code等于锁定密码password时,手机回到正常状态,函数返回0;否则解锁失败,函数返回值-1 */intgetstatus(){ return status;}};/**********Program**********/iphone::iphone(double num){card=num;password=0;status=0;}intiphone::setpassword(int code){inti=0,a=0,b=0,c=0,d=0;a=code/1000;b=(code/100)%10;c=(code/10)%10;d=code%10;if(a==b&&b==c&&c==d)return -1;elsepassword=code;return 0;}intiphone::unlock(int code){if(password==code)return 0;elsereturn -1;}/********** End **********/int main(){double mc=134********;iphone p1(mc);int code=0;while (p1.setpassword(code)){cout<<"锁定密码无效,手机p1状态为"<<p1.getstatus()<<",请重新输入锁定密码:";cin>>code;}cout<<"手机p1状态为"<<p1.getstatus()<<",手机被锁定!!!!"<<endl;cout<<"如果要通话,请输入4位手机锁定密码:";cin>>code;if (p1.unlock(code)) cout<<"密码输入错误!!!"<<endl;else cout<<"开始通话........"<<endl;return 0;}//2.(new)定义了游戏NPC类。
C语言程序设计作业五1.对于类型相同的指针变量,不能进行哪种运算?(单选)A. +B. -C. =D. = =2. 若有以下说明和语句,且0<=i<10, 则下面哪个是对数组元素的错误引用?(单选)int a[]={1,2,3,4,5,6,7,8,9,0}, *p, i;p=a;A. *(a+i)B. a[p-a]C. p+iD. *(&a[i])3. 若有以下说明和语句,且0<=i<10,则下面哪个是对数组元素地址的正确表示?(单选)int a[]={1,2,3,4,5,6,7,8,9,0}, *p,i;p=a;A. &(a+1)B. a++C. &pD. &p[i]4. 以下程序的输出结果是___。
#include <stdio.h>main(){int a[]={1,2,3,4,5,6},*p;p=a;*(p+3)+=2;printf("%d,%d\n",*p,*(p+3));}A. 0,5B. 1,5C. 0,6D. 1,65. 以下程序的输出结果是哪一项?(单选)#include <stdio.h>main(){int a[12]={1,2,3,4,5,6,7,8,9,10,11,12}, *p[4],i;for(i=0;i<4;i++)p[i]=&a[i*3];printf("%d\n",p[3][2]);}A. 输出项不合法B. 6C. 8D. 126. 如果有以下的定义:(多选)struct person{char name[20];int age;char sex;};struct person a={"xiao min",20,'m'},*p=&a;则对字符串"li ning"的引用方式可以是下面哪些?A. (*p).nameB. C. D. p->name7. 下面哪些定义的结构在内存分配是等价的。
1. 题目描述:数据移位 有n(n<=10)个整数,使前面各数顺序向后移m(m<=n)个位置,最后m个数变成最前面的m个数,如图所示。编写函数shift(a,n,m)实现上述功能,在主函数中输入n个整数并输出调整后的n个数。
题目分析: 主函数输入输出,调用shift函数调序。其中shift函数中运用指针实现数组内容交换。
程序代码: #include void main() { int shift(int*a,int n,int m); int a[10],m,n,i; printf("Input n(n<=10):"); scanf("%d",&n); printf("Input 10 integers:"); for(i=0;i<10;i++) scanf("%d",&a[i]); printf("Output the original:"); for(i=0;i<10;i++) printf("%d ",a[i]); printf("\nInput m(m<=10):"); scanf("%d",&m); printf("Output the shifted:"); shift(a,n,m); } shift(int*a,int n,int m) { int b[10],i,j; for(j=n-m,i=0;i{*(b+i)=*(a+j);} for(j=0,i=m;i{*(b+i)=*(a+j);} for(i=0;i<10;i++) printf("%d ",b[i]); return 0; }
程序截屏: 2. 题目描述: 字符串排序 在主函数中输入10个不等长的字符串放入二维字符数组中,编写函数void sort(char *s[])利用指针数组对其排序(按照字母顺序,例如“abc” 要在“acc”前面, 建议使用strcmp函数)。 在主函数中输出排好序的字符串。
题目分析:主函数输入输出,调用sort函数通过strcmp,strcpy函数进行调换顺序。 程序代码: #include #include main() { void sort(char *s[]); char a[10][100],*s[10]; int i; printf("please input ten strings:\n"); for(i=0;i<10;i++) {gets (a[i]); s[i]=a[i];} sort(s); printf("the sorted strings"); for(i=0;i<10;i++) printf("%s\n",a[i]); } void sort(char *s[]) {
char t[100]; int i,j; for(i=0;i<9;i++) for(j=0;j<9-i;j++) if(strcmp(s[j+1],s[j])<0) {strcpy(t,s[j]); strcpy(s[j],s[j+1]); strcpy(s[j+1],t);}
} 程序截屏:
3. 题目描述:学生成绩统计 有一个班级6个学生5门课,编写函数实现下列功能: (1)函数average()求第指定课目的平均分; (2)使用函数void findfail()找出有2门以上(含2门)课程不及格的学生,在主程序输出其学号和全部课程成绩及平均成绩; (3)函数void findgood()找出平均成绩在90分以上或全部课程成绩在85分以上的学生, 在主程序输出其学号和全部课程成绩及平均成绩。 在主函数中输入数据并输出结果。 题目分析:本题较为复杂,须运用多个函数调用,主函数输入输出,调运函数分别进行不同功能。
程序代码: #include struct student { float score[5]; int num; int goodflag,failflag; }; float average(struct student*p) { float sum=0,aver; int i; for(i=0;i<5;i++) { sum+=p->score[i]; } aver=sum/5; return aver; } int findfail(struct student*p) { int i,n,count=0; for(i=0;i<5;i++) if(p->score[i]<60) count++; if(count>=2)p->failflag=1; } int findgood(struct student*p) { int i,n,count=0; for(i=0;i<5;i++) if(p->score[i]>=85) count++; if(count==5||average(p)>=90)p->goodflag=1; } void main() { int i,j,m,aver,flag=0; struct student stu[6],*p; for(i=0;i<6;i++) { stu[i].goodflag=0; stu[i].failflag=0; printf("输入第%d位同学的学号\n",i+1); scanf("%d",&stu[i].num); printf("输入第%d位同学的成绩\n",i+1); for(j=0;j<5;j++) scanf("%f",&stu[i].score[j]); } printf("请输入科目:"); scanf("%d",&m); aver=average(&stu[m]); printf("平均成绩:%d\n",aver); for(p=stu;p<&stu[6];p++) { findgood(p); findfail(p); } printf("good student:\n"); for(i=0;i<6;i++) { if(stu[i].goodflag==1) { printf("学号:%d\n成绩:\n",stu[i].num); for(j=0;j<5;j++) printf("%-8.2f",stu[i].score[j]); printf("\n平均成绩:\n%-.2f\n",average(&stu[i])); printf("\n"); flag=1; } } if(flag==0) printf("no good student\n"); flag=0; printf("fail student:\n"); for(i=0;i<6;i++) { if(stu[i].failflag==1) { printf("学号:%d\n成绩为:\n",stu[i].num); for(j=0;j<5;j++) printf("%-8.2f",stu[i].score[j]); printf("\n平均成绩:\n%-.2f\n",average(&stu[i])); printf("\n"); flag=1; } } if(flag==0) printf("no fail student\n"); }
程序截屏:
4. 题目描述:矩阵乘法 在主函数中输入m和n (0入矩阵A和B中元素的值。调用函数multiply()计算矩阵C=A XB。并在主函数中输出矩阵C。 题目分析: 主函数定义两个矩阵,并输出计算结果,调运函数计算。
程序代码: #include int m,n,c[5][5]={0}; void main() { int multiply(int (*a)[5],int (*b)[5]); int i,j,a[5][5],b[5][5]; printf("Input m and n (1~5):"); scanf("%d%d",&m,&n); printf("Input A%dx%d:\n",m,n); for(i=0;ifor(j=0;jscanf("%d",&a[i][j]); printf("Input B%dx%d:\n",n,m); for(i=0;ifor(j=0;jscanf("%d",&b[i][j]); multiply(a,b); printf("C=AXB is:\n"); for(i=0;i{ for(j=0;jprintf("%-6d",c[i][j]); printf("\n"); } } int multiply(int (*a)[5],int (*b)[5]) { int i,j,k; for(i=0;ifor(j=0;j{ for(k=0;k*(*(c+i)+j)+=*(*(a+i)+k)**(*(b+k)+j); } }
程序截屏: