c语言通讯录源代码

2024-05-03

c语言通讯录源代码(共6篇)

篇1:c语言通讯录源代码

C语言扫雷源代码.txt如果背叛是一种勇气,那么接受背叛则需要更大的勇气。爱情是块砖,婚姻是座山。砖不在多,有一块就灵;山不在高,守一生就行。#include #include #include #include

/*鼠标信息宏定义*/ #define WAITING 0xff00 #define LEFTPRESS 0xff01 #define LEFTCLICK 0xff10 #define LEFTDRAG 0xff19 #define RIGHTPRESS 0xff02 #define RIGHTCLICK 0xff20 #define RIGHTDRAG 0xff2a #define MIDDLEPRESS 0xff04 #define MIDDLECLICK 0xff40 #define MIDDLEDRAG 0xff4c #define MOUSEMOVE 0xff08 struct { int num;/*格子当前处于什么状态,1有雷,0已经显示过数字或者空白格子*/ int roundnum;/*统计格子周围有多少雷*/ int flag;/*右键按下显示红旗的标志,0没有红旗标志,1有红旗标志*/ }Mine[10][10];

int gameAGAIN=0;/*是否重来的变量*/ int gamePLAY=0;/*是否是第一次玩游戏的标志*/ int mineNUM;/*统计处理过的格子数*/ char randmineNUM[3];/*显示数字的字符串*/

int Keystate;int MouseExist;int MouseButton;int MouseX;int MouseY;int up[16][16],down[16][16],mouse_draw[16][16],pixel_save[16][16];

void MouseMath()/*计算鼠标的样子*/ {int i,j,jj,k;long UpNum[16]={ 0x3fff,0x1fff,0x0fff,0x07ff, 0x03ff,0x01ff,0x00ff,0x007f, 0x003f,0x00ff,0x01ff,0x10ff, 0x30ff,0xf87f,0xf87f,0xfc3f };long DownNum[16]={ 0x0000,0x7c00,0x6000,0x7000, 0x7800,0x7c00,0x7e00,0x7f00, 0x7f80,0x7e00,0x7c00,0x4600, 0x0600,0x0300,0x0300,0x0180 };for(i=0;i<16;i++){ j=jj=15;while(UpNum[i]!=0){ up[i][j]=UpNum[i]%2;j--;UpNum[i]/=2;} while(DownNum[i]!=0){ down[i][jj--]=DownNum[i]%2;DownNum[i]/=2;} for(k=j;k>=0;k--)up[i][k]=0;for(k=jj;k>=0;k--)down[i][k]=0;for(k=0;k<16;k++)/*四种组合方式*/ { if(up[i][k]==0&&down[i][k]==0)mouse_draw[i][k]=1;else if(up[i][k]==0&&down[i][k]==1)mouse_draw[i][k]=2;else if(up[i][k]==1&&down[i][k]==0)mouse_draw[i][k]=3;else mouse_draw[i][k]=4;} } mouse_draw[1][2]=4;/*特殊点*/ }

void Init(void);/*图形驱动*/ void MouseOn(int,int);/*鼠标光标显示*/ void MouseOff(void);/*鼠标光标隐藏*/ void MouseSetXY(int,int);/*设置当前位置*/ int LeftPress(void);/*左键按下*/ int RightPress(void);/*鼠标右键按下*/ int MiddlePress();void MouseGetXY(void);/*得到当前位置*/ int MouseStatus();void Control(void);/*游戏开始,重新,关闭*/ void GameBegain(void);/*游戏开始画面*/ void DrawSmile(void);/*画笑脸*/ void DrawRedflag(int,int);/*显示红旗*/ void DrawEmpty(int,int,int,int);/*两种空格子的显示*/ void GameOver(void);/*游戏结束*/ void GameWin(void);/*显示胜利*/ int MineStatistics(int,int);/*统计每个格子周围的雷数*/ int ShowWhite(int,int);/*显示无雷区的空白部分*/ void GamePlay(void);/*游戏过程*/ void Close(void);/*图形关闭*/

