实验10 指针2 (修复的)
- 格式:docx
- 大小:365.73 KB
- 文档页数:22
第1篇一、实验目的1. 理解指针在排序算法中的应用。
2. 掌握几种常见的排序算法(如冒泡排序、选择排序、插入排序等)的指针实现方式。
3. 比较不同排序算法的效率,分析其优缺点。
二、实验环境1. 操作系统:Windows 102. 编程语言:C++3. 开发环境:Visual Studio 2019三、实验内容本次实验主要实现了以下排序算法:1. 冒泡排序2. 选择排序3. 插入排序以下是对每种排序算法的具体实现和性能分析。
1. 冒泡排序(1)算法原理冒泡排序是一种简单的排序算法。
它重复地遍历待排序的序列,比较每对相邻的元素,如果它们的顺序错误就把它们交换过来。
遍历序列的工作是重复地进行,直到没有再需要交换的元素为止。
(2)指针实现```cppvoid bubbleSort(int arr, int len) {for (int i = 0; i < len - 1; i++) {for (int j = 0; j < len - 1 - i; j++) {if ((arr + j) > (arr + j + 1)) {int temp = (arr + j);(arr + j) = (arr + j + 1);(arr + j + 1) = temp;}}}}```(3)性能分析冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1)。
当待排序序列基本有序时,冒泡排序的性能较好。
2. 选择排序(1)算法原理选择排序是一种简单直观的排序算法。
它的工作原理是:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
以此类推,直到所有元素均排序完毕。
(2)指针实现```cppvoid selectionSort(int arr, int len) {for (int i = 0; i < len - 1; i++) {int minIndex = i;for (int j = i + 1; j < len; j++) {if ((arr + j) < (arr + minIndex)) {minIndex = j;}}int temp = (arr + i);(arr + i) = (arr + minIndex);(arr + minIndex) = temp;}}```(3)性能分析选择排序的时间复杂度为O(n^2),空间复杂度为O(1)。
一、表头常用的电压表和电流表都是由表头改装而成的,表头是一个小量程的电流表G.1.表头内阻R g :指电流表G 的内阻,一般为几百欧到几千欧.2.满偏电流I g :指电流表G 指针偏转到最大刻度时的电流(即电流表G 所能测量的最大电流值),一般为几毫安到几十毫安。
3.满偏电压U g :指电流表G 通过满偏电流时它两端的电压,一般为几毫伏到几十毫伏。
由欧姆定律可知:U g =I g R g 。
二、电表的改装 改装成电压表 改装成电流表内部电路改装原理串联分压 并联分流 改装后的量程 g g ()U I R R =+ g g R R I I R +=量程扩大的倍数 g U n U = gIn I =接入电阻的阻值 g g g (1)U R R n R I =-=-g g gg 1I R R R I I n ==--改装后的总内阻 V g g R R R nR =+= g gA g R R RR R R n ⋅==+校对电路改装成的电压表 改装成的电流表1.构造:如图所示,欧姆表由电流表G 、电池、调零电阻R和红黑表笔组成。
欧姆表内部:电流表、电池、调零电阻串联。
外部:接被测电阻R x .全电路电阻R 总=R g +R +r +R x 。
2.工作原理:闭合电路的欧姆定律I =x g R r R R E +++。
3.刻度的标定:红黑表笔短接(被测电阻R x =0)时,调节调零电阻R ,使I =I g ,电流表的指针达到满偏,这一过程叫欧姆调零.(1)当I =I g 时,R x =0,在满偏电流I g 处标为“0”.(图甲)(2)当I =0时,R x →∞,在I =0处标为“∞”。
(图乙)(3)当I =2gI 时,R x =R g +R +r ,此电阻是欧姆表的内阻,也叫中值电阻。
一个电流表的满刻度电流值I g=0。
6 A,面板如图所示,那么它每一小格所对应的电流是_________mA,指针现在的电流示数是_________A。
《微机原理及接口技术》实验报告2013~2014学年第一学期班级姓名学号指导教师实验一Emu8086软件的使用一、实验目的1、熟悉汇编语言开发环境。
2、掌握Emu8086软件使用方法。
3、理解寻址方式的意义。
二、实验环境1、硬件环境:微机。
2、软件环境:Emu8086 4.07。
三、实验内容1、安装及运行Emu8086将老师发给大家的emu8086软件安装在自己的微机上,然后双击运行桌面上的快捷方式Emu8086,单击“new”按钮,选择“COM template”,然后单击“OK”按钮。
准备在光标闪烁处输入代码。
2、熟悉Emu8086的基本操作(1)有以下程序段,请正确填空。
MOV AX,10000MOV BX,0E49AHADD AX,BXHLT ;表示CPU停机该程序段执行后,AX=__0BAAH___,BX=_E49AH____,CF=__1___,OF=___0__,SF=___0__,ZF=__0__。
(2)上机调试并验证。
单步执行物理地址可以察看flags的各标志十进制表示机器码的十六进制表示①输入(1)中的程序段。
②程序输入后,单击工具栏上的“emulate”按钮,开始执行程序。
③认识Emu8086的指令执行界面,如上图所示,并开始单步执行指令,观察每条指令执行后的情况,与自己的思考相验证。
④程序执行完毕,观察各寄存器的值以及flags中各状态的值,检测并纠正自己的错误答案,并找出错误的原因。
(3)寻址方式已知DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,BX=0100H,BP=0200H,试写出以下各指令中源操作数的寻址方式,并计算出它们的物理地址。
① MOV AX,[100H]源操作数的寻址方式是__直接寻址__________,源操作数的物理地址是_10100H__________。
② MOV AX,[BP+10H]源操作数的寻址方式是__寄存器相对寻址___,源操作数的物理地址是_35210H__________。
合肥工业大学程序设计基础实验报告姓名:班级: 计算机科学与技术学号:合肥工业大学计算机与信息学院1实验七类与对象1(实验目的要求(1) 掌握类的定义和实现。
(2) 掌握对象创建及使用的基本方法。
2(实验设备硬件环境:微型计算机软件环境:操作系统: Windows语言环境: Visual C++3(预习要求学习教材有关类的定义与实现、对象创建与应用等有关内容,对实验基本要求应在上机实验前仔细阅读,程序应事先编制完成,上机时录入调试,同时还应设计相应的测试用例集,检查程序的正确性、可靠性、完备性和容错能力。
4(实验内容(1)下面程序定义了一个以hours, minutes和seconds作为数据成员的Time 类。
设计了成员函数将两个Time对象相加(即时间相加),并进行相应的检查,查看增加的分钟数及秒数是否大于59。
如果秒数大于59,则分钟数向前递增1。
类似地,如果分钟数大于59,则小时数向前增1。
#include <iostream>using namespace std;class Time{private:int hours, minutes, seconds;public:void get_time(){2cin>>hours>>minutes>>seconds;}void display_time(){cout<<hours<<':'<<minutes<<':'<<seconds<<endl;}void add_time(Time & t1, Time & t2){hours=t1.hours+t2.hours;minutes=t1.minutes+t2.minutes;seconds=t1.seconds+t2.seconds;if(seconds>=60){seconds-=60;minutes++;}if(minutes>=60){minutes-=60;hours++;}}};void main(){Time one, two, three;cout<<"\nEnter the first time(hours minutes seconds):"; one.get_time();cout<<"\nEnter the second time(hours minutes seconds):"; two.get_time();three.add_time(one,two);cout<<"the result is:"<<endl;three.display_time();}[基本要求], 上机录入、调试上面程序。
《计算机维护维修》实验指导教案第一篇:《计算机维护维修》实验指导教案实验一计算机组件认识实验目的:认识计算机的基本硬件;了解计算机组成原理;认识计算机内部各部件的形状;认识计算机内部各插座连线。
实验器材:计算机20台(组装机)及相应拆装工具。
实验步骤:根据实物,介绍如何识别计算机的CPU、主板、内存、显卡、声卡、网卡、硬盘、软驱、光驱、显示器、键盘和鼠标等基本部件。
并抄录型号和编号。
(1)CPU型号:intel的celeron系列;主频:667MHZ;L1 cache 为64k, L2cache为128k,散热方式:风扇。
(2)主板型号:华硕主板;北桥和南桥型号。
(3)内存:容量,速度及标准。
(4)显卡:是否集成;显示芯片型号及工作频率,RAMDAC速度。
(5)声卡:集成AC’97 声音规范。
(6)网卡:10 M/100M标准规范。
(7)硬盘:IBM桌面之星40G。
(8)LG 52倍速(9)显示器:联想15英寸等实验总结:通过实验,认识了计算机内部各部件的形状,掌握了计算机硬件的组成原理,掌握了计算机内部各插座连线,并能通过理论,加深了对计算机工作原理的认识。
实验二计算机硬件安装实验目的:通过实验进一步了解计算机各部件的作用及各个部件的相互关系与位置,认识计算机内部各部件的形状及插座连线,提高学生动手操作能力。
实验器材:计算机20台(组装机)及相应拆装工具。
实验步骤:1、先由教师示范,然后在教师的指导下进行实验,需经教师检查后方可通电试机。
2、注意事项(1)断电操作。
在安装或插拔各种配件及连接电缆时,一定要断电,否则容易损坏部件;(2)防静电处理。
为了防止因静电而损坏集成芯片,在用手触碰主板或其他板卡之前应先触摸水管等金属物体,放掉身上的静电;(3)在组装过程中,对各种板卡、配件要轻拿轻放,禁止用力过猛;(4)使用钳子和螺丝刀等工具时,注意不要划伤线路板;(5)首次测试计算机时,若发生异常情况应立即关机检查。
选择题1. C 语句 x *=y +2;可以写作_____B___。
A 、x =y +2B 、x =x *(y +2);C 、x =2+y * x;D 、x =x * y +2;2. 下列运算符中优先级最高的是______A__。
A 、>=B 、=C 、||D 、-=3. 在一个C 程序中,A 。
A 、main 函数可以在任何函数之间出现B 、main 函数必须出现在所有函数之后C 、main 函数必须出现在所有函数之前D 、main 函数必须出现在固定位置4. C 语言程序的三种基本结构是_A_______。
A 、顺序、选择、循环 B 、选择、递归、循环 C 、顺序、循环、子程序 D 、嵌套、选择、循环A 、doubleB 、floatC 、intD 、char 6. 字符型常量在内存中存放的是该字符对应的D 。
A 、BCD 代码值B 、内部码值C 、十进制代码值D 、ASCII 代码值7. 下列说法中正确的是D 。
A 、C 语言程序总是从第一个函数开始执行B 、在C 语言程序中,要调用的函数必须在main()函数中定义 C 、C 语言程序中的main()函数必须放在程序的开始部分D 、C 语言程序总是从main()函数开始执行8. 若变量已正确定义,要将a 和b 中的数进行交换,下列选项中不正确的是B 。
A 、t =a ,a =b ,b =t ; B 、a =t ;t =b ;b =a;C、t=b;b=a;a=t;D、a=a+b,b=a - b,a=a - b;9.完成C源程序编辑后,到生成执行文件,C语言处理系统必须执行的步骤依次为_B_______。
A、连接、运行B、编译、连接C、运行D、连接、编译10.若有说明和语句:int a=5,b;b=a++;此处变量b的值是C。
A、6B、4kC、5D、711.下面不是C语言整型常量的是D。
A、-32768B、01C、0x11D、08112. sizeof(double)是一个_____A___。
神针妙药,拨雾显圣手——芍倍注射液一支自己发明的中药制剂,再加上一支注射器,就能治疗痔疮、肛裂、直肠脱垂、直肠狭窄、肛门狭窄、肛门瘙痒症、腋臭等顽固性肛肠疾病,正如中央党校原副校长苏星接受安氏疗法治疗后的感言“妙药扫开千里雾,神针刺破一天云”。
他不仅打破了传统注射疗法的治疗障碍,更是解决了近一个世纪解决不了的药物及注射的安全性问题,同时扩大了注射疗法的使用范围。
“只要是痔疮,无论多么严重,只要注射一次就能见效,而且没有任何副作用和并发症。
”健康报这样评价安氏疗法的注射疗效。
中国中医科学院望肛肠科安阿玥1.注射治疗痔疮痔是临床常见病、多发病,我国民间有“十人九痔”之说,上世纪七十年代的一项全国性普查显示,痔占肛肠疾病总人数的87.25%。
患病者中又以内痔者居多,占59.86%,外痔占16.01%,混合痔占24.13%。
目前治疗痔的主要方法有手术、注射和保守药物疗法。
手术方法虽然疗效肯定,但患者痛苦大,术后恢复时间长,且不合理的手术方法还会造成严重的并发症和后遗症;注射疗法源于一百多年前的英国,这种方法避免了手术的痛苦和组织的损伤,在发展过程中经历了由坏死剂到硬化剂的转变,但始终未能解决安全问题。
保守药物疗法仅能缓解症状,不能从根本上解决问题。
总之,尚无一种方法可以权衡利弊,达到安全有效的目的。
芍倍注射液的发明完全克服了这些问题,改写了治疗痔疮的历史。
从此,“没有手术的痛苦和损伤而有手术的疗效”治痔新法诞生了。
(1)芍倍注射液芍倍注射液自1986年问世以来,得到越来越多的医生和患者的认同。
从2.5%AN注射液、安氏化痔液到安痔注射液、芍倍注射液,该药一路走来,虽然名字在变,但确切的疗效始终未变。
从一开始人们对他注射后不产生硬结感到怀疑,到后来的好奇,再到现在的认同,所有疑惑被一个个真实的病例彻底破除,真金不怕火炼,眼见为实的疗效令国内外专家和同行毫不吝啬的伸出了大拇指。
芍倍注射液的成功上市并不是一时幸运,而是安老师以辛勤的劳动、精准的科研和大量的数据证明出来的。
实验报告实验时间:6月7号实验班级:计算机双学位1501实验报告总份(片)数: 1 份(片)实验教师:饶东宁计算机学院工一实验室广东工业大学实验报告实验题目:实验10实验时间:6月7号实验班级:双学位1501实验人学号:3213010359实验人姓名:梁雪卿实验教师:饶东宁计算机学院工一实验室广东工业大学实验10 指针21 实验目的(1)进一步掌握指针的应用(2)能正确使用数组的指针和指向数组的指针变量(3)能正确使用字符串的指针和指向字符串的指针变量(4)了解指向指针的指针的用法2 实验内容根据题目要求,编写程序(要求用指针处理),运行程序,分析结果,并进行必要的讨论分析。
(1)有n个人围成一圈,顺序排号。
从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的人。
算法说明:程序清单:#include <stdio.h>int main(){int i,k,m,n,num[50],*p;scanf("n=%d",&n);p=num;for(i=0;i<n;i++)*(p+i)=i+1;i=0;k=0;m=0;while(m<n-1){if(*(p+1)!=0) k++;if(k==3){*(p+i)=0;k=0;m++;}i++;if(i==n) i=0;}while(*p==0) p++;printf("The last one is NO.%d\n",*p);return 0;}运行结果:分析与思考:以1到n为序给每个人编号,i为每次循环时计数变量,k为按1,2,3报数时的计数变量,m为退出人数,当退出人数比n-1少时执行循环体,对推村恩编号为0,报数到尾i恢复为0,循环继续。
(2)将一个5*5的矩阵(二维数组)中最大元素放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),写一函数实现之。
用main函数调用。
算法说明:change(int *p)程序清单:#include <stdio.h>int main(){void change(int *p);int a[5][5],i,j,*q;for(i=0;i<5;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);q=&a[0][0];change(q);for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%d ",a[i][j]);printf("\n");}return 0;}void change(int *p){int i,j,temp;int *pmax,*pmin;pmax=p;pmin=p;for(i=0;i<5;i++){for(j=0;j<5;j++){if(*pmax<*(p+i*5+j)) pmax=p+i*5+j;if(*pmin>*(p+5*i+j)) pmin=p+i*5+j; }}temp=*(p+12);*(p+12)=*pmax;*pmax=temp;temp=*p;*pmin=temp;pmin=p+1;for(i=0;i<5;i++){for(j=0;j<5;j++){if(i==0&&j==0) continue;if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;}}temp=*pmin;*pmin=*(p+4);*(p+4)=temp;pmin=p+1;for(i=0;i<5;i++){for(j=0;j<5;j++){if((i==0&&j==0)||(i==0&&j==4)) continue; if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;}}temp=*pmin;*pmin=*(p+20);*(p+20)=temp;for(i=0;i<5;i++){for(j=0;j<5;j++){if((i==0&&j==0)||(i==0&&j==4)||(i==4&&j==0)) continue;if(*pmin>*(p+5*i+j)) pmin=p+5*i+j;}}temp=*pmin;*pmin=*(p+24);*(p+24)=temp;}运行结果:分析与思考:change函数实现元素值交换。
找出最大最小之,最大值与中心元素呼唤,最小值与左上角的元素互换。
找出全部元素中的次小值,第三小值,第四小值,分别与剩下的三个角互换。
元素地址均以元素做单位的地址。
(3)有一个班4个学生,5门课程。
1,求第一门课程的平均分。
2,找出有两门以上课程不及格的学生,输出他们的学号和全部课程成绩及平军成绩。
3,找出平均成绩在90分以上或全部课程成绩在85分以上的学生。
分别编3个函数实现以上3个要求。
算法说明:avscofali2good程序清单:#include <stdio.h>int main(){void avsco(float *,float *);void avcour1(char (*)[10],float *);void fali2(char course[5][10],int num[],float *pscore,float aver[4]);void good(char course[5][10],int num[4],float *pscore,float aver[4]);int i,j,*pnum,num[4];float score[4][5],aver[4],*pscore,*paver;char course[5][10],(*pcourse)[10];printf("input course:\n");pcourse=course;for(i=0;i<5;i++)scanf("%s",course[i]);printf("input NO. and scores:\n"); printf("NO.");for(i=0;i<5;i++)printf(",%s",course[i]);printf("\n");pscore=&score[0][0];pnum=&num[0];for(i=0;i<4;i++){scanf("%d",pnum+i);for(j=0;j<5;j++)scanf("%f",pscore+5*i+j);}paver=&aver[0];printf("\n\n");avsco(pscore,paver);avcour1(pcourse,pscore);printf("\n\n");fali2(pcourse,pnum,pscore,paver); printf("\n\n");good(pcourse,pnum,pscore,paver);return 0;}void avsco(float *pscore,float *paver){int i,j;float sum,average;for(i=0;i<4;i++){sum=0.0;for(j=0;j<5;j++)sum=sum+(*(pscore+5*i+j));average=sum/5;*(paver+i)=average;}}void avcour1(char (*pcourse)[10],float *pscore) {int i;float sum,average1;sum=0.0;for(i=0;i<4;i++)sum=sum+(*(pscore+5*i));average1=sum/4;printf("course 1:%s average score:%7.2f\n",*pcourse,average1);}void fali2(char course[5][10],int num[],float *pscore,float aver[4]){int i,j,k,label;printf(" ==============Student who is fail in two course========== \n");printf("NO. ");for(i=0;i<5;i++)printf("%11s",course[i]);printf(" average\n");for(i=0;i<4;i++){label=0;for(j=0;j<5;j++)if(*(pscore+5*i+j)<60.0) label++;if(label>=2){printf("%d",num[i]);for(k=0;k<5;k++)printf("%11.2f",*(pscore+5*i+k));printf("%11.2f\n",aver[i]);}}}void good(char course[5][10],int num[4],float *pscore,float aver[4]){int i,j,k,n;printf(" ==========Students whose score is good====== \n");printf("NO. ");for(i=0;i<5;i++)printf("%11s",course[i]);printf(" average\n");for(i=0;i<4;i++){n=0;for(j=0;j<5;j++)if(*(pscore+5*i+j)>85.0) n++;if((n==5)||(aver[i]>=90)){printf("%d",num[i]);for(k=0;k<5;k++)printf("%11.2f",*(pscore+5*i+k));printf("%11.2f\n",aver[i]);}}}运行结果:分析与思考:num是存放4个学生学号的一维数组,course是存放5门课名字的二维字符数组,score是存放4 个学生5门课成绩的二维数组,aver是存放每个学生平时成绩的数组。