源程序
- 格式:doc
- 大小:23.50 KB
- 文档页数:1
DSP经典源程序程序#include\#include\/***************************************************/interruptvoidt1pint_isr(v oid);interruptvoidt2pint_isr(void);interruptvoidcap_isr(void);interruptvoidpdpinta_isr(void);voiddelay(unsignedintm);unsignedintt1prd=117;//定时器1的周期unsignedintt2prd=117;//定时器2的标志unsignedintdir=0;//电机旋转方向unsignedintpwm=20;unsignedintdccurent,u,v,w,speedad;//直流母线电流unsignedintdcvoltage;//直流母线电压uint32sumdcv=0;unsignedintdcvcount=0,averagedcv=0;//母线电压平均值初始化unsignedintcapstastus;//定义cap口的电平uint32time,t2cnt,speed=0,count=0;unsignedpole=2;//极对数uint32sum=0,average=0;unsignedintl=0,nn=0;intt2=0;unsignedinttest[2000],test1[2000],test2[2000];intsss=0;/***************************************************/voidmain(void){/*初始化系统*/initsysctrl();/*关中断*/dint;ier=0x0000;ifr=0x0000;/*初始化pie*/initpiectrl();/*初始化pie矢量表*/initpievecttable();/*初始化gpio*/gpioinit();/*初始化ad*/initadc();/*初始化pwm*/init_eva_pwm();/*初始化cap*/capinit();eallow;//thisisneededtowritetoeallowprotectedregisterpievecttab le.capint1=&cap_isr;pievecttable.capint2=&cap_isr;pievecttable.capint3=&cap_is r;pievecttable.t1pint=&t1pint_isr;pievecttable.t2pint=&t2pint_isr;pievecttable.pdpinta=&pdpinta_isr;edis;//thisisneededtodisablewritetoeallpiectrl.pieier2.bit.intx4=1;//t1pint中断piectrl.pieier3.bit.intx1=1;//t2pint中断piectrl.pieier3.bit.intx5=1;//cap1中断piectrl.pieier3.bit.intx6=1;//cap2中断piectrl.pieier3.bit.intx7=1;//cap3中断piectrl.pieier1.bit.intx1=1;//pdpinta中断/*设置ier寄存器*/ier|=m_int1;ier|=m_int2;//t1pintenableier|=m_int3;//captureenable//enableglobalinterruptsandhigherpriorityreal-timedebugevents:startmotor();eint;//enableglobalinterruptintmertm;//enableglob alrealtimeinterruptdbgm//step6.idleloop.justsitandloopforever(optional):while(1){}}interruptvoidt2pint_isr(void){count++;evaregs.evaifrb.bit.t2pint=1;//清除中断标志evaregs.evaimrb.bit.t2pint=1;//中断允许piectrl.pieack.bit.ack3=1;//向cpu申请中断}interruptvoidcap_isr(void){/*****以下用来检测传感器的输出电平,用来换向****/uint32kk=t2prd;eallow;gpiomuxregs.gpamux.bit.cap1q1_gpioa8=0;//预设cap1~3为gpiogpiomuxregs.gpamux.bit.cap2q2_gpioa9=0;gpiomuxregs.gpamux.bit.cap3qi1_gpioa10=0;gpiomuxregs.gpadir.bit.gpioa8=0;//预设cap1~3为输出gpiomuxregs.gpadir.bit.gpioa9=0;gpiomuxregs.gpadir.bit.gpioa10=0;capstastus=(gpiodataregs.gpadat.all&0x0700)>>8;if(dir==1){switch(capstastus)//ir2136的hin和lin是反向的{case1:evaregs.actr.all=0x7fd;break;//h3fallcase2:evaregs.actr.all=0xfd7;break ;//h1fallcase3:evaregs.actr.all=0x7df;break;//h2risecase4:evaregs.actr.all=0xd 7f;break;//h2fallcase5:evaregs.actr.all=0xf7d;break;//h1risecase6:evaregs.actr .all=0xdf7;break;//h3rise}}else{switch(capstastus)//ir2136的hin和lin是反向的{case5:evaregs.actr.all=0xfd7;break;//h1risecase1:evaregs.actr.all=0xd7f;break ;//h3fallcase3:evaregs.actr.all=0xdf7;break;//h2risecase2:evaregs.actr.all=0xf7d;break;//h1fallcase6:evaregs.actr.all=0x7fd;break;//h3risecase4:evaregs.actr .all=0x7df;break;//h2fall}}/*以下用以排序输出功率*/t2cnt=evaregs.t2cnt;//读取定时器2的值time=kk*count+t2cnt;//赢得运转1相所须要时间sum+=time;l++;if(l==12)//每转12/6/pole计算一下转速{average=sum/12;speed=kk*20000*60/(average*6*pole);//计算转速sum=0;l=0;test[nn]=speed;//测试用,存储速度值nn++;if(nn==2000){nn=0;}}count=0;evaregs.t2con.all=0x1400;//停用定时器2evaregs.t2cnt=0x0000;evaregs.t2con.all=0x1440;//启动定时器2/*************************/gpiomuxregs.gpamux.bit.cap1q1_gpioa8=1;//重新设定cap1~3为gpiogpiomuxregs.gpamux.bit.cap2q2_gpioa9=1;gpiomuxregs.gpamux.bit.cap3qi1_gpio a10=1;evaregs.evaifrc.all=7;//清抓取中断evaregs.capfifo.all=0x01500;//清空捕捉堆栈piectrl.pieack.bit.ack3=1;//cap1中断向cpu申请中断}interruptvoidt1pint_isr(void){dcvoltage=(adcregs.result0)>>4;dccurent=(adcregs.result3)>>4;w=(adcregs.result 1)>>4;u=(adcregs.result2)>>4;speedad=(adcregs.result4)>>4;v=(adcregs.result5)> >4;//母线电压检测,过压维护,//注:电机在启动或者转动方向改变时,可能母线电压有脉动//采用多次求平均值sumdcv+=dcvoltage;dcvcount++;if(dcvcount==500){averagedcv=sumdcv/500;//求平均母线电压sumdcv=0;dcvcount=0;}if(averagedcv>=3000){stopmotor();gpiodataregs.gpadat.bit.gpioa11=1;//过压表明}/******************************/adcregs.adc_st_flag.bit.int_seq1_clr=1;//去除状态字adcregs.adctrl2.bit.rst_seq1=1;//登位seq1evaregs.evaifra.bit.t1pint=1;//清除中断标志evaregs.evaimra.bit.t1pint=1;//中断容许piectrl.pieack.bit.ack2=1;//向cpu申请中断}interruptvoidpdpinta_isr(void){evaregs.evaifra.bit.pdpinta=1;//清除pdpinta中断标志piectrl.pieack.bit.ack1=1;//向cpu申请中断stopmotor();/***********************************************************************///nomore/***********************************************************************/。
源程序代码(总17页)本页仅作为文档封面,使用时可以删除This document is for reference only-rar21year.March#include <> //调用单片机头文件#define uchar unsigned char//无符号字符型宏定义变量范围0~255#define uint unsigned int//无符号整型宏定义变量范围0~65535#include ""#include ""bit flag_200ms ;bit flag_100ms ;sbit beep = P3^7; //蜂鸣器定义bit flag_beep_en;uint clock_value; //用作闹钟用的sbit dq = P3^2; //18b20 IO口的定义uint temperature ; //温度变量uchar flag_nl; //农历阳历显示标志位uchar menu_1,menu_2;uchar key_time,flag_value;//用做连加的中间变量bit key_500ms ;uchar n_nian,n_yue,n_ri;//农历显示的函数#include ""#include ""/******************把数据保存到单片机内部eeprom中******************/void write_eeprom(){SectorErase(0x2000);byte_write(0x2000, fen1);byte_write(0x2001, shi1);byte_write(0x2002, open1);byte_write(0x2058, a_a);}/******************把数据从单片机内部eeprom中读出来*****************/void read_eeprom(){fen1 = byte_read(0x2000);shi1 = byte_read(0x2001);open1 = byte_read(0x2002);a_a = byte_read(0x2058);}/**************开机自检eeprom初始化*****************/void init_eeprom(){read_eeprom(); //先读if(a_a != 1)//新的单片机初始单片机内问eeprom {fen1 = 3;shi1 = 8;open1 = 1;a_a = 1;write_eeprom();//保存数据}}/***********************18b20初始化函数*****************************/ void init_18b20(){bit q;dq = 1; //把总线拿高delay_uint(1); //15usdq = 0; //给复位脉冲delay_uint(80);//750usdq = 1; //把总线拿高等待delay_uint(10);//110usq = dq; //读取18b20初始化信号delay_uint(20);//200usdq = 1; //把总线拿高释放总线}/*************写18b20内的数据***************/void write_18b20(uchar dat){uchar i;for(i=0;i<8;i++){ //写数据是低位开始dq = 0;//把总线拿低写时间隙开始dq = dat & 0x01;//向18b20总线写数据了delay_uint(5); // 60usdq = 1; //释放总线dat >>= 1;}}/*************读取18b20内的数据***************/uchar read_18b20(){uchar i,value;for(i=0;i<8;i++){dq = 0; //把总线拿低读时间隙开始value >>= 1; //读数据是低位开始dq = 1; //释放总线if(dq == 1) //开始读写数据value |= 0x80;delay_uint(5); //60us 读一个时间隙最少要保持60us的时间}return value; //返回数据}/*************读取温度的值读出来的是小数***************/uint read_temp(){uint value;uchar low;//在读取温度的时候如果中断的太频繁了,就应该把中断给关了,否则会影响到18b20的时序init_18b20(); //初始化18b20write_18b20(0xcc); //跳过64位ROMwrite_18b20(0x44); //启动一次温度转换命令delay_uint(50);//500usinit_18b20(); //初始化18b20write_18b20(0xcc); //跳过64位ROMwrite_18b20(0xbe);//发出读取暂存器命令EA = 0;low = read_18b20(); //读温度低字节value = read_18b20(); //读温度高字节EA = 1;value <<= 8; //把温度的高位左移8位value |= low;//把读出的温度低位放到value的低八位中value *= ;//转换到温度值小数return value;//返回读出的温度带小数}/******************1ms 延时函数*******************/void delay_1ms(uint q){uint i,j;for(i=0;i<q;i++)for(j=0;j<120;j++);}/******************写星期函数*******************/void write_week(uchar hang,uchar add,uchar week)//写星期函数{if(hang==1)write_com(0x80+add);elsewrite_com(0x80+0x40+add);switch(week){case 1:write_data('M');//星期数为1时,显示write_data('O');write_data('N');break;case 2:write_data('T');//星期数据为2时显示write_data('U');write_data('E');break;case 3:write_data('W'); //星期数据为3时显示write_data('E');write_data('D');break;case 4:write_data('T'); //星期数据为4是显示write_data('H');write_data('U');break;case 5:write_data('F'); //星期数据为5时显示write_data('R');write_data('I');break;case 6:write_data('S'); //星期数据为6时显示write_data('T');write_data('A');break;case 0:write_data('S'); //星期数据为7时显示write_data('U');write_data('N');break;}}/*************时钟显示***************/void init_1602_ds1302(){write_sfm2_ds1302(1,1,shi); //显示时write_sfm2_ds1302(1,4,fen); //显示分write_sfm2_ds1302(1,7,miao);//显示秒write_week(2,12,week);// write_sfm1(1,14,week);//显示星期write_sfm3_18B20(1,11,temper ature); //显示温度if(flag_nl == 0) //显示阳历{write_sfm2_ds1302(2,2,nian); //显示年write_sfm2_ds1302(2,5,yue); //显示月write_sfm2_ds1302(2,8,ri);//显示日}else //显示农历{write_sfm2_ds1302(2,2,n_nian);//显示年write_sfm2_ds1302(2,5,n_yue);//显示月write_sfm2_ds1302(2,8,n_ri); //显示日}} /*************定时器0初始化程序***************/void init_time0(){EA = 1; //开总中断TMOD = 0X01;//定时器0、工作方式1ET0 = 1; //开定时器0中断TR0 = 1; //允许定时器0定时}/*************闹钟报警函数***************/void menu_dis(){static uchar mm,value;if(flag_100ms == 1)//100ms执行一次{flag_100ms = 0;if(open1 == 1) //如果闹钟打开{if((miao == 0) && (fen == fen1) && (shi == shi1)){flag_beep_en = 1;//有报警打开蜂鸣器响的标志位}if(flag_beep_en == 1)//闹钟以被打开{clock_value++;if(clock_value <= 30)beep = ~beep; //蜂鸣器叫3秒elseif(clock_value > 30){beep = 1; //蜂鸣器停1秒if(clock_value > 40){clock_value = 0;}}// 1 分钟后自动关闭闹钟value ++;if(value >= 10){value = 0;mm++;if(mm >= 60){mm = 0;flag_beep_en = 0;beep = 1;}}}}}}/********************独立按键程序*****************/uchar key_can; //按键值void key() //独立按键程序{static uchar key_new;key_can = 20; //按键值还原P3 |= 0x78; //对应的按键IO口输出为1if((P3 & 0x78) != 0x78)//按键按下{delay_1ms(1); //按键消抖动if(((P3 & 0x78) != 0x78) &&(key_new == 1)){ //确认是按键按下key_new = 0;switch(P3 & 0x78){case 0x70: key_can = 4; break; //得到按键值case 0x68: key_can = 3; break; //得到按键值case 0x58: key_can = 2; break; //得到按键值case 0x38: key_can = 1; break; //得到按键值}write_sfm2(1,0,key_can);//显示按键值}}elsekey_new = 1;}/**********************设置函数************************/void key_with(){if(key_can == 1) //设置键{menu_1++;if(menu_1 == 1) //设置时间{menu_2 = 1;write_string(1,0," - - W: ");write_string(2,0," 20 - - ");}if(menu_1 == 2) //设置闹钟{menu_2 = 1;write_string(1,0," set clock ");write_string(2,0," Y 00:00 ");}if(menu_1 > 2) //回到正常显示{menu_1 = 0;write_guanbiao(1,2,0);//关闭光标init_1602_dis_csf();//初始化液晶显示}}if(key_can == 2) //选择键{flag_200ms = 1;if(menu_1 == 1) //设置时间{menu_2 ++;if(menu_2 > 7)menu_2 = 1;}if(menu_1 == 2)//设置闹钟{menu_2 ++;if(menu_2 > 3)menu_2 = 1;}}if(menu_1 == 1){if(menu_2 == 1)//设置时{if(key_can == 3) //加{shi+=0x01;if((shi & 0x0f) >= 0x0a)shi = (shi & 0xf0) + 0x10;if(shi >= 0x24)shi = 0;}if(key_can == 4) //减{if(shi == 0x00)shi = 0x24;if((shi & 0x0f) == 0x00)shi = (shi | 0x0a) - 0x10;shi -- ;}}if(menu_2 == 2)//设置分{if(key_can == 3) //加{fen+=0x01;if((fen & 0x0f) >= 0x0a)fen = (fen & 0xf0) + 0x10;if(fen >= 0x60)fen = 0;}if(key_can == 4) //减{if(fen == 0x00)fen = 0x5a;if((fen & 0x0f) == 0x00)fen = (fen | 0x0a) - 0x10;fen -- ;}}if(menu_2 == 3)//设置秒{if(key_can == 3) //加{miao+=0x01;if((miao & 0x0f) >= 0x0a)miao = (miao & 0xf0) + 0x10;if(miao >= 0x60)miao = 0;}if(key_can == 4) //减{if(miao == 0x00)miao = 0x5a;if((miao & 0x0f) == 0x00)miao = (miao | 0x0a) - 0x10;miao -- ;}}if(menu_2 == 4)//设置星期{if(key_can == 3) //加{week+=0x01;if((week & 0x0f) >= 0x0a)week = (week & 0xf0) + 0x10;if(week >= 0x08)week = 1;}if(key_can == 4) //减{if(week == 0x01)week = 0x08;if((week & 0x0f) == 0x00)week = (week | 0x0a) - 0x10;week -- ;}}if(menu_2 == 5)//设置年{if(key_can == 3) //加{nian+=0x01;if((nian & 0x0f) >= 0x0a)nian = (nian & 0xf0) + 0x10;if(nian >= 0x9a)nian = 1;}if(key_can == 4) //减{if(nian == 0x01)nian = 0x9a;if((nian & 0x0f) == 0x00)nian = (nian | 0x0a) - 0x10;nian -- ;}}if(menu_2 == 6)//设置月{if(key_can == 3) //加{yue+=0x01;if((yue & 0x0f) >= 0x0a)yue = (yue & 0xf0) + 0x10;if(yue >= 0x13)yue = 1;}if(key_can == 4) //减{if(yue == 0x01)yue = 0x13;if((yue & 0x0f) == 0x00)yue = (yue | 0x0a) - 0x10;yue -- ;}}if(menu_2 == 7)//设置日{if(key_can == 3) //加{ri+=0x01;if((ri & 0x0f) >= 0x0a)ri = (ri & 0xf0) + 0x10;if(ri >= 0x32)ri = 0;}if(key_can == 4) //减{if(ri ==0x01)ri = 0x32;if((ri &0x0f) == 0x00)ri = (ri | 0x0a) - 0x10;ri -- ;}}write_sfm2_ds1302(1,2,shi);//显示时write_sfm2_ds1302(1,5,fen); //显示分write_sfm2_ds1302(1,8,miao);//显示秒write_sfm1(1,14,week);//显示星期write_sfm2_ds1302(2,3,nian);//显示年write_sfm2_ds1302(2,6,yue);//显示月write_sfm2_ds1302(2,9,ri);//显示日switch(menu_2)// 光标显示{case 1:write_guanbiao(1,2,1); break;case 2:write_guanbiao(1,5,1); break;case 3:write_guanbiao(1,8,1); break;case 4:write_guanbiao(1,14,1); break;case 5:write_guanbiao(2,3,1); break;case 6:write_guanbiao(2,6,1); break;case 7:write_guanbiao(2,9,1); break;}write_time(); //把时间写进去}/***************设置闹钟*********************/if(menu_1 == 2){if(menu_2 == 1) //设置闹钟开关{if(key_can == 3){open1 = 1;//闹钟开}if(key_can == 4){open1 = 0;//闹钟关}}if(menu_2 == 2) //设置闹钟时{if(key_can == 3) //加{shi1+=0x01;if((shi1 & 0x0f) >= 0x0a)shi1 = (shi1 & 0xf0) + 0x10;if(shi1 >= 0x24)shi1 = 0;}if(key_can == 4) //减{if(shi1 == 0x00)shi1 = 0x5a;if((shi1 & 0x0f) == 0x00)shi1 = (shi1 | 0x0a) - 0x10;shi1 -- ;}}if(menu_2 == 3)//设置秒{if(key_can == 3) //加{fen1+=0x01;if((fen1 & 0x0f) >= 0x0a)fen1 = (fen1 & 0xf0) + 0x10;if(fen1 >= 0x60)fen1 = 0;}if(key_can == 4) //减{if(fen1 == 0x00)fen1 = 0x5a;if((fen1 & 0x0f) == 0x00)fen1 = (fen1 | 0x0a) - 0x10;fen1 -- ;}}if(open1 == 1)write_string(2,4,"Y");elsewrite_string(2,4,"N");write_sfm2_ds1302(2,7,shi1);//显示闹钟时write_sfm2_ds1302(2,10,fen1);//显示闹钟分switch(menu_2)// 光标显示{case 1: write_guanbiao(2,4,1); break;case 2: write_guanbiao(2,7,1); break;case3: write_guanbiao(2,10,1); break;}write_eeprom(); //保存闹钟时间}}/*****************主函数********************/void main(){beep = 0; //开机叫一声delay_1ms(150);P0 = P1 = P2 = P3 = 0xff;//单片机IO口初始化为1init_time0(); //初始化定时器init_ds1302(); //ds1302初始化init_1602(); //lcd1602初始化init_1602_dis_csf();//lcd1602初始化显示init_eeprom(); //开始初始化保存的数据temperature = read_temp();//先读出温度的值delay_1ms(650);temperature = read_temp();//先读出温度的值while(1){key(); //按键程序if(key_can < 10){if(flag_beep_en == 0)//只有闹钟关了的时候才能进入设置key_with();else{flag_beep_en = 0;//按下任意键可关闭闹钟beep = 1;clock_value = 0;read_time();}if(menu_1 == 0){if(key_can == 4) //减键{flag_nl = ~flag_nl; //切换农历和阳历的显示标志位if(flag_nl == 0)write_string(2,0,"2013");elsewrite_string(2,0,"N ");}}}if(flag_200ms == 1){flag_200ms = 0;if(menu_1 == 0){read_time(); //读时间temperature = read_temp(); //先读出温度的值init_1602_ds1302();//显示时钟}}menu_dis(); //闹钟报警函数delay_1ms(1);}}/**************定时器0中断程序*****************/void time0() interrupt 1{static uchar value;TH0 = 0X3C;TL0 = 0XB0; //50msvalue ++;if((value % 2) == 0) //100msflag_100ms = 1;if(value >= 6)//200ms{value = 0;flag_200ms = 1;}}。
C++经典新手源程序30例1//C++学了半年了,为方便和我一样的小菜,自学者练习,把自己做的一些程序发出来,希望对大家有用!1、输入一元二次方程的系数,求方程的解#include<iostream>#include<cmath>using namespace std;void main(){cout<<"请输入方程的系数"<<endl;double a,b,c,x1,x2;cin>>a>>b>>c;if (((b*b)-(4*a*c))<0)cout<<"无解"<<endl;else{cout<<"x1="<<(-b+sqrt(b*b-4*a*c))/(2*a)<<endl;cout<<"x2="<<(-b-sqrt(b*b-4*a*c))/(2*a)<<endl;}}********************************************************************* ********************************************************2、编程实现函数关系.#include<iostream>using namespace std;void main(){cout<<"请输入x"<<endl;double x,y;cin>>x;{if (x <= -1)y=x-1;else if (x>2 && x<=10)y=2-x;elsey=x*(x+2);}cout<<"y="<<y<<endl;}********************************************************************* ********************************************************3、根据历法,凡是1、3、5、7、8、10、12月,每月31天,凡是4,6,9,11月,每月30天,2月闰年29天,平年28天。
一:小牛问题#include <iostream>using namespace std;long int fun(int n);//声明fun函数void main(void){int n;cout <<"intput the years:";cin>>n;cout<<"cows sum="<<fun(n);}long int fun (int n)//从第一年开始算{long int i_born=1;//满一周岁的牛的数目,下面的类似long int ii_born=0;long int iii_born=0;long int iv_born=0;long int can_born=0;//今年能生产的牛的数目long int sum=1;for(int i=1;i<n;i++){can_born +=iv_born;//从四岁的母牛可以生小牛了sum +=can_born;iv_born=iii_born;iii_born=ii_born;ii_born=i_born;i_born=can_born;}return sum;}二:九九表// 九九表.cpp : Defines the entry point for the console application.//#include <iostream>using namespace std;int main(){int i,j;for(i=1;j<=9;i++){for(j=1;j<=i;j++)cout<<" "<<j<<"X"<<i<<"="<<j*i;cout<<endl;}cout<<endl;return 0;}三:杨辉三角:// 三角.cpp : Defines the entry point for the console application.//#include <iostream.h>void main(){int i,j,n;int a[20][20];cout<<"input num:";cin>>n;for (i=0;i<n;i++){a[i][0]=1;a[i][i]=1;}for (i=2;i<n;i++){for (j=1;j<i;j++){a[i][j]=a[i-1][j-1]+a[i-1][j];}}for (i=0;i<n;i++){for (int m=0;m<2*(n-i);m++){cout<<' ';}for (j=0;j<=i;j++){cout.width(4);cout<<a[i][j];}cout<<endl;}}四:长方体体积#include<iostream>using namespace std;class Box{public:void SetParameter(int l,int w,int d) {cin>>l>>w>>d;width=w;length=l;depth=d;}int Volume(){return width*length*depth;}void DispInfo(){cou<<"Box:"<<length<<"宽:"<<width<<"深:"<<depth<< endl;}private:int width,length,depth;};int main(){Box A;int l,w,d;A.SetParameter(l,w,d);A.DispInfo();cout<<"体积为:"<<A.Volume()<<endl;system("pause");return 0;}五:中奖第三章.#include<iostream>using namespace std; int main(){int ticket_number=0;cout<<"请输入你的彩票号码:";cin>>ticket_number;switch(ticket_number){case 888:cout<<"恭喜你中了一等奖!"; break;case 188:cout<<"恭喜你中了二等奖!"; break;case 105:cout<<"恭喜你中了三等奖!"; break;default:cout<<"抱歉,你没有中奖!"; }return 0;}六:拳击游戏:#include "stdafx.h"#include<iostream>using namespace std;class poser{public:virtual void beat()const{cout<<"一般选手的力量为260镑"<<endl;}protected:int age;};class Ali:public poser{public:void beat()const{cout<<"阿里一拳的力量为420镑"<<endl;}};class Lewis:public poser{public:void beat()const{cout<<"刘易斯一拳的力量为480镑"<<endl;}};class Tyson:public poser{public:void beat()const{cout<<"泰森一拳的力量为500镑"<<endl;}};class Holy:public poser{public:void beat()const{cout<<"霍利菲尔德一拳的力量为350镑"<<endl;}};int main(){poser *p[5];poser *p1;int i,choice;for (i=0;i<5;i++){cout<<"(1)阿里(2)刘易斯(3)泰森(4)霍利菲尔德:";cin>>choice;switch(choice){case 1:p1=new Ali;break;case 2:p1=new Lewis;break;case 3:p1=new Tyson;break;case 4:p1=new Holy;break;default:p1=new poser;break;}p[i]=p1;p[1]->beat();}return 0;}。
如何使用本书源程序
1、开发及运行环境
本书源程序都是在Windows Server 2003下开发的,程序测试环境为Windows Server 2003。
用户只有在Windows Server 2003下正确配置程序所需的运行环境后,才可以使用本书中的源程序。
软件开发平台如下:
操作系统:Windows 2000 Server、Windows XP、Windows Server 2003;
开发工具:Eclipse;
数据库:SQL Server 2000;
开发工具包:JDK 1.6。
分辨率:最佳效果1024×768。
2、源程序使用方法
(1)需要安装Eclipse、JDK1.5、Tomcat 6.0、SQL Server 2000。
(2)本书中实例程序的数据库都存放在章节路径下的database文件夹中。
(3)在运行第11章的示例时,需要将msbase.jar、mssqlserver.jar和msutil.jar3个SQL Server 2000数据库驱动包引入Eclipse工程,引入方法如下:
1)首先选中工程名称,并单击鼠标右键;然后在弹出的快捷菜单中依次单击“新建”->“文件夹”项;最后在打开的窗口中输入文件夹名称“lib”。
2)将三个驱动包拷贝到“lib”文件夹。
3)首先选中三个驱动包,并单击鼠标右键;然后在弹出的快捷菜单中依次单击“构件路径”->“添加至构件路径”项,即完成了引入驱动包的操作。
– 1 –。
源程序是什么源程序是计算机程序的初始版本,是一种用特定的计算机语言编写的文本文件。
它包含了程序员使用编程语言编写的一系列指令和逻辑,用于告诉计算机如何执行特定的任务。
在计算机科学领域,源程序是开发软件的基础。
在本文中,我们将讨论源程序的定义、类型、作用以及与其他相关概念的区别。
源程序的定义源程序是根据某种特定的编程语言编写的计算机程序,是程序员用来表达计算机指令和逻辑的一种形式。
它是人类可读的文本文件,通常使用扩展名来标识其所使用的语言,例如C语言使用.c扩展名,Java语言使用.java扩展名等。
源程序由程序员创建,其中包含一系列的代码语句,定义了程序的行为、功能和逻辑。
源程序的类型源程序可以根据使用的编程语言进行分类。
目前,有许多不同的编程语言可供选择,例如C、C++、Java、Python等。
每种编程语言都具有不同的语法和语义规则,但它们都提供了一种方法来编写源程序。
每种编程语言都有其独特的特点和用途,适用于不同的应用领域。
源程序的作用源程序是开发软件的基础,它描述了计算机程序的行为和功能。
通过编写源程序,程序员可以实现特定任务的逻辑,并将其翻译成机器可以理解和执行的形式。
源程序通过编译器或解释器进行翻译和执行,最终生成可执行文件或在解释器环境中运行。
源程序的编写过程是软件开发中的重要环节。
在编写源程序之前,程序员需要了解所使用的编程语言的基本语法、数据类型、算法和逻辑结构。
他们需要考虑程序的设计目标、用户需求和系统约束,并选择合适的算法和数据结构。
源程序的编写需要程序员具备良好的编程技巧和逻辑思维,以及对所开发的应用领域的深入理解。
源程序与机器语言的关系源程序通常是以人类可读的形式编写的,而机器语言是计算机可以直接理解和执行的形式。
为了将源程序转化为机器语言,程序员需要使用编译器或解释器。
编译器将源程序一次性地转换为机器语言,并生成可执行文件。
解释器则将源程序一行一行地解释执行,无需生成可执行文件。
c++基础源程序。
初学必看常见问题的C++程序示例(1—10例)【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
2.程序源代码:#include <iostream>using namespace std;void main(){int i,j,k,sum=0;for(i=1;i<5;i++)for(j=1;j<5;j++)for (k=1;k<5;k++)if (i!=k&&i!=j&&j!=k){cout<<i<<j<<k<<endl;sum+=1;}cout<<"共有这样的数:"<<sum<<endl;}============================================================== 【程序2】题目:企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?1.程序分析:请利用数轴来分界,定位。
C语⾔对源程序处理的四个步骤:预处理、编译、汇编、链接——预处理篇预处理1)预处理的基本概念C语⾔对源程序处理的四个步骤:预处理、编译、汇编、链接。
预处理是在程序源代码被编译之前,由预处理器(Preprocessor)对程序源代码进⾏的处理。
这个过程并不对程序的源代码语法进⾏解析,但它会把源代码分割或处理成为特定的符号为下⼀步的编译做准备⼯作。
2)预编译命令C编译器提供的预处理功能主要有以下四种:1)⽂件包含 #include2)宏定义 #define3)条件编译 #if #endif ..4)⼀些特殊作⽤的预定义宏a、⽂件包含处理1)⽂件包含处理⽂件包含处理”是指⼀个源⽂件可以将另外⼀个⽂件的全部内容包含进来。
C语⾔提供了#include命令⽤来实现“⽂件包含”的操作。
2)#include< > 与 #include ""的区别" "表⽰系统先在file1.c所在的当前⽬录找file1.h,如果找不到,再按系统指定的⽬录检索。
< >表⽰系统直接按系统指定的⽬录检索。
注意:1. #include <>常⽤于包含库函数的头⽂件2. #include " "常⽤于包含⾃定义的头⽂件 (⾃定义的头⽂件常⽤“ ”,因为使⽤< >时需要在系统⽬录检索中加⼊⾃定义头⽂件的绝对地址/相对地址否则⽆法检索到该⾃定义的头⽂件,编译时会报错)3. 理论上#include可以包含任意格式的⽂件(.c .h等) ,但我们⼀般⽤于头⽂件的包含。
b、宏定义1)基本概念在源程序中,允许⼀个标识符(宏名)来表⽰⼀个语⾔符号字符串⽤指定的符号代替指定的信息。
在C语⾔中,“宏”分为:⽆参数的宏和有参数的宏。
2)⽆参数的宏定义#define 宏名 字符串例: #define PI 3.141926在编译预处理时,将程序中在该语句以后出现的所有的PI都⽤3.1415926代替。
..汇编语言源程序的运行过程一、概述二、具体操作过程1.编辑过程在计算机“附件”的“记事本”中,用word 编辑汇编语言源程序,比用编辑程序EDLIN 要方便得多。
因为使用后者,必须熟记它的各种命令及其功能。
使用前者的操作步骤如下:第一步:编辑并建立扩展名为ams 的文件开始→程序→附件→记事本→键入汇编语言源程序(也可用Ctrl+C 及Ctrl+V 拷贝已有程序)→文件→另存为→出现“另存为”窗口→在‘文件名:’处为该文件命名,并切记:将扩展名由.txt 改为.asm →在“另存为”窗口里的“我的电脑”中找到含有MASM.EXE 、LINK.EXE 以及DEBUG.EXE 这三个工具的文件夹(如,8086experi ),并双击之→该文件夹名便出现在“保存在:”处→保存(至此,该文件夹中将出现你所编辑的扩展名为asm 的汇编语言源程序。
此时的源程序以ASCII 码形式存盘,而非机器码)→关闭记事本。
注意:上述三个工具及用户程序必须在同一文件夹中。
此后,为显示,打印或修改该程序,双击该程序的图标即可。
第二步:在DOS 下运行EDLIN ,以便查找并排除源程序中可能存在的语法错误。
window 状态→开始→运行→打开:cmd ↙→确定→出现DOS 提示符:C:\……>→指定存有你的程序的文件夹所在盘(如D 盘)为当前盘 D: ↙→D:\>cd 文件夹名↙→在DOS 管理下键入源程序编辑程序 无语法错误的汇编语言调试过程D:\文件夹名>edlin 文件名.asm ↙End of input file* E ↙按结束编辑命令E 之前,生成了一个扩展名为$$$的文件;结束编辑状态之后,该文件的扩展名由$$$变为BAK 。
特别指出:即使不用EDLIN 进行编辑,也必须进行此步。
否则,若源程序中存在语法错误,下一步进行汇编后,不予提示,也不生成机器码文件,无法进行再下一步的连接,致使程序无法运行。
C语言经典源程序100例1. Hello, World!这是C语言中最基本的程序,用于显示"Hello, World!"。
```c#include <stdio.h>int main() {printf("Hello, World!\n");return 0;}```2. 计算两数之和这个程序用于计算两个整数的和,并将结果输出。
```c#include <stdio.h>int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d %d", &num1, &num2);sum = num1 + num2;printf("两数之和为:%d\n", sum);return 0;}```3. 判断奇偶数这个程序用于判断一个整数是奇数还是偶数。
```c#include <stdio.h>int main() {int num;printf("请输入一个整数:");scanf("%d", &num);if (num % 2 == 0) {printf("该数是偶数。
\n");} else {printf("该数是奇数。
\n");}}```4. 求输入数字的平均值这个程序用于求输入数字的平均值。
```c#include <stdio.h>int main() {int count, i;double num, sum = 0.0, average;printf("请输入数字的个数:");scanf("%d", &count);printf("请输入这 %d 个数字:\n", count); for (i = 0; i < count; i++) {scanf("%lf", &num);sum += num;}average = sum / count;printf("平均值为:%lf\n", average);}```5. 判断闰年这个程序用于判断一个年份是否为闰年。
正弦波的源程序:(一),用到的函数1,f2t函数function x=f2t(X)global dt df t f T N%x=f2t(X)%x为时域的取样值矢量%X为x的傅氏变换%X与x长度相同并为2的整幂%本函数需要一个全局变量dt(时域取样间隔) X=[X(N/2+1:N),X(1:N/2)];x=ifft(X)/dt;end2,t2f函数。
function X=t2f(x)global dt df N t f T%X=t2f(x)%x为时域的取样值矢量%X为x的傅氏变换%X与x长度相同,并为2的整幂。
%本函数需要一个全局变量dt(时域取样间隔) H=fft(x);X=[H(N/2+1:N),H(1:N/2)]*dt;end(二),主程序。
1,%(1)绘出正弦信号波形及频谱global dt df t f Nclose allk=input('取样点数=2^k, k取10摆布');if isempty(k), k=10; endf0=input('f0=取1(kz)摆布');if isempty(f0), f0=1; endN=2^k;dt=0.01; %msdf=1/(N*dt); %KHzT=N*dt; %截短期Bs=N*df/2; %系统带宽f=[-Bs+df/2:df:Bs]; %频域横坐标t=[-T/2+dt/2:dt:T/2]; %时域横坐标s=sin(2*pi*f0*t); %输入的正弦信号S=t2f(s); %S是s的傅氏变换a=f2t(S); %a是S的傅氏反变换a=real(a);as=abs(S);subplot(2,1,1) %输出的频谱plot(f,as,'b');gridaxis([-2*f0,+2*f0,min(as),max(as)])xlabel('f (KHz)')ylabel('|S(f)| (V/KHz)') %figure(2)subplot(2,1,2)plot(t,a,'black') %输出信号波形画图gridaxis([-2/f0,+2/f0,-1.5,1.5])xlabel('t(ms)')ylabel('a(t)(V)')gtext('频谱图')最佳基带系统的源程序:(一),用到的函数f2t函数和t2f函数。
源程序(带注释)#include "stdio.h"#include "stdlib.h"#include "string.h"#define MAX 3 /*车库容量*/#define price 0.05 /*每车每分钟费用*/ typedef struct time{int hour;int min;}Time; /*时间结点*/typedef struct node{char num[10];Time reach;Time leave;}CarNode; /*车辆信息结点*/typedef struct NODE{CarNode *stack[MAX+1];int top;}SeqStackCar; /*模拟车站*/typedef struct car{CarNode *data;struct car *next;}QueueNode;typedef struct Node{QueueNode *head;QueueNode *rear;}LinkQueueCar; /*模拟通道*/void InitStack(SeqStackCar *); /*初始化栈*/int InitQueue(LinkQueueCar *); /*初始化便道*/int Arrival(SeqStackCar *,LinkQueueCar *); /*车辆到达*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*车辆离开*/void List(SeqStackCar,LinkQueueCar); /*显示存车信息*/ void main(){SeqStackCar Enter,Temp;LinkQueueCar Wait;int ch;InitStack(&Enter); /*初始化车站*/InitStack(&Temp); /*初始化让路的临时栈*/InitQueue(&Wait); /*初始化通道*/while(1){printf("***************************************");printf("\n1.the car arrive");printf("\t2.the car leave");printf("\n\n\n3.the schedule");printf("\t\t4.out\n");printf("***************************************\n"); while(1){scanf("%d",&ch);if(ch>=1&&ch<=4) break;else printf("\n please choose:1|2|3|4.");}switch (ch){case 1:Arrival(&Enter,&Wait);break; /*车辆到达*/case 2:Leave(&Enter,&Temp,&Wait);break; /*车辆离开*/ case 3:List(Enter,Wait);break; /*列表打印信息*/case 4:exit(0); /*退出主程序*/default:break;}}}void InitStack(SeqStackCar *s) /*初始化栈*/{int i;s->top=0;for(i=0;i<=MAX;i++)s->stack[s->top]=NULL;}int InitQueue(LinkQueueCar *Q) /*初始化便道*/{Q->head->next=NULL;Q->rear=Q->head;return(1);}void PRINT(CarNode *p) /*打印出栈车的信息*/{int room;int A1,A2,B1,B2;printf("\n please input the depart time: ");scanf("%d:%d",&(p->leave.hour),&(p->leave.min));printf("\n the number of the car:");puts(p->num);printf("\n the time the car arrive:%d:%d",p->reach.hour,p->reach.min);printf("thedeparttime:%d:%d",p->leave.hour,p->leave.min);A1=p->reach.hour;A2=p->reach.min;B1=p->leave.hour;B2=p->leave.min;printf("\nthefee:%2.1fyuan",((B1-A1)*60+(B2-A2))*price) ;free(p);}int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*车辆到达*/{CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode));flushall();printf("\n input the number of the car:");gets(p->num);if(Enter->top<MAX) /*车场未满,车进车场*/{Enter->top++;/* printf("\n the place of the car:",Enter->top); */ printf("\n the time the car arrive:");scanf("%d:%d",&(p->reach.hour),&(p->reach.min));Enter->stack[Enter->top]=p;return(1);}else /*车场已满,车进便道*/{printf("\n gai che xu zai bian dao dengdai!\n");t=(QueueNode *)malloc(sizeof(QueueNode));t->data=p;t->next=NULL;W->rear->next=t;W->rear=t;return(1);}}void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W){ /*车辆离开*/int i,room;CarNode *p,*t;QueueNode *q;/*判断车场内是否有车*/if(Enter->top>0) /*有车*/{while(1) /*输入离开车辆的信息*/{printf("\n qing shuru che zai chechang de weizhi/1--%d/:",Enter->top);scanf("%d",&room);if(room>=1&&room<=Enter->top)break;}while(Enter->top>room) /*车辆离开*/{Temp->top++;Temp->stack[Temp->top]=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;}p=Enter->stack[Enter->top];Enter->stack[Enter->top]=NULL;Enter->top--;while(Temp->top>=1){Enter->top++;Enter->stack[Enter->top]=Temp->stack[Temp->top];Temp->stack[Temp->top]=NULL;Temp->top--;}PRINT(p);/*判断通道上是否有车及车站是否已满*/if((W->head!=W->rear)&&Enter->top<MAX) /*便道的车辆进入车场*/{q=W->head->next;t=q->data;Enter->top++;printf("\n biandao de %s haoche jinru chechang di %d weizhi",t->num,Enter->top);/* printf("\n qing shuru xianzai de shijian:"); */scanf("%d:%d",&(t->reach.hour),&(t->reach.min));W->head->next=q->next;if(q==W->rear)W->rear=W->head;Enter->stack[Enter->top]=t;free(q);}else printf("]n biandaoli meiyou che. \n");}else printf("chechangli meiyou che."); /*没车*/}void List1(SeqStackCar *S) /*列表显示车场信息*/{ int i;if(S->top>0) /*判断车站内是否有车*/{printf("\n chechang:");printf("\n weizhi daodashijian chepaihao\n");for(i=1;i<=S->top;i++){printf("%d",i);printf("%d:%d",S->stack[i]->reach.hour,S->stack[i]->rea ch.min);puts(S->stack[i]->num);}}else printf("\n chechangli meiyou che");}void List2(LinkQueueCar *W) /*列表显示便道信息*/{QueueNode *p;p=W->head->next;if(W->head!=W->rear) /*判断通道上是否有车*/{printf("\n dengdai chelian de haoma wei:");while(p!=NULL){puts(p->data->num);p=p->next;}}else printf("\n biandaoli meiyou che.");}void List(SeqStackCar S,LinkQueueCar W){int flag,tag;flag=1;while(flag){printf("\n qingxuanze 1|2|3:");printf("\n 1.chechang\n 2.biandao\n 3.fanhui\n"); while(1){scanf("%d",&tag);if(tag>=1||tag<=3)break;else printf("\n qingxuanze 1|2|3:");}switch(tag){case 1:List1(&S);break; /*列表显示车场信息*/case 2:List2(&W);break; /*列表显示便道信息*/case 3:flag=0;break;default:break;}}}。
#include"stdio.h"#include"stdlib.h"#include"string.h"#include"time.h"#define SIZE 20000intc1=0,m1=0,c2=0,m2=0,c3=0,m3=0,c4=0,m4=0,c5=0,m5=0,c6=0,m6=0,c7=0,m7=0,c8=0,m8=0,n ;//c,m为记录关键字比较和移动的次数typedef struct{int key;}ElemType;typedef struct{ElemType *elem;int length;}SqList;void addlist(SqList &L)//初始化顺序表{printf("请输入你要输入的个数:");scanf("%d",&n);while(n>20000){printf("超出范围(应小于20000),请重新输入\n");printf("请输入你要输入的个数:");scanf("%d",&n);}L.elem=(ElemType*)malloc(SIZE*sizeof(ElemType));if(!L.elem) exit(0);}void random(SqList &L)//随机数产生程序{int i,first=1;L.length=0;if(first){srand(time(0));first=0;}for(i=1;i<n+1;i++) //使输入相同个数时;每次产生的随机数不同{L.elem[i].key=rand();while(L.elem[i].key>20000){L.elem[i].key=rand();}++L.length;}}void memory(SqList &M,SqList &L)//记录L,使每个排序算法都用一组相同的随机数{int i;M.length=0;for(i=1;i<n+1;i++){M.elem[i].key=L.elem[i].key;++M.length;}}/***************冒泡排序***************/void BubbleSort(SqList &L){int i,j;for(i=1;i<L.length;i++){for(j=1;j<L.length-i+1;j++){c1++;if(L.elem[j].key>L.elem[j+1].key){L.elem[0].key=L.elem[j].key;L.elem[j].key=L.elem[j+1].key;L.elem[j+1].key=L.elem[0].key;m1+=3;}}}}/***************直接插入排序***************/void InsertSort(SqList &L){int i,j;for(i=2;i<=L.length;i++){if(L.elem[i].key<L.elem[i-1].key){L.elem[0].key=L.elem[i].key;m2++;j=i-1;c2++;while(L.elem[0].key<L.elem[j].key){L.elem[j+1].key=L.elem[j].key;j--;m2++;c2++;}L.elem[j+1].key=L.elem[0].key;m2++;}}}/***************简单选择排序***************/ void SelectSort(SqList &L){int i,j,k;for(i=1;i<L.length;i++){k=i;for(j=i+1;j<L.length;j++){c3++;if(L.elem[j].key<L.elem[k].key) k=j;}if(i!=k){L.elem[0].key=L.elem[i].key;L.elem[i].key=L.elem[k].key;L.elem[k].key=L.elem[0].key;m3+=3;}}}/***************快速排序***************/int Partition(SqList &L,int low,int high){int pivotkey;m4++;pivotkey=L.elem[low].key;while (low<high){m4++;while(low<high&&L.elem[high].key>=pivotkey)--high;L.elem[low]=L.elem[high];c4++;m4++;while (low<high&&L.elem[low].key<=pivotkey)++low;L.elem[high]=L.elem[low];c4++;m4++;}L.elem[low]=L.elem[0];m4++;return low;}void QSort(SqList &L,int low,int high){//对顺序表的子序列作快速排序int pivotloc;if(low<high){pivotloc=Partition(L,low,high);QSort(L,low,pivotloc-1);QSort(L,pivotloc+1,high);}}void QuickSort(SqList &L){//对顺序表L作快速排序QSort(L,1,L.length);}/***************希尔排序***************/void ShellPass(SqList &L,int d){//希尔排序中的一趟排序,d为当前增量int i,j;for(i=d+1;i<=n;i++) //将L.elem[d+1..n]分别插入各组当前的有序区{if(L.elem[i].key<L.elem[i-d].key){j=i-d;m5++;do {//查找L.elem[i]的插入位置L.elem[j+d]=L.elem[j]; //后移记录m5++;c5++;j=j-d; //查找前一记录}while(j>0&&L.elem[0].key<L.elem[j].key);L.elem[j+d]=L.elem[0]; //插入L.elem[i]到正确的位置上m5++;}c5++;}}void ShellSort(SqList &L){do{L.length=L.length/2; //求下一增量ShellPass(L,L.length); //一趟增量为L.length的Shell插入排序}while(L.length>1);}/*****************堆排序*****************/void AdjustHeap(SqList &L, int hLen, int i){int left = 2*i; //节点i的左孩子int right = 2*i+1; //节点i的右孩子节点int largest = i;while(left < hLen || right < hLen){if (left < hLen && L.elem[largest].key < L.elem[left].key){largest = left;}c6++;if (right < hLen && L.elem[largest].key < L.elem[right].key){largest = right;}c6++;if (i != largest) //如果最大值不是父节点{L.elem[0]= L.elem[largest]; //交换父节点和和拥有最大值的子节点交换L.elem[largest] = L.elem[i];L.elem[i] = L.elem[0];m6+=3;i = largest; //新的父节点,以备迭代调堆left = 2*i; //新的子节点right = 2*i+1;}else{break;}}}void BuildHeap(SqList &L, int hLen) //建堆{int i;int begin=hLen/2; //最后一个非叶子节点for (i = begin; i >= 0; i--){AdjustHeap(L, hLen, i);}}void HeapSort(SqList &L){int hLen=L.length;BuildHeap(L, hLen); //建堆while (hLen >= 1){L.elem[0]=L.elem[hLen]; //交换堆的第一个元素和堆的最后一个元素L.elem[hLen]=L.elem[1];L.elem[1]=L.elem[0];m6+=3;hLen--; //堆的大小减一AdjustHeap(L, hLen, 1); //调堆}}/***************折半插入排序***************/void BInsertSort(SqList &L){int i,low,high,m,j;for(i=2;i<=L.length;++i){L.elem[0]=L.elem[i];c7++;m7++;low=1;high=i-1;while(low<=high){m=(low+high)/2;if(L.elem[0].key<L.elem[m].key)high=m-1;else low=m+1;c7++;}for(j=i-1;j>=high+1;--j){L.elem[j+1]=L.elem[j];m7++;}L.elem[high+1]=L.elem[0];m7++;}}/*****************归并排序*****************/ void merge(SqList &L,SqList &L1,int low,int mid,int high) {int i,j,k;i=low;j=mid+1;k=low;while((i<=mid)&&(j<=high)){if(L.elem[i].key<=L.elem[j].key)L1.elem[k++]=L.elem[i++];elseL1.elem[k++]=L.elem[j++];c8++;m8++;}while(i<=mid){L1.elem[k++]=L.elem[i++];m8++;}while(j<=high){L1.elem[k++]=L.elem[j++];m8++;}}void mergepass(SqList &L,SqList &L1,int l){int i,j;i=0;while(i+2*l-1<L.length){merge(L,L1,i,i+l-1,i+2*l-1);i=i+2*l;}if((i+l-1)<(L.length-1))merge(L,L1,i,i+l-1,L.length-1);elsefor(j=i;j<L.length;j++)L1.elem[j++]=L.elem[j++];}void MergeSort(SqList &L){SqList L1;L1.elem=(ElemType*)malloc(SIZE*sizeof(ElemType));int l;l=1;while(l<L.length){mergepass(L,L1,l);l=2*l;mergepass(L1,L,l);l=2*l;}free(L1.elem);}void main(){printf(" ---------------------------------内部排序算法比较-----------------------------\n");printf("************************************欢迎使用***********************************\n");printf("**********************************(1)运行程序**********************************\n");printf("**********************************(0)退出系统**********************************\n");while(1){FILE *fp;SqList L,M;int choose,i;M.elem=(ElemType*)malloc(SIZE*sizeof(ElemType));if(!M.elem)exit(0);printf("请选择:");scanf("%d",&choose);switch(choose){case 1:addlist(L);random(L);fp=fopen("f:\\input.txt", "w+");//将产生的随机数存到文件open.txt中if(fp==NULL){printf("文件打开失败\n");fclose(fp);exit(1);}for(i=1;i<=L.length;i++){fprintf(fp,"%-10d",L.elem[i].key);if(i%10==0)fprintf(fp,"\n");}fprintf(fp,"\n\n");fclose(fp);memory(M,L);BubbleSort(M);memory(M,L);InsertSort(M);memory(M,L);SelectSort(M);memory(M,L);QuickSort(M);memory(M,L);ShellSort(M);memory(M,L);HeapSort(M);memory(M,L);BInsertSort(M);memory(M,L);MergeSort(L);printf(" *********比较次数**********移动次数*********\n");printf("冒泡排序:%10d %10d\n",c1,m1);printf("直接插入:%10d %10d\n",c2,m2);printf("简单选择: %10d %10d\n",c3,m3);printf("快速排序: %10d %10d\n",c4,m4);printf("希尔排序: %10d %10d\n",c5,m5);printf("堆排序:%10d %10d\n",c6,m6);printf("折半插入: %10d %10d\n",c7,m7);printf("归并排序: %10d %10d\n",c8,m8);if((fp=fopen("f:\\out.txt","w+"))==NULL)//各个算法的关键字比较次数和关键字移动次数保存到Out.txt文件中{printf("文件打开失败\n");fclose(fp);exit(1);}fprintf(fp," *********比较次数**********移动次数*********\n");fprintf(fp,"冒泡排序:%10d %10d\n",c1,m1);fprintf(fp,"直接插入:%10d %10d\n",c2,m2);fprintf(fp,"简单选择: %10d %10d\n",c3,m3);fprintf(fp,"快速排序: %10d %10d\n",c4,m4);fprintf(fp,"希尔排序: %10d %10d\n",c5,m5);fprintf(fp,"堆排序: %10d %10d\n",c6,m6);fprintf(fp,"折半插入: %10d %10d\n",c7,m7);fprintf(fp,"归并排序: %10d %10d\n",c8,m8);fprintf(fp,"\n\n");fclose(fp);c1=0;m1=0;c2=0;m2=0;c3=0;m3=0;c4=0;m4=0;c5=0;m5=0;c6=0;m6=0;c7=0;m7=0;c8=0;m8=0;break;case 0:printf("谢谢使用\n");exit(0);break;default:printf("输入有问题,请重新输入!\n");}}}。
源程序,是指未经编译的,按照一定的程序设计语言规范书写的,人类可读的文本文件。
源程序可以是以书籍或者磁带或者其他载体的形式出现,但最为常用的格式是文本文件,这种典型格式的目的是为了编译出计算机可执行的程序。
将人类可读的程序代码文本翻译成为计算机可以执行的二进制指令,这种过程叫做编译,由各种编译器来完成。
目标程序为源程序经编译可直接被计算机运行的机器码集合,在计算机文件上以.obj作扩展名----由语言处理程序(汇编程序,编译程序,解释程序)将源程序处理(汇编,编译,解释)成与之等价的由机器码构成的,计算机能够直接运行的程序,该程序叫目标程序。
汇编程序,是把汇编语言书写的程序翻译成与之等价的机器语言程序的翻译程序。
汇编程序输入的是用汇编语言书写的源程序,输出的是用机器语言表示的目标程序。
翻译程序是一种系统程序,它将计算机编程语言编写的程序翻译成另外一种计算机语言的一般来说等价的程序,主要包括编译程序和解释程序,汇编程序也被认为是翻译程序。
程序的最初形式称为源程序或者源代码,翻译后的形式被称为目标程序或者目标代码。
大多数翻译程序是将高级语言编写的程序翻译为机器语言形式的可执行程序。
但是也有些翻译程序将源程序翻译成其他高级语言或者字节码等中间形式。
解释程序,专业术语,是指按照源程序的指令或语句的动态执行顺序,逐条或逐句翻译并立即执行的翻译程序。
解释程序的特点是把源程序直接翻译成加工输入数据,产生所求的动作,而不是产生目标语言形式的目标程序。