void main(void){ Init();MouseMath();//MouseOn(MouseX,MouseY);Control();Close();}

void Init(void)/*图形开始*/ { int gd=DETECT,gm;registerbgidriver(EGAVGA_driver);initgraph(&gd,&gm,“");} void Close(void)/*图形关闭*/ { closegraph();} /*鼠标光标显示*/ void MouseOn(int x,int y){ int i,j;int color;

for(i=0;i<16;i++)/*画鼠标*/ { for(j=0;j<16;j++){ pixel_save[i][j]=getpixel(x+j,y+i);/*保存原来的颜色*/ if(mouse_draw[i][j]==1)putpixel(x+j,y+i,0);else if(mouse_draw[i][j]==2)putpixel(x+j,y+i,15);} } } /*隐藏鼠标*/ void MouseOff(){ int i,j,x,y,color;x=MouseX;y=MouseY;for(i=0;i<16;i++)/*原位置异或消去*/ for(j=0;j<16;j++){ if(mouse_draw[i][j]==3||mouse_draw[i][j]==4)continue;color=getpixel(x+j,y+i);putpixel(x+j,y+i,color^color);putpixel(x+j,y+i,pixel_save[i][j]);} } void MouseSetXY(int x,int y)/*设置当前位置*/ { _CX=x;_DX=y;_AX=0x04;geninterrupt(0x33);} int LeftPress(void)/*鼠标左键按下*/ { _AX=0x03;geninterrupt(0x33);return(_BX&1);} int RightPress(void)/*鼠标右键按下*/ { _AX=0x03;geninterrupt(0x33);return(_BX&2);} /*是否按下中键

返回值同上 */ int MiddlePress(){ _AX=0x03;geninterrupt(0x33);return(_BX&4);} void MouseGetXY(void)/*得到当前位置*/ { _AX=0x03;geninterrupt(0x33);MouseX=_CX;MouseY=_DX;} /*鼠标按键情况,返回0表示只移动,返回1表示左右键同时按下,2表示只按了左键,3表示只按了右键*/

int MouseStatus(){ int x,y;int status;int press=0;

int i,j,color;status=0;/*默认鼠标没有移动*/

x=MouseX;y=MouseY;

while(x==MouseX&&y==MouseY&&status==0&&press==0){ if(LeftPress()&&RightPress())press=1;else if(LeftPress())press=2;else if(RightPress())press=3;MouseGetXY();if(MouseX!=x||MouseY!=y)status=1;} if(status)/*移动情况才重新显示鼠标*/ { for(i=0;i<16;i++)/*原位置异或消去*/ for(j=0;j<16;j++){ if(mouse_draw[i][j]==3||mouse_draw[i][j]==4)continue;color=getpixel(x+j,y+i);putpixel(x+j,y+i,color^color);putpixel(x+j,y+i,pixel_save[i][j]);} MouseOn(MouseX,MouseY);/*新位置显示*/ } if(press!=0)/*有按键的情况*/ return press;return 0;/*只移动的情况*/ }

void Control(void)/*游戏开始,重新,关闭*/ { int gameFLAG=1;/*游戏失败后判断是否重新开始的标志*/ while(1){ MouseStatus();if(gameFLAG)/*游戏失败后没判断出重新开始或者退出游戏的话就继续判断*/ {

GameBegain();/*游戏初始画面*/ GamePlay();/*具体游戏*/ if(gameAGAIN==1)/*游戏中重新开始*/ { gameAGAIN=0;continue;} }

gameFLAG=0;if(LeftPress())/*判断是否重新开始*/ { if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85){ gameFLAG=1;continue;} } if(kbhit())/*判断是否按键退出*/ break;} } void DrawSmile(void)/*画笑脸*/ { MouseOff();setfillstyle(SOLID_FILL,YELLOW);fillellipse(290,75,10,10);setcolor(YELLOW);setfillstyle(SOLID_FILL,BLACK);/*眼睛*/ fillellipse(285,75,2,2);fillellipse(295,75,2,2);setcolor(BLACK);/*嘴巴*/ bar(287,80,293,81);MouseGetXY();MouseOn(MouseX,MouseY);} void DrawRedflag(int i,int j)/*显示红旗*/ { MouseOff();setcolor(7);setfillstyle(SOLID_FILL,RED);bar(198+j*20,95+i*20,198+j*20+5,95+i*20+5);setcolor(BLACK);line(198+j*20,95+i*20,198+j*20,95+i*20+10);MouseGetXY();MouseOn(MouseX,MouseY);} void DrawEmpty(int i,int j,int mode,int color)/*两种空格子的显示*/ { MouseOff();setcolor(color);setfillstyle(SOLID_FILL,color);if(mode==0)/*没有单击过的大格子*/ bar(200+j*20-8,100+i*20-8,200+j*20+8,100+i*20+8);else if(mode==1)/*单击过后显示空白的小格子*/ bar(200+j*20-7,100+i*20-7,200+j*20+7,100+i*20+7);MouseGetXY();MouseOn(MouseX,MouseY);} void GameBegain(void)/*游戏开始画面*/ { int i,j;cleardevice();if(gamePLAY!=1){ MouseSetXY(290,70);/*鼠标一开始的位置,并作为它的初始坐标*/ MouseX=290;MouseY=70;} gamePLAY=1;/*下次按重新开始的话鼠标不重新初始化*/ mineNUM=0;setfillstyle(SOLID_FILL,7);bar(190,60,390,290);for(i=0;i<10;i++)/*画格子*/ for(j=0;j<10;j++)DrawEmpty(i,j,0,8);setcolor(7);DrawSmile();/*画脸*/ randomize();for(i=0;i<10;i++)/*100个格子随机赋值有没有地雷*/ for(j=0;j<10;j++){ Mine[i][j].num=random(8);/*如果随机数的结果是1表示这个格子有地雷*/ if(Mine[i][j].num==1)mineNUM++;/*现有雷数加1*/ else Mine[i][j].num=2;Mine[i][j].flag=0;/*表示没红旗标志*/ } sprintf(randmineNUM,”%d“,mineNUM);/*显示这次总共有多少雷数*/ setcolor(1);settextstyle(0,0,2);outtextxy(210,70,randmineNUM);mineNUM=100-mineNUM;/*变量取空白格数量*/ } void GameOver(void)/*游戏结束画面*/ { int i,j;setcolor(0);for(i=0;i<10;i++)for(j=0;j<10;j++)if(Mine[i][j].num==1)/*显示所有的地雷*/ {

DrawEmpty(i,j,0,RED);setfillstyle(SOLID_FILL,BLACK);MouseOff();fillellipse(200+j*20,100+i*20,7,7);

MouseGetXY();MouseOn(MouseX,MouseY);} } void GameWin(void)/*显示胜利*/ { setcolor(11);settextstyle(0,0,2);outtextxy(230,30,”YOU WIN!“);} int MineStatistics(int i,int j)/*统计每个格子周围的雷数*/ { int nNUM=0;if(i==0&&j==0)/*左上角格子的统计*/ { if(Mine[0][1].num==1)nNUM++;if(Mine[1][0].num==1)nNUM++;if(Mine[1][1].num==1)nNUM++;} else if(i==0&&j==9)/*右上角格子的统计*/ { if(Mine[0][8].num==1)nNUM++;if(Mine[1][9].num==1)nNUM++;if(Mine[1][8].num==1)nNUM++;} else if(i==9&&j==0)/*左下角格子的统计*/ { if(Mine[8][0].num==1)nNUM++;if(Mine[9][1].num==1)nNUM++;if(Mine[8][1].num==1)nNUM++;} else if(i==9&&j==9)/*右下角格子的统计*/ { if(Mine[9][8].num==1)nNUM++;if(Mine[8][9].num==1)nNUM++;if(Mine[8][8].num==1)nNUM++;} else if(j==0)/*左边第一列格子的统计*/ { if(Mine[i][j+1].num==1)nNUM++;if(Mine[i+1][j].num==1)nNUM++;if(Mine[i-1][j].num==1)nNUM++;if(Mine[i-1][j+1].num==1)nNUM++;if(Mine[i+1][j+1].num==1)nNUM++;} else if(j==9)/*右边第一列格子的统计*/ { if(Mine[i][j-1].num==1)nNUM++;if(Mine[i+1][j].num==1)nNUM++;if(Mine[i-1][j].num==1)nNUM++;if(Mine[i-1][j-1].num==1)nNUM++;if(Mine[i+1][j-1].num==1)nNUM++;} else if(i==0)/*第一行格子的统计*/ { if(Mine[i+1][j].num==1)nNUM++;if(Mine[i][j-1].num==1)nNUM++;if(Mine[i][j+1].num==1)nNUM++;if(Mine[i+1][j-1].num==1)nNUM++;if(Mine[i+1][j+1].num==1)nNUM++;} else if(i==9)/*最后一行格子的统计*/ { if(Mine[i-1][j].num==1)nNUM++;if(Mine[i][j-1].num==1)nNUM++;if(Mine[i][j+1].num==1)nNUM++;if(Mine[i-1][j-1].num==1)nNUM++;if(Mine[i-1][j+1].num==1)nNUM++;} else/*普通格子的统计*/ { if(Mine[i-1][j].num==1)nNUM++;if(Mine[i-1][j+1].num==1)nNUM++;if(Mine[i][j+1].num==1)nNUM++;if(Mine[i+1][j+1].num==1)nNUM++;if(Mine[i+1][j].num==1)nNUM++;if(Mine[i+1][j-1].num==1)nNUM++;if(Mine[i][j-1].num==1)nNUM++;if(Mine[i-1][j-1].num==1)nNUM++;} return(nNUM);/*把格子周围一共有多少雷数的统计结果返回*/ } int ShowWhite(int i,int j)/*显示无雷区的空白部分*/ { if(Mine[i][j].flag==1||Mine[i][j].num==0)/*如果有红旗或该格处理过就不对该格进行任何判断*/ return;mineNUM--;/*显示过数字或者空格的格子就表示多处理了一个格子,当所有格子都处理过了表示胜利*/ if(Mine[i][j].roundnum==0&&Mine[i][j].num!=1)/*显示空格*/ { DrawEmpty(i,j,1,7);

Mine[i][j].num=0;} else if(Mine[i][j].roundnum!=0)/*输出雷数*/ { DrawEmpty(i,j,0,8);sprintf(randmineNUM,”%d“,Mine[i][j].roundnum);setcolor(RED);MouseOff();outtextxy(195+j*20,95+i*20,randmineNUM);MouseGetXY();MouseOn(MouseX,MouseY);Mine[i][j].num=0;/*已经输出雷数的格子用0表示已经用过这个格子*/ return;} /*8个方向递归显示所有的空白格子*/ if(i!=0&&Mine[i-1][j].num!=1)ShowWhite(i-1,j);if(i!=0&&j!=9&&Mine[i-1][j+1].num!=1)ShowWhite(i-1,j+1);if(j!=9&&Mine[i][j+1].num!=1)ShowWhite(i,j+1);if(j!=9&&i!=9&&Mine[i+1][j+1].num!=1)ShowWhite(i+1,j+1);if(i!=9&&Mine[i+1][j].num!=1)ShowWhite(i+1,j);if(i!=9&&j!=0&&Mine[i+1][j-1].num!=1)ShowWhite(i+1,j-1);if(j!=0&&Mine[i][j-1].num!=1)ShowWhite(i,j-1);if(i!=0&&j!=0&&Mine[i-1][j-1].num!=1)ShowWhite(i-1,j-1);} void GamePlay(void)/*游戏过程*/ { int i,j,Num;/*Num用来接收统计函数返回一个格子周围有多少地雷*/ for(i=0;i<10;i++)for(j=0;j<10;j++)Mine[i][j].roundnum=MineStatistics(i,j);/*统计每个格子周围有多少地雷*/ while(!kbhit()){ MouseStatus();if(LeftPress())/*鼠标左键盘按下*/ {

if(MouseX>280&&MouseX<300&&MouseY>65&&MouseY<85)/*重新来*/ {

gameAGAIN=1;break;} if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/*当前鼠标位置在格子范围内*/ { j=(MouseX-190)/20;/*x坐标*/ i=(MouseY-90)/20;/*y坐标*/ if(Mine[i][j].flag==1)/*如果格子有红旗则左键无效*/ continue;if(Mine[i][j].num!=0)/*如果格子没有处理过*/ { if(Mine[i][j].num==1)/*鼠标按下的格子是地雷*/ {

GameOver();/*游戏失败*/ break;} else/*鼠标按下的格子不是地雷*/ {

Num=MineStatistics(i,j);if(Num==0)/*周围没地雷就用递归算法来显示空白格子*/ ShowWhite(i,j);else/*按下格子周围有地雷*/ { MouseOff();sprintf(randmineNUM,”%d",Num);/*输出当前格子周围的雷数*/ setcolor(RED);outtextxy(195+j*20,95+i*20,randmineNUM);mineNUM--;

MouseGetXY();MouseOn(MouseX,MouseY);}

Mine[i][j].num=0;/*点过的格子周围雷数的数字变为0表示这个格子已经用过*/ if(mineNUM<1)/*胜利了*/ { GameWin();break;} } } } } if(RightPress())/*鼠标右键键盘按下*/ {

if(MouseX>190&&MouseX<390&&MouseY>90&&MouseY<290)/*当前鼠标位置在格子范围内*/ { j=(MouseX-190)/20;/*x坐标*/ i=(MouseY-90)/20;/*y坐标*/

if(Mine[i][j].flag==0&&Mine[i][j].num!=0)/*本来没红旗现在显示红旗*/ { DrawRedflag(i,j);Mine[i][j].flag=1;} else if(Mine[i][j].flag==1)/*有红旗标志再按右键就红旗消失*/ { DrawEmpty(i,j,0,8);Mine[i][j].flag=0;} } delay(1000000);delay(1000000);delay(1000000);delay(1000000);delay(1000000);} } }

篇2:c语言通讯录源代码

//定义最多的航班数 #define PRINT “%dtt%stt%stt星”,s[i].num,s[i].start,s[i].over,s[i].time,s[i].count

//宏定义输出格式

struct air

{ int num;

char start[20];char over[20];char time[10];int count;

}s[N];

int i,a,m=0;char ii[10];//定义结构体数组

//定义航班号 //航班起始站

//终点站

//飞行时间

//机票数量

期%stt%dn //定义全局变量

void add();//函数声明增加航班信息函数

void print();

//显示航班信息 void search();//查找航班信息 void dingpiao();//订票业务 void tuipiao();//退票 void read();//读取文件

void save();//保存文件 void output();//输出格式 void paixu();//航班排序 void chushihua();//系统初始化 void build();//建立数据文件 void paixu1();//按航班号从小到大排序 void paixu2();//从大到小 int head();//进入订票系统

int main()//主函数 { int j;

system(“color b0”);chushihua();//系统初始化判断是否存在原始数据文件

system(“cls”);

head();//打印出系统主界面

system(“cls”);do {

printf(“================================== ”);

printf(“1.增加航班信息n”

“t2.浏览航班信息n”

“tt3.查找航班信息(按航班号)ttn”

“ttt4.航班排序(按航班号)n”

“tttt5.订票业务n”

“ttttt6.退票业务n”

“tttttt0.退出n”);printf(“================================== ”);

printf(“请在0-6中选择以回车键结束: ”);scanf(“%d”,&j);switch(j){

}

case 1: add();system(“cls”);

break;

//调用增加航班函数

case 2:print();system(“cls”);//调用显示模块

break;case 3:search();system(“cls”);//调用查找模块

break;case 4:paixu();system(“cls”);//调用排序函数

break;case 5:dingpiao();system(“cls”);break;

//调用订票模块

case 6:tuipiao();system(“cls”);//调用退票模块

break;

case 0:

//退出系统

save();system(“cls”);

printf(“nnnttttnnt谢谢使用,再见!”);

printf(“nnnnnnnnnnnnn”);

break;} }while(j!=0);//判断是否调用其他函数

void chushihua()//定义系统初始化函数 { if(access(“hangban.dat”,0)){

build();} else

