代码空间

摘要(Abstract)

C是一种通用的编程语言,广泛用于系统软件与应用软件的开发。于1969年至1973年间,为了移植与开发UNIX操作系统,由丹尼斯·里奇与肯·汤普逊,以B语言为基础,在贝尔实验室设计、开发出来。 C语言具有高效、灵活、功能丰富、表达力强和较高的可移植性等特点,在程序设计中备受青睐,成为最近25年使用最为广泛的编程语言[2]。当前,C语言编译器普遍存在于各种不同的操作系统中,例如Microsoft Windows、macOS、Linux、Unix等。C语言的设计影响了众多后来的编程语言,例如C++、Objective-C、Java、C#等。 二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSI C,作为C语言的标准。二十世纪八十年代至今的有关程序开发工具,一般都支持匹配ANSI C的语法。C语言设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器代码以及不需要任何运行环境支持便能运行的编程语言。C语言也很适合搭配汇编语言来使用。尽管C语言提供许多低级处理的功能,但仍保持良好跨平台的特性,以一个标准规格写出的C语言程序可在许多计算机平台上进行编译,甚至包含一些嵌入式处理器(微控制器或称MCU)以及超级计算机等作业平台。C语言是一个有结构化程序设计、具有变量作用域(variable scope)以及递归功能的过程式语言。 C语言传递参数均是以值传递(pass by value)[3],另外也可以传递指针(a pointer passed by value)。 不同的变量类型可以用结构体(struct)组合在一起。 只有32个保留字(reserved keywords),使变量、函数命名有更多弹性。 部分的变量类型可以转换,例如整型和字符型变量。 透过指针(pointer),C语言可以容易的对存储器进行低级控制。 编译预处理(preprocessor)让C语言的编译更具有弹性。

主题(Topic)



项目(Project)

