西南交大C++实验13.doc
西南交通大学计算机程序设计基础(C++)

西南交通大学C++实验报告计算机程序设计基础(C++)实验1一、实验目的1.熟悉C++程序的集成开发环境;2.学习新建和打开控制台应用程序的方法;3.掌握简单数据运算,以及输入与输出方法。
二、实验任务1.输入一摄氏温度,输出显示所转换的华氏温度。
(提示:摄氏温度=(华氏温度-32)×5/9)2.画出一头威武雄壮的雄狮。
,%%%%%%,%%/\%%%%/\%,%%%\c "" J/%%%%. %%%%/ o o \%%%`%%. %%%% _ |%%`%% `%%%%(__Y__)%// ;%%%%`\-/%%%'(( / `%%%%%%%'\\ .' |\\ / \ | |\\/ ) | |\ /_ | |__(___________)))))))三、实验结果(源程序+ 注释)1.源程序#include<iostream>using namespace std;void main(){double a,b;cout<<"请输入一摄氏温度:"<<endl;cin>>a;b=a*9/5+32;cout<<"转换的华氏温度为:"<<b<<endl;}2.源程序#include<iostream>using namespace std;void main(){cout<<" ,%%%%%% "<<endl;cout<<" ,%%/\%%%%/\% "<<endl;cout<<" ,%%%\c "" J/%%% "<<endl;cout<<"%. %%%%/ o o \%%% "<<endl;cout<<"`%%. %%%% _ |%% "<<endl;cout<<" `%% `%%%%(__Y__)% "<<endl;cout<<" // ;%%%%`\-/%%%' "<<endl;cout<<"(( / `%%%%%%%' "<<endl;cout<<" \\ .' | "<<endl;cout<<" \\ / \ | | "<<endl;cout<<" \\/ ) | | "<<endl;cout<<" \ /_ | |__ "<<endl;cout<<" (___________))))))) "<<endl;}实验2一、实验目的1.掌握对一般数据的输入和输出格式控制方法;2.掌握对实型数据输出形式的设置和小数位数的控制方法;3.了解数据输入的相关注意事项。
西南交大c++实验报告11

西南交大c++实验报告11实验 11实验报告教学班级:_26_学生学号:_2015_学生姓名:__实验日期:___2016.6.3____实验地点:__7307__(机房)指导教师签名:_____________ 实验成绩:______________一、实验目的1.了解存放常用系统函数的头文件;2.掌握常用系统函数的功能及使用方法;3.掌握自定义有返回值函数的概念、定义及使用。
二、实验任务1、实现功能:1~10加减乘除运算训练系统。
(1)主函数功能:随机产生一个1~10加减乘除算术式(数字在1~10之间随机产生,运算符在加减乘除中随机产生),要求用户输入计算结果,通过调用子函数得到正确答案,判断用户的计算结果是否正确并输出结论。
(2)子函数功能:定义有返回值函数,完成算术式的计算功能。
2、实现功能:求两个整数的最大公约数、最小公倍数。
(1)主函数功能:从键盘输入两个整数,通过调用两个子函数分别得到最大公约数、最小公倍数并输出结果。
(2)子函数1功能:定义有返回值函数,求两个整数的最大公约数。
子函数2功能:定义有返回值函数,求两个整数的最小公倍数。
3.实现功能:根据键盘输入的整数x,计算分段函数sign(x)的值。
(1)主函数功能:从键盘输入整数x,通过调用子函数得到计算结果并输出。
(2)子函数功能:定义有返回值函数,实现该分段函数的功能。
三、实验结果(源程序+ 注释)/*1、实现功能:1~10加减乘除运算训练系统。
(1)主函数功能:随机产生一个1~10加减乘除算术式(数字在1~10之间随机产生,运算符在加减乘除中随机产生),要求用户输入计算结果,通过调用子函数得到正确答案,判断用户的计算结果是否正确并输出结论。
(2)子函数功能:定义有返回值函数,完成算术式的计算功能。
*/#include<iostream>#include<cstdlib>#include<ctime>using namespace std;void main(){cout << "Name:" << endl;cout << "Number:20" << endl;int x;double a, b, y, answer = 0.0;//定义四个整型变量 char n;//定义一个字符型变量srand(time(NULL));//初始化随机数产生器a = 1 + rand() % (10 - 1 + 1);//产生1~10的随机数b = 1 + rand() % (10 - 1 + 1);//产生1~10的随机数x = 1 + rand() % (4 - 1 + 1);//产生1~4的随机数 switch (x)//将x的值分别对应1,2,3,4时赋予n 相应的字符,方便下文输出{case 1:n = '+'; break;case 2:n = '-'; break;case 3:n = '*'; break;case 4:n = '/'; break;cout << "请计算下面的算式:" << endl;//提示语句 cout << a << n << b << "=";//提示语句cin >> y;//从键盘输入用户的计算结果double result(int x, double a, double b); //调用自定义函数之前的说明answer = result(x,a,b);//赋值if (answer == y) {cout << "计算正确" << endl;}//计算正确else {cout << "计算错误,该算式的正确答案是:" << answer << endl;}//计算错误}double result(int x,double y,double z)//自定义函数{double answer;switch (x)//当形参变量x分别为1,2,3,4时,采用不同的运算符进行计算{case 1:answer = y + z; break;case 2:answer = y - z; break;case 3:answer = y * z; break;case 4:answer = y / z; break;return answer;}/*实现功能:求两个整数的最大公约数、最小公倍数。
西南交大数据结构实验报告

目录实验——元稀疏多项式的计算 (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。
第一学期西南交大理论力学C第1次作业答案

本次作业是本门课程本学期的第1次作业,注释如下:一、单项选择题(只有一个选项正确,共26道小题)1. 考虑力对物体作用的运动效应和变形效应,力是。
(A) 滑动矢量(B) 自由矢量(C) 定位矢量正确答案:C解答参考:2. 考虑力对物体作用的运动效应,力是。
(A) 滑动矢量(B) 自由矢量(C) 定位矢量正确答案:A解答参考:3.图示中的两个力,则刚体处于。
(A) 平衡(B) 不平衡(C) 不能确定你选择的答案:[前面作业中已经做正确] [正确]正确答案:B解答参考:4.作用力的大小等于100N,则其反作用力的大小为。
(A)(B)(C) 不能确定你选择的答案:[前面作业中已经做正确] [正确]正确答案:B解答参考:5. 力的可传性原理只适用于。
(A) 刚体(B) 变形体(C) 刚体和变形体你选择的答案:[前面作业中已经做正确] [正确]正确答案:A解答参考:6.图示结构,各杆自重不计,则杆BC是。
(A) 二力杆(B) 不能确定你选择的答案:[前面作业中已经做正确] [正确]正确答案:A解答参考:7.图示作用于三角架的杆AB中点处的铅垂力如果沿其作用线移动到杆BC的中点,那么A、C处支座的约束力的方向。
(A) 不改变(B) 改变(C) 不能确定你选择的答案:[前面作业中已经做正确] [正确]正确答案:B解答参考:8.图示构架ABC中,力作用在销钉C上,则销钉C对杆AC的作用力与销钉C对杆B C的作用力。
(A) 等值、反向、共线(B) 分别沿AC和BC(C) 不能确定你选择的答案:[前面作业中已经做正确] [正确]正确答案:B解答参考:9.如图所示,物体处于平衡,,自重不计,接触处是光滑的,图中所画受力图。
(A) 正确(B) 不正确(C) 不能确定正确答案:A解答参考:10.如图所示,物体处于平衡,自重不计,接触处是光滑的, 图中所画受力图是。
(A) 正确(B) A处约束力不正确(C)不能确定你选择的答案:[前面作业中已经做正确] [正确]正确答案:B解答参考:11.如图所示,各杆处于平衡,杆重不计,接触处是光滑的,图中所画受力图。
西南交大C++ 实验五.doc

实验__5__实验报告教学班级:______ 学生学号:________ 学生姓名:___________实验日期:__2018/4/17_________ 实验地点:_指导教师签名:__________ 实验成绩:___________一、实验目的1.理解“处理某一或某些操作需要被有条件地重复执行”的编程思路和方法;2.掌握循环结构的程序设计,以及while、do-while和for循环语句的使用方法。
二、实验任务1.一只猴子摘了N个桃子第一天吃了一半又多吃了一个,第二天又吃了余下的一半又多吃了一个,到第十天的时候发现还有一个。
2. 编程实现十进制整数和八进制整数之间的转换(即将10进制数转换为8进制数,或将8进制数转换为10进制数)。
3.计算由键盘输入的两个数的最大公约数和最小公倍数。
4.计算正弦的近似值。
sin(x)=x-x^3/3!+x^5/5!-x^7/7!+……5.由键盘输入若干职工的工资收入(以负数结束),输出每个职工的工资收入、计算并输出每个职工的缴税额,统计并输出职工总人数和总缴税额。
三、实验结果(源程序+ 注释)1.#include<iostream>using namespace std;void main(){cout<<"学号:****** 姓名:***"<<endl;int i,s,sum;s=1;i=9;sum=1;while (i>=1){s=(s+1)*2;i=i-1;sum=sum+s;}cout<<"总共有"<<sum<<"个桃子"<<endl;}2.//编程实现十进制整数和八进制整数之间的转换#include<iostream>using namespace std;void main(){cout<<"学号:****** 姓名:***"<<endl;int i,x,n,j;cout<<"请输入一个十进制整数:"<<endl;cin>>i;x=0,n=0;while (i>0){j=i%8;i=i/8;x=x+j*pow(10.0,n);n=n+1;}cout<<"该十进制数对应的八进制数为:"<<x<<endl; cout<<"请输入一个八进制整数:"<<endl;cin>>x;i=0,n=0;while(x>0){j=x%10;x=x/10;i=i+j*pow(8.0,n);n=n+1;}cout<<"该八进制数对应的十进制数为:"<<i<<endl; }3. // 计算由键盘输入的两个数的最大公约数和最小公倍数。
西南交大C++实验二.doc

实验__2__实验报告教学班级:___ 学生学号:_________ 学生姓名:___________实验日期:_________ 实验地点:指导教师签名:__________ 实验成绩:___________一、实验目的1. 掌握顺序结构的编程思路和方法;2. 掌握格式输入输出和数据类型转换。
二、实验任务1.给朋友打印生日卡,生日卡格式输入:====================================My dear Zhang,Happy birthday to you!yours,Li====================================要求你的名字和你朋友的名字均由键盘输入,在输入名字时请给出提示信息。
2.已知赵六同学学号20110101111,他期末参加了高等数学、普通物理、大学英语三门课程期末考试。
编程实现:键盘输入学生的学号、以及各科的成绩,计算平均成绩。
输入输出格式参见下图。
要求:⑴学号作为一个整数而言,超出了int所定义的变量的存储范围,因此只能double 型变量来存储,但输出时要求看见的是整数形式的学号。
⑵输出对齐,成绩保留2位小数。
3.键盘输入一个小写字母,将其转换成大写字母,并输出它们的ASCII码值及其原字符。
4.计算万有引力。
由普通物理知, 两个质量分别为m1和m2的物体之间的万有引力F与两个物体质量的乘积成正比, 与两个物体质心之间的距离R的平方成反比:式中G为引力常数,如果F的单位为牛顿(N),质量的单位为千克(kg),物体质心的距离单位为米(m),则,已知太阳的质量为千克,地球的质量为kg,太阳与地球的距离为m,请计算太阳与地球之间的万有引力。
5.加法器键盘输入两个数,计算这两个数的和,并输出结果。
三、实验结果(源程序+ 注释)1.//给朋友打印生日卡,要求你的名字和你朋友的名字均由键盘输入,在输入名字时请给出提示信息。
#include<iostream>#include<string>using namespace std;int main(void){ string name1; //定义变量name1 string name2; //定义变量name2cout<<"学号:"<<endl;cout<<"请输入你的名字:"<<endl;cin>>name1; //将输入的名字赋值给name1 cout<<"请输入你朋友的名字:"<<endl;cin>>name2; //将输入的名字赋值给name2cout<<"===================================="<<endl;cout<<" My dear "<<name2<<endl;cout<<" Happy birthday to you!"<<endl;cout<<" yours,"<<endl;cout<<" "<<name1<<endl;cout<<"===================================="<<endl;return 0;}2. //键盘输入学生的学号以及各科的成绩,计算平均成绩。
西南交大C++实验三.doc

实验__3__实验报告教学班级:________ 学生学号:_________ 学生姓名:__________ 实验日期:________ 实验地点:指导教师签名:__________ 实验成绩:___________一、实验目的1. 掌握if 语句(即某些操作只有在特定条件成立的情况下才会被执行)的编程思路和方法;2. 掌握if-else 语句(即在某个条件成立时执行一种操作,条件不成立时执行另一种操作)的使用方法。
二、实验任务1. 使用if 语句编程求解两个数中的最大值。
2. 键盘输入一个数,判定:能不能被7整除,并如果失败输出失败的具体原因。
3. 已知一个函数⎩⎨⎧+<<=-=(其他)2)101(53x x x y ,输入x 的值,求解并输出相应的y 值。
4. 李X 购买一批打印纸,若一次性购买100包以下,每包20元;若一次性购买100包以上(包含100包),则每包16元,编写程序,计算李X 购买N 包打印机需要多少钱?5. 个税计算问题。
根据国家的纳税政策,个人应税起征点为月收入3500元;不超过起征点1500元的(即月收入超过3500元,但未超过5000元),超过部分按3%交纳个人所得税;超过起征点1500至4500元的,超过部分按10%交纳个人所得税;应税月收入超过起征点4500至9000元,超过部分按20%交纳个人所得税。
编写一个程序,输入某人的应税月收入,计算并输出纳税后的实际收入说明:本实验暂不计算月收入“3500+9000”以上的情况。
三、实验结果(源程序+ 注释)1、//使用if语句编程求解两个数中的最大值。
#include<iostream>using namespace std;void main(){cout<<"学号:"<<endl;double a,b,max;cout<<"input a,b:";cin>>a>>b;if (a>b)max=a;else max=b;cout<<"max="<<max<<endl;}2、//键盘输入一个数,判定:能不能被7整除y,并如果失败输出失败的具体原因。
西南交大实验报告

西南交大实验报告西南交大实验报告引言:西南交通大学是中国著名的综合性大学之一,以交通运输为特色,涵盖了工、理、管、文、法、经、教育等多个学科领域。
本实验报告将着重介绍西南交大的实验教学体系以及实验室设施,以展示该校在培养学生实践能力和创新精神方面的努力。
一、实验教学体系西南交大以实验教学为核心,注重培养学生的实践能力和创新精神。
学校建立了一套完善的实验教学体系,包括实验教学计划、实验教材、实验教学方法和实验评价体系等。
实验教学计划根据不同专业的要求,为学生安排了一系列的实验课程,涵盖了理论知识的应用和实践技能的培养。
实验教材则精心编写,内容丰富,既有基础实验,也有前沿实验,能够满足学生的学习需求。
实验教学方法灵活多样,结合了讲授、实践、讨论等多种形式,让学生能够全面参与实验过程,提高实践能力。
实验评价体系科学合理,既注重实验结果的准确性,又注重学生的实验操作能力和实验报告的撰写能力。
二、实验室设施西南交大拥有先进的实验室设施,为学生提供了良好的实验环境。
学校的实验室涵盖了多个学科领域,包括物理、化学、生物、电子、计算机等。
这些实验室配备了先进的实验设备和仪器,能够满足学生进行各种实验研究的需求。
实验室的管理规范,设有专门的实验室管理员,负责设备的维护和管理,确保实验设备的正常运行。
此外,学校还注重实验室的安全管理,制定了严格的实验室安全规定,确保学生的人身安全和实验设备的安全。
三、实验教学成果西南交大的实验教学取得了显著的成果。
学校的实验教学成果多次获得国家级奖项,得到了社会的广泛认可。
学生在实验教学中不仅学到了专业知识,还培养了动手能力和创新思维。
通过实验教学,学生能够将理论知识与实际应用相结合,提高问题解决能力和创新能力。
许多学生在实验教学中发表了学术论文,参与了科研项目,取得了优异的成绩。
实验教学的成果不仅体现在学生的学术成就上,还体现在学生的就业竞争力上。
许多企业对西南交大的实验教学给予了高度评价,认为该校的学生具备扎实的专业知识和出色的实践能力。
西南交通大学计算机程序设计基础C++实验报告10

实验 10 实验报告教学班级:___ ___ 学生学号:_____xxxxxx_____ 学生姓名:______x x x_____实验日期:___6.15___ 实验地点:____x7407________(机房)指导教师签名:_____________ 实验成绩:______________一、实验目的1.掌握二维数值型数组的使用方法;2.掌握求解一些经典问题的常用算法。
二、实验任务1.设有一个元素皆为整数的n*n阶矩阵,键盘输入矩阵的阶n及矩阵的元素,且找出其主对角线上元素的最大值及其所在的行号。
程序输出参考如下:2.已知有const int M=100; int x[M][M],m;要求:将按照如下规律自动生成的数据存放x数组中,并输出如下图所示三角。
3.编写程序,输入数字n(n<10),输出n层正方形图案。
正方形图案最外层是第一层,依次往内,每层用的数字和层数相同。
程序输出参考如下:4.编写程序,要求输入某班N名同学的序号及3门课成绩,计算每位同学的平均成绩以及每门课的平均成绩(学号为3位整数,成绩也为整数,课程名称为:科目1、科目2、科目3)。
程序输出参考如下:三、实验结果(源程序+ 注释+ 运行界面截图)(要求:(1)提供源程序;(2)源程序包含必要的注释,包括:在程序头部给出本程序功能的注释、所定义变量的用途注释、程序块的功能注释、子函数的功能注释等;(3)运行结果的窗口截图,程序运行结果中输出的第一行内容必须为:程序作者的学号和姓名。
)1.#include <iostream>using namespace std;int main(){cout<<"xxxxxxxxx"<<endl;int i,j,b=0,h=0,a[100][100],n;cout<<"请输入矩阵的阶:";cin>>n;cout<<"请输入一个"<<n<<"*"<<n<<"矩阵,每个数之间用空格间隔,每行输入完成后按回车"<<endl;for (i=1;i<=n;i++)//输入储存数据{for(j=1;j<=n;j++)cin>>a[i][j];}for(i=1;i<=n;i++)//对对角线上的数据进行大小判断{for(j=1;j<=n;j++){if(i==j){if(a[i][j]>b){b=a[i][j];//保存比较后较大的数h=i;//记录比较后较大数的行数}}}}cout<<"对角线上最大的数为:"<<b<<",行号为:"<<h<<endl;system ("pause");return 0;}2.#include <iostream>#include <iomanip>using namespace std;int main(){cout<<"xxxxxxxxx"<<endl;const int M=100; int x[M][M]={0},m;cout<<"请输入m值:";cin>>m;int t=m,i,j,p=m;int h=0;for(j=0;j<m;j++){for(i=0;i<=j;i++){cout<<setw(3)<<t<<setw(6)<<" ";x[i][j]=t;t=t+p;p--;if (j==i){cout<<endl;t=m-h-1;h++;}}p=m;}cout<<"========================================"<<endl;cout<<setw(12)<<" "<<setw(3)<<x[0][0]<<endl;cout<<setw(9)<<" "<<setw(3)<<x[0][1]<<setw(3)<<" "<<setw(3)<<x[1][1]<<endl;cout<<setw(6)<<" "<<setw(3)<<x[0][2]<<setw(3)<<" "<<setw(3)<<x[1][2]<<setw(3)<<" "<<setw(3)<<x[2][2]<<endl;cout<<setw(3)<<" "<<setw(3)<<x[0][3]<<setw(3)<<" "<<setw(3)<<x[1][3]<<setw(3)<<" "<<setw(3)<<x[2][3]<<setw(3)<<" "<<setw(3)<<x[3][3]<<endl;cout<<setw(3)<<x[0][4]<<setw(3)<<" "<<setw(3)<<x[1][4]<<setw(3)<<" "<<setw(3)<<x[2][4]<<setw(3)<<" "<<setw(3)<<x[3][4]<<setw(3)<<" "<<setw(3)<<x[4][4]<<endl;system ("pause");return 0;}3. #include <iostream>using namespace std;int main(){cout<<"xxxxxxxxx"<<endl;int a[100][100],b[100][100],i,j,k,h,n,m;cout<<"请输入正方形层数;";cin>>n;m=2*n-1;for(i=0,k=0;i<n,k<n;i++,k++) //输入保留左上四分之一正方形数据{for(j=0,h=0;j<n,h<n;j++,h++){if(i<j)a[i][j]=i+1;elsea[i][j]=j+1;b[k][h]=a[i][j];}}for(i=0,k=0;i<n,k<n;i++,k++) //将坐上四分之一正方形复制到右上角四分之一正方形{for(j=m-1,h=0;j>=n;j--,h++)a[i][j]=b[k][h];}for(i=m-1,k=0;i>=n,k<n;i--,k++)//复制到左下角四分之一正方形{for(j=0,h=0;j<n,h<n;j++,h++)a[i][j]=b[k][h];}for(i=m-1,k=0;i>=n,k<n;i--,k++)//复制到右下角四分之一正方形{for(j=m-1,h=0;j>=n,h<n;j--,h++)a[i][j]=b[k][h];}for(i=0;i<m;i++)//输出矩阵{for(j=0;j<m;j++){cout<<a[i][j]<<" ";}cout<<endl;}system("pause");return 0;}4.#include <iostream>using namespace std;int main(){cout<<"xxxxxxxxx"<<endl;int a[100][100],i,j,N,m,n;cout<<"请按下列顺序输入:"<<endl;cout<<"学号"<<" "<<"科目1"<<" "<<"科目2"<<" "<<"科目3"<<endl;N=3;m=0;n=0;for(i=0;i<N;i++)//输入同学的学号成绩{for(j=0;j<4;j++){cin>>a[i][j];}}for(i=0;i<N;i++)//计算某同学平均分{for(j=1;j<4;j++)m+=a[i][j];n=m/3;m=0;cout<<"学号为"<<a[i][0]<<"的同学的平均分为:"<<n<<endl;}for(j=1;j<4;j++)//计算某科目平均分{for(i=0;i<N;i++)m+=a[i][j];n=m/3;m=0;cout<<"科目"<<j<<"的平均分为:"<<n<<endl;}system("pause");return 0;}。
西南交通大学C++上机实验问题详解

实验1教学班级:学生学号:学生:实验日期:2014年3月1日实验地点:(机房)指导教师签名:__________ 实验成绩:___________ 一、实验目的1.熟悉C++程序的集成开发环境;2.学习新建和打开控制台应用程序的方法;3.掌握简单数据运算,以及输入与输出方法。
二、实验任务1.输入一摄氏温度,输出显示所转换的华氏温度。
(提示:摄氏温度=(华氏温度-32)×5/9)2.画出一头威武雄壮的雄狮。
,%%%%%%,%%/\%%%%/\%,%%%\c "" J/%%%%. %%%%/ o o \%%%`%%. %%%% _ |%%`%% `%%%%(__Y__)%// ;%%%%`\-/%%%'(( / `%%%%%%%'\\ .' |\\ / \ | |\\/ ) | |\ /_ | |__(___________)))))))三、实验结果(源程序+ 注释)1.源程序#include<iostream>using namespace std;void main(){double a,b;cout<<"请输入一摄氏温度:"<<endl;cin>>a;b=a*9/5+32;cout<<"转换的华氏温度为:"<<b<<endl;}2.源程序#include<iostream>using namespace std;void main(){cout<<" ,%%%%%% "<<endl;cout<<" ,%%/\%%%%/\% "<<endl; cout<<" ,%%%\c "" J/%%% "<<endl;cout<<"%. %%%%/ o o \%%% "<<endl;cout<<"`%%. %%%% _ |%% "<<endl;cout<<" `%% `%%%%(__Y__)% "<<endl;cout<<" // ;%%%%`\-/%%%' "<<endl;cout<<"(( / `%%%%%%%' "<<endl;cout<<" \\ .' | "<<endl;cout<<" \\ / \ | | "<<endl;cout<<" \\/ ) | | "<<endl;cout<<" \ /_ | |__ "<<endl;cout<<" (___________))))))) "<<endl;}实验2教学班级:学生学号:学生:实验日期:2014年3月1日实验地点:(机房)指导教师签名:__________ 实验成绩:___________一、实验目的1.掌握对一般数据的输入和输出格式控制方法;2.掌握对实型数据输出形式的设置和小数位数的控制方法;3.了解数据输入的相关注意事项。
数据结构实验报告西南交大

实验一一元稀疏多项式的计算“my.h”#pragma once#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#define CLS system("cls");#define PAUSE system("pause");typedef struct Item{double num;int e;struct Item *next;}item,*link;int menu(void);int judge(link,char*);void remove(link);link copy1(link,link);link copy2(link,link);int search(link,int,double);void sort(link);link add(link,link);link subtract(link,link);link multiply(link,link);link input(void);void output(link,char*);“e xecute.cpp”#include"my.h"/**********复制剩余的数据(用于加法)****************/link copy1(link pre,link h){link l;l=(link)malloc(sizeof(item));l->num=h->num;l->e=h->e;l->next=NULL;pre->next=l;return h->next;}/**********复制剩余的数据(用于减法)****************/link copy2(link pre,link h){link l;l=(link)malloc(sizeof(item));l->num=-h->num;l->e=h->e;l->next=NULL;pre->next=l;return h->next;}/****搜索链表中是否已有相同次数的项,同次数项更新系数(用于乘法)****/int search(link h,int e,double num){h=h->next;while(h){if(h->e==e){h->num+=num;return 0;}h=h->next;}return 1;}/********将多项式按次数递增排序(用于乘法)********/void sort(link head){link pre,back,tp_pre,tp_back;for(pre=head,back=pre->next;back->next;pre=pre->next,back=pre->next)for(tp_pre=back,tp_back=tp_pre->next;tp_back;tp_pre=tp_pre->next,tp_back=tp_pre->next) if(tp_back->e<back->e){tp_pre->next=tp_back->next;pre->next=tp_back;tp_back->next=back;break;}}/****************两个多项式相加***************/link add(link h1,link h2){if(h1==NULL||h2==NULL||h1->num==0||h2->num==0){ printf("无多项式!\n");PAUSE;return NULL;}link head,l,pre;head=(link)malloc(sizeof(item));head->num=0;head->next=NULL;pre=head;for(h1=h1->next,h2=h2->next;h1||h2;){if(!h1){while(h2){h2=copy1(pre,h2);pre=pre->next;++head->num;}break;}if(!h2){while(h1){h1=copy1(pre,h1);pre=pre->next;++head->num;}break;}if(h1->e<h2->e){h1=copy1(pre,h1);pre=pre->next;++head->num;}else if(h1->e==h2->e){if(h1->num!=-h2->num){l=(link)malloc(sizeof(item));l->num=h1->num+h2->num;l->e=h1->e;l->next=NULL;pre->next=l;pre=pre->next;++head->num;}h1=h1->next;h2=h2->next;}else{h2=copy1(pre,h2);pre=pre->next;++head->num;}}printf("多项式相加完成!\n");PAUSE;CLS;return head;}/****************两个多项式相减***************/link subtract(link h1,link h2){if(h1==NULL||h2==NULL||h1->num==0||h2->num==0){ printf("无多项式!\n");PAUSE;return NULL;}link head,l,pre;head=(link)malloc(sizeof(item));head->num=0;head->next=NULL;pre=head;for(h1=h1->next,h2=h2->next;h1||h2;){if(!h1){while(h2){h2=copy2(pre,h2);pre=pre->next;++head->num;}break;}if(!h2){while(h1){h1=copy1(pre,h1);pre=pre->next;++head->num;}break;}if(h1->e<h2->e){h1=copy1(pre,h1);pre=pre->next;++head->num;}else if(h1->e==h2->e){if(h1->num!=h2->num){l=(link)malloc(sizeof(item));l->num=h1->num-h2->num;l->e=h1->e;l->next=NULL;pre->next=l;pre=pre->next;++head->num;}h1=h1->next;h2=h2->next;}else{h2=copy2(pre,h2);pre=pre->next;++head->num;}}printf("多项式相减完成!\n");PAUSE;CLS;return head;}/****************两个多项式相乘***************/link multiply(link h1,link h2){if(h1==NULL||h2==NULL||h1->num==0||h2->num==0){ printf("无多项式!\n");PAUSE;return NULL;}link head,end,temp,now;double num;int e;head=(link)malloc(sizeof(item));head->num=0;head->next=NULL;end=head;for(h1=h1->next;h1;h1=h1->next)for(now=h2->next;now;now=now->next){num=h1->num*now->num;e=h1->e+now->e;if(search(head,e,num)){temp=(link)malloc(sizeof(item));temp->num=num;temp->e=e;temp->next=NULL;end->next=temp;end=end->next;++head->num;}}sort(head);printf("多项式相乘完成!\n");PAUSE;CLS;return head;}“io.cpp”#include"my.h"/******************输入并按次数递增的顺序存储数据*********************/link input(void){link head,pre,back,l;double num;int e,flag;head=(link)malloc(sizeof(item));head->next=NULL;head->num=0;do{printf("请输入系数:");scanf("%lf",&num);printf("请输入指数:");scanf("%d",&e);CLS;if(!num) break;if(head->num==0){ //空链表时建立第一个节点l=(link)malloc(sizeof(item));l->num=num;l->e=e;l->next=NULL;head->next=l;++head->num;}else{ //保证存储数据时按次数递增的顺序存储flag=1;for(pre=head,back=pre->next;back;pre=pre->next,back=pre->next){if(e==back->e){ //链表中已有相同次数的项,修改系数即可back->num+=num;flag=0;break;}if(e<back->e){ //找到链表中第一个大于输入数据的节点,在此节点前插入新书局节点l=(link)malloc(sizeof(item));l->num=num;l->e=e;pre->next=l;l->next=back;++head->num;flag=0;break;}}if(flag){ //若新输入的数据次数比链表中的所有数据次数都大,则将此数据项接到链表末尾l=(link)malloc(sizeof(item));l->num=num;l->e=e;l->next=NULL;pre->next=l;++head->num;}}}while(1);return head;}/****************输出数据******************/void output(link h,char *title){printf("%s=",title);if(h==NULL||h->num==0){ //空链表时的输出printf("无多项式!\n");PAUSE;return;}while(h->next){h=h->next;if(h->num==1)if(h->e==0)printf("%g",h->num);elseprintf("x^%d",h->e);else if(h->e==0)printf("%g",h->num);elseprintf("%gx^%d",h->num,h->e);if(h->next&&h->next->num>0)putch('+');}putch('\n');PAUSE;}“m ain.cpp”#include"my.h"int main(void){link p,q,sum,sub,mul;p=q=sum=sub=mul=NULL;while(1){switch(menu()){case 1:if(judge(p,"P(x)")) p=input();break;case 2:if(judge(q,"Q(x)")) q=input();break;case 3:if(judge(sum,"P(x)+Q(x)")) sum=add(p,q);break;case 4:if(judge(sub,"P(x)-Q(x)")) sub=subtract(p,q);break;case 5:if(judge(mul,"P(x)*Q(x)")) mul=multiply(p,q);break;case 6:output(p,"P(x)");break;case 7:output(q,"Q(x)");break;case 8:output(sum,"P(x)+Q(x)");break;case 9:output(sub,"P(x)-Q(x)");break;case 10:output(mul,"P(x)*Q(x)");break;case 11:exit(0);}}}“menu.cpp”#include"my.h"static char string[11][20]={"1--createP(x)","2--create Q(x)","3--p(x)+Q(x)","4--P(x)-Q(x)","5--p(x)*Q(x)","6--printP(x)","7--printQ(x)","8--printP(x)+ Q(x)","9--print P(x)-Q(x)","10--print P(x)*Q(x)","11—Quit"};/*****************主菜单显示****************/int menu(void){int i;while(1){CLS;for(i=0;i<11;++i)puts(string[i]);printf("请选择:");scanf("%d",&i);if(i>=1&&i<=11){CLS;return i;}elseprintf("输入不合法,请重新输入!\n");PAUSE;}}/****************用于判断链表是否存在******************/int judge(link h,char *str){char ch;if(h==NULL||h->num==0)return 1;else{printf("%s is not Empty,Create %s again?\nInput Y or N:",str,str);while(1){ch=getch();if(ch=='y'||ch=='Y'){remove(h);CLS;return 1;}else if(ch=='n'||ch=='N')return 0;}CLS;}}/***************删除链表*******************/void remove(link head){link pre,back;for(pre=head,back=pre->next;back;pre=back,back=back->next) free(pre);free(pre);head=NULL;}实验四算术表达式求值“my.h”#pragma once#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<math.h>#define CLS system("cls");#define PAUSE system("pause");#define N 50union Element{double num;char symbol;};typedef struct Node{Element data;Node *next;}Queue,*qNode,stackNode,*stack;typedef struct queueRecord{Queue *front;Queue *rear;}*qRecord;/********************************stack.cpp********************************/int isStackEmpty(stack top);stack creat_stack();void push(stack top,Element data); Element pop(stack top);Element top(stack top);/********************************queue.cpp********************************/int isQueueEmpty(qRecord queue); qRecord creat_queue();void Enqueue(qRecord queue,Element data); Element Dequeue(qRecord queue);/********************************input.cpp********************************/ void input(qRecord,stack);void output(qRecord);/********************************calculate.cpp********************************/ double calculate(qRecord,stack);/********************************menu.cpp********************************/int menu();void screen();“calculate.cpp”#include "my.h"double calculate(qRecord queue,stack stack){ Element a,b,temp;temp.num = 0;temp.symbol = NULL;while(!isQueueEmpty(queue)){temp = Dequeue(queue);if(temp.symbol == NULL)push(stack,temp);else{b = pop(stack);a = pop(stack);switch(temp.symbol){case '+': a.num+=b.num;push(stack,a);break;case '-': a.num-=b.num;push(stack,a);;break;case '*': a.num*=b.num;push(stack,a);;break;case '/': a.num/=b.num;push(stack,a);;break;}temp.num = 0;temp.symbol = NULL;}}return pop(stack).num;}“input.cpp”#include "my.h"int compare(Element a,Element b){ //a为栈顶的元素,b为新进入的元素int i,j;switch(a.symbol){case '+': i = 1;break;case '-': i = 1;break;case '*': i = 2;break;case '/': i = 2;break;case '(': i = 0;break;}switch(b.symbol){case '+': j = 1;break;case '-': j = 1;break;case '*': j = 2;break;case '/': j = 2;break;case '(': j = 3;break;case ')': j = 1;break;}if(i >= j)return 1;elsereturn 0;}void input(qRecord queue,stack stack){char ch;int j;Element temp;printf("请输入表达式:");temp.num = 0;for(ch = getchar();ch != '\n';ch = getchar()){if(ch-'0' >= 0 && ch-'0' <= 9){temp.num += (ch-'0')/10.0;temp.num *= 10;temp.symbol = NULL;continue;}if(ch == '.'){for(j = 0,ch = getchar();ch-'0' >= 0 && ch-'0' <= 9;ch = getchar()) temp.num += (ch-'0')/pow(10,++j);temp.symbol = NULL;Enqueue(queue,temp);temp.num = 0;if(ch == '\n')break;}if(ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '(' || ch == ')'){ if(temp.num != 0){Enqueue(queue,temp);temp.num = 0;}temp.symbol = ch;while(!isStackEmpty(stack) && compare(top(stack),temp))Enqueue(queue,pop(stack));if(temp.symbol != ')')push(stack,temp);elsepop(stack);temp.num = 0;}}if(temp.num != 0 && temp.symbol == NULL)Enqueue(queue,temp);while(!isStackEmpty(stack))Enqueue(queue,pop(stack));}void output(qRecord queue){qNode q;if(isQueueEmpty(queue)){printf("表达式为空!\n");return;}printf("后缀表达式为:");for(q = queue->front;q != NULL;q = q->next) if(q->data.symbol == NULL)printf("%g ",q->data.num);elseprintf("%c ",q->data.symbol);putch('\n');}“main.cpp”#include "my.h"void main(){stack stack = creat_stack();qRecord queue = creat_queue();double result;screen();while(1){switch(menu()){case 1:input(queue,stack);PAUSE;break;case 2:output(queue);PAUSE;break;case 3:if(!isQueueEmpty(queue))result = calculate(queue,stack);printf("计算结果=%g\n",result);PAUSE;CLS;screen();break;case 4:exit(0);}}}“menu.cpp”#include "my.h"int menu(){int i;while(1){i = getch() - '0';if(i >= 1 && i <= 4)return i;}}void screen(){printf("1.输入表达式\n");printf("2.输出表达式\n");printf("3.得出结果\n");printf("4.退出\n");}“queue.cpp”#include "my.h"int isQueueEmpty(qRecord queue){if(queue->front == NULL)return 1;elsereturn 0;}qRecord creat_queue(){qRecord queue = (qRecord)malloc(sizeof(queueRecord));queue->front = queue->rear = NULL;return queue;}void Enqueue(qRecord queue,Element data){if(isQueueEmpty(queue)){queue->rear = (qNode)malloc(sizeof(Queue));queue->front = queue->rear;}else{queue->rear->next = (qNode)malloc(sizeof(Queue));queue->rear = queue->rear->next;}queue->rear->data = data;queue->rear->next = NULL;}Element Dequeue(qRecord queue){qNode temp = queue->front;Element data = temp->data;queue->front = queue->front->next;free(temp);return data;}“stack.cpp”#include "my.h"int isStackEmpty(stack top){if(top->next == NULL)return 1;elsereturn 0;}stack creat_stack(){stack st = (stack)malloc(sizeof(stackNode));st->next = NULL;return st;}void push(stack top,Element data){stack temp = (stack)malloc(sizeof(stackNode));temp->data = data;temp->next = top->next;top->next = temp;}Element pop(stack top){stack temp = top->next;Element data = temp->data;top->next = temp->next;free(temp);return data;}Element top(stack top){return top->next->data;}实验七哈夫曼编/译码器实验指导书“my.h”#pragma once#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<math.h>“Huffman.cpp”#include<stdio.h> /* for size_t, printf() */#include<conio.h> /* for getch() */#include<ctype.h> /* for tolower() */#include<malloc.h> /* for malloc(), calloc(), free() */#include<string.h> /* for memmove(), strcpy() */#include<stdlib.h>/*树结构和全局结构指针*/#define NODENUM 26#define CLS system("cls");#define PAUSE system("pause");/*----------哈夫曼树结点结构-------------*/struct node{char ch;int weight;int parent;int lchild,rchild;} *ht; //指向哈夫曼树的存储空间的指针变量/*----------字符编码结点结构-------------*/struct HuffmanCoding{char ch;char coding[NODENUM];};/*--------哈夫曼树遍历时栈的结点结构------*/struct stacknode{int NodeLevel;int NodeElem;};/*---------------常量文件名---------------*/const char *TableFileName = "HfmTbl.txt"; //哈夫曼树数据文件const char *CodeFileName = "CodeFile.txt"; //字符编码数据文件const char *SourceFileName = "SrcText.txt"; //需编码的字符串文件const char *EnCodeFileName = "EnCodeFile.txt"; //编码数据文件const char *DecodeFileName = "DecodeFile.txt"; //译码字符文件/************************************************************/ /* 释放哈夫曼树数据空间函数*/ /************************************************************/ void free_ht(){if(ht != NULL){free(ht);ht = NULL;}}/************************************************************/ /* 从文件读取哈夫曼树数据函数*/ /************************************************************/ int ReadFromFile(){//int i;int m;FILE *fp;if((fp=fopen(TableFileName,"rb"))==NULL){printf("cannot open %s\n", TableFileName);getch();return 0;}fread(&m,sizeof(int),1,fp); //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') continue;}/************************************************************//* 选择权值最小的两个根结点函数*//************************************************************/void Select(struct node ht[],int n, int *s1,int *s2){int i,j;for(i = 0 ; i <= n && ht[i].parent != -1 ; ++i);for(j = i + 1 ; j < n ; ++j)if(ht[j].weight < ht[i].weight && ht[j].parent==-1)i = j;*s1 = i;for(i = 0 ; i <= n && (ht[i].parent != -1 || i==*s1); ++i);for(j = i + 1 ; j <= n ; ++j)if(ht[j].weight < ht[i].weight && j != *s1 && ht[j].parent==-1)i = j;*s2 = i;}/************************************************************//* 创建哈夫曼树和产生字符编码的函数*//************************************************************/void Initialization(){int i=0,n,m,j,f,s1,s2,start;char cd[NODENUM];struct HuffmanCoding code[NODENUM];FILE *fp;printf("输入字符总数n:");scanf("%d",&n);EatCharsUntilNewLine();m=2*n-1;ht=(struct node *)malloc(m*sizeof(struct node)); //申请哈夫曼树的存储空间//输入字符和权值for(i=0;i<n;i++){printf("请输入第%d个字符和权值:",i+1);scanf("%c",&ht[i].ch);scanf("%d",&ht[i].weight);ht[i].parent=ht[i].lchild=ht[i].rchild=-1;EatCharsUntilNewLine();}//剩余空间处理,初始化哈夫曼树for(i=n;i<m;i++){ht[i].ch='*';ht[i].weight=0;ht[i].parent=ht[i].lchild=ht[i].rchild=-1;}//建立哈夫曼树for(i=n;i<m;i++){Select(ht,i-1,&s1,&s2);ht[s1].parent=i;ht[s2].parent=i;ht[i].lchild=s1;ht[i].rchild=s2;ht[i].weight=ht[s1].weight+ht[s2].weight;}//把哈夫曼树的数据存储到文件中if((fp=fopen(TableFileName,"wb"))==NULL){printf("cannot open %s\n", TableFileName);getch();return;}fwrite(&m,sizeof(int),1,fp);fwrite(ht,sizeof(struct node),m,fp);fclose(fp);/*********************************************************/ /* 产生字符编码*/ /* 从叶结点开始,沿父结点上升,直到根结点,若沿*//* 父结点的左分支上升,则得编码字符“0”,若沿父结*/ /* 点的右分支上升,则得编码字符“1”*/ /*********************************************************///把字符编码数据存储到文件中if(!(fp=fopen(CodeFileName,"wb"))){printf("cannot open %s\n", CodeFileName);getch();return;}cd[n-1]=0;for(i=0;i<n;i++){start=n-1;for(j=i,f=ht[i].parent;f!=-1;j=f,f=ht[f].parent)if(ht[f].lchild==j)cd[--start]='0';elsecd[--start]='1';code[i].ch=ht[i].ch;strcpy(code[i].coding,&cd[start]);}fwrite(&n,sizeof(int),1,fp);fwrite(code,sizeof(struct HuffmanCoding),n,fp);fclose(fp);free_ht();printf("\nInitial successfule!\n");getch();}/************************************************************/ /* 哈夫曼编码的函数*/ /************************************************************/ void Encode(void){int i,j,n;char Encodestr[256];struct HuffmanCoding code[NODENUM];FILE *fp1, *fp2;//读字符编码数据fp1 = fopen(CodeFileName,"rb");fread(&n,sizeof(int),1,fp1);fread(code,sizeof(struct HuffmanCoding),n,fp1);//读需编码的字符串,把读入的文本串存储到文件中EatCharsUntilNewLine();printf("请输入要编码的字符串:");gets(Encodestr);fputs(Encodestr,fp1);fclose(fp1);//打开存储编码的数据文件,字符编码fp2=fopen(EnCodeFileName,"wb");printf("编码结果:\n");for(i=0; Encodestr[i]!='\0';++i)for(j=0;j<n;j++)if(Encodestr[i]==code[j].ch){printf("%s",code[j].coding);fwrite(code[j].coding,sizeof(code[j].coding),1,fp2);break;}fclose(fp2);printf("\n编码完成!\n");PAUSE;}/************************************************************/ /* 哈夫曼译码的函数*/ /************************************************************/ void Decode(){FILE *CFP, *TFP;char DeCodeStr[256];char ch;int f,m;m=ReadFromFile();//打开编码数据文件,打开存储译码的数据文件TFP=fopen(DecodeFileName,"wb");CFP=fopen(EnCodeFileName,"rb");//字符译码/********************************************************/ /* 方法:依次从编码数据文件中读取编码字符,并从*/ /* 哈夫曼树开始,若是数字字符“0”,则沿其左分*/ /* 支下降到孩子结点;若是数字字符“1”,则沿其*/ /* 右分支下降到孩子结点;如此反复,直到页结点,*/ /* 则输出页结点对应的字符到译码数据文件中,并*/ /* 显式。
西南交大C++实验12.doc

实验__12__实验报告教学班级:_ 学生学号:学生姓名:实验日期:实验地点:____________(机房)指导教师签名:_____________ 实验成绩:______________一、实验目的1. 掌握指针变量的使用;2. 掌握用指针方式访问一维数组。
二、实验任务1.求,其中x和n均为整数,由键盘输入。
编程输出公式中的每一项的值、以及sum的值。
要求:x, n, sum均用指针。
2.统计一维整型数组中能被3整除的元素个数,并输出。
要求:数组元素由键盘输入;用指针方式访问数组。
3.学生成绩统计:随机产生30名学生的成绩(0~100之间的整数),存放于一维数组中;输出学生成绩,每行10个数。
然后统计并输出90-100、80-80、70-79、60-69、小于60这五个分数段的学生人数。
要求:用指针方式访问数组。
程序运行结果类似于下图:4.编程将一维数组中保存的10个整数循环左移m位,m的值由键盘输入。
例如:数组元素为:8,5,13,21,3,2,6 ,7,12,10;m的值为3,则移动后的数组为:21,3,2,6 ,7,12,10,8,5,13。
要求:用指针方式访问数组,程序中只能使用一个数组。
5.有一组整数,其排列形式为:8,5,13,15,3,11,6,7,22,10,且尾部的10和头部的8首尾相连,构成一个环形。
编程求出相邻的任意四个数之和,并输出。
然后找出相加之和最大的四个数,输出求和的结果以及这四个数。
要求:用指针方式访问数组。
程序运行结果类似于下图,实验报告中的运行结果截图,不能与下图中的数据一样。
三、实验结果(源程序+ 注释)1.#include<iostream>using namespace std;void main(){cout<<"学号:姓名:"<<endl;cout<<"========================================="<< endl;int n,i=1;int *pn=&n;double x,sum,j;double *px=&x,*psum=∑cout<<"请分别输入x和n的值:"<<endl;cin>>*px>>*pn;j=x;*psum=0;while(i<=*pn){ *psum=*psum+j;i++;j=j*x/i;}cout<<"sum="<<*psum<<endl;}2.#include<iostream>using namespace std;void main(){cout<<"学号:姓名:"<<endl;cout<<"========================================="< <endl;int a[100],n,j=0,*p;cout<<"请输入一维整型数组中的元素个数:"<<endl;cin>>n;cout<<"请输入一维整型数组中的元素:"<<endl;for(p=a;p<a+n;p++)cin>>*p;for(p=a;p<a+n;p++)if(*p%3==0)j=j+1;cout<<"该数组中能被3整除的元素个数为:"<<j<<endl; }3.#include<iostream>#include<iomanip>#include<ctime>using namespace std;void main(){cout<<"学号:姓名:"<<endl;cout<<"========================================="< <endl;int a[30],*q,i=0; //a[30]用于存放30名学生的成绩int c[5]={0}; //分别存放5个分数段的学生人数int *pa=a,*pc=c; //初值分别存放数组a和c的首地址srand(time(NULL));for(q=a;q<a+30;q++)*q=0+rand()%(100-0+1);cout<<"学生成绩为:"<<endl;for(q=a;q<a+30;q++){cout<<setw(6)<<*q;i=i+1;if(i%10==0)cout<<endl;switch(*q/10){case 10:case 9:*(pc+4)=*(pc+4)+1;break;case 8:*(pc+3)=*(pc+3)+1;break;case 7:*(pc+2)=*(pc+2)+1;break;case 6:*(pc+1)=*(pc+1)+1;break;default:*pc=*pc+1;}}cout<<"学生成绩统计如下:"<<endl;cout<<setw(10)<<"分数段"<<setw(10)<<"90~100"<<setw(10)<<"80~89"<<setw(10)<<"70~79" <<setw(10)<<"60~69"<<setw(10)<<"60以下"<<endl;cout<<setw(10)<<"人数"<<setw(10)<<*(pc+4)<<setw(10)<<*(pc+3)<<setw(10)<<*(pc+2)<<s etw(10)<<*(pc+1)<<setw(10)<<*pc<<endl;}4.#include <iostream>using namespace std;void main( ){cout<<"学号:姓名:"<<endl;cout<<"========================================="<< endl;int a[20],*p;int m,i,t;cout<<"请输入m的值:";cin>>m;cout<<"循环左移"<<m<<"位前,数组元素为:"<<endl;for(p=a;p<a+10;p++)cin>>*p;for(i=0;i<m;i++){p=a;t=*p;for(;p<a+9;p++)*p=*(p+1);*p=t;}cout<<"数组循环左移"<<m<<"位后的数组为:"<<endl;for(p=a;p<a+10;p++)cout<<*p<<" ";cout<<endl;}5.#include<iostream>#include<iomanip>using namespace std;void main(){cout<<"学号:姓名:"<<endl;cout<<"========================================="<< endl;const int N=10;int a[N]={8,5,13,15,3,11,6,7,22,10}; //用于存放10个整数;int b[N]={0},i,j,max,pos,sum; //用于存放a[i]及其后3个整数之和;int *pa=a,*pb=b; //初值分别存放数组a 和b的首地址;cout<<"数组中的元素为:"<<endl;for(i=0;i<N;i++)cin>>*(a+i);for(i=0;i<N;i++){sum=0;for(j=i;j<i+4;j++)if(j>N-1)sum+=*(a+j-N);elsesum+=*(a+j);*(b+i)=sum;}cout<<"相邻4个数之和分别是:"<<endl; max=*(b+0);for(i=0;i<N;i++){cout<<setw(6)<<*(b+i);if(*(b+i)>max){max=*(b+i);pos=i;}}cout<<endl;cout<<"最大的和值是:"<<max<<endl;cout<<"参与求和的4个数是:";for(i=pos;i<pos+4;i++)if(i>N-1)cout<<setw(6)<<*(a+i-N);elsecout<<setw(6)<<*(a+i);cout<<endl;}。
西南交通大学计算机程序设计基础C++实验九

实验 9 实验报告教学班级:_制药一班______ 学生学号:xxxxxx 学生姓名:刘祥龙实验日期:__6.1_______ 实验机房:____x7407____ 助教老师:__________一、实验目的掌握对一组数据进行插入、删除、修改、以及查找的常用算法。
二、实验任务1.建立一个一维数组a,完成以下任务,输入输出格式参见下图。
(1)利用rand()函数产生10个10~100之间的整数,存入数组a中并输出;(2)使用冒泡排序法,将数组a中的数据按降序排列,并输出;(3)使用折半查找法在数组a中查找是否有键盘输入的指定数据,并输出查找结论(没找到或在第X个位置找到)。
2.建立一个一维数组a,完成以下任务,输入输出格式参见下图。
(1)自动生成斐波那契数列前10项的值,存入数组a,并输出。
(斐波那契数列前两项的值为1,从第三项开始,每一项的值是前两项值的和);(2)将键盘输入的一个数据插入数组a,使得数组a中的元素仍然保持有序;(3)删除数组a中的重复数据,并输出删除后的结果;(4)求出数组a所有元素的平均值,并输出;(5)删除数组a中所有低于平均值的元素,并输出删除后的结果。
三、实验结果(源程序+ 注释+ 运行界面截图)(要求:(1)提供源程序;(2)源程序包含必要的注释,包括:在程序头部给出本程序功能的注释、所定义变量的用途注释、程序块的功能注释、子函数的功能注释等;(3)运行结果的窗口截图,程序运行结果中输出的第一行内容必须为:程序作者的学号和姓名。
)1.#include<iostream>;using namespace std;int main(){cout<<"xxxxxxxxx"<<endl;int a[10],i,j,t,top=0,mid,bot=9,x;cout<<"10个10到100间的随机整数为:"<<endl;for(i=0;i<10;i++){a[i]=10+rand()%(100-10+1);cout<<a[i]<<" ";}cout<<endl;//使用冒泡法,将数组a按降序排列,并输出for(i=0;i<9;i++){for(j=0;j<9;j++)if(a[j]<a[j+1]){t=a[j];a[j]=a[j+1];a[j+1]=t;}}cout<<"按从大到小排列的结果为:"<<endl;for(i=0;i<10;i++)cout<<a[i]<<" ";cout<<endl;//使用折半查找完成指定数据的查找,并输出是否查找到的信息cout<<"请输入要查找的数:";cin>>x;while(top<=bot){mid=(top+bot)/2;if(a[mid]==x){break;}elseif(a[mid]<x)bot=mid-1;elseif(a[mid]>x)top=mid+1;}if(top<=bot)cout<<x<<"在第"<<mid+1<<"个位置。
西南交大c实验报告

西南交大c实验报告
《西南交大C实验报告》
在西南交通大学C实验室进行了一项关于C语言编程的实验,旨在帮助学生掌握C语言的基本语法和编程技巧,提高他们的编程能力。
实验内容包括基本的C语言程序设计、数据类型、运算符、控制结构、函数、数组、指针等内容。
在实验过程中,学生们通过实际操作,掌握了C语言的基本语法和编程技巧。
他们学会了如何编写简单的C语言程序,如何使用不同的数据类型和运算符进行计算,如何使用控制结构进行流程控制,如何定义和调用函数,如何使用数组和指针等。
通过实验,学生们不仅掌握了C语言的基本知识,还培养了他们的动手能力和解决问题的能力。
他们在实验中遇到了各种问题,通过自己的努力和老师的指导,逐渐解决了这些问题,取得了丰硕的成果。
通过这次实验,学生们对C语言有了更深入的了解,提高了他们的编程能力,为以后的学习和工作打下了坚实的基础。
同时,实验也让学生们感受到了编程的乐趣,激发了他们对计算机编程的兴趣,为他们的未来发展打开了一扇新的大门。
在未来的学习和工作中,学生们将继续努力,不断提高自己的编程能力,为科技创新和社会发展做出更大的贡献。
西南交通大学将继续为学生提供更多的实践机会和发展平台,帮助他们实现自己的梦想,成为优秀的计算机专业人才。
西南交大c++实验六.doc

实验__6__实验报告教学班级:_____ 学生学号:___ ___ 学生姓名:_________实验日期:2018/4/24___________ 实验地点:______(机房)指导教师签名:__________ 实验成绩:___________一、实验目的1.掌握循环与选择结构的嵌套的使用方法;2.掌握嵌套循环的使用方法;二、实验任务1. 编写一个成绩录入程序,该程序可录入不同班级学生的学号、语文、数学和英语成绩并判断学生的优势学科。
班级数目、各班人数、学号、三科成绩(假设各科成绩均不相同)均由键盘输入。
运行结果如下,请编码实现。
2.百鸡问题:公鸡5元钱一只,母鸡3元钱一只,小鸡三只1元钱。
现在用100块钱买了100只鸡,问公鸡、母鸡、小鸡各多少只运行结果如下,请编码实现。
(解题思路参考教材P7和逻辑推理问题)3. 键盘输入10个整数,输出这些数中位置上的数字之和为7的所有整数。
运行结果如下,请编码实现。
4. 将一个正整数分解质因数。
例如:输入90,打印出90=2*3*3*5。
运行结果如下,请编码实现。
(参考教材案例真因子的问题。
)5.用循环结构语句编程并输出下图,其行数由键盘输入,行数和每行输出的星号*数有2倍的关系。
运行结果如下,请编码实现。
三、实验结果(源程序 + 注释)1.#include<iostream>using namespace std;void main(){cout<<"学号:******* 姓名:***"<<endl;int m,n,cla,stu,x,a,b,c;cout<<"请输入班级数量:"<<endl;cin>>n;cla=1;stu=1;for(cla=1;cla<=n;cla++){cout<<"========================="<<endl;cout<<"请输入"<<cla<<"班的学生数量:"<<endl;cin>>m;for(stu=1;stu<=m;stu++){cout<<"请输入第"<<stu<<"个学生的学号、语文、数学、英语成绩:"<<endl;cin>>x>>a>>b>>c;if(a>b)if(a>c)cout<<"学生"<<x<<"语文成绩好!语文成绩为:"<<a<<endl;elsecout<<"学生"<<x<<"英语成绩好!英语成绩为:"<<c<<endl;elseif(b>c)cout<<"学生"<<x<<"数学成绩好!数学成绩为:"<<b<<endl;elsecout<<"学生"<<x<<"英语成绩好!英语成绩为:"<<c<<endl;}}}2.#include<iostream>using namespace std;void main(){cout<<"学号:******* 姓名:***"<<endl;int x,y,z;for(x=0;x<=20;x++)for(y=0;y<=33;y++){ z=100-x-y;if(z%3==0&&5*x+3*y+z/3==100)cout<<"cocks="<<x<<" "<<"hens="<<y<<" "<<"chicken="<<z<<endl;}}include<iostream>using namespace std;void main(){int i,n;cout<<"请输入需要分解的正整数:"<<endl;#include<iostream>using namespace std;void main(){cout<<"学号:******* 姓名:***"<<endl;int i,j,n;cout<<"请输入要输出的行数:"<<endl;cin>>n;for(i=1;i<=n;i++){ for(j=1;j<=2*(n-i);j++)cout<<" ";for(j=1;j<=2*n;j++)cout<<"*";cout<<endl;} }。
C++实验13-综合实验

实验十三面向对象综合编程一、实验目的1.理解面向对象的设计思想,掌握编程方法。
2.利用面向对象系统分析与设计方法,对问题进行准确分析,设计一个适当的对象模型,进行编程。
3.设计合理的类结构与程序结构实现程序功能,用C++ 语言编写程序,进行测试,观察结果。
二、实验内容设计一个小型学生信息或者成绩管理系统,对成绩可以进行录入、增加、删除、查询等功能。
三、实验步骤1. 运用学过的知识,实验前在纸上写出程序。
2. 根据程序要求,系统的功能,用到面向对象程序设计的那些知识和方法。
3. 分析各种类的关系及层次,按照多学方法进行程序设计。
4. 上机编辑、编译、调试和运行,并修改错误。
四、实验报告1. 写出实验目的和实验内容。
2. 写出类层次图、数据流图和程序清单。
3. 说明对编程分析、运行结果、难点、解决方法、结论和编程体会。
#include <iostream>#include<string.h>#include<fstream>using namespace std;class Student{ char Term[20];char Grade[20];char Number[20];char Name[20];float Chinese;float Math;float English;float Computer;public:friend int Student_SearchByNum(char Number[]);friend int Student_SearchByName(char name[]);friend void Student_Display_Only(int Num);friend void Student_Select_Number();friend void Student_Select_Name();friend void Student_Insert();friend void Student_Move();friend void Student_Delete();friend void Student_Display();friend void Read();friend void Write_Informention();};Student students[1000];int num=0;int Student_SearchByNum(char Number[]){int i;for (i=0;i<num;i++){if (strcmp(students[i].Number,Number)==0){return i;}}return -1;}int Student_SearchByName(char name[]){int i;for (i=0;i<num;i++){if (strcmp(students[i].Name,name)==0){return i;}}return -1;}void Student_Display_Only(int Num){cout<<"学期:"<<students[Num].Term<<endl;cout<<"班级:"<<students[Num].Grade<<endl;cout<<"学号:"<<students[Num].Number<<endl;cout<<"姓名:"<<students[Num].Name<<endl;cout<<"语文:"<<students[Num].Chinese<<endl;cout<<"数学:"<<students[Num].Math<<endl;cout<<"英语:"<<students[Num].English<<endl;cout<<"计算机:"<<students[Num].Computer<<endl; }void Student_Select_Number(){while(1){char number[20];int Num;cout<<"请输入要查询的学生的学号:";cin>>number;Num=Student_SearchByNum(number);if (Num==-1){cout<<"学生不存在!"<<endl;}else{cout<<"你要查询的学生信息为:"<<endl;Student_Display_Only(Num);}cout<<"是否继续?(y/n)";getchar();if (getchar()=='n'){break;}}}void Student_Select_Name(){while(1){char name[20];int Num;cout<<"请输入要查询的学生的姓名:";cin>>name;Num=Student_SearchByName(name);if (Num==-1){cout<<"学生不存在!"<<endl;}else{cout<<"你要查询的学生信息为:"<<endl;Student_Display_Only(Num);}cout<<"是否继续?(y/n)"<<endl;getchar();if (getchar()=='n'){break;}}}void Student_Insert(){while(1){cout<<"请输入学期:";cin>>students[num].Term;3cout<<"请输入班级:";cin>>students[num].Grade;cout<<"请输入学号:";cin>>students[num].Number;cout<<"请输入姓名:";cin>>students[num].Name;cout<<"请输入语文成绩:";cin>>students[num].Chinese;cout<<"请输入数学成绩:";cin>>students[num].Math;cout<<"请输入英语成绩:";cin>>students[num].English;cout<<"请输入计算机成绩:";cin>>students[num].Computer;num++;cout<<"是否继续?(y/n)";getchar();if (getchar()=='n'){break;}}}void Student_Move(){while(1){char Number[20];int Num,x;cout<<"1按姓名修改:"<<endl;cout<<"2按学号修改:"<<endl;cin>>x;if(x==1){char name[20];int Num;cout<<"请输入要删除的学生的姓名:";cin>>name;Num=Student_SearchByName(name);if (Num==-1){cout<<"学生不存在!"<<endl;}else{cout<<"你要修改的学生信息为:"<<endl;Student_Display_Only(Num);cout<<"-- 请输入新值--"<<endl;cout<<"请输入学号:";cin>>students[Num].Number;cout<<"请输入学期:";cin>>students[num].Term;cout<<"请输入班级:";cin>>students[num].Grade;cout<<"请输入姓名:";cin>>students[Num].Name;cout<<"请输入语文成绩:";cin>>students[Num].Chinese;cout<<"请输入数学成绩:";cin>>students[Num].Math;cout<<"请输入英语成绩:";cin>>students[Num].English;cout<<"请输入计算机成绩:";cin>>students[Num].Computer;}}if(x==2){ cout<<"请输入要修改的学生的学号:";cin>>Number;Num=Student_SearchByNum(Number);if (Num==-1){cout<<"学生不存在!"<<endl;}else{cout<<"你要修改的学生信息为:"<<endl;Student_Display_Only(Num);cout<<"-- 请输入新值--"<<endl;cout<<"请输入学号:";cin>>students[Num].Number;cout<<"请输入学期:";cin>>students[num].Term;cout<<"请输入班级:";cin>>students[num].Grade;cout<<"请输入姓名:";cin>>students[Num].Name;cout<<"请输入语文成绩:";cin>>students[Num].Chinese;cout<<"请输入数学成绩:";5cin>>students[Num].Math;cout<<"请输入英语成绩:";cin>>students[Num].English;cout<<"请输入计算机成绩:";cin>>students[Num].Computer;}}cout<<"是否继续修改?(y/n)";getchar();if (getchar()=='n'){break;}}}void Student_Delete(){int i;while(1){char Number[20];int Num,x;cout<<"1按姓名删除:"<<endl;cout<<"2按学号删除:"<<endl;cin>>x;if(x==1){ char name[20];cout<<"请输入要删除的学生的姓名:";cin>>name;Num=Student_SearchByName(name);if (Num==-1){cout<<"学生不存在!";}else{cout<<"你要删除的学生信息为:"<<endl;Student_Display_Only(Num);cout<<"是否真的要删除?(y/n)";getchar();if (getchar()=='y'){for (i=Num;i<num-1;i++){students[i]=students[i+1];}num--;}}}if(x==2){ cout<<"请输入要删除的学生的学号:";cin>>Number;Num=Student_SearchByNum(Number);if (Num==-1){cout<<"学生不存在!";}else{cout<<"你要删除的学生信息为:"<<endl;Student_Display_Only(Num);cout<<"是否真的要删除?(y/n)";getchar();if (getchar()=='y'){for (i=Num;i<num-1;i++){students[i]=students[i+1];}num--;}}}cout<<"是否继续删除?(y/n)";getchar();if (getchar()=='n'){break;}}}void Student_Display(){int i;cout<<"-------------------------------------------------------------------------------"<<endl;for (i=0;i<num;i++){cout<<"学期:"<<students[i].Term<<endl;cout<<"班级:"<<students[i].Grade<<endl;cout<<"学号:"<<students[i].Number<<endl;7cout<<"姓名:"<<students[i].Name<<endl;cout<<"语文:"<<students[i].Chinese<<endl;cout<<"数学:"<<students[i].Math<<endl;cout<<"英语:"<<students[i].English<<endl;cout<<"计算机:"<<students[i].Computer<<endl;}}void Read(){ifstream fp("Database.txt");int i;if (!fp){cout<<"不能打开文件!";}for(i=0;i<num;i++){fp.read((char *)&students[i],sizeof( Student));}fp.close();}void Write_Informention(){ofstream fp("Database.txt");int i;if (!fp){cout<<"不能打开文件!";}for(i=0;i<num;i++){fp.write((char *)&students[i],sizeof( Student));}fp.close();}void main(){int choice;Read();while(1){cout<<"\n****** 学生成绩管理系统******\n";cout<<"\n-----计算机1041--王万里------\n";cout<<"1录入成绩--------------------"<<endl;cout<<"2浏览成绩--------------------"<<endl;cout<<"3按姓名查询------------------"<<endl;cout<<"4按学号查询------------------"<<endl;cout<<"5修改学生成绩---------------"<<endl;cout<<"6删除学生成绩---------------"<<endl;cout<<"7清平---------------------------"<<endl;cout<<"8退出---------------------------"<<endl;cout<<"请选择(1-8):";cin>>choice;switch(choice){case 1:Student_Insert();break;case 2:Student_Display();break;case 3:Student_Select_Name();break;case 4:Student_Select_Number();break;case 5:Student_Move();break;case 6:Student_Delete();break;case 7:system("cls");break;case 8:exit(0);break;}Write_Informention();}}9。
西南交大C++实验四.doc

实验__4__实验报告教学班级:______ 学生学号:______ _ 学生姓名:__________实验日期:__________ 实验地点:___指导教师签名:__________ 实验成绩:___________ 一、实验目的1.掌握if else 的嵌套结构;2.掌握多路分支结构的程序设计,以及switch 语句的使用方法;二、实验任务1. 已知一个函数输入x 的值,求解并输出相应的y 值。
要求用if …else 的嵌套结构实现。
2. 从键盘任意输入三个整数a 、b 、c ,计算并输出它们的最大数。
要求用if …else 的嵌套结构实现。
3.某工厂有如下规定:工龄不到一年的(工龄为0),无年休假;工龄为1~5年的,年休假为7天;工龄为6~10年的,年休假为14天;工龄为11~20年的年休假为21天;工龄20年以上的,年休假为28天。
编程实现:输入工龄,输出对应的年休天数。
要求用if …else 的嵌套结构实现。
4. 文具厂销售笔袋,按照客户的购买数量不同,给出了不同的优惠政策,详见下表:要求编程实现:输入客户购买笔袋数量,输出购买总金额。
要求用switch 语句实现。
5.模拟二人猜拳游戏:剪刀石头布。
要求:(1)给出选项菜单如下⎪⎩⎪⎨⎧>=-<<=-<=)10(13)100(12)0(x x x x x x y**********新一局**********1.出剪子2.出石头3.出布***************************请输入甲、乙猜拳代码:根据两个用户输入给出猜拳“战况”,要求用switch语句实现。
三、实验结果(源程序+ 注释)1. //已知一个函数,输入x的值,求解并输出相应的y值。
#include<iostream>using namespace std;void main(){cout<<"学号:"<<endl;double x,y;cout<<"请输入x的值:";cin>>x;if (x<0){y=x;cout<<y<<endl;}else if(x>=0&&x<10){y=2*x-1;cout<<y<<endl;}else if(x>=10){y=3*x-1;cout<<y<<endl;}}2.//从键盘任意输入三个整数a、b、c,计算并输出它们的最大数。
【最新】西南交大,数字电路,实验报告-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次作业(注意:若有主观题目,请按照题目,离线完成,完成后纸质上交学习中心,记录成绩。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验 13 实验报告教学班级:________ 学生学号:__________ 学生姓名:__________ 实验日期:_______ 实验地点:指导教师签名:__________ 实验成绩:___________一、实验目的1.理解变量作用域,掌握局部变量和全局变量的使用方法;2.掌握函数调用过程中的参数传递方法。
3.理解递推的概念,掌握递归函数的基本使用方法;二、实验任务1.求数组元素和值。
1) 主函数定义整型数组a[10],数组元素值a[j]=2*j+1,输出a数组;2) 编一子函数,将主函数传递来的数组元素值改变为其前面所有数组元素的和值(包括该数组元素自身值),子函数头要求为sum(inta[],int n),n用于传递数组的大小;3) 主函数中输出改变后的a数组。
2.求自然数对。
1)编写一子函数,判断两个自然数x,y是否是自然数对(所谓自然数对是指两个自然数的和与差都是平方数,如:17-8=9,17+8=25);2)调用子函数在0<x<=50,0<y<=50且x!=y范围内找出全部自然数对。
3.斐波那契数列。
1)主函数功能:求出斐波那契数列的前n项存入数组a[20]中,开始两项均为1,将子函数反序存放后的结果输出;2)子函数功能:将主函数求出的斐波那契数列前n项反序存放。
函数头要求为void fbnq(int*p,int n),p指向数组a。
4.编程实现:将有序数组有序合并。
1) 有两个从小到大的整型有序数组a和b,编一子函数将这两个数组合并为从小到大的有序数组c,整个合并过程中c保持有序;2) 子函数头要求为void merge(int a[],int b[],int c[],int m,int n),m用来传递a数组元素个数,n传递b数组元素个数。
5.实现功能:已知数列2,6,14,30,…… ,计算该数列的第n项。
其中的递推关系为:f(n)={2 (n=1)f(n−1)+2n (n>1)编程要求:1)主函数功能:从键盘输入n值,通过调用子函数计算数列的第n项并输出。
2)子函数功能:使用递归法,计算数列2,6,14,30,…… ,的第n项。
三、实验结果(源程序+ 注释)1.#include<iostream>#include<iomanip>using namespace std;void main(){cout<<"学号:姓名:"<<endl;cout<<"========================================="<<endl;int a[10],n,j;void sum(int a[],int n);cout<<"请输入数组a元素的个数:"<<endl;cin>>n;for(j=0;j<n;j++)a[j]=2*j+1;cout<<"数组a为:"<<endl;for(j=0;j<n;j++)cout<<a[j]<<setw(5);cout<<endl;sum(a,n);cout<<"改变后的a数组为:"<<endl;for(j=0;j<n;j++)cout<<a[j]<<setw(5);cout<<endl;}void sum(int a[],int n){int b[10]={0};int i,j;for(i=0;i<n;i++)for(j=0;j<=i;j++)b[i]=b[i]+a[j];for(i=0;i<n;i++)a[i]=b[i];}2.#include<iostream>#include<iomanip>using namespace std;void main(){cout<<"学号:姓名:"<<endl;cout<<"========================================="<<endl;int x,y;bool fun(int,int);cout<<"请输入2个自然数:"<<endl;cin>>x>>y;if(fun(x,y))cout<<x<<"与"<<y<<"是自然数对"<<endl;elsecout<<x<<"与"<<y<<"不是自然数对"<<endl;cout<<"在0<x<=50,0<y<=50且x不等于y范围内的自然数对有:"<<endl;for(x=1;x<=50;x++)for(y=1;y<=50;y++)if(x>y)if(fun(x,y))cout<<x<<"和"<<y<<setw(3);cout<<endl;}bool fun(int x,int y){int a,b,c,i,j;if(x<y){c=x;x=y;y=c;}a=x+y;b=x-y;for(i=1;i<a;i++)if(a==i*i)break;for(j=1;j<b;j++)if(b==j*j)break;if(i<a&&j<b)return true;elsereturn false;}3.#include<iostream>#include<iomanip>using namespace std;void main(){cout<<"学号:姓名:"<<endl;cout<<"========================================="<<endl;int a[20]={1,1},n,i;void fbnq(int*p,int n);cout<<"请输入斐波那契数列的项数n:";cin>>n;for(i=2;i<n;i++)a[i]=a[i-1]+a[i-2];fbnq(a,n);cout<<"子函数反序存放后的结果为:"<<endl;for(i=0;i<n;i++)cout<<a[i]<<setw(5);cout<<endl;}void fbnq(int*p,int n){int i,j,temp;for(i=0,j=n-1;i<j;i++,j--)temp=*(p+i);*(p+i)=*(p+j);*(p+j)=temp;}4、#include<iostream>#include<iomanip>using namespace std;void main(){cout<<"学号:2017110564 姓名:谭时铵"<<endl;cout<<"========================================="<<endl;int a[20],b[20],c[40],m,n;int i;void merge(int a[],int b[],int c[],int m,int n);cout<<"请输入整型有序数组a(从小到大)的元素个数:";cin>>m;cout<<"数组a的元素(从小到大)为:"<<endl;for(i=0;i<m;i++)cin>>a[i];cout<<"请输入整型有序数组b(从小到大)的元素个数:";cin>>n;cout<<"数组b的元素(从小到大)为:"<<endl;for(i=0;i<n;i++)cin>>b[i];merge(a,b,c,m,n);cout<<"合并后的有序数组C的元素为(从小到大):"<<endl;for(i=0;i<m+n;i++)cout<<setw(6)<<c[i];cout<<endl;}void merge(int a[],int b[],int c[],int m,int n){int i,j,k;i=j=k=0;while(i<m&&j<n)if(a[i]<b[j]){c[k++]=a[i];i++;}else{c[k++]=b[j];j++;}if(i<m)for(;i<m;i++)c[k++]=a[i];if(j<n)for(;j<n;j++)c[k++]=b[j];}5、#include<iostream>#include<iomanip>using namespace std;void main(){cout<<"学号:"<<endl;cout<<"========================================="<<endl;int n;int f(int);cout<<"从键盘输入n值:";cin>>n;cout<<"该数列的第"<<n<<"项为"<<f(n)<<endl;}int f(int n){double x;x=2;if(n==1)return x;elsereturn f(n-1)+pow(x,n);}。