read();}

void build(){

//定义建立数据文件函数

FILE *fp;//定义文件指针

if((fp=fopen(“hangban.dat”,“wb”))==NULL){

//打开文件并判定是否出错

printf(“创建文件失败!”);//打印出错提示

getchar();return;} printf(“请依次输入航班信息(以回车键结束):n”);

//打印提示信息 printf(“------------n”);for(i=0;i

printf(“请输入航班号: ”);

scanf(“%d”,&s[i].num);//输入航班号 printf(“请输入起始站: ”);scanf(“%s”,s[i].start);//输入起始站 printf(“请输入终点站: ”);scanf(“%s”,s[i].over);//输入终点站 printf(“请输入时间(星期几): ”);scanf(“%s”,s[i].time);//输入时间 printf(“请输入机票数: ”);scanf(“%d”,&s[i].count);//输入机票数 fwrite(&s[i],sizeof(struct air),1,fp);m++;printf(“添加完毕,是否继续添加?请键入y或n以回车键结束:”);scanf(“%s”,ii);if(strcmp(ii,“y”)!=0)//判断是否继续添加航班信息 { fclose(fp);

//关闭文件

return;} } }

void read()

//定义读取文件函数 { FILE *fp;if((fp=fopen(“hangban.dat”,“r”))==NULL){

} printf(“创建文件失败!”);getchar();return;} i=0;while(!feof(fp)){ fread(&s[i],sizeof(struct air),1,fp);

i++;m++;//计算存在航班数 } m--;fclose(fp);printf(“请稍候,正在初始化”);for(a=0;a<3;a++){

printf(“.”);

Sleep(600);} printf(“n”);

