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

合集下载

西南交大数据结构实验报告

西南交大数据结构实验报告

目录实验——元稀疏多项式的计算 (2)实验三停车场管理 (11)实验四算术表达式求值 (18)实验七哈夫曼编/译码器实验指导书 (25)实验八最短路径实验指导书 (36)实验十部排序算法比较实验指导书 (45)实验——元稀疏多项式的计算#include <stdio.h>#include <stdlib.h>#include vconio.h〉typedef struct ltem{ double coef;int expn;struct Item *next;Jltem/Polyn;#define Createltem(p) p=(ltem *)malloc(sizeof(ltem));#define Deleteltem(p) free((void *)p);判断选择函数/******京******車************車**********末木*****京******拿*****京**/int Select(char *str){char ch; printf(,,%s\n,,/str);printf("lnput Y or N:'1);do{ ch=getch();}while(ch!='Y,&&ch!='y‘&&ch!='N'&&ch!—rV);printfCXn");if(ch==,Y,||ch==,y,) return(l);else return(O);}/*******************************京************球************* 4K/* 插入位星定位函数 /********************車****************京************孚*********** int InsertLocate(Polyn h/nt expnjtem **p){Item 床pr已*q;pre=h;q=h->n ext;while(q&&q・> exp nvexpn){ Pre=q;q 二q.>n ext;}if(!q){ *P=pre;return 仕);}else if(q->expn==expn) {*p=q;return(O);}插入结点函数 ****京******京*****)|(4|******41****京*拿4[**京************ 京***定*京**void insert(ltem *prejtem *p) { p ・> next 二 pre ・ >n ext;pr/>n ext=p;}/拿*****京******車************車**********末木***«******沐牛拿*****京**/ /* 输入多项式 *//******京** ******** ***4t******************4t4t** ****** ********京** / Polyn Input(void){double coef;int expnjlag;Item *h /*p /*q,*pp;Createltem(h);// 产生头结点 h->next=NULL;printf("input coef and expn(if end ,expn=・l)\n”);while(l){ printf(,,coef=,');scanf(”%lf :&coef);printf(,,expn=");scanf("%d",&expn); 〃输入多项式的系数和指数 if(expn==-l) break; 〃若指数为一1,表示输入结朿if(lnsertLocate(h,expn,&pp))//返回值非0表示插入新结点{Createltem(p);p->coef=coef;p->expn=exp n;insert(pp,p); 〃按顺序在插入}else if(Select("has the same expr\Replace older value?")) pp->coef=coef; 〃指数相同,替换系数}return h;}/拿 *****京******車***********************木木**********沐牛拿*****京**/ /* 撤消多项式 */y****)«(>)( *«♦♦♦♦****♦♦****♦♦ ***♦♦♦♦****♦**♦**♦♦♦♦**♦♦ ♦**♦♦♦♦**** /{ *P=pre;return(-l);}}車**********京車****案******承******************承****水4(*車***未** */void Destroy(Polyn h)Item *p=h/q; while(p!=NULL) {q=p;p=p->n ext;Deleteltem(q);}/*****4t*4t****4c4t4t***4t4K************4(拿4t***4t *************** 定**#*卓/ /* 输岀多项式♦//****木京************京************京************球*********/ void Output(Polyn h z char *title)int flag=l;Item *p=h・>next;printf(,,%s=,,/title);while(p){if(flag) 〃表示是否是多项式的第一项{flag=O;if(p->expn==O) printf(,,%.2lf,,/p->coef);else printf(l,%.2lfx A%d,,/p->coef/p->expn);}else{if(p->coef>0) printf(,,+H);if(p->expn==0) printf("%.2lf,/p->coef);else printf(H%.2lfx A%d,,/p->coef/p->expn);p=p->next;} printfCV);/*******************************束*******車****京************京拿*/ /*判断两个多项式项的关系*//************京*************************京*****4(車******** / int ltemComp(ltem xjtem y){if(x.expn<y.expn)return(-l);else iffx.expn二二y.expn)return(O);else return(l);int menu(void){int num; system(,,cls H);printf(N now the choice you can make:\n H);printf(" (l)create P(x)\n u);printf(H (2)create Q(x)\n");printf(" (3)p(x)+Q(x)\n");printf(" (4)P(x)-Q(x)\n“);printf(" (5)p(x)*Q(x)\n");printf("⑹print P(x)\n u);printf(" (7)print Q(x)\n H);printf("⑻print P(x)+Q(x)\n n);printf(M⑼print P(x)-Q(x)\n H);printf(H (lO)print P(x)*Q(x)\n u);print:f(”(ll)Quit\n");printf(H please select 1,2,3,4,5,6,7,8,94041:");do{scanf("%dj&num);}while(num<l | | num>ll);return(num);}/*****床******京*****案*************************京*****4(車******** / /* 判断多项式是否存在*//****** 案******車車***4( ******* 車**********>k*******4t****4t4i4t****i|(4t*/ int PolynNotEmpty(Polyn h,char *p) {if(h==NULL){ printf(H%s is not exist'Xn'^p);getchar();return 0;else return(l);}/*4c***>)ciK4t************4t4i*****************4t4t** ****** ********京**/ /* 两多项式多项式相加*//*******************************束*******車****京************京拿*/ Polyn AddPolynfPolyn hl,Polyn h2)Item *head/*last/*pa=hl->next,*pb=h2->next/*s;Createltem(head); 〃头结点,不动last=head;while(pa&&pb){ switch{ltemComp(*pa/*pb))case -1:Createltem(s); s->coef=pa->coef;s->expn=pa->expn; last->next=s;last=last-> next;pa=pa->n ext;break;case 1:Createltem(s);s->coef=pb->coef;s->expn=p b・>expn;last->n ext=s;last=last-> next;pb=pb->next;break;case 0: if(pa->coef+pb->coef) 〃相加不为0,写入{Createltem(s); s->coef=pa->coef+pb->coef;s->expn=pa->expn;last- >n ext=s; last=last-> next;}pa=pa->n ext;pb=pb->next; break;}}if(pa) //a未到尾last- >n ext=pa;else if(pb)last- >n ext=pb;else 〃两者皆到尾last->next=NULL;return head;}Polyn SubtractPolyn(Polyn hl,Polyn h2){Item *head/*last/*lastl,*pa=hl->next,*pb=h2->next,*s;Createltem(head);last=head;while(pa&&pb){ switch(ltemComp(*pa,*pb)){ case -1:Createltem(s);s->coef=pa->coef;s->expn=pa->expn;last->n ext=s;last=last- >n ext;pa=pa->n ext;break;case 1:Createltem(s); s->coef=pb->coef*(-l); s->expn=p b・>expn; last->next=s; last=last- >n ext; pb=pb->next;break;case 0: if(pa->coef-pb->coef) 〃相加不为0,写入{Createltem(s); s->coef=pa->coef-pb->coef;s->expn=pa->exp n; last- >n ext=s;last=last-> next;}pa=pa->n ext; pb=pb->next; break;}}if(pa) //a未到尾last ext=pa;else if(pb) 〃pb未到尾,后面附负值{while(pb){Createltem(s); s->coef=pb->coef*(-l); s->expn=p b・>expn; last->n ext=s;last=last- >n ext; pb=pb->next;} last->next=pb;}else 〃两者皆到尾last->next=NULL;return head;}/************** *****車*****************京************扌*****未*/* 两多项式多项式相乘/拿 *****京******車************車**********末木************拿*****京* Polyn MultPolyn(Polyn hl,Polyn h2) 〃两个多项式相乘{int expn;Item *head/*pa,*pb=h2->next,*s/*pp;double coef;Createltem(head);head->next=NULL;while(pb) 〃双层循环,每项都乘到{ pa=hl->n ext;while(pa){ expn=pa->expn+pb->expn;coef=pa coef*pb->coef;if(lnsertLocate(head,expn/&pp))//返回值非0 表示插入新结点{ Createltem(s);s->coef=coef;s->expn=expn;insert(pp,s); 〃按顺序在插入}elsepp->coef=pp->coef+coef; 〃找到有相同指数,直接加上去pa=pa->next; }pb=pb->n ext;return head;*/主函数*******************車*****************************孚******** */ void main(){int num;Polyn hl=NULL;//p(x)Polyn h2 二NULL; 〃Q(x)Polyn h3=NULL;//P(x)+Q(x)Polyn h4=NULL;//P(x)-Q(x)Polyn h5=NULL;//P(x)*Q(x)while(l){num=menu(); getchar();switch(num){ case 1: 〃输入第一个多项式,若多项式存在,首先撤消然后再输入if(hl!=NULL){if(Select(H P(x) is not Empty,Create P(x) again?")){ Destroy(hl);hl=lnput();}else hl=lnput();break;case 2: 〃输入第二个多项式,若多项式存在,首先撤消然后再输入if(h2!=NULL){if(Select("Q(x) is not Empty z Create Q(x) again?11)){ Destroy(h2);h2=lnput();}}else h2=lnput();break;case 3: 〃两多项式相加if(PolynNotEmpty(hl/p(x)")&&PolynNotEmpty(h2/Q(X)”)){ h3=AddPolyn(hl/h2);Outputfhl/Tfx)11);Output(h2/Q(x)");Output(h3;,P(x)+Q(X)n);printf("P(x)+Q(x) has finished !\n");getchar();}break;case 4: 〃两多项式相减if(PolynNotEmpty(hl/p(x)")&&PolynNotEmpty(h2「Q(X)J){ h4=SubtractPoly n(hl,h2);Output(hl/,,P(x),,);Output(h2/Q(x)”);Output(h4「Px)・Q(x)”);printf(,,P(x)-Q(x) has finished !\n H);getchar();}break;case 5: 〃两多项式相乘if(PolynNotEmpty(hl/,p(x)n)&&PolynNotEmpty(h2/Q(X)")){ h5=MultPolyn(hl/h2);Output(hl/,,P(x),,);Output(h2,'Q(x)”);Output(h5「P(x 广Q(x)”);printf(H P{x)*Q(x) has finishedgetchar();}break;case 6: //显示第一个多项式if(PolynNotEmpty(hl/,p(x)u)){Output(hl;,P(x)l,);getchar();实验三停车场管理#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#define STACKSIZE 3typed ef struct{int Bno;int type; 〃小车1,客车2,货车3int arrivetime;int pushtime;int departuretime;}CAR;〃链队结构左义(临时车道)typedef struct QNODE{CAR elm;struct QNODE *next;}QNODE;〃链队结构左义(注意申明方法,相当全局变量)struct LinkQueuefQNODE *front;QNODE *rear;}Queue;〃顺序栈结构立义(停车场)struct SqStack{CAR elm[STACKSIZE];int top;}stack;〃收费标准int pay[卜{0,235}; //每小时小车2元,客车3元,货车5元〃判栈空int StackEmpty{)if(stack.top==0)return 1;elsereturn 0;}〃判栈满int StackFull(){if(stack.top==STACKSIZE)return 1;else return 0;}〃顺序栈入栈void push(struct SqStack *stack,CAR car){ if(!StackFull()) stack->elm[stack->top++]=car;}〃顺序栈岀栈(CAR用了引用,不知为啥指针不管用)void pop(struct SqStack * stack,CAR &car){ if(!StackEmpty()){ stack->top-; car=stack->elm[stack->top);}}〃链栈入栈函数void LPush(QNODE *stack z QNODE *p){ p・>n ext=stack->next;stack->next=p;}〃链栈出栈函数(去掉了stack卜•一位的结点)void LPop(QNODE *stack,QNODE **p){ (*p)=stack->next;stack->next=(*p)->next;}〃链队初始化void InitQueue(){ Queue.front=Queue.rear=(QNODE *)malloc(sizeof(QNODE));Queue.fr on t->next=NULL;}〃判队列空int QueueEmpty{){ if(Queue.front->next==NULL&&Queue.front==Queue.rear) return 1;else return 0;}〃入队操作void EnQueue(CAR car){ QNODE *p;p=(QNODE *)malloc(sizeof(QNODE));p->elm=car;p->n ext=NULL;Queue.rear- >n ext=p;Queue.rear=p;}〃出队操作(队列带头结点,才方便岀)void DeQueue(CAR *car){ int flag=O;QNODE *p;if(Queue.front->next==Queue.rear)flag=l;p=Queue.fr on t->next;Queue.front->next=p->n ext;*car=p->elm;if(flag) 〃一泄要在减到空时重新置rear,不然rear没有了,无法判空Queue.rear=Queue.fr ont;free(p);}〃栈数据查找(返回査找失败)int SearchStack(int BusNo){ int k;k=stack.topwhile(k>=0&&BusNo !=stack.elm[k].Bno)k-;return k;}〃队数据查找(返回NULL,查找失败)QNODE *SearchQueue(int BusNo){ QNODE *p;p二Queue.fr on t->next;while(p!二NULL&&p・>Glm.Bno!=BusNo)p=p->n ext;return p;}〃收费计算与显示函数(0表示未干此事,时间按24小时制,一旦不等0,必有arrive<=push<=departure)void CalcultPay(CAR car){ int payment;if(car.arrivetime!= 0&&car.pushtime==0)payme nt=(car.departuretime-car.arrivetime)*pay[car.type]^.O;else if(car.arrivetime!= 0&&car.pushtime!=O)payme ntNcar.pushtime-car.aiTivGtimG^paylcar.typel/S.O+Yar.departiirGtimicar.pushtime)3* pay[car.type];elsepayme nt=(car・departurGtime・car・pushtime)Say[car・type];printfCXn");printf(" 收费二%4d \n", payment);printf(”\n“);getch();}〃进场车数据的录入与管理void lnputArrialData(){ CAR arrive;printf(”请输入车辆信息\n“);printf(l,Bno:");scanfC^d'^&arrive.Bno);printf ("type:");scanfC%cT:&arrive.type);prin tfC^rrivetime:");sea nf(”%d‘:&airivG・arrivetime);while(!StackFull()&&arrive.Bno>0&&arrive.type>O&&arrive.arrivetime>0){ arrive.push t:ime 二arrive, arrivetime;push(&stack,arrive);printf(,,Bno:,,); scan &airive.Bno); printfCtype:"); scan f(ll%d"/&arrive・type);printfCarrivetime:");sea nf("%cT,&arTive・arTivetime);} while(arrive.Bno>0&&arrive.type>0&&arrive.arrivetime>0){ arrive.pushtime=O;En Queue(arrive);printf(,,Bno:,,);scanf(,,%d,:&arrive.Bno);printf(,,type:N); scanf(,,%d,,/&arrive.type);printf("arrivetime:u);sea nf("%cT,&arTive・arrivGtime);}}〃离场车数据录入与管理void lnputDepartData(){ int BusNo^eparttime^os;CAR depart,temp;QNODE *p,*pri/q;QNODE*LStack;LStack=(QNODE *)malloc(sizeof(QNODE));LStack->next= NULL;printf(”请输入车辆离开信息\n“);printfC'departtime:"); scanf「%cT:&departtirne);printfCBusNo:"); sea nf ("%d BusNo);while(BusNo>0&&departtime>0){ pos=SearchStack(BusNo);if(pos>=0){ while(stack.top-l!=pos){ pop(&stack z temp);p==(QNODE *)malloc(sizeof(QNODE));p・ >elm 二temp;LPush(LStack/p);}pop(&stack’temp);temp.departuretime=departtime;printf("车辆离开的信息:\n“);printf(“Bno:%d Type:%d arrivetime:%d pushtime:%d departtime^dXn'^temp.BnoAemp.type^emp.arrivetime,temp.pushtime,temp.departuretime);CalcultPay(temp);while(LStack->next!=NULL){ LPop(LStack z&q);push(&stack z q->elm);free(q);}if(!QueueEmpty()){ DeQueue(&depart);printf("There is new space in STACK! please input pushtime:");scanff^d'^&depart. pushtime);push(&stack,depart);printf("A car get into the STACK successfully!\n\n");}}pri=SearchQueue(BusNo);if(pri){ while(pri !=Queue.fr on t->next){ DeQueue(&depart);p==(QNODE *)malloc(sizeof(QNODE));p・ >elm二depart;LPush(LStack/p);}DeQueue(&depart);depart.departuretime=departtime;printf("车辆离开的信息为:\n");printf(“Bno:%d Type:%d arrivetime:%d pushtime:%d departtime:%d\n 舄depart. B no,depart, typ 巳depart, arrivetim 已depart, push 廿me,depart・d€partureti me);CalcultPay(depart);while(LStack->next!=NULL)LPop(LStack,&q);LPush(Queue.front,q);}if(pos==-l&&pri==NULL)printf(M there is no this CAR! Please input again:\n N);elseprintf(H the other departure CAR:\n");printf(,,departtime:,,); scanf(,,%d,,/&departtime); printfCBusNo:");scanff%d'^&BusNo);}}〃列表显示车场数据void OutputBusData(){ int i;QNODE *p;printf("\n 停车场:\n");printf(" CarNo Type Arrive Push\n,,);printf(" stack top=%d\n 舄stack, top);for(i=0;i<stack.top;i++)printf(,,%10d%10d%13d%12d\n',/stack.elm[i].Bno/stack.elm[i].type/stack.elm[i].arrivetime/st ack.elm[i).pushtime);if(Queue.front->next){ printf(H\n 便道:\n");p=Queue.front->n ext;printf(" CarNo Type Arrive\n u);while(p){ printf(,,%10d%10d%13d\n,,/p->elm.Bno/p->elm.type,p->elm.arrivetime); p=p->n ext;}}getch();}〃撤销队列函数void DestroyQue(){QNODE *p/q;p=Queue.fr ont;while(p){q二p;p=p->n ext;free(q);}do{ scanf 「%cT,&rn);}while(m<l| |m>3);return m;〃主函数void main(){stack.top=0;lnitQueue();while(l){ //system (” cis");switch( nemu()){case 1:lnputArrialData();OutputBusData(); break;case 2:lnputDepartData();OutputBusData(); break;case 3:OutputBusData();DestroyQue(); return;}printf(M \n printf(" printf("printf(" *41***沐4(************ CAR Man age1.Arrival \n M ); 2. D eparture \n H );〃菜单选择int nemu(){ int m;printf(" *定**京***********孚孚************拿*****卓****球******京*\n")・ printf('Pease select 1,2,3:'');实验四算术表达式求值#include<stdio.h> #include<stri ng・h> #include<conio.h> #include<stdlib.h> #definePLUS 0 #define MINUS 1 #define POWER 2 #define DIVIDE 3 #define LEFT 4 #defineRIGHTS #define STARTEND 6 #define DIGIT 7 #define POINT 8 #define NUM 7 #defineNO -100 #define STACKSIZE 20 chara[]=f<'-7*7/7(7)7#-};〃优先级矩阵int PriorityTable[7][7]={{l,—1,1,1},{1,1,-1,-1,-1,1,1}, {1,1,1,1,-144}, {1,1,1,1,-144}, {-1,-1,-1,-1,-1AN0}, {1,1,1,1,NO,14Lint menu() {int num;system(,,cls H);printf("\n Expressi on Calculation 水案京****常京京**********、n‘‘)・printf(" --------------------- 1.input expression ------------------------------ \n");prirrtf(” -------------------- 2.calculation expression ----------------------- \n H);printf(" --------------------- 3.print result --------------------------------- \n H);printf(" --------------------- 4.Quit ------------------------------------------ \n");printf("***********車孚*******************車****************************車孚*\n")・printf("Please select 1,23/4:"); do{scanf(,,%d,,/&num);}while(num<l| |num>4);return num;〃输入表达式void In putExpressi on (char str[]){int len;printf("lnput expression string:\n N); scanf("%s 舄str);len=strle n(str);str[len]=,#1;str[len+l]=,\O,;}〃确泄当前字符类型int GetCharType(char ch){int i;for(i=0;i<NUM;i++) if(ch==a[i]) return i;if(ch>=l O,&&ch<=,9,)return DIGIT;if(ch==1.1)return POINT;return -1;}〃表达式计算(1表示正确,0表达式有误)int EXCUTE(char *str,double *Result){int pp,topTr,topNd,CharTyp巳OPTR[STACKSIZE]; double numbeGtemp^PNDlSTACKSIZE];OPTR[0]=STARTEND;topTr=l;topNd=0;PP=O;while((str[pp])){CharType=GetCharType(str[pp]);switch(CharType){case -1:return 0;case DIGIT:number=0;while(str[pp]>='0,&&str[pp]<='9,)number=number*10+(str[pp]-48);pp++;}if(str[pp]==7) 〃遇小数点{temp=10.0;PP++;while(str[pp]>='O l&&str[pp]v=9) {num ber 二number+(str[pp 卜48)/temp;temp=temp*10;pp++;}}OPND[topNd++]=number; break;case POINT: 〃以小数点开始的实数number=0;temp=10.0;PP++;while{str[pp]>='O'&&str[pp]<='9,){number=nu mber+(str[pp]-48)/temp;temp=temp*10;pp++;}OPND[topNd 卄]二number; break;case PLUS:if(PriorityTable[OPTR[topTr-l]][PLUS]==-l){OPTR[topTr++]=PLUS;pp++;}else{switch(OPTR[topTr-l]) {case PLUS:OPND[topNd-2]=OPND[topNd-2]+OPND[topNd-l];break;case MINUS:OPND[topNd.2]=OPND[topNd-2]-OPND[topNd-l];break;case POWER:OPND[topNd-2]=OPND[topNd-2]*OPND[topNd-l];break;case DIVIDE:OPND(topNd-2]=OPND[topNd-2]/OPND(topNd-l];break;}topNd—;topTr—;break;case MINUS:if(PriorityTable[OPTR[topTr-l]][MINUS]==-l){OPTR[topTr++]=MINUS;pp++;}else{switch(OPTR[topTr-l]) {case PLUS:OPND[topNd-2]=OPND[topNd-2]+OPND[topNd-l];break;case MINUS:OPND[topNd-2]=OPND[topNd-2]-OPND[topNd-l];break;case POWER:OPND[topNd-2]=OPND[topNd-2]*OPND[topNd-l];break; case DIVIDE:OPND[topNd-2]=OPND[topNd-2]/OPND[topNd-l];break; } topNd-;topTr-;}break;case POWER:if(PriorityTable[OPTR[topTr-l]][POWER]==-l){OPTR[topTr++]二POWER;PP++;}else{ switch(OPTR[topTr-l]){case PLUS:OPND[topNd-2]=OPND[topNd-2]+OPND[topNd-l];break;case MINUS:OPND[topNd-2]=OPND[topNd-2]-OPND[topNd-l];break;case POWER:OPND[topNd-2]=OPND[topNd-2]*OPND[topNd-l];break;case DIVIDE:OPND[topNd-2]=OPND[topNd-2]/OPND[topNd-l];break; } topNd—;topTr—;break;case DIVIDE:if(PriorityTable[OPTR[topTr-l]][DIVIDE]==-l){OPTR[topTr++]二DIVIDE;pp++;}else{switch(OPTR[topTr-l]) {case PLUS:OPND[topNd-2]=OPND[topNd-2]+OPND[topNd-l];break;OPND[topNd-2]=OPND[topNd-2]-OPND[topNd-l];break;case POWER:OPND[topNd-2]=OPND[topNd-2]*OPND[topNd-l];break;case DIVIDE:OPND[topNd-2]=OPND[topNd-2]/OPND[topNd-l];break;}topNd—;topTr—;}break;case LEFT:OPTR[topTr++]=LEFT;pp++;break;case RIGHT:if(OPTR[topTr-l]==LEFT){ topTr-;pp++;}else{while(OPTR[topTr-l]==PLUS| |OPTR[topTr-l]==MINUS| |OPTR[topTr-l]==POWER| |OPTR[top Tr-1]==DIVIDE){switch(OPTR[topTr-l]){case PLUS:OPND[topNd-2]=OPND[topNd-2]+OPND[topNd-l];break;case MINUS:OPND[topNd-2]=OPND[topNd-2]-OPND[topNd-l];break;case POWER:OPND[topNd-2]=OPND[topNd-2]*OPND[topNd-l];break;case DIVIDE:OPND(topNd-2]=OPND[topNd-2]/OPND(topNd-l];break;topNd-;topTr-;}if(OPTR[topTr-l]==STARTEND)return 0;if(OPTR[topTr-l]==LEFT){topTr-;pp++;}}break;case STARTEND:while(OPTR[topTr-l]!=STARTEND){switch(OPTR[topTr-l]){OPND[topNd-2]=OPND[topNd-2]+OPND[topNd-l];break; caseMINUS:OPND[topNd-2]=OPND[topNd-2]-OPND[topNd-l];break; casePOWER:OPND[topNd-2]=OPND[topNd-2]*OPND[topNd-l];break; caseDIVIDE:OPND[topNd-2]=OPND[topNd-2]/OPND[topNd-l];break; }topNd—;topTr—;}if(topNd==l){*Result=OPND[0];return 1;}else return 0;}}return 1;}void main(){ int numjlag^;double result;char str[256];str[O]=,\O,;while(l){ num=me nu();switch(num)case 1: 〃输入表达式InputExpressio n(str);flag 二0;printf(n the Expression is:"); printf("%s\n 舄str);getch();break;case 2: 〃讣算表达式if(str[O]==,\O,){ printf(H Expression is Empty! Again!\n“);InputExpression(str);flag=0;printf(u the Expression is:11); printf(”%s\n 舄strj;getch();}else if(!EXCUTE(str;&result)){ printf(H The expression has error! Again! \n");InputExpression(str);flag 二0;printf(u the Expression is:H); printf(”%s\rV:strj;getch();}else {printf(n calculation has finished!\n u);getch();flag=l;}break;case 3: 〃打印计算结果if(flag){ printf(,,#%s=%lf\n,,/str/result); getch();}else{ printf(H You had not did the calculation!\n"); getch();}break;case 4:return;实验七哈夫曼编/译码器实验指导书#include<stdio.h> /* for size_t/ printf() */#include<conio.h> /* for getch()#include<ctype.h> /* for tolower() */#include<malloc.h> /* for mallocO, callocf), free() */#include<string.h> /* for memmove(), strcpy()#include<stdlib.h>#define NODENUM 26〃最大编码长度/* ----- 哈夫曼树结点结构 -------- */struct node{char ch;int weight;int pare nt;int Ichildjchild;} *ht; 〃指向哈夫曼树的存储空间的指针变量/*树结构和全局结构指针*//* ----- 字符编码结点结构 -------- */struct HuffmanCoding{char ch;char coding[NODENUM];};/* ---- 哈夫曼树遍历时栈的结点结构*/struct stack no de{int NodeLevel;int NodeElem;};/* -------- 常量文件爼--------- */const char *TableFileName = ,,d://HfmTbl.txt,1; 〃哈夫曼树数拯文件const char *CodeFileName = ”d:〃CodeFile.txt”;〃字符编码数据文件const char *SourceFileName = ”d://SrcText・txt”;〃需编码的字符串文件const char *EnCodeFileName = ,,d://EnCodeFile.txt u; //编码数据文件const char *DecodeFileName = "dy/DecodeFile.txt"; //译码字符文件*****京******************************末未*****京***************/释放哈夫曼树数据空间函数void free_ht()if(ht != NULL) {free(ht);ht = NULL;}}***********京******京********************************專****京**** 判是否为可译码字符串*************************************************4(孚**********int JudgeStr(char str[])for(int i=O;str[i]!=l\O,;i++) if(str[i]!=,0•&&str[i]!=T) return 0;return 1;/****** 案******車車***4( ******* 車**********>k*******4t****4t4i4t****i|(4t*/从文件读取哈夫曼树数据函数*/int ReadFromFile()int i;int m; FILE *fp;if((fp=fopen(TableFileName/,rb,,))==NULL){printf("cannot open %s\n,,/ TableFileName);getch();return 0;}freadf&m^izeoffin^lJp); //m为数据个数(文本中第一个就是结点个数)free_ht();ht=(struct node *)malloc(m*sizeof(struct node));fread(ht,sizeof(struct node),m,fp);fclose(fp);return m;}void EatCharsUntilNewLine()while(getchar()!=,\n')con tinue;/******************************* 束 ******* 車****京************京拿 ***4(******>k/*/void Select(struct node ht[]Jnt n, int *sl,int *s2) {int i,j;〃寻找第一个根结点 *sl=0;while esl<=n&&ht[*sl].parent!=.l) ++(*sl);//父亲为 1 无父亲,为根,在森林中 i=(*sl)+l ; while(i< 二n){if(ht[i].parent==-l&&ht[i].weight<ht[*sl].weight) *sl=i; 〃比较后面所有根结点,寻找 第一个权值最小的根结点++i ; }〃开始左s2・先寻找第一个根结点,如果是si,跳过 *s2=0;while(*s2<=n&&(ht[*s2].parent!=-l 11 *s2==*sl)) ++(*s2); 〃寻找第二个权值最小的根结点 j=*s2+l; while(j<=n){if(j!=*sl&&ht[j].parent==-l&&ht[j].weight<ht[*s2].weight) *s2=j; //不等于 si ++j; } return;/4t****4t*4t******車********* *******束*******車****京***********京京拿* / /* 创建哈夫曼树和产生字符编码的函数 */ /************京*****寧***************************************** / void Initialization() {int i,n /m,j /f r sl /s2/start; charcd[NODENUM];struct HuffmanCoding code[NODENUM]; 〃为数组,长度已上,不可再改(如用 malloc, new 之类)FILE *fp;printfC*输入字符总数n:"); scanf("%d",&n);EatCharsllntilNewLine{);// 除 了数字只能输回车了 m=2*n-l; 〃总结点数选择权值最小的两个根结点函数(重0到n 找)ht=(struct node *)malloc(m*sizeof(struct node));//申诘哈夫曼树的存储空间printf("请输入字符和权值:\n”);//记录并初始化for(i=0;i<n;i++){printf(”第%d 组:0+1);scanf("%c %d l,/&ht[i].ch/&ht[i].weight);EatCharsUntilNewLine(); 〃至关重要ht[i].parent=-l;ht[i].lchild=-l;ht[i].rchild=-l;}for(i=n ;i<m;i++){ht[i].ch=l#,;ht[i].weight=O;ht[i].parent=ht[i].lchild=ht[i].rchild=-l;**京* 拿******** 开始彳:**♦♦♦****♦♦♦***♦♦♦***♦♦♦♦♦*for(i=n;i<m;i++)Select(ht,i-l,&sl,&s2);// 找到最小两结点ht[sl].pare nt 二i;ht[s2].pare nt 二i;ht[i].lchild=sl;ht[i].rchild=s2;ht[i].weight=ht[sl].weight+ht[s2].weight;}〃把哈夫曼树的数拯存储到文件中if((fp=fopen(TableFileName/,,wb,,))==NULL){printf(u cannot open %s\n,,/ TableFileName);getch();return;}fwrite(&m,sizeof(int)丄fp);fwrite(ht,sizeof(struct node^mjp);fclose(fp);cd[n-l]=,\O,;for(i=0;i<n;i++){start=n-l;for(j=i,f=ht[i].parent;f!=-l;j=f,仁ht[f].parent)//沿着父亲上去,直到根if(ht[f].lchild==j)cd[-.start]=I O,; 〃若沿父结点的左分支上升,则得编码字符“0”elsecd[..start]=i r;〃若沿父结点的右分支上升,则得编码字符a r code[i].ch=ht[i].ch;strcpy(code[i].coding,&cd[start]);//从start的这个地址处开始赋值,前而的位可能用不到}〃把字符编码数据存储到文件中iffSffp^openfCodeFileName/'wb")))printf("cannot open %s\n"/ CodeFileName); getch();return;}fwrite(&n/sizeof(int)/l/fp); 〃先写有几组编码fwritefcode^izeoffstruct HuffmanCoding),njp);fclose(fp);free_ht();printf(H\nlnitial successful!\n u);getch();/****木京************京************京************球*********/哈夫曼编码的函数void Encode(void)int i,j,n;char Encodestr[256);struct HuffmanCoding code[NODENUM];FILE *fpl;if((fpl=fopen(CodeFileName/,,rb,,))==NULL) {printf("cannot open %s\n,,/ CodeFileName); getch();return;}fread(&n,sizeof(int)丄fpl);fread(code,sizeof(struct HuffmanCoding^nJpl);//读字符编码数据printf("请输入需编码的文本串:“);scanfC^s^Encodestr); 〃读需编码的字符串fclose(fpl);if((fpl=fopen{SourceFileName,,,wb,,))==NULL)printf("cannot open %s\n”,SourceFileName );getch();return;}fputs(Encodestr,fpl);//存储被编码的字符串数据到文件中// fwritefEncodestGsizeoffchar^sizeoffEncodestrJJpl);后而会读出乱码fclose(fpl);if((fpl=fopen(EnCodeFileName/,,wb"))==NULL){printf(N cannot open %s\n舄EnCodeFileName );getch();return;}printf("编码结果为:\n u);for(i=0;Encodestr[i] !='\0';i++){for(j=0;j<n;j++)if(code[j].ch==Encodestr[i]){printfC^s'^codeO).coding);fputs(code[j].coding,fpl);break; 〃编码结果写入文件}if(j==n){ printf("\nWrong string,there is a unknow ChariCan not Encode!"); //出现没有的字符,显示出错return;}}printf("\nEnCode Succeedfclose(fpl);return;*/哈夫曼译码的函数*******************車*****************************孚********void Decode()FILE *CFI> *TFP;char DeCodeStr[256];char ch;intm=ReadFromFile();//读哈夫曼树数据,已进入ht。