sizeof lapets/sizeof linzetian/2020-10-16-4 MrFMach/Practice-C-types dashed/sizeof-loader Ufkoku/SizeBasedEnhancedLruCache Xilu-H/C-sizeof- idan-at/native-sizeof dashed/react-app-rewire-sizeof RitaLoveCode/sortArray ZPXiaoMaGeRockBottomVideoNotes/ZPOCObjectEssence3 Nv = VertexNum; Graph->Ne = 0; for(V = 0; V < Graph->Nv; V ++) { Graph->G[V].FirstEdge = NULL; } printf("输入边的个数:"); scanf("%d", &(Graph->Ne)); if(Graph->Ne) { for(i = 0; i < Graph->Ne; i ++) { scanf("%d %d", &E1, &E2); //插入边 PtrToAdjVNode NewNode; NewNode = (PtrToAdjVNode)malloc (sizeof(struct AdjVNode)); NewNode->AdjV = E2; NewNode->Next = Graph->G[E1].FirstEdge; Graph->G[E1].FirstEdge = NewNode; //无向图,所以还是插入边 NewNode = (PtrToAdjVNode)malloc (sizeof(struct AdjVNode)); NewNode->AdjV = E1; NewNode->Next = Graph->G[E2].FirstEdge; Graph->G[E2].FirstEdge = NewNode; } } return Graph; } void Visit( Vertex V ) { printf(" %d", V); } void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ) { int queue[11]; //定义一个队列 int l = 0, r = 0; queue[r++] = S; Visit(S); Visited[S] = true; PtrToAdjVNode tmp; while(l != r) //队列不为空 { tmp = Graph->G[queue[l++]].FirstEdge; while(tmp) { Vertex pos = tmp->AdjV; if(!Visited[pos]) { Visit(pos); Visited[pos] = true; queue[r++] = pos; } tmp = tmp->Next; } } } int main() { LGraph G; Vertex S; G = CreateGraph(); scanf("%d", &S); printf("BFS from %d:", S); BFS(G, S, Visit); return 0; }" class="topic-tag topic-tag-link"> 11.5 - 2 背景绿色 F 字体亮白色 goto_xy(10,3); printf("—→"); goto_xy(17,1); printf("主菜单"); goto_xy(13,3); printf(" ***人人对战***"); goto_xy(13,4); printf(" ***退出***"); point.x=12; point.y=3; goto_xy(0,0); } void ShowWho() //显示轮到哪一方下棋 { goto_xy(17,22); if(player==0) printf("轮到甲方落子"); else printf("轮到乙方落子"); goto_xy(point.x,point.y); } void Draw() //绘画游戏界面 { game_xy.x=10; game_xy.y=3; system("cls"); system("color 3F"); //3 湖蓝色 F 亮白色 goto_xy(15,1); printf("欢迎play our 五子棋!"); /*goto_xy(29,22); printf("重新开始 r");*/ goto_xy(1,22); printf("悔棋 b"); goto_xy(1,23); printf("退出 ESC"); const int i=8; //const 定义的数据不可以被改变 而且修改数据比较方便 const int j=19; const int k=3; goto_xy(game_xy.x-i,game_xy.y+k); //输出甲方的下棋方法 printf("甲方: ●"); goto_xy(game_xy.x-i,game_xy.y+k+2); printf("移动: 上 ↑"); goto_xy(game_xy.x-i,game_xy.y+k+4); printf(" 下 ↓"); goto_xy(game_xy.x-i,game_xy.y+k+6); printf(" 左 ←"); goto_xy(game_xy.x-i,game_xy.y+k+8); printf(" 右 →"); goto_xy(game_xy.x-i,game_xy.y+k+10); printf("落子: Enter"); goto_xy(game_xy.x+j,game_xy.y+k); //输出乙方的下棋方法 printf("乙方: ○"); goto_xy(game_xy.x+j,game_xy.y+k+2); printf("移动: 上 ↑"); goto_xy(game_xy.x+j,game_xy.y+k+4); printf(" 下 ↓"); goto_xy(game_xy.x+j,game_xy.y+k+6); printf(" 左 ←"); goto_xy(game_xy.x+j,game_xy.y+k+8); printf(" 右 →"); goto_xy(game_xy.x+j,game_xy.y+k+10); printf("落子: Enter"); for(int k1=0; k1<200; k1++) //初始化棋子记录,在第二局时有明确的作用 for(int k2=0; k2<200; k2++) Q[k1][k2]=0; for(int i=0; i<18; i++) //画棋盘 { if(i==0) //画第一行 { goto_xy(10,i+3); printf("┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐"); } if(i!=0&&i!=17) //画出中间16行 { goto_xy(10,i+3); printf("├┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┼┤"); } if(i==17) //画最后一行 { goto_xy(10,i+3); printf("└┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┘"); } } point.x=19; point.y=12; goto_xy(19,12); } void Clean() //清除—→运动的轨迹 { goto_xy(10,3); printf(" "); goto_xy(24,3); printf(" "); goto_xy(10,4); printf(" "); goto_xy(24,4); printf(" "); } void menu_choose(char press) //选择游戏还是退出 { if(press==72) //↑的ASCLL码 { if(point.y==3) point.y=4; else point.y=3; Clean(); goto_xy(10,point.y); printf("—→"); } if(press==80) //↓的ASCLL码 { if(point.y==4) point.y=3; else point.y=4; Clean(); goto_xy(10,point.y); printf("—→"); } if(press==13) // 13:回车键的ASCLL码 { startchoice=point.y-2; //startchoice 为1或2 } } void go_back(int x1,int y1) //悔棋函数 { goto_xy(x1,y1); if(x1==10) { if(y1==3) { printf("┌"); } else if(y1==20) { printf("└"); } else { printf("├"); } } else if(x1==27) { if(y1==3) { printf("┐"); } else if(y1==20) { printf("┘"); } else { printf("┤"); } } else { if(y1==3) { printf("┬"); } else if(y1==20) { printf("┴"); } else { printf("┼"); } } Q[point.x][point.y]=0; //在数组中将弹出的棋子对应的数据设为0 goto_xy(x1,y1); } void Record() //记录棋子的情况 { p->coord.x=point.x; p->coord.y=point.y; ptr=p; p=(struct Piece *)malloc(sizeof(struct Piece)); p->fore=ptr; ShowWho(); Q[point.x][point.y]=player+1; if(player) { player=0; return; } player=1; goto_xy(point.x,point.y); } void PutDown() //显示落子函数 { if(Q[point.x][point.y]==0) //先判断该位置是否有棋子 { if(player) { printf("●"); printf("\a"); //'\a'表示蜂鸣声 Record(); } else { printf("○"); printf("\a"); Record(); } goto_xy(point.x,point.y); } } void Play(char ch) //键盘的操作 移动光标 下棋和悔棋操作 { if(ch==72) //↑的ASCLL码 光标上移 { if(point.y<=3) point.y=20; else point.y--; goto_xy(point.x,point.y); } if(ch==75) //←的ASCLL码 光标左移 { if(point.x<=10) point.x=27; else point.x--; goto_xy(point.x,point.y); } if(ch==77) //→的ASCLL码 光标右移 { if(point.x>=27) point.x=10; else point.x++; goto_xy(point.x,point.y); } if(ch==80) //↓的ASCLL码 光标下移 { if(point.y>=20) point.y=3; else point.y++; goto_xy(point.x,point.y); } if(ch==13) //回车键的ASCLL码 下棋 { PutDown(); } if(button=='b'||button=='B') //悔棋的操作 { ptr1=p; if(p!=head) { p=p->fore; free(ptr1); point.x=p->coord.x; point.y=p->coord.y; go_back(point.x,point.y); } } } int Judge() { int count=0; int pp=player==0?2:1; //三目运算 for(int c=0; c<200; c++) { for(int r=0; r<200; r++) { if(Q[r][c]!=pp) continue; //检查列 int rr=r; int cc=c; while(--cc>=3 &&Q[rr][cc]==pp) count++; cc=c; while(++cc<23 &&Q[rr][cc]==pp) count++; cc=c; if(count>=4) return pp; //检查行 count=0; while(--rr>=10 &&Q[rr][cc]==pp) count++; rr=r; while(++rr<30 &&Q[rr][cc]==pp) count++; rr=r; if(count>=4) return pp; //检查反斜边 count=0; cc--; rr--; while((cc>=3||rr>=10) &&Q[rr][cc]==pp) { count++; cc--; rr--; } rr=r; cc=c; cc++; rr++; while((cc<23||rr<30) &&Q[rr][cc]==pp) { count++; cc++; rr++; } rr=r; cc=c; if(count+1>=5) return pp; //检查正斜边 count=0; cc++; rr--; while((cc<23||rr>=10) &&Q[rr][cc]==pp) { count++; cc++; rr--; } rr=r; cc=c; cc--; rr++; while((cc>=3||rr<30) &&Q[rr][cc]==pp) { count++; cc--; rr++; } rr=r; cc=c; if(count+1>=5) return pp; count=0; } } return 0; } int main(void) { system("color 4E"); printf("\n 欢迎play五子棋!"); goto_xy(15,3); printf("作者:小萝莉"); goto_xy(17,5); printf(" HE·Honda"); goto_xy(17,7); printf(" ZSSB"); Sleep(3000); system("cls"); while(1) { Init(); //初始化 int winner=0; Welcome(); //欢迎界面 while(1) //读取菜单选项 { char choice=getch(); menu_choose(choice); if(startchoice!=0) break; } if(startchoice==1) //选择人人对战 { Draw(); goto_xy(17,22); printf("轮到甲方落子"); goto_xy(point.x,point.y); while(1) { button=getch(); Play(button); //读取键盘的操作 移动光标 下棋和悔棋操作 if(button==27) //ESC的ASCLL码 { if(MessageBox(NULL,TEXT("确定退出?"),TEXT(""),MB_ICONQUESTION|MB_OKCANCEL)==IDOK) { system("cls"); printf("\n 谢谢使用!\n"); return 0; } } if(button==13) //回车键ASCLL码 按下后开始判断输赢 winner=Judge(); if(winner!=0) { goto_xy(15,24); if(winner==2) { printf("恭喜!甲方赢!\n"); } if(winner==1) { printf("恭喜!乙方赢!\n"); } } if(winner!=1&&winner!=2) { continue; } goto_xy(13,22); printf(" 继续游戏?(Y/N): "); while(1) { button=getch(); if(button=='n'||button=='N'||button=='y'||button=='Y') break; } if(button=='n'||button=='N') { if(MessageBox(NULL,TEXT(" 确定退出?"),TEXT(""),MB_ICONQUESTION|MB_OKCANCEL)==IDOK) { system("cls"); printf("\n 谢谢使用!\n"); return 0; } } if(button=='y'||button=='Y') { winner=0; system("cls"); break; } } } if(startchoice==2) { if(MessageBox(NULL,TEXT(" 确定退出?"),TEXT(""),MB_ICONQUESTION|MB_OKCANCEL)==IDOK) { printf("\n\n 谢谢使用!\n"); return 0; } } } return 0; }" class="topic-tag topic-tag-link"> -