源程序1
- 格式:doc
- 大小:37.50 KB
- 文档页数:4
C语言程序设计<一>1、程序运行从main()函数开始,也从main()函数结束。
2、函数是C程序的基本单位,由函数头和函数体组成。
3、C语言源程序是由函数组成,它们的数目可以有多个。
4、在C语言源程序中,是必须有一个函数名为main的函数。
main()后的小括号()没有任何内容,它不可以省略。
5、C程序中的语句用分号结束,在一个程序行上可以有多个语句,一个C 语句能写在多个程序行上。
6、函数体是由一对大括号围起来语句序列组成。
小括号是函数的标志。
二、C语言的组成元素1、命令、函数和变量等是组成程序的基本对象,每一个程序对象都需要一个名字来标识,程序对象的名称就是标识符。
2、在C语言中,标识符分为用户标识符和系统标识符。
3、用户标识符是指在程序中由程序员为变量、函数、数组等程序对象自行命名的标识符。
4、系统标识符是指C语言编译系统内部预定义的用于表示命令数据内型的标识符,又称保留字符。
5、基本字符集英文字母:a~z和A~Z。
阿拉伯数字:0~9。
其他字符:()、[ ]、+、-、*、/、%、<、>、<=、>=、==、!=、!、&&、‖、++、--、+=、-=、*=、/=、%=。
它们是由1~2个字符组成。
用作C语言的运算符;还包括:空格、换行符,回车符,单双引号,大括号,逗号,分号,反斜线,它们在程序中起到分隔和定界作用。
6、标识符:是用于标识命令;变量、函数,数组,数据类型等程序对象名称的字符序列。
7、组成标识符的合法字符有:字母,数字,下划线,三种,数字不能作首字符。
三、执行C语言程序1、单击“开始”——“程序”——“附件”——“命令提示符”。
2、按功能键<10>激活菜单,执行“File”——“NEW”(ALT+回车)全屏。
3、<F2>为保存,输入程序文件名。
4、<Ctrl>+<F9>运行有输入:等待输入→回车通过无输入:返回到编辑未通过:回车→F6→修改F3(打开)<二>一、对数据进行分类二、正确书写C语言中常量1、表示形式:小数形式:只有一个小数点,两边至少一边有数字。
int jumpx;//方向int idirec;//动画int iAniBegin;int iparam1;int iAniStyle;};#endif// bitmaptool.cpp// Finishing #include "stdafx.h"#include "bitmaptool.h"#include "gamemap.h"extern GAMEMAP gamemap;extern FILEREPORT f1;MYBITMAP::MYBITMAP(){}MYBITMAP::~MYBITMAP(){DeleteObject(hBm);}void MYBITMAP::Init(HINSTANCE hInstance,int iResource,int row,int col){BITMAP bm;inum=row;jnum=col;hBm=LoadBitmap(hInstance,MAKEINTRESOURCE(iResour ce));GetObject(hBm,sizeof(BITMAP),&bm);width=bm.bmWidth/inum;height=bm.bmHeight/jnum;}void MYBITMAP::SetDevice(HDC hdest,HDC hsrc,int wwin,int hwin){hdcdest=hdest;hdcsrc=hsrc;screenwidth=wwin;screenheight=hwin;}void MYBITMAP::Show(int x,int y){xpos=x;ypos=y;SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos,width,height,hdcsrc,0,0,SRCCOPY); }void MYBITMAP::ShowCenter(int y){xpos=(screenwidth-width)/2;ypos=y;SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos,width,height,hdcsrc,0,0,SRCCOPY); }void MYBITMAP::ShowLoop(int left,int top,int right,int bottom,int iframe){int i,j;SelectObject(hdcsrc,hBm);for(j=top;j<bottom;j+=height){for(i=left;i<right;i+=width){BitBlt(hdcdest,i,j,width,height,hdcsrc,iframe*width,0,SRCCO PY);}}}void MYBITMAP::ShowNoBack(int x,int y,int iFrame){xpos=x;ypos=y;SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,iFrame*width, height/2,SRCAND);BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,iFrame*width, 0,SRCPAINT);}void MYBITMAP::ShowNoBackLoop(int x,int y,int iFrame,int iNum){int i;xpos=x;ypos=y;SelectObject(hdcsrc,hBm);for(i=0;i<iNum;i++){BitBlt(hdcdest,xpos+i*width,ypos,width,height/2,hdcsrc,iFram e*width,height/2,SRCAND);BitBlt(hdcdest,xpos+i*width,ypos,width,height/2,hdcsrc,iFram e*width,0,SRCPAINT); }}void MYBITMAP::ShowAni(){/* if(!iStartAni)return;SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,framenow*wid th,height/2,SRCAND);BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,framenow*wid th,0,SRCPAINT);framenow++;//播放结束if(framenow>=inum)iStartAni=0;*/}void MYBITMAP::SetAni(int x,int y){xpos=x;ypos=y;/*framenow=0;iStartAni=1;*/}void MYBITMAP::SetPos(int istyle,int x,int y){switch(istyle){case BM_CENTER:xpos=(screenwidth-width)/2;ypos=y;break;case BM_USER:xpos=x;ypos=y;break;}}void MYBITMAP::Draw(DWORD dwRop){SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos,width,height,hdcsrc,0,0,dwRop);}void MYBITMAP::Stretch(int x,int y){SelectObject(hdcsrc,hBm);StretchBlt(hdcdest,xpos,ypos,width*x,height*y,hdcsrc,0,0,width,height,SRCCOPY);}void MYBITMAP::Stretch(int x,int y,int id){SelectObject(hdcsrc,hBm);StretchBlt(hdcdest,xpos,ypos,width*x,height*y,hdcsrc,0,id*height,width,height,SRCCOPY);}///////////////////////// bitmap object animation////////////////// MYBKSKY::MYBKSKY(){xseparate=0;}MYBKSKY::~MYBKSKY(){}void MYBKSKY::MoveTo(int x,int y){xpos=x;ypos=y;}void MYBKSKY::MoveRoll(int x){xseparate+=x;xseparate%=width;if(xseparate<0){xseparate=width;}}void MYBKSKY::DrawRoll(){SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos,width-xseparate,height,hdcsrc,xseparate,0,SRCCOPY);BitBlt(hdcdest,xpos+width-xseparate,ypos,xseparate,height,hdcsrc,0,0,SRCCOPY);}void MYBKSKY::DrawRollStretch(int x,int y){SelectObject(hdcsrc,hBm);StretchBlt(hdcdest,xpos,ypos,(width-xseparate)*x,height*y,hdcsrc,xseparate,0,width-xseparate,height,SRCCOPY);StretchBlt(hdcdest,xpos+(width-xseparate)*x,ypos, xseparate*x,height*y,hdcsrc,0,0,xseparate,height,SRCCOPY);}void MYBKSKY::DrawRollStretch(int x,int y, int id) {SelectObject(hdcsrc,hBm);StretchBlt(hdcdest,xpos,ypos,(width-xseparate)*x,height*y,hdcsrc,xseparate,id*height,width-xseparate,height,SRCCOPY);StretchBlt(hdcdest,xpos+(width-xseparate)*x,ypos, xseparate*x,height*y,hdcsrc,0,id*height,xseparate,height,SRCCOPY);}///////////////////////// bitmap role////////////////// MYROLE::MYROLE(){}MYROLE::~MYROLE(){}void MYROLE::MoveTo(int x,int y){xpos=x;ypos=y;}void MYROLE::MoveOffset(int x,int y){if(x==0 && y==0)return;if(!gamemap.RoleCanMove(x,y))return;xpos+=x;ypos+=y;if(xpos<minx)xpos=minx;if(xpos>maxx)xpos=maxx;}void MYROLE::MoveStepTo(int x,int y){if(xpos<x)xpos+=ROLE_STEP;if(ypos<y)ypos+=8;if(ypos>y)ypos=y;}// 去背显示void MYROLE::Draw(){if(iAniBegin){PlayAni();}else{SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,iFrame*width,height/2,SRCAND);BitBlt(hdcdest,xpos,ypos,width,height/2,hdcsrc,iFrame*width,0,SRCPAINT);}}void MYROLE::Draw(int x,int y,int frame){SelectObject(hdcsrc,hBm);BitBlt(hdcdest,x,y,width,height/2,hdcsrc,frame*width,height/2,SRCAND);BitBlt(hdcdest,x,y,width,height/2,hdcsrc,frame*width,0,SRCPAINT);}void MYROLE::InitRole(int xleft,int xright){iFrame=0;iState=0;maxx=xright;minx=xleft;jumpheight=0;movex=0;movey=0;jumpx=0;idirec=0;iAniBegin=0;}void MYROLE::SetLimit(int xleft,int xright){maxx=xright;minx=xleft;}void MYROLE::Move(){if(0 == movey){//水平移动MoveOffset(movex, 0);}else{//跳动MoveOffset(jumpx, 0);MoveOffset(0, movey);}//帧控制if(movex<0 && iFrame<3){iFrame=3;}if(movex>0 && iFrame>=3){iFrame=0;}if(movex!=0){if(0==idirec)iFrame=1-iFrame;elseiFrame=7-iFrame;}if(movey!=0){iFrame=idirec*3;}if(movey<0){//upjumpheight+=(-movey);//根据重力影响,加速度减慢if(movey<-1){movey++;}//到达顶点后向下落if(jumpheight >= JUMP_HEIGHT * 32){jumpheight = JUMP_HEIGHT * 32;movey=4;}}else if(movey>0){jumpheight -= movey;//根据重力影响,加速度增大movey++;}}void MYROLE::Jump(){//上升过程MoveOffset(0, -4);}void MYROLE::ChangeFrame(){}void MYROLE::SetState(int i){iState=i;}void MYROLE::SetAni(int istyle){ iAniStyle=istyle;iparam1=0;iAniBegin=1;}//是否正在播放动画int MYROLE::IsInAni(){ return iAniBegin;}void MYROLE::PlayAni(){switch(iAniStyle){case ROLE_ANI_DOWN:if(iparam1>31){break;}//人物下降动画SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos+iparam1,width,height/2-iparam1,hdcsrc,iFrame*width,height/2,SRCAND);BitBlt(hdcdest,xpos,ypos+iparam1,width,height/2-iparam1,hdcsrc,iFrame*width,0,SRCPAINT);iparam1++;break;case ROLE_ANI_UP:if(iparam1>31){break;}//人物上升动画SelectObject(hdcsrc,hBm);BitBlt(hdcdest,xpos,ypos+32-iparam1,width,iparam1,hdcsrc,iFrame*width,height/2,SRCAND);BitBlt(hdcdest,xpos,ypos+32-iparam1,width,iparam1,hdcsrc,iFrame*width,0,SRCPAINT);iparam1++;if(iparam1>31){iAniBegin=0; //动画结束}default:break;}}/////////////////////////////////// my animation ///////////////////// MYANIOBJ::MYANIOBJ(){memset(wlist, 0, sizeof(wlist));memset(hlist, 0, sizeof(hlist));memset(ylist, 0, sizeof(ylist));iframeplay=0;}MYANIOBJ::~MYANIOBJ(){}void MYANIOBJ::DrawItem(int x,int y,int id,int iframe){SelectObject(hdcsrc,hBm);BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdcsrc,iframe*wlist[id],ylist[id]+hlist[id],SRCAND);BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdcsrc,iframe*wlist[id],ylist[id],SRCPAINT);}void MYANIOBJ::DrawItemNoMask(int x,int y,int id,int iframe) {SelectObject(hdcsrc,hBm);BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdcsrc,iframe*wlist[id],ylist[id],SRCCOPY);}void MYANIOBJ::DrawItemNoMaskWidth(int x,int y,int id,int w,int iframe){SelectObject(hdcsrc,hBm);BitBlt(hdcdest,x,y,w,hlist[id],hdcsrc,iframe*wlist[id],ylist[id],SRCCOPY);}void MYANIOBJ::PlayItem(int x,int y,int id){SelectObject(hdcsrc,hBm);BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdcsrc,iframeplay*wlist[id],ylist[id]+hlist[id],SRCAND);BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdcsrc,iframeplay*wlist[id],ylist[id],SRCPAINT);iframeplay=(iframeplay+1)%2;}void MYANIOBJ::InitAniList(int *pw,int *ph,int inum,int ismask) {int i;memcpy(wlist, pw, inum*sizeof(int));memcpy(hlist, ph, inum*sizeof(int));ylist[0]=0;for(i=1;i<inum;i++){//如果是mask,两张图片的间隔高度要乘以2ylist[i]=ylist[i-1]+hlist[i-1]*(ismask+1);}}void MYANIOBJ::InitAniList(int style,int a, int b){int i;switch(style){case BM_SQUARE:// a : 数量, b: 边长for(i=0;i<a;i++){wlist[i]=b;hlist[i]=b;ylist[i]=i*b;}break;default:break;}}/////////////////////////////////// my animation magic///////////////////// MYANIMAGIC::MYANIMAGIC(){memset(wlist, 0, sizeof(wlist));memset(hlist, 0, sizeof(hlist));memset(ylist, 0, sizeof(ylist));}MYANIMAGIC::~MYANIMAGIC(){}void MYANIMAGIC::DrawItem(int x,int y,int id,int iframe) {SelectObject(hdcsrc,hBm);BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdcsrc,iframe*wlist[id],ylist[id]+hlist[id],SRCAND);BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdcsrc,iframe*wlist[id],ylist[id],SRCPAINT);/*//先在临时DC上画出效果总图BitBlt(hdctemp,0,0,wlist[id],hlist[id],hdcsrc,0,ylist[id],SRCCOPY);//用MASK图作裁剪BitBlt(hdctemp,0,0,wlist[id],hlist[id],hdcsrc,iframe*wlist[id],ylist[id],SRCPAINT);//最后画到屏幕上BitBlt(hdcdest,x,y,wlist[id],hlist[id],hdctemp,0,0,SRCPAINT);*/}//带MASKvoid MYANIMAGIC::InitAniList(int *pw,int *ph,int inum) {int i;memcpy(wlist, pw, inum*sizeof(int));memcpy(hlist, ph, inum*sizeof(int));ylist[0]=0;for(i=1;i<inum;i++){ylist[i]=ylist[i-1]+hlist[i-1]*2;}}void MYANIMAGIC::SetDevice(HDC hdest, HDC hsrc, HDC htemp){hdcdest=hdest;hdcsrc=hsrc;hdctemp=htemp;}//filereport.h#ifndef __FILEREPORT#define __FILEREPORTclass FILEREPORT{public:FILEREPORT();FILEREPORT(char *p);~FILEREPORT();void put(char *p);void put(char *p,int a,int b);void putnum(int i,char *p);//////////void CheckDC(HDC h,char *p);//showvoid SetDevice(HDC h,int x,int y);void Output(char *p,int a,int b);void Show();private:FILE *fp;//计数器组int num[5];//showHDC hshow;int xpos;int ypos;char info[50];};#endif//filereport.cpp#include "stdafx.h"#include "filereport.h"#include "stdio.h"#include "stdlib.h"FILEREPORT::FILEREPORT(){fp=fopen("trace.txt","w");memset(num,0,sizeof(num));}FILEREPORT::FILEREPORT(char *p){fp=fopen(p,"w");memset(num,0,sizeof(num)); }FILEREPORT::~FILEREPORT(){fclose(fp);}void FILEREPORT::put(char *p){fwrite(p,sizeof(char),strlen(p),fp);fwrite("\n",1,1,fp);}//带计数器的跟踪void FILEREPORT::putnum(int i,char *p){char temp[50];sprintf(temp,"(%d) ",num[i]);fwrite(temp,sizeof(char),strlen(temp),fp);num[i]++;fwrite(p,sizeof(char),strlen(p),fp);fwrite("\n",1,1,fp);}void FILEREPORT::put(char *p,int a,int b){char temp[50];sprintf(temp,"%s : %d , %d",p,a,b);fwrite(temp,sizeof(char),strlen(temp),fp);fwrite("\n",1,1,fp);}void FILEREPORT::CheckDC(HDC h,char *p) {if(h==NULL){fwrite(p,sizeof(char),strlen(p),fp);fwrite("\n",1,1,fp);}}void FILEREPORT::SetDevice(HDC h,int x,int y) {hshow=h;xpos=x;ypos=y;}void FILEREPORT::Output(char *p,int a,int b) {sprintf(info,"%s:%d,%d",p,a,b);}void FILEREPORT::Show(){TextOut(hshow,xpos,ypos,info,strlen(info)); }//gamemap.h#ifndef __GAMEMAP#define __GAMEMAP#include "bitmaptool.h"struct MapObject{int x;int y;int w;int h;int id;int iframe;int iframemax;//最大帧数int show; //是否显示};struct ROLE{int x;int y;int w;int h;int id;int iframe;int iframemax;//最大帧数//移动局部int xleft;//左界限int xright;//右界限int movex;//人物属性int health;int show; //是否显示};struct MAPINFO{int iNextMap;int iSubMap;int xReturnPoint;int yReturnPoint;int iBackBmp;int viewmax;};class GAMEMAP{public:int LoadMap();void Init();void InitMatch();//入参,物体索引图void Show(MYANIOBJ & bmobj);//入参,背景物体索引图void ShowBkObj(MYANIOBJ & bmobj);//入参,动画物体索引图void ShowAniObj(MYANIOBJ & bmobj);void ShowInfo(HDC h);void ShowOther(HDC h);//键盘处理int KeyProc(int iKey);void KeyUpProc(int iKey);void MoveView();//设置视图起始坐标void SetView(int x);void SetViewState(int i);void SetGameState(int i);//hittestint RoleCanMove(int xoff, int yoff);int CheckRole(); int CheckAni(int itimeclip);void ClearEnemy(int i);void ClearCoin(int i);//动画帧控制void ChangeFrame(int itimeclip);//入参,时间片//逻辑检测int IsWin();void Fail();void Fail_Wait();//地图切换void ChangeMap();//错误检查void CodeErr(int i);//菜单控制void ShowMenu(MYANIOBJ & bmobj);GAMEMAP();~GAMEMAP();//dataint iMatch;int iLife;int iGameState;struct MapObject MapArray[MAX_MAP_OBJECT];int iMapObjNum;struct MapObject MapBkArray[MAX_MAP_OBJECT]; int iMapBkObjNum;struct ROLE MapEnemyArray[MAX_MAP_OBJECT]; int iMapEnemyCursor;struct MapObject MapCoinArray[MAX_MAP_OBJECT]; int iCoinNum;//MAP DA TAint iNextMap;// role dataint iMoney;int iAttack; //攻击方式//viewint viewx;int viewy;int iViewState;//地图数据struct MAPINFO mapinfo;//frame controlint ienemyframe;int ibkobjframe;//FIREstruct ROLE FireArray[MAX_MAP_OBJECT];int iFireNum;int iTimeFire;//两个子弹的时间间隔int iBeginFire;//bombstruct MapObject BombArray[MAX_MAP_OBJECT]; int iBombNum;//攻击对象提示char AttackName[20];int iAttackLife;int iAttackMaxLife;//菜单局部int iMenu;//屏幕缩放int iScreenScale;};#endif//gamemap.cpp// Finishing #include "stdafx.h"#include "gamemap.h"#include "myclock.h"#include "tool01.h"#include "texttool.h"extern int wwin,hwin;extern HWND hWndMain;//根本图像extern MYANIOBJ bmMap;//天空背景extern MYBKSKY bmSky;//角色extern MYROLE rmain;//计时器extern MYCLOCK c1;extern MYANIMAGIC bmMagic;extern struct MAPINFO allmapinfo[];extern struct ROLE gl_enemy_normal;//extern FILEREPORT f1;GAMEMAP::GAMEMAP(){iScreenScale=0;Init();}GAMEMAP::~GAMEMAP(){}int GAMEMAP::LoadMap(){FILE *fp;char temp[50]={0};int find=0;int i;memset(MapArray,0,sizeof(MapArray));iMapObjNum=0;memset(MapBkArray,0,sizeof(MapBkArray));iMapBkObjNum=0;memset(MapEnemyArray,0,sizeof(MapEnemyArray));memset(MapCoinArray,0,sizeof(MapCoinArray));iCoinNum=0; fp=fopen(PA TH_MAP,"r");if(!fp){return 0;}while(!find && !feof(fp)){FGetLine(temp,fp);if(temp[0]=='*' && temp[1]=='0'+iMatch){find=1;}}if(!find){return 0;}//找到了某一关的地图数据i=0;FGetLineJumpCom(temp,fp);while(temp[0]!='#' && !feof(fp)){//map datasscanf(temp,"%d %d %d %d %d",&MapArray[i].x,&MapArray[i].y,&MapArray[i].w,&MapArray[i].h,&MapArray[i].id);MapArray[i].show=0;iMapObjNum++;i++;FGetLineJumpCom(temp,fp);}i=0;FGetLineJumpCom(temp,fp);while(temp[0]!='#' && !feof(fp)){sscanf(temp,"%d %d %d %d %d",&MapBkArray[i].x,&MapBkArray[i].y,&MapBkArray[i].w,&MapBkArray[i].h,&MapBkArray[i].id);MapBkArray[i].show=0;MapBkArray[i].iframe=0;iMapBkObjNum++;i++;FGetLineJumpCom(temp,fp);}i=0;FGetLineJumpCom(temp,fp);while(temp[0]!='#' && !feof(fp)){sscanf(temp,"%d %d %d %d %d %d %d", &MapEnemyArray[i].x,&MapEnemyArray[i].y,&MapEnemyArray[i].w,&MapEnemyArray[i].h,&MapEnemyArray[i].id,&MapEnemyArray[i].xleft,&MapEnemyArray[i].xright);//动画元件,使用绝对坐标MapEnemyArray[i].x*=32;MapEnemyArray[i].y*=32;MapEnemyArray[i].w*=32;MapEnemyArray[i].h*=32;MapEnemyArray[i].xleft*=32;MapEnemyArray[i].xright*=32;MapEnemyArray[i].show=1;MapEnemyArray[i].movex=-ENEMY_STEP_X;MapEnemyArray[i].iframe=0;MapEnemyArray[i].iframemax=2;//设置生命值switch(MapEnemyArray[i].id){case ID_ANI_BOSS_HOUSE:MapEnemyArray[i].health=BOSS_HEALTH;break;case ID_ANI_BOSS_HOUSE_A:MapEnemyArray[i].health=BOSS_A_HEALTH;break;default:MapEnemyArray[i].health=1;break;}//将BOSS存储在数组的后半段if ( i<BOSS_CURSOR&& ( MapEnemyArray[i].id == ID_ANI_BOSS_HOUSE|| MapEnemyArray[i].id == ID_ANI_BOSS_HOUSE_A) ){//move data to BOSS_CURSORMapEnemyArray[BOSS_CURSOR]=MapEnemyArray[i];memset(&MapEnemyArray[i],0,sizeof(MapEnemyArray[i]));i=BOSS_CURSOR;}i++;FGetLineJumpCom(temp,fp);}i=0;FGetLineJumpCom(temp,fp);while(temp[0]!='#' && !feof(fp)){sscanf(temp,"%d %d %d %d %d",&MapCoinArray[i].x,&MapCoinArray[i].y,&MapCoinArray[i].w,&MapCoinArray[i].h,&MapCoinArray[i].id);MapCoinArray[i].show=1;MapCoinArray[i].iframe=0;//索引坐标转化为绝对坐标MapCoinArray[i].x*=32;MapCoinArray[i].y*=32;//设置这个动画元件的最大帧switch(MapCoinArray[i].id){case ID_ANI_COIN:MapCoinArray[i].iframemax=4;break;default:MapCoinArray[i].iframemax=2;break;}i++;iCoinNum++;FGetLineJumpCom(temp,fp);}fclose(fp);return 1;}void GAMEMAP::Init(){iGameState=GAME_PRE;iMatch=0;iLife=3;iMoney=0;//攻击种类iAttack=ATTACK_NORMAL;iMenu=0;viewx=0;InitMatch();}void GAMEMAP::InitMatch(){memset(MapArray,0,sizeof(MapArray));memset(MapBkArray,0,sizeof(MapBkArray));memset(MapEnemyArray,0,sizeof(MapEnemyArray));memset(MapCoinArray,0,sizeof(MapCoinArray));memset(FireArray,0,sizeof(FireArray));memset(BombArray,0,sizeof(BombArray));iMapObjNum=0;iMapBkObjNum=0;iBombNum=0;iCoinNum=0;//设置视图坐标viewy=0;ienemyframe=0;iFireNum=0;iTimeFire=0;iBeginFire=0;ibkobjframe=0;//获取地图信息mapinfo=allmapinfo[iMatch];//初始化攻击对象提示memset(AttackName,0,sizeof(AttackName));iAttackLife=0;iAttackMaxLife=0;iMapEnemyCursor=0;}//显示地图void GAMEMAP::Show(MYANIOBJ & bmobj){int i;int xstart,ystart;int j,k;for(i=0;i<iMapObjNum;i++){ystart=MapArray[i].y*32;switch(MapArray[i].id){//进出的下水道case ID_MAP_PUMP_IN:case ID_MAP_PUMP_OUT:xstart=MapArray[i].x*32;bmobj.DrawItemNoMask(xstart, ystart, MapArray[i].id, 0);break;default:for(j=0;j<MapArray[i].h;j++){xstart=MapArray[i].x*32;for(k=0;k<MapArray[i].w;k++){bmobj.DrawItemNoMask(xstart, ystart, MapArray[i].id, 0);xstart+=32;}ystart+=32;} // end of forbreak;}//end of switch}}void GAMEMAP::ChangeMap(){viewx=0;//iMatch=mapinfo.iSubMap;InitMatch();rmain.SetPos(BM_USER,mapinfo.xReturnPoint*32,mapinfo.y ReturnPoint*32);rmain.InitRole(0,GAMEW*32*MAX_PAGE-32);//设定视图位置if(rmain.xpos - viewx > 150){SetView(mapinfo.xReturnPoint*32-32);//往左让一格if(viewx>(mapinfo.viewmax-1)*GAMEW*32)viewx=(mapinfo.viewmax-1)*GAMEW*32;}//设定人物活动范围rmain.SetLimit(viewx, GAMEW*32*MAX_PAGE);//设定背景图片坐标bmSky.SetPos(BM_USER,viewx,0);LoadMap();}int GAMEMAP::KeyProc(int iKey){int i;switch(iGameState){case GAME_PRE:switch(iKey){case 0xd://enterswitch(iMenu){case 0:c1.ReStart(TIME_GAME_IN_PRE); //停顿两秒iGameState=GAME_IN_PRE;break;case 1:SetGameState(GAME_HELP);break;}break;case VK_UP:iMenu=(iMenu+1)%2;break;case VK_DOWN:iMenu=(iMenu+1)%2;break;}return 1;//重绘case GAME_HELP:switch(iKey){case 0xd: //enterSetGameState(GAME_PRE);break;}return 1;case GAME_IN://如果人物正在播放动画,拒绝键盘响应if(rmain.IsInAni()){break;}switch(iKey){case VK_RIGHT:if(rmain.movey!=0){rmain.jumpx=4;}rmain.movex=4;rmain.idirec=0;break;case VK_LEFT:if(rmain.movey!=0){rmain.jumpx=-4;}rmain.movex=-4;rmain.idirec=1;//朝左break;case VK_DOWN:for(i=0;i<iMapObjNum;i++){//下方线if( LINE_IN_LINE(rmain.xpos,rmain.ypos+32,32,MapArray[i].x*32,MapArray[i].y*32,MapArray[i].w*32)){if(MapArray[i].id == ID_MAP_PUMP_IN){//进入地图rmain.SetAni(ROLE_ANI_DOWN);iGameState=GAME_PUMP_IN;c1.ReStart(TIME_GAME_PUMP_WAIT);}}}break;case KEY_X: //跳if(rmain.movey!=0)break;rmain.movey=-SPEED_JUMP;rmain.jumpx=rmain.movex;//解决x键和方向键的响应问题break;case KEY_Z: //FIREif(iBeginFire)break;iTimeFire=0;iBeginFire=1;break;case 0x7a://f11iAttack=(iAttack+1)%ATTACK_MAX_TYPE;break;//直接通关rmain.xpos = MAX_PAGE*GAMEW*32;break;}break;}return 0;}void GAMEMAP::SetViewState(int i){iViewState=i;}void GAMEMAP::SetGameState(int i){iGameState=i;}void GAMEMAP::SetView(int x){viewx=x;}//移动视图//视图不能往右移void GAMEMAP::MoveView(){//只有一屏宽,不移动视图if(mapinfo.viewmax == 1)return;if(rmain.xpos - viewx > 150){viewx+=ROLE_STEP;if(viewx>(mapinfo.viewmax-1)*GAMEW*32)viewx=(mapinfo.viewmax-1)*GAMEW*32;//设置人物移动的最大范围rmain.SetLimit(viewx, GAMEW*32*MAX_PAGE);}bmSky.SetPos(BM_USER,viewx,0);}void GAMEMAP::ShowBkObj(MYANIOBJ & bmobj){int i;int xstart,ystart;for(i=0;i<iMapBkObjNum;i++){ystart=MapBkArray[i].y*32;xstart=MapBkArray[i].x*32;bmobj.DrawItem(xstart,ystart,MapBkArray[i].id,ibkobjframe);}}void GAMEMAP::ShowInfo(HDC h){char temp[50]={0};SetTextColor(h, TC_WHITE);SetBkColor(h, TC_BLACK);sprintf(temp, "LIFE : %d",iLife);TextOut(h, 220,100,temp,strlen(temp));sprintf(temp, "WORLD : %d",iMatch+1);TextOut(h, 220,130,temp,strlen(temp));}void GAMEMAP::ShowOther(HDC h){char temp[50]={0};int xstart;//show moneysprintf(temp,"MONEY: %d",iMoney);TextOut(h,viewx+20,20,temp,strlen(temp));//显示攻击对象生命值if(iAttackLife){TextOut(h,viewx+ATTACK_TO_TEXT_X,ATTACK_TO_TEXT_Y,AttackName,strlen(AttackName));//画生命条xstart=viewx+ATTACK_TO_X-iAttackMaxLife*10;bmMap.DrawItemNoMaskWidth(xstart-1,ATTACK_TO_Y-1,ID_MAP_HEALTH_BK,iAttackMaxLife*BMP_WIDTH_HEALTH, 0);bmMap.DrawItemNoMaskWidth(xstart,ATTACK_TO_Y,ID_MAP_HEALTH,iAttackLife*BMP_WIDTH_HEALTH, 0);}}void GAMEMAP::ShowAniObj(MYANIOBJ & bmobj){int i;int xstart,ystart;//显示金币,和其他物品for(i=0;i<iCoinNum;i++){ystart=MapCoinArray[i].y;xstart=MapCoinArray[i].x;bmobj.DrawItem(xstart,ystart,MapCoinArray[i].id, MapCoinArray[i].iframe);}//显示敌人for(i=0;i<MAX_MAP_OBJECT;i++){if (MapEnemyArray[i].show){bmobj.DrawItem(MapEnemyArray[i].x,MapEnemyArray[i].y, MapEnemyArray[i].id,MapEnemyArray[i].iframe);}}//显示子弹,魔法攻击for(i=0;i<MAX_MAP_OBJECT;i++){if (FireArray[i].show){ystart=FireArray[i].y;xstart=FireArray[i].x;switch(FireArray[i].id){case ID_ANI_FIRE:bmobj.DrawItem(xstart,ystart,FireArray[i].id,FireArray[i].ifra me);break;case ID_ANI_FIRE_MAGIC:bmMagic.DrawItem(xstart,ystart, 0, FireArray[i].iframe);break;default:bmobj.DrawItem(xstart,ystart,FireArray[i].id,FireArray[i].ifra me);break;}}}//显示爆炸效果for(i=0;i<MAX_MAP_OBJECT;i++){if (BombArray[i].show){ystart=BombArray[i].y;xstart=BombArray[i].x;bmobj.DrawItem(xstart,ystart,BombArray[i].id, BombArray[i].iframe);}}} // 返回0,不能走;1,能走int GAMEMAP::RoleCanMove(int xoff, int yoff){int canmove=1;int i;for(i=0;i<iMapObjNum;i++){if( RECT_HIT_RECT(rmain.xpos+xoff,rmain.ypos+yoff,32,32,MapArray[i].x*32,MapArray[i].y*32,MapArray[i].w*32,MapArray[i].h*32)){canmove=0;if(yoff<0){//碰到了上面的物体要向下落rmain.movey=1;}if(yoff>0){//碰到了下面的物体,要停止下落rmain.jumpheight=0;rmain.movey=0;rmain.ypos=MapArray[i].y*32-32;//纵坐标要修正}break;}}return canmove;}//检查人物水平移动过程中,是否走出地图物体边界int GAMEMAP::CheckRole(){int i;//角色的检查if(rmain.movey == 0 ){//在水平移动,//检测角色是否站在某个物体上for(i=0;i<iMapObjNum;i++){//下方线if( LINE_ON_LINE(rmain.xpos,rmain.ypos+32,32,MapArray[i].x*32,MapArray[i].y*32,MapArray[i].w*32)){return 1;}}//角色开始下落rmain.movey=1;rmain.jumpx=0;//此时要去除跳跃速度,否那么将变成跳跃,而不是落体return 0;}return 0;}void GAMEMAP::ChangeFrame(int itimeclip){int i;///////////// 帧控制////////////////if(0 == itimeclip% ENEMY_SPEED){//敌人移动for(i=0;i<MAX_MAP_OBJECT;i++){if(MapEnemyArray[i].show){//帧控制MapEnemyArray[i].iframe=(MapEnemyArray[i].iframe+1)% MapEnemyArray[i].iframemax;switch(MapEnemyArray[i].id){case ID_ANI_ENEMY_NORMAL:case ID_ANI_ENEMY_SWORD: MapEnemyArray[i].x+=MapEnemyArray[i].movex;//控制敌人移动if(MapEnemyArray[i].movex<0){if(MapEnemyArray[i].x<=MapEnemyArray[i].xleft){MapEnemyArray[i].movex=ENEMY_STEP_X;}}else{if(MapEnemyArray[i].x>=MapEnemyArray[i].xright){MapEnemyArray[i].movex=-ENEMY_STEP_X;}}break;}}}}if(0 == itimeclip% WATER_SPEED){ibkobjframe=1-ibkobjframe;for(i=0;i<MAX_MAP_OBJECT;i++){if(MapCoinArray[i].show){MapCoinArray[i].iframe=(MapCoinArray[i].iframe+1)%MapC oinArray[i].iframemax;}}}//子弹,攻击控制for(i=0;i<MAX_MAP_OBJECT;i++){if(FireArray[i].show){switch(FireArray[i].id){case ID_ANI_FIRE_MAGIC:FireArray[i].iframe++;if(FireArray[i].iframe == 2){FireArray[i].x+=FIRE_MAGIC_W;}if(FireArray[i].iframe>3){FireArray[i].show=0;}break;default:FireArray[i].iframe=1-FireArray[i].iframe;break;}}}//bomb frame controlfor(i=0;i<MAX_MAP_OBJECT;i++){if(BombArray[i].show){BombArray[i].iframe++;if(BombArray[i].iframe>3){BombArray[i].show=0;}}}}int GAMEMAP::CheckAni(int itimeclip){int i,j;int tempx,tempy;//检测子弹和敌人的碰撞〔包括魔法攻击〕for(i=0;i<MAX_MAP_OBJECT;i++){if(MapEnemyArray[i].show){for(j=0;j<MAX_MAP_OBJECT;j++){if (FireArray[j].show){if(RECT_HIT_RECT(FireArray[j].x+FIRE_XOFF,FireArray[j].y,FireArray[j].w,FireArray[j].h,MapEnemyArray[i].x,MapEnemyArray[i].y,MapEnemyArray[i].w,MapEnemyArray[i].h)){ClearEnemy(i);//魔法攻击时,攻击效果的消除由帧控制。
c 语言源代码开头
以下是一个简单的 C 语言源代码开头示例,包含了必要的头文件和程序的基本结构:```c
#include <stdio.h>
int main() {
// 在此处添加程序逻辑
return 0;
}
```
在上面的示例中,`#include <stdio.h>` 是一个必要的头文件,它包含了标准输入输出函数的声明,如 `printf()` 和 `scanf()`。
`int main()` 是程序的入口函数,每个 C 语言程序都必须包含一个 `main` 函数。
函数体由一对花括号 `{}` 包围,里面是程序的逻辑部分。
你可以在花括号内添加你的程序逻辑,例如变量声明、函数调用、条件判断和循环等。
根据你的需求,编写相应的代码来实现你的程序功能。
最后,`return 0;` 语句表示程序正常结束,并返回 0 作为状态码。
这只是一个简单的 C 语言源代码开头示例,你可以根据自己的需求进行扩展和修改。
请注意,C 语言是一种语法严谨的编程语言,需要遵循严格的语法规则和编程规范。
在编写代码时,请仔细检查语法错误,并确保代码的可维护性和可读性。
源程序是什么源程序是计算机程序的初始版本,是一种用特定的计算机语言编写的文本文件。
它包含了程序员使用编程语言编写的一系列指令和逻辑,用于告诉计算机如何执行特定的任务。
在计算机科学领域,源程序是开发软件的基础。
在本文中,我们将讨论源程序的定义、类型、作用以及与其他相关概念的区别。
源程序的定义源程序是根据某种特定的编程语言编写的计算机程序,是程序员用来表达计算机指令和逻辑的一种形式。
它是人类可读的文本文件,通常使用扩展名来标识其所使用的语言,例如C语言使用.c扩展名,Java语言使用.java扩展名等。
源程序由程序员创建,其中包含一系列的代码语句,定义了程序的行为、功能和逻辑。
源程序的类型源程序可以根据使用的编程语言进行分类。
目前,有许多不同的编程语言可供选择,例如C、C++、Java、Python等。
每种编程语言都具有不同的语法和语义规则,但它们都提供了一种方法来编写源程序。
每种编程语言都有其独特的特点和用途,适用于不同的应用领域。
源程序的作用源程序是开发软件的基础,它描述了计算机程序的行为和功能。
通过编写源程序,程序员可以实现特定任务的逻辑,并将其翻译成机器可以理解和执行的形式。
源程序通过编译器或解释器进行翻译和执行,最终生成可执行文件或在解释器环境中运行。
源程序的编写过程是软件开发中的重要环节。
在编写源程序之前,程序员需要了解所使用的编程语言的基本语法、数据类型、算法和逻辑结构。
他们需要考虑程序的设计目标、用户需求和系统约束,并选择合适的算法和数据结构。
源程序的编写需要程序员具备良好的编程技巧和逻辑思维,以及对所开发的应用领域的深入理解。
源程序与机器语言的关系源程序通常是以人类可读的形式编写的,而机器语言是计算机可以直接理解和执行的形式。
为了将源程序转化为机器语言,程序员需要使用编译器或解释器。
编译器将源程序一次性地转换为机器语言,并生成可执行文件。
解释器则将源程序一行一行地解释执行,无需生成可执行文件。
目录前言 (2)用C语言编写源程序建立LR(1)分析器 (3)一,设计目的,要求,算法与设计思想 (3)1.设计内容 (3)2.设计要求 (3)3.设计的基本原理 (3)1.CLOSURE(I)的构造 (3)2.GO(I,X)的构造 (3)3.FIRST集合的构造 (4)4.LR(1)分析表的构造 (4)二,LR(1)分析器 (4)1.LR(1)分析器的实现图: (4)2.LR分析器与逻辑结构及工作过程 (5)三,总体方案设计 (5)1. 各模块设计 (6)四,程序测试 (8)1.教科书的第142页文法的LR1分析器的构造和语法分析 (8)2.表达式文法的LR1分析器的构造和语法分析器 (9)五,源程序 (10)六,总结 (19)七,参考文献 (19)前言《编译原理》是计算机专业的一门重要的专业课程,其中包含大量软件设计细想。
通过课程设计,实现一些重要的算法,或设计一个完整的编译程序模型,能够进一步加深理解和掌握所学知识,对提高自己的软件设计水平具有十分重要的意义。
我选的是老师给的题,并予以扩充。
即对任意给定的问法G构造LR(1)项目集规范族,其中要实现CLOSURE(1),GO(I,X),FIRST集合符。
在此基础上,构造了LR(1)分析表。
然后对输入的句子进行语法分析,给出接受或出错报告。
程序采用文件输入输出方式。
其中包括两个输入文件:文法grammar.txt,以及输入串input.txt;两个输出文件:项目集items.txt和文法的LR(1)分析表action_table.txt。
由于语法分析的结果只给出接受或错误报告,比较简单。
所以直接在屏幕上输出,也便于用户查看。
在具体编写程序中,对文法操作的各个功能模块独立成为一个子程序,而对具体输入穿得分析则放在main()函数中进行。
各个变量奇函数的意义和用法我将在论述程序设计的通体方案中向西给出。
程序的通体算法细想来自《编译原理》课程。
具体实现有我独立完成。
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语言库的支持,那么就可以用C语言;而另一部分为了达到比较高的运行效率,则可以用汇编语言编写。
较为复杂的软件,源程序文件可以达到成千上万个。
为了降低复杂度,必须引入一种可以描述各个源代码之间联系,并且如何正确编译的系统。
在这样的背景下,修订控制系统(RCS)诞生了,并成为研发者对代码修订的必备工具之一。
还有另外一种组合:源代码的编写和编译分别在不同的平台上实现,专业术语叫做软件移植。
关于开放源代码的定义以及解释作者:王立来源:eNet硅谷动力【译者的声明】本文是开放源代码定义、开放源代码定义原理以及OSI Certified标志与纲要的中文译文。
本文由王立在1999年8月翻译。
本人在翻译时为确保译文与原文在含义上一致性付出了最大努力,但是本人不能对由于译文与原文在含义上的差异而造成的任何误解或对译文的误解所造成的任何直接的、间接的损失承担任何责任。
开放源代码并不仅仅意味着对源代码的访问权。
开放源代码软件的发布条款必须满足以下条件:我们认为本开放源代码定义涵盖了由绝大多数软件团体使用的术语"开放源代码"的最初含义和当前含义。
然而,该术语被广泛地应用,并且它的含义变得不精确了。
OSI Certified 标志是某个软件发布许可证是否服从开放源代码定义的OST认证方式。
一般的术语"开放源代码"并不提供这种担保,但我们仍然鼓励使用"开放源代码"这一术语以表明它符合"开放源代码定义"。
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代替。
(defun c:1 ( / 1a 1b 1c 1d chklay do va vx)(setvar "OSMODE" 1024)(setq chklay (tblsearch "layer" "FL"))(if (null chklay)(command "layer" "n" "FL" "c" "161" "FL" "") )(setq va (getvar "lunits"))(if (= va 2)(progn(setq do 20000)(SETQ VX 1)))(if (= va 4)(progn(setq do 800)(SETQ VX 0.03937)))(setq 1a '(0 0 0))(setq 1b (polar 1a 0 do))(setq 1c (polar 1b (* pi 0.5) do))(setq 1d (polar 1a (* pi 0.5) do))(command "pline" 1a 1b 1c 1d 1a "")(command "chprop" (entlast) "" "la" "FL" "")(command "insert" "STR BLOCK" '(0 0 0) VX VX 0) (setvar "OSMODE" 1279)(prin1))(defun c:dxff (/ ent)(setq a1 (car (entsel)))(setq b1 (entget a1 (list "*"))));;;(defun c:e(/ cmd_ent cmd_sel cmd_no);;; (setq cmd_ent (cadr (ssgetfirst)));;; (cond ((= nil cmd_ent);;; (setq cmd_sel (ssget));;; (setq cmd_no (sslength cmd_sel));;; (command "_.erase" cmd_sel "");;; (alert (strcat "Total **** ";;; (rtos cmd_no 2 0);;; " **** Deleted";;; "\nTotal **** ";;; (rtos cmd_no 2 0);;; " **** Deleted";;; "\nTotal **** ";;; (rtos cmd_no 2 0);;; " **** Deleted";;; );;; );;; );;; ((/= nil cmd_ent);;; (setq cmd_no (sslength cmd_ent));;; (command "_.erase");;; (alert (strcat "Total **** ";;; (rtos cmd_no 2 0);;; " **** Deleted";;; "\nTotal **** ";;; (rtos cmd_no 2 0);;; " **** Deleted";;; "\nTotal **** ";;; (rtos cmd_no 2 0);;; " **** Deleted";;; );;; );;; );;; );;; (princ);;; );******************************************************************************* ********************************************************************;;;(defun c:m (/ cmd_ent cmd_sel cmd_no cmd_dist cmd_pt cmd_pt1);;; (setq cmd_ent (cadr (ssgetfirst)));;; (if (= nil cmd_ent);;; (setq cmd_sel (ssget));;; (setq cmd_sel cmd_ent);;; );;; (setq cmd_no (sslength cmd_sel));;; (princ (strcat (rtos cmd_no 2 0) " Found By Elvis"));;; (command "move";;; cmd_sel;;; "";;; (setq;;; cmd_pt (getpoint;;; "\nSpecify base point or [Displacement] <Displacement>: ";;; );;; );;; pause;;; );;; (setq cmd_pt1 (getvar "lastpoint"));;; (setq cmd_dist (distance cmd_pt cmd_pt1));;; (alert (strcat "Total **** ";;; (rtos cmd_no 2 0);;; " **** Moved";;; "\n";;; "\nStartPoint **** (";;; (rtos (car cmd_pt) 2 4);;; ", ";;; (rtos (cadr cmd_pt) 2 4);;; ", ";;; (rtos (caddr cmd_pt) 2 4);;; " )****";;; "\n";;; "\nEndPoint **** (";;; (rtos (car cmd_pt1) 2 4);;; ", ";;; (rtos (cadr cmd_pt1) 2 4);;; ", ";;; (rtos (caddr cmd_pt1) 2 4);;; " )****";;; "\n";;; "\nDistance **** ";;; (rtos cmd_dist 2 4);;; " **** ";;; );;; );;;;;; (Propak_Str_Elvis cmd_sel a "MOVE");;; (princ);;;);;;(defun c:co ( / cmd_copyent cmd_dist cmd_ent cmd_entlast cmd_no cmd_pt cmd_pt1 cmd_sel);;; (SETQ A (GETVAR "OSMODE"));;; (setq cmd_ent (cadr (ssgetfirst)));;; (if (= nil cmd_ent);;; (setq cmd_sel (ssget));;; (setq cmd_sel cmd_ent);;; );;; (setq cmd_no (sslength cmd_sel));;; (princ (strcat (rtos cmd_no 2 0) " Found By Elvis"));;; (setq cmd_pt;;; (getpoint;;; "\nSpecify second point or [Array] <use first point as displacement>:" ;;; );;; );;; (while t;;; (setq cmd_copyent (ssadd));;; (setq cmd_entlast (entlast));;; (command "copy" cmd_sel "" cmd_pt pause);;; (setq cmd_pt1 (getvar "lastpoint"));;; (setq cmd_dist (distance cmd_pt cmd_pt1));;;;;; (while (if (= cmd_entlast nil) nil (setq cmd_entlast (entnext cmd_entlast))) ;;; (if (member (cdr (assoc 0 (entget cmd_entlast)));;; '("LINE" "CIRCLE" "LWPOLYLINE";;; "TEXT" "3DSOLID" "ELLIPSE";;; "ARC" "DIMENSION" "LEADER";;; "POLYLINE" "MTEXT" "INSERT";;; );;; );;; (setq cmd_copyent (ssadd cmd_entlast cmd_copyent));;; ));;;;;; (alert (strcat "Total **** ";;; (rtos cmd_no 2 0);;; " **** Copy";;; "\n";;; "\nStartPoint **** (";;; (rtos (car cmd_pt) 2 4);;; ", ";;; (rtos (cadr cmd_pt) 2 4);;; ", ";;; (rtos (caddr cmd_pt) 2 4);;; " )****";;; "\n";;; "\nEndPoint **** (";;; (rtos (car cmd_pt1) 2 4);;; ", ";;; (rtos (cadr cmd_pt1) 2 4);;; ", ";;; (rtos (caddr cmd_pt1) 2 4);;; " )****";;; "\n";;; "\nDistance **** ";;; (rtos cmd_dist 2 4);;; " **** ";;; );;; );;; (Propak_Str_RevText cmd_copyent);;; (Propak_Str_Elvis cmd_copyent a "COPY");;;;;; );;;;;; (princ);;;);;;(defun c:mi ( / cmd_copyent cmd_dist cmd_ent cmd_entlast cmd_method cmd_no cmd_pt cmd_pt1 cmd_sel cmd_st);;; (setq cmd_ent (cadr (ssgetfirst)));;; (if (= nil cmd_ent);;; (setq cmd_sel (ssget));;; (setq cmd_sel cmd_ent);;; );;; (setq cmd_no (sslength cmd_sel));;; (princ (strcat (rtos cmd_no 2 0) " Found By Elvis"));;; (setq cmd_pt;;; (getpoint;;; "\nSpecify second point or [Array] <use first point as displacement>:" ;;; );;; );;; (setq cmd_copyent (ssadd));;; (setq cmd_entlast (entlast));;; (command "mirror" cmd_sel "" cmd_pt pause "N");;; (setq cmd_pt1 (getvar "lastpoint"));;; (setq cmd_dist (distance cmd_pt cmd_pt1));;;;;; (setq cmd_st (strcase (getstring "\nErase source objects? [Yes/No] <N>: "))) ;;; (if (= cmd_st "Y");;; (progn;;; (setq cmd_method "MOVE");;; (command "erase" cmd_sel "");;; );;; (setq cmd_method "COPY");;;;;; );;; (alert (strcat "Total **** ";;; (rtos cmd_no 2 0);;; " **** Mirror";;; "\n";;; "\nStartPoint **** (";;; (rtos (car cmd_pt) 2 4);;; ", ";;; (rtos (cadr cmd_pt) 2 4);;; ", ";;; (rtos (caddr cmd_pt) 2 4);;; " )****";;; "\n";;; "\nEndPoint **** (";;; (rtos (car cmd_pt1) 2 4);;; ", ";;; (rtos (cadr cmd_pt1) 2 4);;; ", ";;; (rtos (caddr cmd_pt1) 2 4);;; " )****";;; "\n";;; "\nDistance **** ";;; (rtos cmd_dist 2 4);;; " **** ";;; );;; );;; (while (setq cmd_entlast (entnext cmd_entlast));;; (if (member (cdr (assoc 0 (entget cmd_entlast)));;; '("LINE" "CIRCLE" "LWPOLYLINE" "TEXT" "3DSOLID";;; "ELLIPSE" "ARC" "DIMENSION" "LEADER" "POLYLINE" "MTEXT" "INSERT") ;;; );;; (setq cmd_copyent (ssadd cmd_entlast cmd_copyent));;; );;; );;; (Propak_Str_RevText cmd_copyent);;; (Propak_Str_Elvis cmd_copyent a cmd_method);;;;;; (princ);;;);;;(defun c:s (/ cmd_ent cmd_sel cmd_no cmd_dist cmd_pt cmd_pt1);;; (setq cmd_ent (cadr (ssgetfirst)));;; (if (= nil cmd_ent);;; (setq cmd_sel (ssget));;; (setq cmd_sel cmd_ent);;; );;; (setq cmd_no (sslength cmd_sel));;; (princ (strcat (rtos cmd_no 2 0) " Found By Elvis"));;; (command "stretch";;; cmd_sel;;; "";;; (setq;;; cmd_pt (getpoint;;; "\nSpecify base point or [Displacement] <Displacement>: " ;;; );;; );;; pause;;; );;; (setq cmd_pt1 (getvar "lastpoint"));;; (setq cmd_dist (distance cmd_pt cmd_pt1));;; (alert (strcat "Total **** ";;; (rtos cmd_no 2 0);;; " **** Moved";;; "\n";;; "\nStartPoint **** (";;; (rtos (car cmd_pt) 2 4);;; ", ";;; (rtos (cadr cmd_pt) 2 4);;; ", ";;; (rtos (caddr cmd_pt) 2 4);;; " )****";;; "\n";;; "\nEndPoint **** (";;; (rtos (car cmd_pt1) 2 4);;; ", ";;; (rtos (cadr cmd_pt1) 2 4);;; ", ";;; (rtos (caddr cmd_pt1) 2 4);;; " )****";;; "\n";;; "\nDistance **** ";;; (rtos cmd_dist 2 4);;; " **** ";;; );;; );;; (Propak_Str_Elvis cmd_sel a "STRETCH");;; (princ);;;);============(defun Propak_Str_Elvis (Elvis_Sel a Elvis_method /Elvis_rno Elvis_dataElvis_T Elvis_typElvis_colo Elvis_colo_bkElvis_xdata)(if (= a "!1")(progn(regapp "PROPAK_ELVIS")(setq Elvis_rno 0)(repeat (sslength Elvis_Sel)(setq Elvis_data (entget (ssname Elvis_Sel Elvis_rno)))(if (= nil (assoc -3 (entget (ssname Elvis_Sel Elvis_rno) (list "*")))) (setq Elvis_T t)(setq Elvis_T nil))(setq Elvis_typ (cdr (assoc 0 Elvis_data)))(setq Elvis_colo (cdr (assoc 62 Elvis_data)))(if (= Elvis_colo nil)(setq Elvis_colo_bk 256)(setq Elvis_colo_bk Elvis_colo))(cond ((and (or (= Elvis_typ "LINE")(= Elvis_typ "CIRCLE")(= Elvis_typ "LWPOLYLINE")(= Elvis_typ "TEXT")(= Elvis_typ "3DSOLID")(= Elvis_typ "ELLIPSE")(= Elvis_typ "ARC")(= Elvis_typ "POLYLINE")(= Elvis_typ "MTEXT"))Elvis_T)(setq Elvis_xdata(list '-3(cons "PROPAK_ELVIS"(list '(1002 . "{")(cons 1000 (rtos Elvis_colo_bk 2 0))(cons 1000 Elvis_method)'(1002 . "}")))))(entmod (append Elvis_data (list (cons 62 10)) (list Elvis_xdata))) ))(setq Elvis_rno (1+ Elvis_rno))))))(defun Propak_Str_RevText (RevText_Sel / dcl_id dd ent revtext_data revtext_name revtext_rno revtext_typ)(setq RevText_rno 0)(repeat (sslength RevText_Sel)(setq RevText_data (entget (ssname RevText_Sel RevText_rno)))(setq RevText_typ (cdr (assoc 0 RevText_data)))(cond ((or (= RevText_typ "TEXT")(= RevText_typ "MTEXT"))(setq ent (cdr (assoc 1 RevText_data)))(setq dcl_id (load_dialog "dde"))(new_dialog "dde" dcl_id)(set_tile "dimt" ent)(action_tile "accept" "(getdata) (done_dialog 1)")(action_tile "cancle" "(done_dialog)")(setq dd (start_dialog))(if (= dd 1)(entmod (subst (cons 1 ent) (assoc 1 RevText_data) RevText_data))))((= RevText_typ "INSERT")(if (= "SUPTAG" (cdr (assoc 2 RevText_data)))(progn(setq RevText_name(entnext (ssname RevText_Sel RevText_rno)))(setq RevText_data (entget RevText_name))(setq ent (cdr (assoc 1 RevText_data)))(setq dcl_id (load_dialog "dde"))(new_dialog "dde" dcl_id)(set_tile "dimt" ent)(action_tile "accept" "(getdata) (done_dialog 1)")(action_tile "cancle" "(done_dialog)")(setq dd (start_dialog))(if (= dd 1)(entmod (subst (cons 1 ent)(assoc 1 RevText_data)RevText_data)))))))(setq RevText_rno (1+ RevText_rno))))(defun getdata()(setq ent (get_tile "dimt")))(defun c:zx( / cadr_typ cmd_rno cmd_t cmdr_colo cmdr_data cmdr_lst cmdr_name cmdr_sel)(setq cmdr_sel (ssget))(setq cmd_rno 0)(setq cmdr_lst '((-3 ("PROPAK_ELVIS"))))(repeat (sslength cmdr_sel)(setq cmdr_data (entget (ssname cmdr_sel cmd_rno)))(setq cadr_typ (cdr (assoc 0 cmdr_data)))(if (= "PROPAK_ELVIS" (caadr (assoc -3 (entget (ssname cmdr_sel cmd_rno) (list "*")))))(setq cmd_T t)(setq cmd_T nil))(cond ((and (or (= cadr_typ "LINE")(= cadr_typ "CIRCLE")(= cadr_typ "LWPOLYLINE")(= cadr_typ "TEXT")(= cadr_typ "3DSOLID")(= cadr_typ "ELLIPSE")(= cadr_typ "ARC")(= cadr_typ "POLYLINE")(= cadr_typ "MTEXT"))cmd_T)(setq cmdr_colo (atoi (cdr (nth 2 (cadr (assoc -3 (entget (ssname cmdr_sel cmd_rno) (list "*"))))))))(entmod (setq cmdr_data (subst (cons 62 cmdr_colo) (assoc 62 cmdr_data) cmdr_data)))(entmod (append cmdr_data cmdr_lst)))((= cadr_typ "INSERT")(if (or (= "SUPTAG" (cdr (assoc 2 cmdr_data)))(= "bom1" (cdr (assoc 2 cmdr_data)))(= "BOM1" (cdr (assoc 2 cmdr_data))))(progn(setq cmdr_name(ssname cmdr_sel cmd_rno))(setq cmdr_data (entget cmdr_name))(while (/= "SEQEND" (cdr (assoc 0 cmdr_data)))(setq cmdr_name (entnext cmdr_name))(setq cmdr_data (entget cmdr_name))(assoc 62 cmdr_data)(if (/= nil (assoc 62 cmdr_data))(progn(entmod (setq cmdr_data (subst (cons 62 256)(assoc 62 cmdr_data)cmdr_data))))))))))(setq cmd_rno (1+ cmd_rno)))(princ))(defun c:ee (/ unit os cl st ld ld_os ld_oe lsx lsy lex ley ld_ns ld_ne p0 p01 p1 p2 ra)(setq unit (getvar "lunits"))(setq os (getvar "osmode"))(if (= unit 2) (setq ra 3) (setq ra 0.118));(SETQ cl (getvar "CLAYER"))(princ "\nSelect the circle")(setq cir (entget (car (entsel))))(princ "\nSelect the line")(setq lin (entget (car (entsel))))(if (= (cdr (assoc 0 cir)) "CIRCLE") (setq p0 (cdr (assoc 10 cir))))(if (= (cdr (assoc 0 cir)) "TEXT") (setq p0 (cdr (assoc 11 cir))))(if (= (cdr (assoc 0 lin)) "LINE")(progn(setq p1 (cdr (assoc 10 lin)))(setq leo (assoc 11 lin))))(setq ang (angle p0 p1))(setq len (cons 11 (polar p0 ang ra)))(entmod (subst len leo lin))(princ));end defun。
ai分时雷达源代码 (1)AI分时雷达源代码AI(人工智能)分时雷达(FMCW雷达)是一种基于人工智能技术的新一代雷达系统。
它结合了传统频率调制连续波(FMCW)雷达和深度学习算法,能够实现更加精准、快速地目标检测和跟踪。
本文将为您介绍AI分时雷达的源代码实现。
代码实现如下:```pythonimport numpy as npimport matplotlib.pyplot as pltimport scipy.signal as signaldef fmcw_radar(range_res, max_range, bw, sweep_time, target_range):c = 3e8 # 光速fs = 2 * bw # 采样率ts = 1 / fs # 采样周期t = np.arange(0, sweep_time, ts) # 时间采样点f0 = 77e9 # 起始频率k = bw / sweep_time # 频率斜率# 发射信号Tx = np.cos(2 * np.pi * (f0 * t + 0.5 * k * t ** 2))# 接收信号constant = 2 * np.pi * (bw / sweep_time)Rx = np.zeros_like(Tx)for i, target in enumerate(target_range):td = 2 * target / c # 目标传播时间Rx += np.cos(2 * np.pi * (f0 * (t - td) + 0.5 * constant * (t - td) ** 2))mix = Tx * Rx # 混频信号window = signal.blackman(len(mix)) # 加窗处理mix = mix * window# 快速傅里叶变换mix_fft = np.fft.fft(mix, len(mix))mix_fft_shift = np.fft.fftshift(mix_fft)mix_power = np.abs(mix_fft_shift)# 距离轴range_axis = np.arange(0, max_range, range_res)# 显示结果plt.plot(range_axis, mix_power)plt.xlabel('Range (m)')plt.ylabel('Power (W)')plt.title('AI FMCW Radar')plt.show()# 调用函数range_resolution = 1 # 距离分辨率max_range = 200 # 最大检测距离bandwidth = 2e9 # 频带宽度sweep_time = 5e-6 # 扫频时间target_ranges = [50, 80, 120] # 目标距离fmcw_radar(range_resolution, max_range, bandwidth, sweep_time, target_ranges)```以上是AI分时雷达源代码的简单实现。
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. 判断闰年这个程序用于判断一个年份是否为闰年。
源程序(带注释)#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 <iostream>
using namespace std;
struct node //定义结点类型
{int exp; //指数为正整数
double coef; //系数为双精度型
node *next; //指针域
};
class Poly
{private : //数据成员
node *head; //循环链表表头
public: //成员函数
Poly(); //构造函数,建立空多项式链表~Poly(){}; //析构函数,释放多项式链表void in1_Poly(); // 键盘输入多项式
void in2_Poly(int,int[],double[]); //由数组复制多项式链表
void de1_Poly(); //释放多项式链表
void prt_Poly(); //输出多项式链表
Poly operator+(Poly&); //多项式相加
Poly operator*(Poly&); //多项式相乘
};
Poly::Poly()
{node *p;
p=new node; //申请一个表头结点
p->exp=-1; //指针域值为-1
p->next=p; //指针域指向表头结点自身
head=p; //头指针也指向表头结点
return;
}
void Poly::in1_Poly()
{node*p,*k;
int e;
double c;
k=head; //记住多项式链尾
cout<<"输入:系数<空格>指数。
输入指数-1结束!"<<endl;
cin>>c>>e;
while(e>=0)
{p=new node; //申请一个新结点
p->exp=e;p->coef=c; //填入指数与系数
p->next=head; //新结点链到临时多项式链尾k->next=p;
k=p;
cin>>c>>e;
}
return;
void Poly::in2_Poly(int n,int e[],double c[])
{int k;
node *p;
for(k=n-1;k>=0;k--)
{p=new node; //申请一个新结点
p->coef=c[k];p->exp=e[k]; //置系数与指数域
p->next=head->next; //新结点链接到表头
head->next=p;
}
return;
}
void Poly::de1_Poly()
{node *p,*q;
q=head->next;
while(q!=head)
{p=q->next;delete q;q=p;}
q->next=head;
return;
}
void Poly::prt_Poly()
{node *k;
if(head->next==head)
cout<<"空表"<<endl;
k=head->next;
while(k!=head)
{cout<<"("<<k->coef<<","<<k->exp<<")"<<endl;
k=k->next;
}
return;
}
Poly Poly::operator +(Poly &p2)
{Poly p;
node *k,*q,*m,*n;
int e;
double c;
k=p.head; //记住多项式链尾
m=head->next;
n=p2.head->next;
while((m->exp!=-1)||(n->exp!=-1))
{if(m->exp==n->exp) //两个链表当前结点指数相同{c=m->coef+n->coef; //系数相加
e=m->exp; //复抄指数
m=m->next;n=n->next;
else if (m->exp>n->exp)
{c=m->coef;e=m->exp; //复抄链表1中的系数与指数值m=m->next;
}
else
{c=n->coef;e=n->exp; //复抄链表2中的系数与指数值n=n->next;
}
if(c!=0) //相加后系数不为0
{q=new node; //申请一个新结点
q->exp=e;q->coef=c;
q->next=p.head;k->next=q;
k=q; //记住多项式链尾
}
}
return(p);
}
Poly Poly::operator *(Poly &p2)
{Poly p,p1,p3; //p,p1与p3为临时多项式
node *q,*k,*m,*n;
m=head->next;
while(m->exp!=-1)
{p3=p;
k=p1.head; //记住临时多项式p1链尾
n=p2.head->next;
while(n->exp!=-1)
{q=new node; //申请一个新结点
q->exp=m->exp+n->exp; //置新结点指数值
q->coef=(m->coef)*(n->coef); //置新节点系数值
q->next=p1.head; //新结点链接到临时多项式p1链尾k->next=q;
n=n->next;
k=q;
}
p=p3+p1; //累加
p1.de1_Poly(); //释放临时多项式p1
p3.de1_Poly(); //释放临时多项式p3
m=m->next;
}
return(p);
}
//#include"Poly.h"
int main()
{Poly p1,p2,add_p,mul_p;
int pe1[6]={10,8,5,4,1,0};
double pc1[6]={3.0,4.0,-5.0,2.0,-3.0,10.0};
int pe2[6]={14,8,6,1,0};
double pc2[6]={4.0,3.0,-7.0,-2.0,5.0,-6.0};
p1.in2_Poly(6,pe1,pc1);
p2.in2_Poly(6,pe2,pc2);
p1.in1_Poly(); //键盘输入多项式p1的系数和指数p2.in1_Poly(); //键盘输入多项式p2的系数和指数cout<<"输出多项式p1:"<<endl;
p1.prt_Poly();
cout<<"输出多项式p2:"<<endl;
p2.prt_Poly();
add_p=p1+p2; //多项式p1与多项式p2相加cout<<" 输出多项式p=p1+p2:"<<endl;
add_p.prt_Poly();
mul_p=p1*p2; //多项p1与多项式p2相乘cout<<"输出多项式p=p1*p2:"<<endl;
mul_p.prt_Poly();
p1.de1_Poly(); //释放多项式p1
cout<<"输出多项式p1:"<<endl;
p1.prt_Poly();
p2.de1_Poly(); //释放多项式pi
cout<<" 输出多项式p2:"<<endl;
p2.prt_Poly();
return 0;
}。