西南交通大学个性化实验---CCD传感阵列原理及驱动实验

西南交通大学个性化实验---CCD传感阵列原理及驱动实验

单位:西南交通大学物理实验中心项目名称:CCD传感阵列原理及驱动实验指导老师:胡清、魏云组员:陈旺20092464(09级交控二班)张晏硕20094927(09级材料二班)一、前言 (2)二、实验目的 (2)三、实验设备 (2)四、实验原理 (3)五、实验步骤 (5)六、实验结果 (7)七、实验分析与讨论 (9)八、实验现场拍照 (11)九、实验展望 (11)十、实验心得体会 (12)十一、参考文献 (13)一、前言CCD(Charge Coupled Device,电荷耦合器件)是1970年问世的新型光电半导体器件,它是在MOS集成电路技术基础上发展起来的,具有光电转换、信息存储和延时等功能,又有尺寸小、质量轻、功耗小、噪声低、线性好、灵敏度高、动态范围大、性能稳定和自扫描能力强等优点。

故在图像传感、物体外型测量、工程检测、信息存储和处理等各个领域得到广泛的应用。

采用这种测量方法还具有如下优点:1、不必在望远镜、读数显微镜、测微目镜的视场中采用目视的方法测量。

只需通过CCD 传感器在计算机显示器或示波器显示屏上可直接观察物理现象并进行数据测量、记录、处理;2、能更直接地观测光强的相对分布情况。