//逐块读取数据

void save()//定义保存函数 { FILE *fp;if((fp=fopen(“hangban.dat”,“wb”))==NULL)

{

printf(“创建文件失败!”);getchar();return;} for(i=0;i

//逐块保存数据

fwrite(&s[i],sizeof(struct air),1,fp);fclose(fp);printf(“正在保存数据并退出”);for(a=0;a<3;a++)

} {

printf(“.”);

Sleep(600);} printf(“n”);printf(“n”);void add(){ do{

//定义增加航班信息函数

printf(“请依次输入您要增加的航班信息(以回车键结束): n”);

//打印提示信printf(“------------n”);

printf(“请输入航班号: ”);

scanf(“%d”,&s[m].num);//读取航班号 printf(“请输入起始站: ”);scanf(“%s”,s[m].start);//读取起始站 printf(“请输入终点站: ”);scanf(“%s”,s[m].over);//读取终点站 printf(“请输入时间(星期几): ”);scanf(“%s”,s[m].time);//读取时间 printf(“请输入机票数: ”);scanf(“%d”,&s[m].count);//读取机票数 m++;

printf(“添加完毕,是否继续添加?请键入y或n以回车键结束:”);

scanf(“%s”,ii);}while(!strcmp(ii,“y”));//判断是否继续添加

printf(“正在保存,请稍候”);for(a=0;a<5;a++)

{

printf(“.”);

Sleep(600);

}

printf(“n”);}

void output()//定义输出格式函数 {

printf(“航班号tt起始站tt终点站tt时间tt机票数n”);//信息标题

for(i=0;i

} printf(PRINT);//打印出信息

void print()//定义显示航班信息函数 { printf(“正在加载,请稍候”);

for(a=0;a<5;a++)

{

printf(“.”);

Sleep(400);

}

printf(“n”);

system(“cls”);printf(“n目前我们有如下航班:nn”);output();

//调用输出格式函数

printf(“n请按回车键返回上层菜单 ”);getchar();getchar();}

void search()//定义查询函数 { int n;

do {

printf(“n请输入航班号: ”);

scanf(“%d”,&n);//输入查询的航班号

printf(“正在查询”);

for(a=0;a<5;a++)

{

printf(“.”);

Sleep(400);

}

printf(“n”);

for(i=0;i

{

if(s[i].num==n)//按航班号判定输出条件

{

printf(“n您所查找的航班信息为:n ”);

printf(“航班号tt起始站tt终点站tt时间tt机票数 nn”);

printf(PRINT);//显示信息

printf(“n查询完毕,按回车键继续”);

getchar();

getchar();

return;

} } printf(“n对不起,没有您需要的信息!n ”);printf(“是否重新查找?请键入y或n以回车键结束 ”);scanf(“%s”,ii);}while(!strcmp(ii,“y”));//判定是否重新查找

}

void dingpiao()//定义订票业务函数 { int n,x;char a[10]=“y”;do {

search();//调用查询模块

if(!strcmp(ii,“n”))

{

printf(“对不起!没有找到您所需要的航班,所以不能订票。n”);所需航班

printf(“n请按回车键返回上层菜单 ”);

getchar();

getchar();

strcpy(ii,“n”);

break;

}

do

{

printf(“请输入您要订的机票数(以回车键结束): ”);

scanf(“%d”,&n);//输入所订机票数

printf(“请稍候,正在订票”);

for(x=0;x<3;x++)

{

printf(“.”);

Sleep(600);

}

printf(“n”);

if(n<=0)

//判定机票数是否出错

//未查找到

{ printf(“输入错误!至少需订1张机票。n”);} else if(s[i].count==0)//判定机票是否售完 {

} printf(“对不起,你所选择的航班的机票已售完!n”);break;else if(s[i].count!=0&&s[i].count>=n)//判定机票数是否大于等于订票数 { s[i].count=s[i].count-n;printf(“订票成功!”);break;} else if(s[i].count

printf(“对不起,你所选择的航班只剩 %d张机票n”, s[i].count);

