C语言十大经典实例编程 下载本文

i=(MouseY-90)20;y坐标 MouseOff(); 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; } }

MouseOn(); sleep(1); } } }

案例六 速算24 6.3.4 源程序 #define N 20 #define COL 100 #define ROW 40

#include \

#include \系统时间函数 #include \图形函数 #include \动态地址分配函数 #include \库函数 #include \字符串函数 #include \字符操作函数 char p[4][13]={

{'A','2','3','4','5','6','7','8','9','0','J','Q','K'},扑克牌,10用0来表示

{'A','2','3','4','5','6','7','8','9','0','J','Q','K'}, {'A','2','3','4','5','6','7','8','9','0','J','Q','K'}, {'A','2','3','4','5','6','7','8','9','0','J','Q','K'}}; typedef struct node {

int data;

struct node link; }STACK1; 栈1

typedef struct node2

{

char data;

struct node2 link; }STACK2; 栈2

void init(void);图形驱动 void close(void);图形关闭

void play(void);发牌的具体过程 void rand1(int j);随机发牌函数

void change(char e,char a); 中缀变后缀函数 int computer(char s); 后缀表达式计算函数 STACK1 initstack1(STACK1 top); 栈1初始化 STACK1 push(STACK1 top,int x); 栈1入栈运算 STACK1 pop(STACK1 top); 栈1删除栈顶元素 int topx(STACK1 top); 栈1读栈顶元素

STACK1 ptop(STACK1 top,int x); 栈1读出栈顶元素值并删除栈顶元素 int empty(STACK1 top); 判栈1是否为空函数 STACK2 initstack2(STACK2 top); 栈2初始化 STACK2 push2(STACK2 top,char x); 栈2入栈运算 STACK2 pop2(STACK2 top); 栈2删除栈顶元素 char topx2(STACK2 top); 栈2读栈顶元素

STACK2 ptop2(STACK2 top,char x); 栈2读出栈顶元素值并删除栈顶元素 int empty2(STACK2 top); 判栈2是否为空函数 int text1(char s) ; 显示文本 main() {

char s[N],s1[N],ch; int i,result;

int gdriver, gmode; clrscr(); 清屏 init(); 初始化函数 while(1) {

setbkcolor(BLACK); 设置背景颜色 cleardevice();清屏 play(); 发牌

gotoxy(1,15); 移动光标

printf(\ printf(\enter express accroding to above four number\\n\提示信息

printf(\提示输入字符串格式 printf(\ scanf(\输入字符串压回车键

change(s1,s); 调用change函数将中缀表达式s1转换为后缀表达式s result=computer(s); 计算后缀表达式的值,返回结果result

if(result==24) 如果结果等于24 text1(\调用函数text1显示字符串\ else text1(\否则函数text1显示字符串\ printf(\提示信息,是否继续 scanf(\输入一字符

if(ch=='n'||ch=='N') 如果该字符等于n或N break; 跳出循环,程序结束 } 否则,开始下一轮循环 close(); return; 返回 }

void rand1(int j)随机发牌函数 {

int kind,num; char str[3],n; randomize();

while(1)循环直到有牌发 {

kind=random(4); 花色随机数 num=random(13); 大小随机数

if(p[kind][num]!=-1) 该数未取过 { n=p[kind][num]; 取相应位置的扑克牌数 p[kind][num]=-1; 牌发好以后相应位置的元素置-1 break; } }

switch(kind)花式的判断 {

case 0:setcolor(RED);sprintf(str,\红桃 case 1:setcolor(BLACK);sprintf(str,\黑桃 case 2:setcolor(RED);sprintf(str,\方片 case 3:setcolor(BLACK);sprintf(str,\草花 }

settextstyle(0,0,2);

outtextxy(COL+j100-30,ROW+100-46,str);显示左上角花色 outtextxy(COL+j100+16,ROW+100+32,str); 显示右下角花色 if(n!='0')输出其他牌 {

settextstyle(0,0,3); sprintf(str,\

outtextxy(COL+j100-5,ROW+100-5,str);显示牌的大小 }

else输出10的时候 {

sprintf(str,\

outtextxy(COL+j100-6,ROW+100-5,str); } }

void play(void)发牌的具体过程 {

int j;

for(j=0;j<4;j++) {

bar(COL+j100-35,ROW+100-50,COL+j100+35,ROW+1100+50);画空牌 setcolor(BLUE);

rectangle(COL+j100-32,ROW+100-48,COL+j100+32,ROW+100+48); 画矩形框

rand1(j); 随机取牌 delay(10000); 延时显示 } }

void init(void)图形驱动 {

int gd=DETECT,gm;

initgraph(&gd,&gm,\ cleardevice(); }

void close(void)图形关闭 {

closegraph(); }

void change(char e,char a) 中缀字符串e转后缀字符串a函数 {

STACK2 top=NULL; 定义栈顶指针 int i,j;char w; i=0; j=0;

while(e[i]!='\\0') 当字符串没有结束时 {

if(isdigit(e[i])) 如果字符是数字 { do{ a[j]=e[i]; 将数字原样拷贝到数组a中 i++; e数组的下标加1 j++; a数组的下标加1 }while(e[i]!='.'); 直到字符为数字结束符“.”为止