通过定标,可以定量测量光强的分布情况;3、对衍射峰值、谷值、光强随空间位置变化率等的确定和测量不再是凭借人们的主观上的判断,而是对光强分布转化后的数字信号进行计算机处理从而得出精确的判断,因而测量结果更精确、客观;4、测量所得的数据、图形可方便地比较、计算、存档与输出;5、此种方法可与力、热、声及光等多领域的技术手段相结合以满足科学研究和工程技术中更多的需要。

二、实验目的1、掌握用示波器观测CCD驱动脉冲的频率、幅度、周期和相位关系的测量方法;2、通过测量CCD驱动脉冲的时序和相位关系,理解CCD的基本工作原理;3、通过测量CCD的输出信号和驱动脉冲的相位关系,掌握CCD的基本特性;4、通过测量CCD在不同驱动频率和不同积分时间下的输出信号,理解积分时间的意义以及驱动频率和积分时间对CCD输出信号的影响;5、加深对线性CCD的光电转换特性、灵敏度、暗信号及动态范围等特性参数的理解;6、理解积分时间等因素对上述参数的影响。

c++实验八报告

c++实验八报告

华南农业大学信息(软件)学院综合性、设计性实验成绩单开设时间:2013~2014年第二学期1 实验内容及目的2 实验步骤(1)按照要求建立相关的函数Stack();bool empty();T peek();void push(T value);T pop();int getSize();void printStack();bool contains(T element);(2)建立两个测试的数据栈,一个是字母,一个是数字 Stack<string> stringStack;stringStack.push("zhongguo");stringStack.push("xianggang");stringStack.push("aomen");for(int i=0;i<10;i++){intStack.push(i);}3 源代码Main.cpp#include <iostream>#include <string>#include "Stack.h"using namespace std;int main(){Stack<int> intStack;Stack<string> stringStack;stringStack.push("zhongguo");stringStack.push("xianggang");stringStack.push("aomen");cout<<"is contain zhongguo? "<<stringStack.contains("zhongguo")<<endl;cout<<"is contain taiwan? "<<stringStack.contains("taiwan")<<endl;cout<<"is contain zhuhai? "<<stringStack.contains("zhuhai")<<endl;stringStack.printStack();cout<<endl;for(int i=0;i<10;i++){intStack.push(i);}cout<<"is contain 2? "<<intStack.contains(5)<<endl;cout<<"is contain 7? "<<intStack.contains(6)<<endl;cout<<"is contain 15? "<<intStack.contains(10)<<endl;intStack.printStack();return 0;}Stack.h#ifndef STACK_H#define STACK_Htemplate<typename T>class Stack{public:Stack();bool empty();T peek();void push(T value);T pop();int getSize();void printStack();bool contains(T element);private:T elements[100];int size;};template<typename T>Stack<T>::Stack(){size=0;}template<typename T>bool Stack<T>::empty(){return (size==0);}template<typename T>T Stack<T>::peek(){return elements[size-1]; }template<typename T>void Stack<T>::push(T value) {elements[size++]=value; }template<typename T>T Stack<T>::pop(){return elements[--size]; }template<typename T>int Stack<T>::getSize(){return size;}template<typename T>void Stack<T>::printStack() {while(!empty()){cout<<pop()<<" ";}cout<<endl;}template<typename T>bool Stack<T>::contains(T element){for(int i=0;i<size;i++){if(element==elements[i]){return true;}}return false;}#endif4 遇到的问题与分析很快就完成了,感觉就跟玩一样,所以也没有什么问题。

