西南交大c++实验报告8
- 格式:doc
- 大小:98.00 KB
- 文档页数: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传感阵列原理及驱动实验指导老师:胡清、魏云组员:陈旺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、理解积分时间等因素对上述参数的影响。
华南农业大学信息(软件)学院综合性、设计性实验成绩单开设时间: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语言的理解和应用能力。
实验步骤: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语言实验报告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法的练习,我发现在初值的选取很重要,好的初值选出后可以很快的达到预定的精度,要是选的不好就很慢,而且在有的时候得出的还是非数字,所以初始值的选取很重要。
实验__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;//若该学生不存在,显示“查无此人”}(注:可编辑下载,若有不当之处,请指正,谢谢!)。