C语言 程序代码编写规范
C语言 程序代码编写规范(精选9篇)
C语言 程序代码编写规范 第1篇
C语言 程序代码编写规范
(初级程序员 讨论版)
前言
一个好的程序编写规范是编写高质量程序的保证。清晰、规范的源程序不仅仅是方便阅读,更重要的是能够便于检查错误,提高调试效率,从而最终保证软件的质量和可维护性。
说明
此文挡还在完善改进中,如有不足,欢迎指正。本文档主要适用于刚刚开始接触编程的初学者。
对于具有一定工程项目开发经验的程序员,建议学习C语言程序代码编写规范—高级版。
目录 代码书写规范 2 注释书写规范 3 命名规范内容代码书写规范
1.1函数定义
每个函数的定义和说明应该从第1列开始书写。函数名(包括参数表)和函数体的花括号(“{”和“}”)应该各占一行。在函数体结尾的括号(“}”)后面应该加上注释,注释中应该包括函数名,这样比较方便进行括号配对检查,也可以清晰地看出来函数是否结束。
范例1:函数的声明
void matMyFunction(int n){ …… } /* matMyFunction*/ 1.2空格的使用
使用空格分割所有演算符号和操作数。
这条规则的例外是“->”,““.”, “()”和“[]”,这些操作符和操作数之间不空格。当需要把一个程序行的内容分成几行写时,操作符号应该放在行末,而不是下一行的开头。
1.3缩进的设置
代码书写应该遵从结构化的要求,采用缩进的格式。最小缩进量为4个空格,整个文件内部应该统一,不要混用Tab键和4个空格这两种情况,因为不同的编辑器对Tab键的处理方法不同。
1.4折行的使用
每行的长度不要超过80个字符,当程序行太长时,应该分行书写。分行时应该按照自然的逻辑关系进行,例如:不要把一个简单的逻辑判断写在两行上。
分行后的缩进应该按照程序的逻辑关系进行对齐。例如:参数表折行后,下面的行应该在参数表左括号的下方。
范例2:折行的格式dwNewShape = matAffineTransform(coords, translation,rotation);
if(((new_shape.x > left_border)
(new_shape.x < right_border))
((new_shape.y > bottom_border)
(new_shape.y < top_border))){
draw(new_shape);}
1.5嵌套语句(语句块)的格式
对于嵌套式的语句--即语句块(如,if、while、switch等)应该包括在花括号中。花括号的左括号应该单独占一行,并与关键字对齐。建议即使语句块中只有一条语句,也应该使用花括号包括,这样可以使程序结构更清晰,也可以避免出错。建议对比较长的块,在末尾的花括号后加上注释以表明该语言块结束。
范例3:嵌套语句格式 if(value < max){
if(value!= 0)
{
func(value);
} } } else {
error(“The value is too big.”);} /* if(value < max)*/ 注释书写规范
注释必须做到清晰,准确地描述内容。对于程序中复杂的部分必须有注释加以说明。注释量要适中,过多或过少都易导致阅读困难。
2.1注释风格
语言中使用一组(/* … */)作为注释界定符。注释内容尽量用英语方式表述。
注释的基本样式参考范例4。
注释应该出现在要说明的内容之前,而不应该出现在其后。
除了说明变量的用途和语言块末尾使用的注释,尽量不使用行末的注释方式。
范例4:几种注释样式
/*
* ************************************************* 强调注释
* ************************************************ */ /* * 块注释 */
/* 单行注释 */
int i;/*行末注释*/ 2.2何时需要注释
如果变量的名字不能完全说明其用途,应该使用注释加以说明。
如果为了提高性能而使某些代码变得难懂,应该使用注释加以说明。对于一个比较长的程序段落,应该加注释予以说明。如果设计文档中有流程图,则程序中对应的位置应该加注释予以说明。
如果程序中使用了某个复杂的算法,建议注明其出处。
如果在调试中发现某段落容易出现错误,应该注明。命名规范
3.1常量、变量命名
用#define定义的符号常量全部采用大写。
变量命名的基本原则:
可以选择有意义的英文(小写字母)组成变量名,使人看到该变量就能大致清 楚其含义。
不要使用人名、地名和汉语拼音。
如果使用缩写,应该使用那些约定俗成的,而不是自己编造的。
多个单词组成的变量名,每个单词的首字母应该大写。如:dwUserInputValue。
3.2函数命名
函数命名原则与变量命名原则基本相同。对于初学者,函数命名可以采用 “FunctionName”的形式。
C语言 程序代码编写规范 第2篇
1、所有代码排版整齐,可以使用编程工具自带的排版功能;
2、代码缩进使用Tab键,不允许使用空格;
3、标示符的声明:修饰符与变量名之间留一空格;
4、用途相近的变量声明之间不加空行;用途相差很远的变量声明之间加一空行进行区分;
5、变量声明要集中,不允许分散在程序代码之间;
6、对于语意不明确的变量名要增加注释进行说明;
7、对于方法功能要进行注释说明;
对于功能非常简单的,并且可以直接从方法名称推断出其具体功能的方法,可以不加注释;
所有的方法注释必须准确;
8、方法的排列顺序要依照功能的排列顺序进行排列;
9、CSS样式代码编写顺序需要按照页面的排版顺序进行排列,不同的组件样式之间要以明显的“分隔符”进行分隔;
10、Html代码排版一定要规范,按照不同标签的层次关系进行适当的缩进排列,缩进使用Tab键,不允许使用空格;
11、Java代码的编写,首先进行变量声明,接下来是构造方法,在接下来是一些其他的功能方法,最后是变量的get/set方法。如果有嵌入类或嵌入接口的声明,应该放在文件最后,且需要增加注释详细说明;
利用C语言编写附加型病毒 第3篇
C语言以其灵活、高效以及丰富的函数而得到广大程序员的青睐, 许多程序员的编程生涯就是从C开始的。由于C语言为开发人员提供了大量的内置函数, 在方便程序员编写各种跨平台的应用程序的同时, 也方便了程序员来用自己擅长的语言来编写病毒。
1什么是病毒
如果要写一个病毒, 先要知道它是什么。可以给病毒一个定义, 这一定义是被广泛认可的。Frederic Cohen博士在《计算机病毒简短讲座》中提到的:“一种能够通过修改自身来包括或释放自我拷贝而传染给其他程序的程序。”
其实病毒和普通程序并无太大不同, 而且通常比较简单, 不像很多程序那样复杂。只不过病毒里面用到一些正常程序一般不会用到的技术。
2病毒的工作机制
要编制一个病毒, 首先要知道病毒的运行机理。
不论是何种病毒, 它一般在结构上分为三个功能模块:传播机制, 触发条件和有效载体。
在病毒的组成部分中, 首要的而且必需的部分是传播机制。病毒的最大特点就是自我复制, 这是病毒之所以成为病毒的根本原因。我们可以用一段伪码来表示这个过程。
病毒的第二个主要构成部分是触发条件, 病毒感染计算机以后, 一般不会立即发作, 而是需要等待一个有效的触发条件, 这就是病毒的潜伏性。在潜伏期内, 病毒一般在隐蔽地方进行自我复制, 同时等待一个触发条件, 比如某一日期或某一段文本后触发。
一个简单的触发机制可以这样描述:
有效载体就是病毒用来骚扰你的电脑的方法, 有触发机制的病毒一般也有有效载体。它可以是任意的给你发一条一次性简单的愚弄信息、一张图片或者超链接等。
3用C语言编制病毒
病毒的最大特点就是自我复制, 从病毒的分类来说有很多种, 目前最流行的附加式病毒, 它通过对正常的文件进行改写, 增加来实现其自我复制的目的。
从程序的角度来说, 程序要做的事情有两件:
1) 让病毒程序能够将自己在不影响其它程序本身工作的情况下复制给其它程序, 使它具备继续复制的能力。
2) 在一定触发条件下使其产生某种模拟效果。
下面给出c语言的实现过程:
1) 主程序调用病毒功能函数
2) 病毒功能函数读取查找同目录下所有c文件;
3) 找到一个 (被感染c文件) , 打开它, 并且将此文件全部读取到数组变量;
4) 重新创建一个同名文件 (被感染c文件)
5) 数组变量写回这个被感染c文件, 同时将病毒源文件所需要的头文件, 病毒功能函数调用语句写入;
6) 打开病毒源文件, 将病毒功能函数全部写到被感染c文件的最后;
这样一个简单的c语言伪病毒virus.c就完成了, 运行程序后其内容变化另保存为after_virus.c。此时, 如果我们将1.c文件用A盘复制到其他机器或者Email给别人, 结果他们一运行又感染了他们保存在1.c文件目录下所有c文件。
对于第二件事情“发作效果”, 这里只用printf语句警告了一下, 这个程序勉强可以叫做病毒。
摘要:该文阐述了计算机病毒的工作机制和利用C编写病毒程序应该具备的三个部分, 在此基础上给出了一个实际的伪病毒程序实例。
关键词:C语言,附加,病毒
参考文献
[1]谭浩强.C程序设计[M].3版.北京:清华大学出版社, 2005.
单纯形法C语言程序代码 第4篇
课程设计程序代码
课程设计名称 运筹学课程设计 专 业 信息管理与信息系统 班 级 130506班 学 生 姓 名 于松南、张鑫蕊、赵改玲、赵海潮
指 导 教 师
王亚君、王忠吉
2015年7月3日
#include
int m;//记录约束条件方程组的个数 int n;//记录未知量的个数 float M=1000000.0;float A[100][100];
//用于记录方程组的数目和系数
float C[100];
//用于存储目标函数中各个变量的系数 float b[100];
//用于存储常约束条件中的常数 float CB[100];
//用于存储基变量的系数 float seta[100];
//存放出基与入基的变化情况 float cn[100];
//存储检验数矩阵 float x[100];int num[100];
//用于存放出基与进基变量的情况 float Z=0;
//记录目标函数值
void shuru();void print();int mincz();int find_line(int a);void exchange(int a,int b);int main(){
int i,j=0;
int p,q,temp;//q:换入,p:换出
shuru();
printf(“n------------n”);
printf(“ tCBtXBtbt”);
for(i=0;i printf(“ X(%d)t”,i+1); for(i=0;i x[i]=0; printf(“n”); while(1){ q=mincz(); if(q==-1){ print(); printf(“n所得解已经是最优解!n”); printf(“n最优解为:n”); for(j=0;j temp=num[j]-1; x[temp]=b[j]; } for(i=0;i printf(“x%d=%.2f ”,i+1,x[i]); Z=Z+x[i]*C[i]; } printf(“Z=%.2f”,Z); break; } print(); p=find_line(q); printf(“np=%d,q=%d”,p,q); if(q==-1)break; exchange(p,q); } return 0;} int mincz(){ int i,k=0; int flag=0;//检验数标记 float min=0; for(i=0;i if(cn[i]>=0) flag=1; else { flag=0; break; } if(flag==1) return-1; //进行到此处,说明存在<0的检验数 //找到最小的检验数,作为换入变量 for(i=0;i if(min>cn[i]){ min=cn[i]; k=i; } } return k;} int find_line(int a){ int i,k,j; int flag=0; float min; k=a; for(i=0;i if(A[i][k]<=0) flag=1; else { flag=0; break; } if(flag==1){ printf(“n该线性规划无最优解!n”); return-1; } for(i=0;i if(A[i][k]>0) seta[i]=b[i]/A[i][k]; else seta[i]=M; } min=M; for(i=0;i if(min>=seta[i]){ min=seta[i]; j=i; } } num[j]=k+1; CB[j]=C[k]; return j;} void exchange(int p,int q){ int i,j,c,l; float temp1,temp2,temp3; c=p;//行号,换出 l=q;//列号,换入 temp1=A[c][l];//A[c][l]主元 b[c]=b[c]/temp1; for(j=0;j A[c][j]=A[c][j]/temp1;//主元化为1 for(i=0;i if(i!=c) if(A[i][l]!=0){ temp2=A[i][l]; b[i]=b[i]-b[c]*temp2; //主元所在列,其余元素化为0 for(j=0;j A[i][j]=A[i][j]-A[c][j]*temp2; } } temp3=cn[l]; for(i=0;i cn[i]=cn[i]-A[c][i]*temp3;} void print(){ int i,j=0; printf(“n------------n”); for(i=0;i printf(“%8.2ftX(%d)%8.2f ”,CB[i],num[i],b[i]); for(j=0;j printf(“%8.2f ”,A[i][j]); printf(“n”); } printf(“n------------n”); printf(“ttt”); for(i=0;i printf(“ %8.2f”,cn[i]); printf(“n------------n”);} void shuru(){ int i,j;//循环变量 int k; printf(“请输入线性规划问题的约束条件个数M:”); scanf(“%d”,&m); printf(“请输入线性规划问题的决策变量个数N:”); scanf(“%d”,&n); printf(“n请输入方程组的系数矩阵A(%d行%d列):n”,m,n); for(i=0;i for(j=0;j scanf(“%f”,&A[i][j]); printf(“n请输入初始基变量的数字代码矩阵:n”); for(i=0;i scanf(“%d”,&num[i]); printf(“n请输入方程组右边的值矩阵b:n”); for(i=0;i scanf(“%f”,&b[i]); printf(“n请输入目标函数各个变量的系数所构成的系数阵C:n”); for(i=0;i scanf(“%f”,&C[i]); for(i=0;i cn[i]=-C[i]; for(i=0;i k=num[i]-1; CB[i]=C[k]; } /*鼠标信息宏定义*/ #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]==0down[i][k]==0)mouse_draw[i][k]=1;else if(up[i][k]==0down[i][k]==1)mouse_draw[i][k]=2;else if(up[i][k]==1down[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==MouseXy==MouseYstatus==0press==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>280MouseX<300MouseY>65MouseY<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==0j==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==0j==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==9j==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==9j==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==0Mine[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!=0Mine[i-1][j].num!=1)ShowWhite(i-1,j);if(i!=0j!=9Mine[i-1][j+1].num!=1)ShowWhite(i-1,j+1);if(j!=9Mine[i][j+1].num!=1)ShowWhite(i,j+1);if(j!=9i!=9Mine[i+1][j+1].num!=1)ShowWhite(i+1,j+1);if(i!=9Mine[i+1][j].num!=1)ShowWhite(i+1,j);if(i!=9j!=0Mine[i+1][j-1].num!=1)ShowWhite(i+1,j-1);if(j!=0Mine[i][j-1].num!=1)ShowWhite(i,j-1);if(i!=0j!=0Mine[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>280MouseX<300MouseY>65MouseY<85)/*重新来*/ { gameAGAIN=1;break;} if(MouseX>190MouseX<390MouseY>90MouseY<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>190MouseX<390MouseY>90MouseY<290)/*当前鼠标位置在格子范围内*/ { j=(MouseX-190)/20;/*x坐标*/ i=(MouseY-90)/20;/*y坐标*/ #define PI 3.1416 main(){ float Radius,Area;scanf(%f,&Radius);/*输入半径的值*/ Area=PI*Radius*Radius;printf(%fn,Area);/*输出圆的面积*/ } 1.一个C语言程序,通常由带有#号的编译预处理语句开始。关于预处理我们在以后介绍,这里的#define PI 3.1415926相当于PI代表3.1416,下面在程序中遇到PI,我们就用3.1416替代一下。在以后的程序中,在学习预处理之前,我们都将不使用预处理语句。 2.main()任何一个完整的程序都需要main(),这是一个函数,具体什么是函数,以后再讲,这儿你就要记住就行。后面有一对{}把所有的语句都括在里面,表明那些语句都属于main()里面。程序运行时从这个左大括号开始。 3.{}里面的4行语句大家应该都能明白,先定义两个变量,一个代表半径,一个代表面积,然后输入半径的值,然后求面积,最后在屏幕上输出面积。程序到main()的那对{}的右大括号结束。求面积的语句Area=PI*Radius*Radius;相当于Area=3.1416*Radius*Radius;(完全用3.1416替代PI)。 具体程序从编写到运行得到结果的步骤为: 1.双击tc.exe,进入Turbo C 2.0编译界面 2.ALT+E 进入编辑模式 3.书写程序 4.F2 存储程序(也可进入File菜单,选择save),第一次存储需要写上程序名称(*.C),回车 5.ALT+F9 编译,如果有错误和警告,光标停留在错误行,回车进行修改,修改后,回到4;没有错,下一步 6.CTRL+F9 连接和运行程序 7.用ALT+F5查看程序运行结果,任意键返回程序 如何打开一个已有的C文件: 1.双击tc.exe,进入Turbo C 2.0编译界面 2.F3 进入load状态,找到所要打开文件的目录,找到文件,回车;后面都一样。具体的有哪些快捷键及其它们的作用,请查看第一节概述。 说明: 1.必须在程序的最开始部分定义所有用到的变量,例如这里的Area,Radius。2.变量的命名要尽量有意义,如用代表该意思的英文单词、或者是汉语拼音,例如这里的Radius,Area,绝对禁止用毫无干系的字母,如a,b,c。例如下面的程序,虽然意思和上面的一样,但是看上去意思不明朗,时间长了,很可能忘记程序本身的意思。对于仅仅是控制程序运行,不代表实际意思时,可以用一些简单字母。main(){ float a,b;scanf(%f,&a);b=3.1416*a*a;printf(%fn,b);} 3.采用层次书写程序的格式,要有合理的缩进,必要的时候要有空行,一行只书写一个语句。所有语句尽量不分行,除非太长(分行时变量、运算符,格式字符等等不能拆开),例如下面两个程序看起来就不好看了,虽然它们的功能和前面是一样的。main(){float Radius,Area;scanf(%f,&Radius);Area=3.1416*Radius*Radius;printf(%fn,Area);} main(){ float Radius,Area;scanf(%f, %Radius);Area=3.1416*Radius *Radius;printf(%fn, Area);} 4.程序在适当的地方要用/*……*/注释,它的意思表示在/* */里面的所有字符都不参加编译。因为一个较大的程序,经过一段时间,有些地方可能连编程者都忘记了,增加注释可以帮助恢复记忆,调试程序时,也容易找出错误。注释也可以分行写。5.在书写{}时要对齐。虽然不对应也不影响程序运行,但对齐后方便以后检查程序,也是为了美观,特别是后面学到流程控制时,{}一定要对齐。 程序设计方法: 1.从问题的全局出发,写出一个概括性的抽象的描述。 2.定义变量,选取函数,确定算法。算法这个东西不好说,遇到的问题多了,自然就会形成自己一整套的算法。 3.按照解决问题的顺序把语句和函数在main()里面堆砌起来。一个好的C程序员应该做到: 1.在运行程序之前存盘 2.所有在程序中用到的常量都用预处理语句在程序开头定义 3.所有在程序中用到的函数都在程序开头声明 4.头文件的#ifndef 5.变量名和函数名使用有意思的英文单词或汉语拼音 6.尽量少用全局变量或不用全局变量 7.采用层次的书写程序格式,对for,while,if_else,do_while,switch_case等控制语句或他们的多重嵌套,采用缩格结构 8.所有对应的{}都对齐 9.尽量用for,而不用while做记数循环 10.尽量不用goto语句 11.一个函数不宜处理太多的功能,保持函数的小型化,功能单一化 12.一个函数要保持自己的独立性,如同黑匣子一样,单进单出 13.函数的返回类型不要省略 14.用malloc()分配内存空间时,以后一定要用free()释放 15.打开文件后,记住在退出程序前要关闭 16.出错情况的处理 17.写上必要的注释 VGA卡位于CPU和VRAM的通路之间,主要用来对CPU写入VRAM的数据进行各种操作和处理。在VGA卡上,不能直接对VRAM的内容进行读写的,必须通过特殊硬件作界面。VGA的VRAM被分成4个独立的位平面的形式。每个位平面的读写操作均可独立地运行。图形控制器有4个读出数据暂存器,从VRAM的4个位平面读出的数据都同时暂存在其中,直到下一次再更新它们的内容。每一个数据暂存器对应于一个位平面,当CPU要用到VRAM的地址时,读取操作会更新数据暂存器中的值,写入操作会更新位平面的值。图形控制器的逻辑运算部件可以对像素的颜色进行逻辑运算,大大简化了绘图的操作,并可获得一些特殊的效果。 2 图形控制寄存器的功能 对图形控制器的访问必须通过寄存器的读写操作来完成。数据进行图形控制器有9个可定址的寄存器,这些寄存器均为一个字宽。存取操作均须通过地址索引寄存器(输出地址为3CEH)和数据寄存器(输入输出地址为3CFH)。前者存放索引号,后者存放索引号所指定的寄存器写入或读出的数据。索引寄存器的内容起着控制数据寄存器的功能。所以可将地址为3CFH的数据寄存器看作9个不同的寄存起来使用。 对图形控制寄存起的存取操作均须分两部进行:首先把索引号作为寄存器的内容输出到索引寄存器端口3CEH中,然后对数据寄存器端口3CFH操作:即 Outportb(0x3ce,索引号) Outportb(0x3cf,数据) 九个寄存器的名称和系统初始值如表1所示。 位平面屏蔽寄存器的索引寄存器地址位:3C4H,数据寄存器地址位:3C5H。 3 对DAC寄存器的操作 对DAC色彩寄存器的操作有两种方法:一种是将数据通过PEL地址或PEL数据寄存器读出或写入。数据在写入PEL地址寄存器后,要进行3次连续读写操作。第二种方法是调用BIOS中断10H,它提供对单独和全部DAC色彩寄存器的读、写功能调用。具体的调用功能如下: INT 10H的: (1)1017H功能为读取DAC色彩寄存器块。 BX为读取DAC的第一个色彩寄存器号 CX为读取的个数 ES:DX为存放DAC返回值的地址指针 (2)1012H功能为设置DAC色彩寄存器块。 BX为读取DAC的第一个色彩寄存器号 CX为读取的个数 ES:DX为存放DAC返回值的地址指针 (3)1010H功能为设置单个DAC寄存器。 BX为DAC寄存器号 CH,CL,DH分别为兰,绿,红3色饱和度的值,该值范围为0~63 (4)1015H功能为读取单个DAC寄存器。 BX为DAC寄存器号 CH,CL,DH分别为兰、绿、红三色饱和度的值,该值范围为0~63 4 实现的特技 4.1 色彩淡入淡出 所谓色彩淡入淡出技术是将屏幕上的彩色图像渐变暗直至屏幕变黑或者将屏幕逐渐变亮的技术。 4.2 彩色变灰度 VGA显示器能表示最多64个灰度级,而如何将256K种色彩转化成64个灰度级,而R、G、B值对灰度的转换系数并不相同,色彩与色彩的转换公式为: 灰度级=0.30X红+0.59X绿+0.11X兰 4.3 色彩动画技术 VGA的色彩动画技术常用于各种动画、游戏的界面显示。它的设计思想是不断变化屏幕的各种色彩以造成霓虹灯效果。 源程序清单: 5 语语 A+D run by 10 until 1 秒 Wait 0.1 s Init A,D } MNRH *小狗抬低头* { Print “icon”(0,0)Light yellow flash(Case(p)P=4 C run by-100 P=5 C run by 100 Other C stot)until p2=1 C stop Init C Plight =green flash } IS(1)*显示表情* { ISS=1 Case(ISS)(ISS=0 print Neutral(0,0)ISS=1 print Seepingl(0,0)ISS=2 print Tear(0,0)ISS=3 print Hurt(0,0)4 tired middle 5 tired right 7 tired left love)} UP *站起来* { Case(degree)-50)True(1(Init A A run by-35 until degree of A 小于-25 A stop A run by-15 until degree of A 小于-65 A stop Wait 0.5s)2(Init B B run by-35 until degree of A 小于-25 B stop B run by-15 until degree of A 小于-65 B stop Wait 0.5s)} RST *P和F随机数* { P_T=Random(3,6)*4* F_T=Random(2,4);*3* P_C=F_C=1 Init T1,T2,T3;Sub_CS(0);*DB_S,NS 随着表情变化* } CS(0)* DB_S =0,NS=True * { I=0;IF(DB_S不等于I)*DB_S之前没有初始化,不知何意*(DB_S=I;NS=True;) } MON*F_C,P_C=0 DB_S=1;NS=True * { CASE(T2 大于 10s)True(Init T2;P_C=P_C-1;*0* Case(P_C小于0)True P_C =0;)} Case(T1 大于 20s)(True(Init T1;F_C=F_C-1;*0* Case(F_C 小于 0)(F_C=0;))Case(T3大于30s)(Init T3;Sub_CS(1);* DB_S=1;NS=True *))DB_S 判断小狗动作关键参数,现在DB_S=1 以下全是DB_S产生的Case 1-IDL{ Case(NS)*CS赋值代表DB_S值改变* NS=Fals;*已改变* Sub_UP;*手动抬头低头* Sub_UIS*表情7* UPDB PTC FDC } SLP PLF NGR HNG PPP HPY 2-3-4-5-6-7- UIS { Case(T5 大于 IBP)Init T5;Case(ISS=1)(ISS=6;IBP=Random(1,5);Sub_IS(ISS);*Tire right 表情*)} 读取IAP*没用* Case(T6大于5秒)(Case(ISS 不等于1)(Init T6;IAP=random(1,10);) Case(ISS不等于7)ISS =7; Sub_IS(ISS);*表情*) UPDB *调用CS,最终改变DB_S ,NS值* { Case(P_T=P_C and F_T=F_C)Sub_CS(6);Case(P_T大于P_C and F_T小于F_C)Sub_CS(3);Case(P_T小于P_C and F_T大于F_C)Sub_CS(5);Case(P_T=P_C and F_T大于F_C)Sub_CS(5);Case(F_C=0)Sub_CS(4);}*DB_S变动的根源* PTC *狗*sniff* { OTC=TC TC= 0或1;来触碰 Case(OTC不等于TC and TC)(P_C=P_C+1;Inti T3;Case(DB_S不等于4)(Sub_IS(2);表情 Sound sniff) _C=true;)} FDC { _C=假 OCOL=COL COL=颜色传感器 //定义最多的航班数 #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!=0s[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);C语言扫雷源代码 第5篇
5编写一个C语言程序 第6篇
C语言编写VGA屏幕色彩技巧 第7篇
EV3小狗程序转换类C语言代码 第8篇
C语言机票订票管理系统源代码 第9篇
C语言 程序代码编写规范
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。