(完整版)c实验报告

(完整版)c实验报告

(完整版)c实验报告实验名称: C语言实验报告实验内容:本次实验主要针对C语言编程进行实验。

通过实验的设计和完成,检验和加深对C语言的理解和应用能力。

实验步骤:1. 实验准备在开始实验之前,需要准备好以下必要的工具和材料:- 计算机- C语言编译器(比如GCC、Clang等)- 文本编辑器(比如Notepad++、Sublime Text等)2. 实验环境搭建在计算机上安装C语言编译器,并配置好相应的环境变量。

这样可以在终端或命令提示符中执行相关的C程序。

3. 编写实验代码根据实验要求,使用文本编辑器编写C语言代码。

根据实验的要求和功能需求,合理设计和组织代码结构,包括头文件的引用、变量的定义、函数的声明和定义等。

4. 编译和运行代码在命令行或终端中使用编译器对编写好的C语言代码进行编译,并生成可执行文件。

编译命令的具体格式根据不同的编译器而有所差异,但一般形式如下:```gcc -o output_file input_file.c```其中,"output_file"表示生成的可执行文件名,"input_file.c"表示待编译的C源代码文件名。

编译成功后,通过命令行或终端执行生成的可执行文件,检查程序的运行结果是否符合预期。

5. 实验结果分析根据实际运行结果,对实验数据进行分析和归纳。

可以通过输出结果、打印特定信息或观察程序的行为来判断程序是否正确地实现了预期的功能。

6. 实验总结在实验报告中对本次实验的过程、方法、结果进行总结,并提出实验中遇到的问题和解决方法。

同时,对所学习的C语言相关知识点进行总结和归纳,以加深对相关知识的理解和记忆。

实验结果:通过本次实验的设计和实现,我成功完成了对C语言编程的实验,达到了预期的目标。

通过编写实际的代码,我巩固了对C语言语法和基本概念的理解。

在实验过程中,我遇到了一些问题,通过查阅资料和与同学的讨论,我成功解决了这些问题。

西南交大操作系统实验总报告

西南交大操作系统实验总报告

操作系统实验报告指导教师:胡晓鹏实验报告一实验名称:Linux操作系统下的C语言编程实验目的:1.认识Linux系统,熟悉Linux操作系统的基本操作;2.了解vi命令的基本用法,能够使用vi命令对文件进行基础的操作与编辑;3.能够在Linux环境下编写C语言程序,生成.out文件,并成功执行;4.体会Linux环境下编程与Windows环境下编程的异同,加深对Linux操作系统的理解。

实验内容:熟悉Linux环境,编写简单C语言程序。

实验结果:实验结论:在Linux操作系统下的编程环境不同于Windows,编译器进行命令编译。

操作环境简洁,大多以键盘操作。

实验报告二实验名称:基于进程与线程的并发实验目的:1.了解进程与线程工作原理,掌握并发机制,学会编写简单的并发程序。

2.充分理解并掌握基于进程与线程的并发。

实验内容:在Linux环境进行基于进程与线程编写实验程序。