printf(“是否需要重新输入机票数?n请输入y或n以回车键结束: ”);//判定是否重新输入订票数

scanf(“%s”,a);

}

printf(“请稍候,正在订票”);

for(x=0;x<3;x++)

{

printf(“.”);

Sleep(600);

}

printf(“n”);

} }while(!strcmp(a,“y”));printf(“是否需要订其他航班的机票?n请输入y或n以回车键结束: ”);scanf(“%s”,a);}while(!strcmp(a,“y”));//判定是否继续订票

void tuipiao()//定义退票函数 { int n,x;char a[10];do {

search();//调用查询函数

if(!strcmp(ii,“n”))

{

printf(“对不起!没有找到您所需要的航班,所以不能退票。n”);printf(“n请按回车键返回上层菜单 ”);getchar();getchar();strcpy(ii,“n”);break;} printf(“请输入您要退的机票数目: ”);scanf(“%d”,&n);

//输入所退票数 printf(“请稍候,正在退票”);for(x=0;x<3;x++){

printf(“.”);

Sleep(600);} printf(“n”);if(n<=0)

//判定票数是否有效

printf(“输入错误!至少需退1张机票。”);else { s[i].count=s[i].count+n;printf(“退票成功!”);}

printf(“是否继续? 请键入y或n以回车键结束: ”);scanf(“%s”,a);

//判定是否继续退票

}while(!strcmp(a,“y”));//判定并跳出循环

}

void paixu()//定义排序函数 { int n;

printf(“n******************************************************************************** ”);

printf(“1.按航班号从小到大排序n”

“t2.按航班号从大到小排序n”);printf(“******************************************************************************** ”);

printf(“请在1-2中选择以回车键结束: ”);scanf(“%d”,&n);//输入排序方式

switch(n){

case 1:paixu1();//调用从小到大排序函数

break;

case 2:paixu2();//调用从大到小排序函数

break;} printf(“排序后的航班信息为:n”);output();

//显示排序后航班信息

printf(“n请按回车键返回上层菜单 ”);

getchar();getchar();/*for(a=0;a<5;a++)

{

printf(“.”);

Sleep(400);

}

printf(“n”);*/ }

void paixu1()//定义从小到大排序函数 { int k,j;struct air t;for(i=0;i

{

k=i;

for(j=i+1;j

if(s[k].num>s[j].num)

k=j;

if(i!=k)

{

t=s[k];

s[k]=s[i];

s[i]=t;

} } printf(“正在排序,请稍后”);

for(a=0;a<5;a++)

{

printf(“.”);

Sleep(400);

}

printf(“n”);}

void paixu2()//定义从大到小排序函数 { int k,j;struct air t;for(i=0;i

k=i;

for(j=i+1;j

if(s[k].num

k=j;

if(i!=k)

{

t=s[k];

s[k]=s[i];

s[i]=t;

} } printf(“正在排序,请稍后”);

for(a=0;a<5;a++){

printf(“.”);

Sleep(400);} printf(“n”);}

int head()

//进入订票系统