试验核心代码:int main(){ pthread_t tid[N];pid_t pid;pid=fork();if(pid<0){ printf("fail to fork\n");exit(1);}else if(pid==0){ printf("the child process:\n");}else{ sleep(10);printf("the parent process:\n");}void *res;int err[3];err[0]=pthread_create(&tid[0],NULL,fn1,NULL);err[1]=pthread_create(&tid[1],NULL,fn2,NULL); err[2]=pthread_create(&tid[2],NULL,fn3,NULL); int i;for(i=0;i<N;i++){if(err[i]= pthread_join(tid[i],&res)!=0){ printf("cannot join the thread %d\n",i);exit(1);}}return 0;}void *fn1(void *arg){printf("the first thread is done\n");return (void *)1;}void *fn2(void *arg){printf("the second thread is done\n");.\n");}printf("ener some text:");fgets(buffer,BUFSIZ,stdin);strncpy(shared_stuff->some_text,buffer,TEXT_SZ);shared_stuff->written_by_you=1;if(strncmp(buffer,"end",3)==0){running=0;ime=0;}while(i<m){ ime++;if(p[j].pro == proc[i]) ime=1;}}if(exit==0&&(flag<n)) ro=proc[i];p[flag].time=1;flag++;}elseif(exit==0) ime;for(j=1;j<n;j++)if(maxtime<p[j].time){ maxtime=p[j].time;key=j;}p[key].pro=proc[i];p[key].time=1;}ro);}cout<<endl;i++;}}void clock_p(int n,int m,int proc[]){cout<<"------------------------------------------"<<endl; cout<<"这是clock:"<<endl;struct page{int flag;int pro;};struct page *p=(struct page*)malloc(m*sizeof(page));lag=0;int i=0;int next;int j=0; ro==proc[i]){next=0;}}if(next){if(!p[j].flag){p[j].pro=proc[i];p[j].flag=1;next=0;if(mart<n)mart++;}else{p[j].flag=0; next=1;if(mart<n)mart++;}j++;j=j%n;}}ro);cout<<endl;}}void main(){ int pages;cout <<"输入页面数:";cin>>pages;cout<<"输入你的进程个数:";int m;cin>>m;cout<<"输入你的进程ID:";int *proc=new int[m];for(int i=0;i<m;i++)cin>>proc[i];lru_p(pages,m,proc);clock_p(pages,m,proc);}实验结果:实验结论:替换策略是计算机高效工作,充分利用资源,而不同的替换算法都有自己的利弊,不同的场景应充分权衡利弊进行选择。

西南交大实验报告

西南交大实验报告

西南交大实验报告西南交大实验报告引言:西南交通大学是中国著名的综合性大学之一,以交通运输为特色,涵盖了工、理、管、文、法、经、教育等多个学科领域。

本实验报告将着重介绍西南交大的实验教学体系以及实验室设施,以展示该校在培养学生实践能力和创新精神方面的努力。

一、实验教学体系西南交大以实验教学为核心,注重培养学生的实践能力和创新精神。

学校建立了一套完善的实验教学体系,包括实验教学计划、实验教材、实验教学方法和实验评价体系等。

实验教学计划根据不同专业的要求,为学生安排了一系列的实验课程,涵盖了理论知识的应用和实践技能的培养。

实验教材则精心编写,内容丰富,既有基础实验,也有前沿实验,能够满足学生的学习需求。

实验教学方法灵活多样,结合了讲授、实践、讨论等多种形式,让学生能够全面参与实验过程,提高实践能力。

实验评价体系科学合理,既注重实验结果的准确性,又注重学生的实验操作能力和实验报告的撰写能力。

二、实验室设施西南交大拥有先进的实验室设施,为学生提供了良好的实验环境。

学校的实验室涵盖了多个学科领域,包括物理、化学、生物、电子、计算机等。

这些实验室配备了先进的实验设备和仪器,能够满足学生进行各种实验研究的需求。

实验室的管理规范,设有专门的实验室管理员,负责设备的维护和管理,确保实验设备的正常运行。

此外,学校还注重实验室的安全管理,制定了严格的实验室安全规定,确保学生的人身安全和实验设备的安全。

三、实验教学成果西南交大的实验教学取得了显著的成果。

学校的实验教学成果多次获得国家级奖项,得到了社会的广泛认可。

学生在实验教学中不仅学到了专业知识,还培养了动手能力和创新思维。

通过实验教学,学生能够将理论知识与实际应用相结合,提高问题解决能力和创新能力。

许多学生在实验教学中发表了学术论文,参与了科研项目,取得了优异的成绩。

实验教学的成果不仅体现在学生的学术成就上,还体现在学生的就业竞争力上。

许多企业对西南交大的实验教学给予了高度评价,认为该校的学生具备扎实的专业知识和出色的实践能力。

C语言实验报告9篇

C语言实验报告9篇

C语言实验报告C语言实验报告9篇随着个人素质的提升,报告的适用范围越来越广泛,我们在写报告的时候要注意语言要准确、简洁。

写起报告来就毫无头绪?以下是小编为大家整理的C语言实验报告,仅供参考,欢迎大家阅读。

C语言实验报告1一、实习目的1.掌握在集成环境中编辑、编译、连接和运行C程序的方法。

(1)运行TC(2)启动TC集成环境,输入一个源程序,编译并运行。

2.掌握单步执行、设置/去除断点,观察变量或表达式的值。

(3)在该程序中按CTRL+F7单步招待并在观察窗口中查看变量和表达式的值。

(4)设置/去除断点,继续调试。

1、熟练掌握if.switch分支语句的使用。

2、熟练掌握for.while.do.while循环语句的使用。

3、熟练掌握函数的定义、说明、参数传递及嵌套和递归调用方法。

4、熟练掌握一维数组、二维数组、字符数组的定义、说明和使用方法。

熟练掌握结构体和指针的综合应用链表的操作二、实习地点北京交通干部管理学院计算机系机房十三号.三、实习成果熟练掌握TC集成环境的使用方法。

认真编写实习报告和实习总结,描述实习操作和心得体会,总结在这次实习中的业务收获,作出自我评价。

熟练掌握并应用TC程序设计的各个知识点。

掌握结构体和指针的联合使用,学会链表的构造和常用操作方法,认真编写实习日志和实习体会。

并通过各种途径查找所需资料,拓宽视野,培养自学能力。

四、实习心得在短短一周的实习期间使我获取了不少新知识也巩固了许多老知识。

我体会到了老师和同学们的热心帮助,无论面对学习中多大的困难,同学们都会帮助你,老师也会帮助你,大家就像兄弟姐妹一样。

老师安排我们有具有的分工:首先,在计算机机房里同学们积极的对C语言进行巩固与实习,老师热心的讲解同学们提出的问题和实习过程中应该注意的事项和同学们的任何。

老师把我们分为几组,每一组十一个人,并且分配了具体的任务,在我们实习结束后每一组的同学都把自己组里的成果展示给大家一起分享,告诉大家编程的原理、方法等,使同学们既有动手能力,又能提高语言表达能力。

自动控制原理实验报告-西南交通大学课程与资源中心

自动控制原理实验报告-西南交通大学课程与资源中心

西南交通大学自动控制原理课程实验报告册
《自动控制原理》课程实验报告(一)
《自动控制原理》课程实验报告(二)
《自动控制原理》课程实验报告(三)
《自动控制原理》课程实验报告(四)
三、思考题
1. 参数在一定范围内取值才能使闭环系统稳定的系统称为条件稳定系统。

对于这类系
统可以通过根轨迹法来确定使系统稳定的参数取值范围,也可以适当调整系统参数或增加校正网络以消除条件稳定性问题。

对于下图所示条件稳定系统:
试问能否通过增加开环零极点消除系统条件稳定性问题,即对于所有根轨迹增益,根轨迹全部位于s左半平面,闭环系统稳定。

《自动控制原理》课程实验报告(五)
《自动控制原理》课程实验报告(六)
《自动控制原理》课程实验报告(七)
《自动控制原理》课程实验报告(八)
《自动控制原理》课程实验报告(九)。

数值分析上机实习报告(西南交通大学)

数值分析上机实习报告(西南交通大学)

数值分析上机实习报告姓名:学号:专业:大地测量学与测量工程电话:序言1.所用程序语言:本次数值分析上机实习采用Visual c#作为程序设计语言,利用Visual c#可视化的编程实现方法,采用对话框形式进行设计计算程序界面,并将结果用表格或文档的格式给出。

2.程序概述:(1)第一题是采用牛顿法和steffensen法分别对两个题进行分析,编好程序后分别带入不同的初值,观察与真实值的差别,分析出初值对结果的影响,分析两种方法的收敛速度。

(2)第二题使用Visual c#程序设计语言完成了“松弛因子对SOR法收敛速度的影响”,通过在可视化界面下输入不同的n和w值,点击按钮直接可看到迭代次数及计算结果,观察了不同的松弛因子w对收敛速度的影响。

目录一.用牛顿法,及牛顿-Steffensen法............ 错误!未定义书签。

1. 计算结果.................................... 错误!未定义书签。

2. 结果分析 (5)3. 程序清单 (5)二.松弛因子对SOR法收敛速度的影响 (8)1. 迭代次数计算结果 (8)2. 计算X()结果 (10)3. 对比分析 (12)4. 程序清单: (12)三.实习总结 (14)实验课题(一)用牛顿法,及牛顿-Steffensen法题目:分别用牛顿法,及牛顿-Steffensen法(1)求ln(x+sin x)=0的根。

初值x0分别取0.1, 1,1.5, 2, 4进行计算。

(2)求sin x=0的根。

初值x0分别取1,1.4,1.6, 1.8,3进行计算。

分析其中遇到的现象与问题。

1、计算结果由于比较多每种方法中只选取了其中两个的图片例在下面:2、结果分析通过对以上的牛顿法和steffensen法的练习,我发现在初值的选取很重要,好的初值选出后可以很快的达到预定的精度,要是选的不好就很慢,而且在有的时候得出的还是非数字,所以初始值的选取很重要。

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

西南交大c++实验报告8
三、实验结果(源程序 + 注释)
//输入并升序排列学生的成绩
#include<iostream>
#include<string>
#include<iomanip>
using namespace std;
void main()
{
cout << "Name:" << endl;
cout << "Number:20" << endl;
(1)由键盘获取学生人数n,要求学生人数n的取值范围11到N-2;
(2)由键盘获取学生的相关数据;
(3)用选择排序法将学生的数据按学号进行升序排列并输出排序后的学生数据;
2. 在任务1的基础上,在学生数据中,完成以下任务:
(1)键盘输入一个学生的学号,用折半查找法查找是否有该学生,若有该学生则输出该学生的所有信息,按如下格式输出:
for (i = 0; i <= n; i++)//利用嵌套循环和条件语句,将插入后学生的数据按学号升序排列
}
/*键盘输入一个学生的学号,用折半查找法查找是否有该学生*/
int bot = n - 1, mid, top = 0;
long number;
cout << "请输入待查学生的学号" << endl;
cin >> number;
while (top <= bot)//折半查找法查找信息库中某个学号的学生
}
for (i = 0; i <= n - 1; i++)//利用嵌套循环和条件语句将信息按学号进行升序排列

西南交通大学C实验报告

西南交通大学C实验报告

计算机程序设计基础(C++)实验报告软件学院二O一O年三月11实验__1__实验报告教学班级: 6 学生学号:学生姓名:指导教师签名:王健金焕实验成绩:___________一、实验目的1.熟悉Visual studio 6.0集成开发环境;2.学习新建和打开控制台应用程序的方法;3.通过运行示例程序了解程序开发过程;二、实验任务.输出下面图形:12.输入一摄氏温度,输出显示所转换的华氏温度。

(提示:摄氏温度=(华氏温度-32)×5/9)三、实验结果(源程序+ 注释)#include<iostream>using namespace std;void main(){cout<<" * "<<endl;cout<<" * * * * "<<endl;cout<<" * * * * "<<endl;cout<<" * "<<endl;}2233#include<iostream>using namespace std;void main(){double a,b;cout<<"请输入一摄氏温度:"<<endl;cin>>a;b=a*9/5+32;cout<<"对应的华氏温度是:"<<b<<endl;}4 455实验__2__实验报告一、实验目的1.掌握对一般数据的输入和输出格式控制方法;2.掌握对实型数据输出形式的设置和小数位数的控制方法;3.了解数据输入的相关注意事项。

二、实验任务1. 输入一台计算机的编号和该计算机的价格,并输出这些信息。

(如编号为10987654321,价格为5 998.00元,注意此处计算机的编号作为一个整数而言超出了int 所定义的变量的存储范围,因此只能用double 型变量来存储,但输出时要求看见的是整数形式的编号)2. 输入三个同学的学号,计算机和英语课程的考试成绩,并输出这些信息。

C语言程序设计实验报告(八)

C语言程序设计实验报告(八)
2.输入一个3位数,计算该数各位上的数字之和,如果在[1,12]之内,则输出与和数相对应的月份的英文名称,否则输出***。
例如:输入:123输出:1+2+3=6→June
输入:139输出:1+3+9=13→***
用指针数组记录各月份英文单词的首地址。
3.任意输入5个字符串,调用函数按从大到小顺序对字符串进行排序,在主函数中输出排序结果。
三、实验内容及要求:
内容:
1.调试下列程序,使之具有如下功能:任意输入2个数,调用两个函数分别求:
(1) 2个数的和,
(2) 2个数交换值。
要求用函数指针调用这两个函数,结果在主函数中输出。
main()
{
int a,b,c,(*p)();
scanf("%d,%d",&a,&b);
p=sum;
*p(a,b,c);
C语言程序设计实验报告
姓名
学号
系别
数师
周锦程
指导教师
周锦程
实验日期
专业
信息与计算科学
课程名称
C语言程序设计
同组实验者
一、实验名称:
实验八、指针应用(二)
二、实验目的:
1.掌握C语言中函数指针的使用方法。
2.掌握C语言中指针数组的使用方法。
3.熟悉VC集成环境的调试指针程序的方法。
p=swap;
*p(a,b);
printf("sum=%d\n",c);
printf("a=%d,b=%d\n",a,b);
}
sum(int a,int b,int c)
{
c=a+b;

C程序设计实验报告(完整版)

C程序设计实验报告(完整版)

工程学院实验报告课程名称: C程序设计课程代码: 8234510学院(直属系):年级/专业/班: 2010级汽电1班学生姓名:学号: 31201008030 实验总成绩:任课教师:开课学院: 工程学院实验中心名称: 交通实验中心西华大学实验报告(理工类)开课学院及实验室:汽车学院机房(5D-215)实验时间:年月日1、实验目的2、实验设备、仪器及材料3、实验内容一般实验:3.1实验方案设计与选择(设计性、创新性实验需写该项内容)3.2实验原理及实验步骤(实验工作原理或实验的主要操作过程)3.3实验记录(核心代码及调试过程)注解:理工科实验需记录实验过程中的数据、图表、计算、现象观察等,实验过程中出现的问题;其它如在计算机上进行的编程、仿真性或模拟性实验需记录程序核心代码以及程序在调式过程中出现的问题及解决方法;记录程序执行的结果。

上机实验:3.1上机实验的内容及要求3.2算法设计思想与算法实现步骤3.3程序核心代码,程序调试过程中出现的问题及解决方法3.4 程序运行的结果4、实验总结4.1实验结果分析及问题讨论4.2实验总结心得体会注解:实验总结的内容根据不同学科和类型实验要求不一样,一般理工科类的实验需要对实验结果进行分析,并且对实验过程中问题进行讨论;在计算机上进行的编程、仿真性或模拟性实验需要对上机实践结果进行分析,上机的心得体会及改进意见。

其它实验应总结实验过程写出心得体会及改进意见。

1、实验目的(1) 熟悉C语言的集成环境,了解菜单的使用方法。

(2) 掌握C语言程序上机的编辑、编译、连接、运行的基本步骤。

(3) 了解C语言程序的结构。

2、实验设备、仪器及材料(1)硬件环境微型计算机(Intel x86系列CPU)一台(2)软件环境Windows98/2000/XP操作系统 VC6.0集成开发环境3、实验内容3.1上机实验的内容及要求(1) 熟悉VC中常用菜单项及对应快捷键的使用方法。

(2) 熟悉C语言程序上机的编辑、编译、连接、运行的基本步骤。

西南大学课程实验报告8(共5篇)

西南大学课程实验报告8(共5篇)

西南大学课程实验报告8(共5篇)第一篇:西南大学课程实验报告8西南大学课程实验报告课程名称微格教学任课教师代光英学生姓名王浪所在班级2011级特殊教育2013年月 05 日第二篇:课程实验报告格式山东交通学院×××××××课程实验报告题目:×××××××××××××院(系)别专业班级学号姓名指导教师张良智二○○九年十月山东交通学院课程实验报告一、实验名称网页设计实验二、实验时间三、实验地点实验楼6112四、实验所属课程网站建设与网页设计五、实验设备与环境微机,教育网环境,FRONTPAGE软件等六、实验目的本实验通过FRONTPAGE等软件的使用,学会编制一般的网页,学会安排网页上各种要素的位置,设计相应的元素,具有一定的美感和功能实现。

七、实验原理HTML网页是网络实现互联和共享的基础,是其他所有制作网站网页工具的基础,是主要的网页形式。

HyperText MarkupLanguageHTML 是一种标记语言HTML 以文本形式说明网页内容,浏览器解释处理并显示丰富内容,浏览器不同则可能显示不同八、实验主要操作内容这里写明实验中的主要步骤和工作九、数据记录、处理与结果这里写明实验结果直接给出网页拷贝图片即可十、其他说明实验结果所得文件作为附件与该实验报告一并上交。

第三篇:NEW西南科技大学实验报告西南科技大学物理实验报告姓名____________学号____________班级_____________ 教师_____________预约时间:第____周星期____第____ ~ ___节信箱:_____ 实验成绩:_______(注:第一至第四部分必须课前完成,计35分,尊重科学,远离伪造和抄袭!)一、实验名称二、实验目的(5分)三、实验原理(基本原理概述、计算公式推导过程、重要图形等,20分)大学物理实验中心地址:东六C座三楼,电话:6089672四、实验步骤(10分)五、数据记录(25分)1.实验仪器(名称、型号、精度等级、功能等,5分)2.数据记录(不要用铅笔记录数据,字迹清晰、工整,20分)教师签名:__________六、数据整理(表格清晰,有效数字位数正确,符号、单位清楚)、数据处理(公式准确,标准不确定度的评定过程详实,结果表达式规范)(30分)七、分析讨论: ①回答课后思考题②实验中遇到的问题(故障、差错)及处理办法,结果如何?③实验后对实验原理和方法的新认识④对实验误差和标准不确定度来源的探讨及减小的办法⑤实验的独特见解;是否可通过其他途径达到同样的实验目的和结果⑥需要商榷的问题及对本实验的建议等。

C实验报告答案完整版

C实验报告答案完整版

C实验报告答案完整版实验1简单判定性问题求解⼀、实验学时完成本实验需4学时。

⼆、实验⽬的1、阅读程序题(1)掌握C语⾔数据类型,熟悉如何定义⼀个整型、字符型的变量,以及对它们赋值的⽅法;(2)掌握不同的类型数据之间赋值的规律;(3)掌握数据在内存中的存储⽅式;(4)学会输⼊、输出函数的基本格式和使⽤⽅法;(5)学会使⽤有关算术运算符、逻辑运算符、关系运算符,以及包含这些运算符的表达式。

2、编程题(1)如何运⽤if-else判定性结构进⾏程序设计;(2)如何运⽤switch判定性结构进⾏程序设计。

3、调试题(1)熟悉C程序的编辑、编译、连接和运⾏的过程。

三、实验指导为了达到最佳的实验效果,以下提供⼏条适于编程的指导意见,可供参考。

1、阅读程序题应先运⽤⾃⼰在课堂所学的知识,推导出结果,在上机时输⼊计算机,印证⾃⼰推导的结果,注意观察数据在内存中的存储⽅式、含不同种运算符表达式的输出结果。

2、编程题必须⾸先画出流程图,并反复思考判断程序设计的正确性,完成程序的设计。

要注意简单判定性问题的结构选择。

3、调试题应明确程序的调试、测试是⼀项⾮常烦琐的⼯作,也是⾮常重要的⼯作。

对于初学者来说应该建⽴良好的习惯,在调试程序的时候,应该尽可能考虑到程序运⾏时各种可能情况。

四、实验内容1、阅读程序题(1)main( ){ /*定义字符型变量*/char c1,c2; /*向字符变量赋以整数*/c1=97;c2=98;printf("%c %c\n",c1,c2); /*以字符形式输出*/printf("%d %d\n",c1,c2); /*以整数形式输出*/}思考:可否改成int c1,c2;输出结果是?相同(2)main(){int a=7,b=5;printf("%d\n",b=b/a);}思考:若将printf语句中%d变为%f,可否输出分式的值?可以(3)main() {int a=9;a+=a-=a+a; /*包含复合的赋值运算符的赋值表达式*/printf("%d\n",a);}思考:赋值表达式a+=a-=a+a的求解步骤?第⼀步:a=a-(a+a)=-9 第⼆步a=a+a=18(4)main(){int k=-1;printf("%d,%u\n",k,k);}思考:-1在内存中的存储形式?取反加⼀11111111111111111111111111111111(32个)(5)main(){unsigned x1;int b=-1;x1=b; /*有符号数据传送给⽆符号变量*/printf("%u",x1);}(6)main(){int a=3,b=4,c=5;printf("%d\n",(!(aprintf("%d",c);}思考:若将第⼀个1(换⾏)6(7)main(){ int a=1,b=2,c=3;if(c=a) ; printf("%d\n",c);else printf("%d\n",b);}2、编程序并上机调试运⾏(包括题⽬及要求、流程图、程序清单、测试数据及结果)(1)将⼀个百分制成绩转换成等级制成绩,百分制与等级制的对应具体要求如下:1)⽤switch语句实现该功能;2)⽤键盘输⼊百分制成绩,输⼊前要有提⽰信息,对于不合理的数据应输出错误信息;3)输出结果应包含百分制成绩和成绩等级;4)分别输⼊成绩-10,30,60,68,75,83,95,102,查看记录运⾏结果。