{ printf(“===================n”);printf(“*

*n”);

printf(“*

欢迎使用机票订票管理系统

*n”);printf(“*

*n”);printf(“*

此处可以适当的加点文字

*n”);printf(“*

*n”);printf(“===================n”);printf(“请按回车键进入界面”);getchar();printf(“正在进入系统选项”);for(a=0;a<3;a++){ printf(“.”);Sleep(600);

篇3:C语言源代码抄袭识别的研究

程序设计是各大高校计算机教育教学中必不可少的实践环节, 然而部分学生由于各种原因会选择抄袭其他学生的程序。根据相关机构的调查显示:高达85.4%[1]的学生承认抄袭过别人的编程作业。学生们在抄袭时会进行一些简单的修改, 使抄袭后的程序尽可能不被发现, 如果要靠人工主观地逐个查找, 不仅花费了更多的时间和精力, 也很难准确辨认是否抄袭。

本文主要研究通过对C语言源代码进行一系列规范化处理, 再针对规范代码进行数字签名比较而识别代码抄袭的方法。本文中所提及的规范化过程设计词法分析的方法, 对变量和函数进行无类型化处理, 使用语法分析对表达式进行规范化等处理过程。

1 常见的抄袭检测方法

现在的程序代码复制检测系统大多采用基于属性计数与基于结构度量相结合的方法检测程序代码的相似性[2]。如美国Stanford大学的Moss (Measure Of Software Similarity) 系统[3]、德国Karlsruhe大学的JPlagn、Wichita州立大学的Sire (Software Similarity Testor) 、悉尼大学的YAP[4] (Yet Another Plague) 系列等。近年来, 程序代码相似度的检测都是用各种方法综合属性计数和程序结构度量[5]。此外, 还有人提出用神经网络来检测程序的相似度。

由上述国内外的研究情况来看, 大多都采用了属性计数和程序结构度量等方法[6], 而结合了词法分析和语法分析的对源代码的处理的研究比较少见。本文提出一种词法分析与语法分析相结合的处理方法, 先对源代码进行规范化, 而后就是词法分析无类型化变量和函数, 再是对代码中的表达式进行语法分析层面上的基于语法抽象树的处理, 最后MD5算法对比分析得出两两抄袭的源代码。

2 相似度比较研究处理方法

本抄袭检测识别方法共分为4个阶段:代码规范化;词法分析;语法分析;MD5分析对比。如图1所示, 源代码程序经过前期的规范化和词法分析的预处理, 提取出源程序的token, 再经过表达式在语法分析层面上的处理, 最后通过MD5算法对字符序列的比对, 得出相应的结果值。1

2.1 代码的规范化

对源代码进行如下的规范化: (1) 将源代码从文件以字符串的形式读入, 进行第一个阶段的词法分析, 提取到一个称之为“单词”的字符串; (2) 对 (1) 中得到的单词进行第二个阶段的词法分析, 同时删除某些不影响程序正确运行的无意义或无效的单词或语句。如删除注释语句、输出语句等, 并设置没有被删除的单词的部分属性; (3) 删除只声明而没有使用的变量的声明语句。

2.2 词法分析的处理

在经过以上的规范化处理之后, 对其进行更深层次的词法分析处理。 (1) 从前一阶段处理完的结果中读入规范化的源代码, 提取出一个源程序的token字符串; (2) 对token进行第二个阶段的词法分析, 对一些变量的类型关键字进行合并; (3) 对数组进行规范化处理; (4) 对枚举类型名的定义、变量的声明、枚举成员即枚举符的名字进行统一命名替换, 整体规划识别; (5) 将各种类型的变量的声明放在一起, 只保留一个类型声明符“var”, 并将所有的变量名都按照它们各自在程序中使用的先后顺序对应地来进行逐一排序命名和替换, 同时, 也将区分结构体和共用体的成员变量名、函数名、函数参数名以及全局和局部变量名。另外, 宏定义的常量直接用该常量值替换。

具体的算法流程如下:

2.3 语法分析的处理

语法分析的处理主要分为两个过程。首先搜索出要规范化的表达式, 此过程要考虑一些特殊的情况, 在搜索的过程中先做一次处理, 例如函数参数和数组下标中的表达式, 这些属于嵌套于表达式中的表达式。然后针对表达式进行分析和处理;先进行语法分析, 在语法分析的代码中嵌套一些语义动作创建一棵抽象语法树, 然后对抽象语法树进行一系列的分析处理。

2.3.1 搜索表达式

在词法分析的基础上, 对每个词素进行分析并封装成一个结点, 结点类型表摘抄如下。

2.3.2 表达式的分析和处理

经过前面的搜索, 已经找出需要进行规范化处理的表达式, 接着进行表达式的规范化。可分为以下几个步骤:

⑴统一类型。语法分析器只有var, num和运算符三种结点, 同等级的var类型结点只需要规范化顺序, 同等级的num类型需要合并, 因此需要把所有类型统一为var类型。

⑵简单替换。++var、--var、var+=1、var=var+1、var-=1、var=var-1等转换为var++或var--。

⑶对表达式进行语法分析, 并根据语法分析过程构造抽象语法树。

⑷基于抽象语法树的处理。

a、如果抽象语法树中存在单目“+”则把单目“+”去掉;等

b、给每个结点赋一个等级, 赋值规则如下:

(1) 初始化一个全局变量count=0, 结点等级属性为level;

(2) 根节点level为“0”, 然后从左到右判断子结点, 如果该结点为叶子结点 (不是运算符结点) , 则level=parentNode.level, 如果当前结点为运算符并且与父节点相同, 则level=parentNode.level, 如果当前结点为运算符并且与父节点不相同, 则level=parentNode.level+count, count加1。

c、找到相同等级的操作数。

d、对同等级的操作数进行排序, 先用快速排序把操作数分成非数字var和数字num, 然后再根据var对应的hashCode按从小到大对var进行排序, 对后面的num进行合并。

e、用排序后的结点新建一棵树, 先把优先级属性level长度较长的结点建成一棵树, 然后将根结点插入到上一个等级的线性表中, 直到最后只剩下一个等级的根结点。

2.4 MD5算法比对分析

MD5的全称是Message-Digest Algorithm 5 (信息-摘要算法) 。MD5通常用于文件的数字签名, 它将整个文件当作一个文本信息, 通过其不可逆的字符串变换算法, 产生了一个唯一的MD5信息摘要值。如果文件的内容发生了任何形式的改变, 只要使用MD5重新计算这个文件的信息摘要值, 就会发现信息摘要和原来不相同, 由此可以确定文件被修改过。

将处理后的代码作为MD5的输入, 经过MD5处理后得到一个有32个十六进制表示的整数。再比较每份代码最终得出的MD5值, 若两份代码的MD5值相同, 则说明这两份代码是相似的。

3 实验与分析

3.1 抄袭检测实验

实验对test01.txt和test02.txt的C语言程序进行了测试, 测试源程序分别对应了10种抄袭手段, 包括:完整拷贝;修改注释;添加或改变输出语句;标识符重命名;变量排序;常量替换;改变表达式中的部分操作符或者操作数顺序;改变数据类型;增加冗余的语句或者变量;表达式拆分。代码检测结果与系统对比结果如图4所示:

由上述的实验结果可以看出本文介绍的抄袭识别检测方法对不同的抄袭行为可以一并检测出来, 尤其在对完全拷贝、修改注释、常量替换和添加无用变量等的抄袭手段, 可以快速、准确地检测出来。

3.2 MD5结果值分析

根据上面的实验结果计算得出test01和test02的MD5值都为BC7667EEF8F8D42B5663E6EB12DF2B0D。由此可以做出如下判断, 这两份源代码文件, 在经过本文的抄袭识别的检测方法处理之后, 是完全一致的, 即可知test01和test02有相互抄袭的嫌疑。

4 结束语

本文主要基于词法分析和语法分析对C语言源代码进行了规范化处理, 基本上能排除以下的抄袭手段: (1) 逐字原样拷贝原程序; (2) 更改注释语句; (3) 更改空行及程序的格式; (4) 重命名标识符; (5) 调整代码块中变量的声明位置; (6) 改变表达式语句中操作符和操作数的顺序; (7) 改变数据类型。此外, 本系统存在以下不足: (1) 未能全面考虑所有情况, 只能针对常见的情况进行处理, 系统可靠性不足; (2) 由于对于源程序只是进行了简单的词法和语法分析, 并没有进行语义分析, 所以对于某一些改动, 不能找出办法来检测和解决。下一步我们将继续完善本设计, 并且利用程序切片等技术对C语言代码进行语义层面的分析, 排除更多的抄袭手段, 提高系统的可靠性。

摘要:本文提出一种对C语言代码进行规范化的方法通过对程序代码中的变量和函数进行了无类型化处理, 对程序中的表达式进行规范化后再进行相似度的对比。实验结果表明, 经过上述处理后可以排除常见的不涉及语义层面的大部分抄袭手段。

关键词:抄袭检测,词法分析,类型替换,语法分析,抽象语法树

参考文献

[1]钟美, 张丽萍, 刘东升.基于XML的C代码检测算法[A]《计算机工程与应用》.2011

[2]Prechelt L, Malpohl G, Philippsen M.FindingPlagiarisms amonga Set of Programs with JPlag[J].Journal of Universal ComputerScience, 2002, 1016-1038

[3]熊浩, 晏海华, 郭涛, 等.代码相似性检测技术:研究综述[J].计算机科学, 2010, 37 (8) :9-14.

[4]Michael J.Wise.YAP3:IMPROVED DETECTION OFSIMILARITIES IN_COMPUTER PROGRAM AND OTHERTEXTS[Z].Department of Computer Science, University of Syd-ney, Australia

[5]何仲英.C语言源代码相似度比较的研究与实现 (.学士学位论文) .广东:广东金融学院, 2012

篇4:c语言通讯录源代码

关键词:C语言;编程技巧;应用

中图分类号:G642 文献标识码:B 文章编号:1002-7661(2014)24-002-01

C语言属于一种程序设计类语言,其使用在数据处理方面有突出作用,在很多的学习工作领域都有大规模的应用,像是软件开发、科研建设等都离不开C语言的利用。C语言编程,就是用C语言进行相应计算机代码的编写,C语言的学习,需要掌握一定的技巧,不然没有头绪的学习是得不到良好学习效果的,掌握了C语言的学习技巧,才能够更好的促进C语言的学习[1]。

一、C语言与C语言的优势

当下世界上使用范围最广,流行度最高的计算机编程语言便是C语言,要想良好的学习和使用C语言,必须加深对C语言的了解。C语言发源于上个世纪60年代,成熟在70年代,最近半个世纪的使用过程中,C语言表现了如下几种优势:第一,C语言简洁紧凑,使用方式灵活方便,且语法运用宽松不受限制,书写方式自由随意,结合了高级编程语言的结构性与实用性的特点,组成了一种全新式的有强大使用功能的编程语言;第二,C语言有广泛的应用层面,且可植性强,C语言在各种系统中都能够被兼容使用;第三,C语言的运算符丰富多样,各种数据结构类型的使用,除了C语言可以将各种复杂的数据运算完成外,还具有强大的图形功能;第四,结构式的语言特点分割了代码和数据,其中的程序表现层次条理清楚,后期的使用和维护工作便利,使用C语言可以访问物理地址[2]。从中可知,C语言具有强大的功能,因此在信息技术的领域中,C语言所占据的地位是非常高的。

二、C语言学习难度大的原因

因为C语言所具备的各种强大功能,因此人们对其的关注程度也越来越高,想要学会并且全面掌握C语言技术的人也越来越多。可是大部分在刚刚接触C语言的时候,觉得C语言过于枯燥乏味,学习了一段时间后都没有掌握到多少知识,也没有一个清楚全面的认识对于C语言,觉得十分的茫然。出现这种情况的原因还是因为C语言是一种高级语言,这种语言和面向对象的语言之间存在较大的差别,在C语言的学习过程中,学习者难以从中看到形象的画面,只能够在编程程序成功后,经过调试才可以看到效果。在编程的过程中,只要出现一点粗心错误,就会让整个编程无法成功调试,出现一些错误的现象,除此之外,C语言的使用过程中,包含了大量的算法与数据组成结构,这些没有任何的技巧,就是要死记硬背,所以很多学习者在遇到这些枯燥晦涩的问题时,就会丧失学习兴趣,降低学习效率和学习质量。

三、C语言编程技巧的应用

1、用空间换时间

例如对字符串进行赋值,方法有以下几种:

(1)基础方法:

#define LEN 32

Char string I[LEN];

memset(string 1,0,LEN);

ctrcpy(string 1,“this is a example”) ;

(2)方法2:

const char string2[LEN]=“this is a example”;

char*cp;

cp=string2;

从这个案例中可以发现,方法(1)与方法(2)在电脑上的执行效率是不一样的,第一种方法必须使用两个字符函数才可以完成,而第二种方法直接使用指针就可以完成了。但是第二种方法相比第一种方法灵活性欠缺,如果这个字符串有不断变化的要求,那么第一种方法就有很大的使用优势了,第二种方法要占用较大的内存,但是效率比第一种更高[3]。

2、位运算掌握

在利用位运算的时候,能够让代码变得更加的简洁,提升运算效率,让问题得到顺利解决。在所有的计算机程序之中,最小的数据单位就是位,无特殊情况的话,所有的数据运算和操作都可以使用“位运算”方式完成,从这里就就可以看出,在编程语言之中,“位”有多么重要了。“位”使用在C语言的运算过程中,可以提升工作效率,顺利的将更多难度大的问题解决。

3、C语言特有函数掌握

很多时候进行编程,都需要使用C语言的特有函数,函数不是一种数据,而是一种功能,每一个函数都能够执行一定的功能建设,而相对应的函数名称中也将函数的功能反映了出来。开展函数定义的时候,要求操作者包含名字、参数名、类型和函数返回类型的数据,编译过程中,数据库系统是之前被定义好了的,使用过程中只要通过#include这项指令,把各种相关的头文件包含在本文件当中就可以了。

但是不管在C语言编程过程中使用怎样的技巧,还是需要做到具体问题具体分析,以上各种技巧使用起来因人而异,整体是能够提升编程效率,在学习过程中使用会获得一定的成效,而降低学习的枯燥感,拓宽C语言的使用范围。

C语言的学习过程中,每一位学习者都应该对C语言的特性有充分的了解,学习并且掌握每一种编程技巧,学习好了C语言的编程技巧,可以帮助学生提升C语言的学习兴趣,让学生的学习目的性更强,提升学生的C语言学习效率与学习质量。

参考文献:

[1] 余 勍.王 捷.浅谈C语言编程技巧在C语言学习中的应用[J].信息通信,2013,07:108.

[2] 赵 黎.范君君.C语言编程技巧在C语言学习中的应用研究[J]. 信息与电脑(理论版),2014,09:252.

篇5:c语言通讯录源代码

1.扫描整个棋盘,分别扫描四个方向是否有5个连子,网上找了很多五子棋源码都是用此算法,这意味着每下一个棋子都要扫描一遍19×19的棋盘,复杂而且低效,代码略。

2.每下一字,从该子开始扫描其四个方向(例如:从该子的(x-4,y)坐标开始扫描横向)是否存在5个连子。此算法较为常用,而且不涉及更为复杂的数据结构。

另外,为解决扫描越界的问题,在声明棋盘棋子位置时,可声明一个(4+19+4)×(4+19+4)的棋盘,而让棋子偏移(4,4)个坐标。

算法2源代码如下:

static void IfWin(int x,int y,int color)

{

TCHAR win[20];

int a,b;

if(stone[x][y]==1)

wcscpy_s(win,_T(“黑棋胜利!”));

else

wcscpy_s(win,_T(“白棋胜利!”));

for(a=x-4;a<=x+4;a++)//判断横

if(stone[a][y]==color&&stone[a+1][y]==color&&stone[a+2][y]==color&&stone[a+3][y]==color&&stone[a+4][y]==color)

{MessageBoxW(Xqwl.hWnd,win,TEXT(“”),MB_OK);return;}

for(b=y-4;b<=y+4;b++)//判断竖

if(stone[x][b]==color&&stone[x][b+1]==color&&stone[x][b+2]==color&&stone[x][b+3]==color&&stone[x][b+4]==color)

{MessageBoxW(Xqwl.hWnd,win,TEXT(“”),MB_OK);return;}

for(a=x-4,b=y-4;a<=x+4;a++,b++)//判断右斜

if(stone[a][b]==color&&stone[a+1][b+1]==color&&stone[a+2][b+2]==color&&stone[a+3][b+3]==color&&stone[a+4][b+4]==color)

{MessageBoxW(Xqwl.hWnd,win,TEXT(“”),MB_OK);return;}

for(a=x-4,b=y+4;a<=x+4;a++,b--)//判断左斜

if(stone[a][b]==color&&stone[a+1][b-1]==color&&stone[a+2][b-2]==color&&stone[a+3][b-3]==color&&stone[a+4][b-4]==color)

{MessageBoxW(Xqwl.hWnd,win,TEXT(“”),MB_OK);return;}

}

篇6:c语言迷宫问题代码实现

#include

#include

#define LEN sizeof(SEAT)

#define MAXSIZE 100

#define LENGTH 30

typedef struct

{

int x;//横坐标

int y;//纵坐标

int di;//表示方向,0-3分别表示东南西北。

}SEAT;

struct StackList

{

SEAT stack[MAXSIZE];

int top;

}*Stack;

int EmptyStack(StackList*Stack)//判断是否为空栈

{

if(Stack->top==0)

return 0;

else

return 1;

}

int Move[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//分别表示向东、西、南、北需要加上的坐标

int Mase[LENGTH][LENGTH]={0};//初始化为0

int length,width;

void InitMase()//在迷宫的外围添加一层“墙壁”(赋值为1),使得迷宫的任意一点都有四个方向

{

int i,j;

for(i=0;i

{

for(j=0;j

Mase[i][j]=1;

}

for(i=0;i

{

for(j=0;j

Mase[j][i]=1;

}

}

void InitStack(StackList*Stack)//初始化

{

Stack->top=0;

return;

}

int PushStack(StackList*Stack,SEAT CurSeat)//进栈

{

if(Stack->top==MAXSIZE-1)

return false;

else

{

Stack->stack[Stack->top].x=CurSeat.x;

Stack->stack[Stack->top].y=CurSeat.y;

Stack->stack[Stack->top].di=CurSeat.di;

Stack->top++;

return true;

}

}

int PopStack(StackList*Stack)//出栈

{

if(Stack->top==0)

return false;

else

{

Stack->top--;

return true;

}

}

int Pass(SEAT p)//判断当前是否可行

{

if(Mase[p.x][p.y]==0)

{

return true;

}

else

return false;

}

SEAT NextSeat(SEAT CurSeat)//查找下一个点,并返回

{

SEAT temp;

temp.x=CurSeat.x+Move[CurSeat.di][0];

temp.y=CurSeat.y+Move[CurSeat.di][1];

return temp;

}

void Mark(SEAT p)//标记已经走过的点,避免重复

{

Mase[p.x][p.y]=-1;

}

int PathWay(SEAT start,SEAT end)//找路线

{

Stack=(struct StackList*)malloc(sizeof(struct StackList));

InitStack(Stack);

SEAT CurSeat;

CurSeat.x=start.x+1;//由于多加了一层墙壁,因此坐标的值要加1

CurSeat.y=start.y+1;//

CurSeat.di=start.di;//

do

{

if(Pass(CurSeat))

{

PushStack(Stack,CurSeat);

Mark(CurSeat);

if(CurSeat.x==end.x+1&&CurSeat.y==end.y+1)//如果找到出口,返回{

return true;

}

else

{

int find=0;

while(CurSeat.di<3&&find==0)//找下一个结点的方向

{

CurSeat.di++;

SEAT temp;

temp=NextSeat(CurSeat);

if(Mase[temp.x][temp.y]==0)

{

temp.di=-1;

CurSeat=temp;

find =1;

}

}

}

}

else

{

if(EmptyStack(Stack))//当前的点不能走,出栈

PopStack(Stack);

if(EmptyStack(Stack))//当前的点变为前一个点

{

CurSeat=Stack->stack[Stack->top-1];

}

while(CurSeat.di==3&&EmptyStack(Stack))////当前的点找不到下一个点,出栈

{

PopStack(Stack);

CurSeat=Stack->stack[Stack->top-1];//当前的点变为前一个点}

if(EmptyStack(Stack))

{

int find=0;

while(CurSeat.di<3&&find==0)////找下一个结点的方向

{

CurSeat.di++;

SEAT temp;

temp=NextSeat(CurSeat);

if(Mase[temp.x][temp.y]==0)

{

temp.di=-1;

CurSeat=temp;

find =1;

}

}

}

}

}while(EmptyStack(Stack));

return false;

}

void PrintStack(StackList*Stack)//输出路线

{

if(Stack->top==0)

printf(“There is no route can be out of the mazen”);

else

{

int i;

for(i=0;itop;i++)

{

if(i!=0)

printf(“->(%d,%d)”,Stack->stack[i].x-1,Stack->stack[i].y-1);

else

printf(“(%d,%d)”,Stack->stack[i].x-1,Stack->stack[i].y-1);

}

}

}

void PrintMase()//输出迷宫

{

int i,j;

for(i=1;i

{

for(j=1;j

{

if(j!=1)

printf(“ %d”,Mase[i][j]);

else

printf(“%d”,Mase[i][j]);

}

printf(“n”);

}

}

int main()

{

int n;

SEAT start,end;

printf(“Please enter the maze of the length and width:n”);

scanf(“%d%d”,&length,&width);

printf(“Please enter the number of the maze wall unit(0

printf(“Please enter the labyrinth of the coordinates of the wall unit(0<=row,column):n”);while(--n>=0)

{

int x,y;

scanf(“%d%d”,&x,&y);

Mase[x+1][y+1]=1;

}

InitMase();

PrintMase();

printf(“Please enter the coordinates entrance(0<=x<%d,0<=y<%d):n”,length,width);

scanf(“%d%d”,&start.x,&start.y);

start.di=-1;

printf(“Please enter the coordinates exports(0<=x<%d,0<=y<%d):n”,length,width);

scanf(“%d%d”,&end.x,&end.y);

end.di=0;

if(PathWay(start,end))

PrintStack(Stack);

else

printf(“There is no route can be out of the mazen”);return 0;

上一篇:遨游科技之旅演讲稿下一篇:迎接期末的复习计划