【最新】西南交大,数字电路,实验报告-word范文 (8页)

【最新】西南交大,数字电路,实验报告-word范文 (8页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==西南交大,数字电路,实验报告篇一:数字电子技术实验报告数字电子技术实验报告姓名:尚朝武学号:201X0123400044 实验时间:201X-12-24实验一(一) 1、实验内容:(1用静态法测试74LS00与非门电路的逻辑功能 2、实验原理图如图1.113、实验步骤:1) 用万用表测量双路跟踪稳压电源中的+5V电源电压; 2) 检查无误后引用通用接插板;3) 在芯片盒中找到74LS00芯片并插入通用接插板上; 4) 测试与非门的逻辑功能A. 按图1.1接线,检查接线无误后通电;;B. 设置输入变量A、B的高(H)、低(L)电平,并分别测量与非门的输出电压U;(U>3.6V时,则Y=H(1);反之,Y=L(0))。

5)用万用表测量输出电压,并将结果填入表1.1.1中 4、实验结果见表1.1.1表1.1.1(二 1、实验内容用动态测试法验证图(a)、(b)、(c)的输入输出波形。

2、实验原理图图图图(表)d74ls86管脚图和引脚图及真值表3、实验步骤1)利用实验一——(一)的双路跟踪稳压电源中的+5V电源电压; 2)检查无误后引用通用接插板;3)在芯片盒中分别找到74LS86、74LS60芯片并分别插入通用接插板上; 4)分次按图a、b、c、d接线,检查接线无误后通电;设置输入变量A的信号为100kHz 5)分别记下数字显示器显示的波形。

4、实验结果见下图图a的输入(图上)、输出(图下)波形图b的输入(图上)、输出(图下)波形三)图c的输入(图上)、输出(图下)波形1、实验内容:(1用静态法测试74LS139静态译码器的逻辑功能 2、实验原理图如图A、B 3、实验步骤:1) 利用实验一——(一)的双路跟踪稳压电源中的+5V电源电压; 2) 检查无误后引用通用接插板;3) 在芯片盒中找到74LS139芯片并插入通用接插板上; 4) 测试74LS139译码器的逻辑功能a) 按图1.1接线,检查接线无误后通电;;b) 设置输入变量A、B及E的高(H)、低(L)电平,并分别测量74LS139的输出电压U;(U>3.6V时,则Y=H(1);反之,Y=L(0)); 5)用万用表测量输出电压,并将结果填入表1.2中 4、实验结果见表1.2图A 74LS139的管脚图篇二:201X-201X西南交大数字电路第1次作业(注意:若有主观题目,请按照题目,离线完成,完成后纸质上交学习中心,记录成绩。

西南交通大学计算机组成原理课程设计报告材料

西南交通大学计算机组成原理课程设计报告材料

《计算机组成实验 C》课程设计适用专业:电子信息类专业专业:软件工程班级:软件一班学号:姓名:某某某指导教师:陈红梅实验学期:2014-2015 第 1 学期西南交通大学信息科学与技术学院目录简化计算机系统的设计 (2)一、实验目的 (2)二.、实验内容 (2)三.、预习要求 (2)四、实验报告 (2)1. BLOCK图 (3)2. 程序设计(纸质的版本我用手抄) (4)3. 仿真波形图 (11)4、仿真中遇到的问题: (14)五、实验感想 (15)简化计算机系统的设计一、实验目的通过学习简单的指令系统及其各指令的操作流程,用VHDL 语言实现简单的处理器模块,并通过调用存储器模块,将处理器模块和存储器模块连接形成简化的计算机系统。

二.、实验内容1. 用VHDL语言实现简单的处理器模块。

2. 调用存储器模块设计64×8的存储器模块。

3. 将简单的处理器模块和存储器模块连接形成简单的计算机系统。

4. 将指令序列存入存储器,然后分析指令执行流程。

三.、预习要求1、学习简单指令集。

2、学习各指令的操作流程。

四、实验报告1. BLOCK图2. 程序设计(纸质的版本我用手抄)CPU的设计:LIBRARY ieee;USE ieee.std_logic_1164.ALL;PACKAGE mypack ISCONSTANT idle : std_logic_vector(3 DOWNTO 0) :="0000";CONSTANT load : std_logic_vector(3 DOWNTO 0) :="0001";CONSTANT move : std_logic_vector(3 DOWNTO 0) :="0010";CONSTANT addx : std_logic_vector(3 DOWNTO 0) :="0011";CONSTANT subp : std_logic_vector(3 DOWNTO 0) :="0100";CONSTANT andp : std_logic_vector(3 DOWNTO 0) :="0101";CONSTANT orp : std_logic_vector(3 DOWNTO 0) :="0110";CONSTANT xorp : std_logic_vector(3 DOWNTO 0) :="0111";CONSTANT shrp : std_logic_vector(3 DOWNTO 0) :="1000";CONSTANT shlp : std_logic_vector(3 DOWNTO 0) :="1001";CONSTANT swap : std_logic_vector(3 DOWNTO 0) :="1010";CONSTANT jmp : std_logic_vector(3 DOWNTO 0) :="1011";CONSTANT jz : std_logic_vector(3 DOWNTO 0) :="1100";CONSTANT read : std_logic_vector(3 DOWNTO 0) :="1101";CONSTANT write : std_logic_vector(3 DOWNTO 0) :="1110";CONSTANT stop : std_logic_vector(3 DOWNTO 0) :="1111";END mypack;LIBRARY ieee;USE ieee.std_logic_1164.ALL;USE ieee.std_logic_unsigned.ALL;USE WORK.mypack.ALL;------------------------cpu实体声明--------------------------------- ENTITY cpu ISPORT(reset : IN std_logic; --清零信号低有效clock : IN std_logic; --时钟信号Write_Read: OUT std_logic; --读写信号,'1'为写 M_address: OUT std_logic_vector(11 DOWNTO 0); --地址线M_data_in: IN std_logic_vector(7 DOWNTO 0); --数据输入线M_data_out: OUT std_logic_vector(7 DOWNTO 0); --数据输出线 overflow: OUT std_logic); --溢出标志END cpu;------------------------cpuRTL级行为描述-------------------------------- ARCHITECTURE RTL of cpu ISSIGNAL IR: std_logic_vector(15 DOWNTO 0); --指令寄存器 SIGNAL MDR: std_logic_vector(7 DOWNTO 0); --数据寄存器 SIGNAL MAR: std_logic_vector(11 DOWNTO 0); --地址寄存器 SIGNAL status: integer RANGE 0 TO 6; --状态寄存器BEGINstatus_change: PROCESS(reset, clock, status )BEGINIF reset = '0' THEN status <= 0 ;ELSIF clock'EVENT AND clock = '0' THENCASE status ISWHEN 0 =>status <= 1;WHEN 1 =>IF IR(15 DOWNTO 12) = Stop THENstatus <= 1;ELSEstatus <= 2;END IF;WHEN 2 =>CASE IR(15 DOWNTO 12) ISWHEN Read|Write|Jmp|Jz|Swap =>status <= 3;WHEN OTHERS =>status <= 0;END CASE;WHEN 3 =>IF IR(15 DOWNTO 12)= Swap THENstatus <= 0;ELSEstatus <= 4;END IF;WHEN 4 =>status <= 5;WHEN 5 =>CASE IR(15 DOWNTO 12) ISWHEN Read|Write =>status <= 6;WHEN OTHERS =>status <= 0;END CASE;WHEN OTHERS =>status <= 0;END CASE;ELSENULL;END IF;END PROCESS status_change;seq: PROCESS(reset,clock)VARIABLE PC:std_logic_vector(11 DOWNTO 0); --程序计数器 VARIABLE R0,R1,R2,R3: std_logic_vector(7 DOWNTO 0); --通用寄存器VARIABLE A: std_logic_vector(7 DOWNTO 0); --临时寄存器VARIABLE temp: std_logic_vector(8 DOWNTO 0); --临时变量BEGINIF(reset='0') THEN -- 清零IR <= (OTHERS=>'0');PC := (OTHERS=>'0');R0 := (OTHERS=>'0');R1 := (OTHERS=>'0');R2 := (OTHERS=>'0');R3 := (OTHERS=>'0');A := (OTHERS=>'0');MAR <= (OTHERS=>'0');MDR <= (OTHERS=>'0');ELSIF(clock'event AND clock='1') THENoverflow <= '0';CASE status ISWHEN 0=> --状态0IR <= M_data_in & "00000000"; --取指令PC := PC+1; --程序计数器加1WHEN 1=> --状态1IF (IR(15 DOWNTO 12) /= stop) THENMAR <= PC;END IF;CASE IR(15 DOWNTO 12) ISWHEN load =>R0:= "0000" & IR(11 DOWNTO 8);WHEN shlp|shrp =>CASE IR(11 DOWNTO 10) IS -- Rx to AWHEN "00"=> A:= R0;WHEN "01"=> A:= R1;WHEN "10"=> A:= R2;WHEN OTHERS => A:= R3;END CASE;WHEN Move|addx|subp|andp|orp|xorp|Swap=> CASE IR(9 DOWNTO 8) IS -- Ry to AWHEN "00"=> A:=R0;WHEN "01"=> A:=R1;WHEN "10"=> A:=R2;WHEN OTHERS=> A:=R3;END CASE;WHEN OTHERS => NULL;END CASE;WHEN 2=> --状态2CASE IR(15 DOWNTO 12) ISWHEN addx => -- Rx:= Rx + A;CASE IR(11 DOWNTO 10) ISWHEN "00"=>temp := (R0(7) & R0(7 DOWNTO 0)) + (A(7) & A(7 DOWNTO 0));R0:=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN "01"=>temp :=(R1(7) & R1(7 DOWNTO 0)) + (A(7) & A(7 DOWNTO 0));R1:=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN "10"=>temp :=(R2(7) & R2(7 DOWNTO 0)) + (A(7) & A(7 DOWNTO 0));R2:=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN OTHERS=>temp :=(R3(7) & R3(7 DOWNTO 0)) + (A(7) & A(7 DOWNTO 0));R3:=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);END CASE;WHEN subp => -- Rx:= Rx - A;CASE IR(11 DOWNTO 10) ISWHEN "00"=>temp :=(R0(7) & R0(7 DOWNTO 0)) + NOT(A(7) & A(7 DOWNTO 0)) + 1;R0:=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN "01"=>temp :=(R1(7) & R1(7 DOWNTO 0)) + NOT(A(7) & A(7 DOWNTO 0)) + 1;R1:=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);WHEN "10"=>temp :=(R2(7) & R2(7 DOWNTO 0)) + NOT(A(7) & A(7 DOWNTO 0)) + 1;R2:=temp(7 DOWNTO 0);overflow <= temp(8) xor temp(7);WHEN OTHERS=>temp :=(R3(7) & R3(7 DOWNTO 0)) + NOT(A(7) & A(7 DOWNTO 0)) + 1;R3:=temp(7 DOWNTO 0);overflow <= temp(8) XOR temp(7);END CASE;WHEN move =>CASE IR(11 DOWNTO 10) ISWHEN "00"=> R0:= A;WHEN "01"=> R1:= A;WHEN "10"=> R2:= A;WHEN OTHERS=> R3:= A;END CASE;WHEN shrp =>CASE IR(11 DOWNTO 10) ISWHEN "00"=> R0:= '0' & A( 7 DOWNTO 1 );WHEN "01"=> R1:= '0' & A( 7 DOWNTO 1 );WHEN "10"=> R2:= '0' & A( 7 DOWNTO 1 );WHEN OTHERS=> R3:= '0' & A( 7 DOWNTO 1 );END CASE;WHEN shlp =>CASE IR(11 DOWNTO 10) ISWHEN "00"=> R0:= A( 6 DOWNTO 0 ) & '0';WHEN "01"=> R1:= A( 6 DOWNTO 0 ) & '0';WHEN "10"=> R2:= A( 6 DOWNTO 0 ) & '0';WHEN OTHERS=> R3:= A( 6 DOWNTO 0 ) & '0';END CASE;WHEN andp => --Rx:= Rx AND A; CASE IR(11 DOWNTO 10) ISWHEN "00"=> R0:=R0 AND A;WHEN "01"=> R1:=R1 AND A;WHEN "10"=> R2:=R2 AND A;WHEN OTHERS=> R3:=R3 AND A;END CASE;WHEN orp => --Rx:= Rx OR A;CASE IR(11 DOWNTO 10) ISWHEN "00"=> R0:=R0 OR A;WHEN "01"=> R1:=R1 OR A;WHEN "10"=> R2:=R2 OR A;WHEN OTHERS=> R3:=R3 OR A;END CASE;WHEN xorp => --Rx:= Rx XOR A; CASE IR(11 DOWNTO 10) ISWHEN "00"=> R0:=R0 XOR A;WHEN "01"=> R1:=R1 XOR A;WHEN "10"=> R2:=R2 XOR A;WHEN OTHERS=> R3:=R3 XOR A;END CASE;WHEN Swap => --Swap: Rx to Ry; CASE IR(11 DOWNTO 8) ISWHEN "0100"=> R0:=R1;WHEN "1000"=> R0:=R2;WHEN "1100"=> R0:=R3;WHEN "0001"=> R1:=R0;WHEN "1001"=> R1:=R2;WHEN "1101"=> R1:=R3;WHEN "0010"=> R2:=R0;WHEN "0110"=> R2:=R1;WHEN "1110"=> R2:=R3;WHEN "0111"=> R3:=R1;WHEN "1011"=> R3:=R2;WHEN "0011"=> R3:=R0;WHEN OTHERS=> NULL;END CASE;WHEN OTHERS => NULL;END CASE;WHEN 3=> --状态3CASE IR(15 DOWNTO 12) ISWHEN Swap=> -- Swap: A to RxCASE IR(11 DOWNTO 10) ISWHEN "00"=> R0:=A;WHEN "01"=> R1:=A;WHEN "10"=> R2:=A;WHEN OTHERS=> R3:=A;END CASE;WHEN jmp|Jz|Read|Write =>IR(7 DOWNTO 0)<= M_data_in; -- 取双字节指令的后半部分 PC := PC+1;WHEN OTHERS => NULL;END CASE;WHEN 4=> --状态4CASE IR(15 DOWNTO 12) ISWHEN jmp => -- 无条件转移指令PC := IR(11 DOWNTO 0);MAR <= IR(11 DOWNTO 0);WHEN Jz => -- 条件转移指令IF(R0="00000000") thenPC := IR(11 DOWNTO 0);MAR <= IR(11 DOWNTO 0);elseMAR <= PC;END IF;WHEN Read =>MAR <= IR(11 DOWNTO 0);WHEN Write =>MAR <= IR(11 DOWNTO 0);MDR <= R0;WHEN OTHERS => NULL;END CASE;WHEN 5 => --状态5MAR <= PC;WHEN 6 => --状态6CASE IR(15 DOWNTO 12) ISWHEN Read => R0 := M_data_in;WHEN OTHERS=> NULL;END CASE;END CASE;END IF;END process seq;comb: PROCESS (reset, status)BEGINIF (reset = '1' AND status = 5 AND IR(15 DOWNTO 12)= Write ) THEN Write_Read <= '1';ELSEWrite_Read <= '0';END IF;END PROCESS comb;M_address <= MAR;M_data_out <= MDR;END RTL;3. 仿真波形图3.1总体的仿真波形图1、我们可以看到CPU有6种工作模式,并且在不同的工作模式下实现了不同的功能。

西南交大C++实验八

西南交大C++实验八

实验__8__实验报告教学班级:02 学生学号:学生姓名:实验日期:2014.5.14 实验地点:X7308(机房)指导教师签名:__________ 实验成绩:___________一、实验目的1.掌握对一组同类型的数据进行插入、删除、排序和查找等的常用算法。

二、实验任务1. 使用插入排序法将键盘输入的无序数列按升序排列。

思路分析与算法:1)从第一个元素开始,该元素可以认为已经被排序。

2)取出下一个元素,在已经排序的元素序列中从后向前扫描。

3)如果该元素(已排序)大于新元素,将该元素移到下一位置。

4)重复步骤3,直到找到已排序的元素小于或者等于新元素的位置。

5)将新元素插入到该位置中。

6)重复步骤2。

2.选举猴王问题:N 只猴子围成一圈,顺序编号1至N。

从编号为1的猴子开始依次报数,报数m 的猴子就退出圈子,接着再报,报数m 的猴子再退出圈子,依次继续下去,圈子最后所剩的一只猴子为猴王,它原先的编号是几?思路分析与算法:1)使用一维数组存放猴子从1到n的编号,定义参加选举猴王的最多猴子数为40。

2)i为每次循环时计数变量,k为按1,2,3,…m报数时的计数变量,t表示退出的猴子数。

依次将退出的猴子对应的数组元素置0,直到只剩下一只猴子。

3)找出数组中不为0的a[i],输出该数。

三、实验结果(源程序+ 注释)1.#include<iostream>using namespace std;void main (){const int M=20;int a[M],n,temp,i,k;cout<<"输入将要排序的有几个数:"<<endl; cin>>n;cout<<"输入将要排序的数分别为a:"<<endl; for(i=0;i<n;i++)cin>>a[i];for(i=1;i<n;i++){ k=i; temp=a[i];while(k>0&&temp<a[k-1]){a[k]=a[k-1]; k--; }a[k]=temp;}for(i=0;i<n;i++)cout<<a[i]<<" ";system("pause");}2.#include"stdafx.h"#include<iostream>using namespace std;void main(){ int const N=100;int n;int m;int a[N]; int i,k,t;cout<<"请输入参加选举的猴子数目:"; cin>>n;cout<<"输入报数到就退出:";cin>>m;for(i=0;i<n;i++)a[i]=i+1;i=0;k=0;t=0;while(t<n-1){if (a[i]!=0) k++;if(k==m){a[i]=0;k=0;t++;}i++;if(i==n)i=0; }i=0;while(a[i]==0) i++;cout<<"剩下第<<a[i]<<"个猴子<<endl;system("pause");}。

  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<iostream>#include<string>#include<iomanip>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;//输出排序结果}}/*在任务1的基础上,在学生数据中,完成以下任务:⑴用选择排序法将学生数据按学生程序设计课程成绩降序排列。

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

*/#include<iostream>#include<string>#include<iomanip>using namespace std;void main(){cout << "Name:" << endl;cout << "Number:201" << 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;}for (i = 0; i <= n - 1; i++)//利用嵌套循环和条件语句将信息按成绩进行降序排列{for (j = i + 1; j <= n - 1; j++){if (grade[i] < grade[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;}cout << "请输入一个学生的学号和新成绩" << endl;cin >> studentID[n] >> grade[n];//从键盘输入学生的学号和新成绩int top=0, bot=n-1, mid;while (top <= bot){mid = (bot + top) / 2;if (studentID[mid] == studentID[n]) break;else if (studentID[mid] > studentID[n]) top = mid + 1;else if (studentID[mid] < studentID[n]) bot = mid - 1;}if (bot >= top)//若该学生存在,输出成绩更新后所有学生的信息{grade[mid] = grade[n];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;}}else if (top > bot) cout << "查无此人" << endl;//若该学生不存在,显示“查无此人”}(注:可编辑下载,若有不当之处,请指正,谢谢!)。

相关文档
最新文档