C程序设计报告.doc_第1页
C程序设计报告.doc_第2页
C程序设计报告.doc_第3页
C程序设计报告.doc_第4页
C程序设计报告.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计课程设计报告C语言程序设计课程设计报告班级:学号:课程设计人:指导教师:设计日期:内容提要通过一年的学习,我们了解并掌握了c语言的相关知识,c语言包括程序的结构、数据类型及其运算、基本语句、选择结构程序设计、循环结构程序设计、数组的定义和引用、函数、编译预处理和指针等,其中比较重要的是数据类型及其运算,选择结构程序设计,涉及到c语言的运算和for,while,do-while循环结构,循环语句。为培养综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践的能力,我设计了两个程序,增强和巩固知识,进一步提高自己。本程序是用C语言编速算24和贪吃蛇游戏,第一个程序是任意输入113中的任意一个数字。输入4次,每个数字通过一次加或减或乘或除,最终计算得24。第二个是通过程序来展现贪吃蛇游戏的全过程。通过这些程序,我们可以清楚地了解速算24和贪吃蛇游戏。目录一内容提要2二目录3三任务一1任务一的实验目的42任务一中用到的关键数据的数据类型、名称、用途43任务一的源程序代码注释及其注释6144任务一的运行结果14四任务三1任务三的实验目的152任务三中用到的关键数据的数据类型、名称、用途153任务三的源程序代码注释及其注释16214任务三的运行结果21五课程设计体会2223六参考文献24正文一 任务一1 任务一的实验目的用C语言编速算。任意输入113中的任意一个数字。输入4次,每个数字通过一次加或减或乘或除的运算,最终计算得24。了解各数据类型在程序中的运用情况以及对栈的学习。2 任务一中用到的关键数据的数据类型、名称、用途基本类型:整型(int),字符型(char),枚举类型。构造类型:数组类型(char p413 ),结构体类型。名称:栈,int,char , char p413。用途:基本类型用于定义计算后的结果result,以及种类和个数。char p413是全局变量, 用于说明扑克牌的点数。结构体用途:typedef struct nodeint data;struct node *link;STACK1;栈:用于函数调用框架,局部变量空间的分配3 任务一的源程序代码注释及其注释 开始 发四张牌输入表达字符串s1调用change函数将中缀变后缀表达s调用compute函数计算表达式的值返回结果resultResult=24调用text输出“very good”真假调用text输出“wrong”是否继续真假结束速算24流程图代码:#define N 20#define COL 100#define ROW 40#include #include /*系统时间函数*/#include /*图形函数*/#include /*动态地址分配函数*/#include /*库函数*/#include /*字符串函数*/#include /*字符操作函数*/char p413=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 nodeint data;struct node *link;STACK1;/*栈1*/typedef struct node2char 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 sN,s1N,ch;int i,result;int gdriver, gmode;clrscr(); /*清屏*/init(); /*初始化函数*/while(1)setbkcolor(BLACK); /*设置背景颜色*/cleardevice();/*清屏*/play(); /*发牌*/gotoxy(1,15); /*移动光标*/printf(-Note-n);printf( Please enter express accroding to above four numbern); /*提示信息*/printf( Format as follows:2.*(5.+7.)n);/*提示输入字符串格式*/printf( -n);scanf(%s%c,s1,&ch); /*输入字符串压回车键*/change(s1,s); /*调用change函数将中缀表达式s1转换为后缀表达式s*/result=computer(s); /*计算后缀表达式的值,返回结果result */if(result=24) /*如果结果等于24*/text1(very good); /*调用函数text1显示字符串very good*/elsetext1(wrong!);/*否则函数text1显示字符串wrong!*/printf(Continue (y/n)?n); /*提示信息,是否继续*/scanf(%c,&ch); /*输入一字符*/if(ch=n|ch=N) /*如果该字符等于n或N*/break; /*跳出循环,程序结束*/ /*否则,开始下一轮循环*/close();return; /*返回*/void rand1(int j)/*随机发牌函数*/int kind,num;char str3,n;randomize();while(1)/*循环直到有牌发*/kind=random(4); /*花色随机数*/num=random(13); /*大小随机数*/if(pkindnum!=-1) /*该数未取过*/n=pkindnum; /*取相应位置的扑克牌数*/pkindnum=-1; /*牌发好以后相应位置的元素置-1*/break;switch(kind)/*花式的判断*/case 0:setcolor(RED);sprintf(str,%c,3);break; /*红桃*/case 1:setcolor(BLACK);sprintf(str,%c,3);break; /*黑桃*/case 2:setcolor(RED);sprintf(str,%c,4);break; /*方片*/case 3:setcolor(BLACK);sprintf(str,%c,5);break; /*草花*/settextstyle(0,0,2);outtextxy(COL+j*100-30,ROW+100-46,str);/*显示左上角花色*/outtextxy(COL+j*100+16,ROW+100+32,str); /*显示右下角花色*/if(n!=0)/*输出其他牌*/settextstyle(0,0,3);sprintf(str,%c,n);outtextxy(COL+j*100-5,ROW+100-5,str);/*显示牌的大小*/else/*输出10的时候*/sprintf(str,%d,10);outtextxy(COL+j*100-6,ROW+100-5,str);void play(void)/*发牌的具体过程*/int j;for(j=0;jdata=x; /*保存值x到新空间*/p-link=top; /*新结点的后继为当前栈顶指针*/top=p; /*新的栈顶指针为新插入的结点*/return top; /*返回栈顶指针*/STACK1 *pop(STACK1 *top) /*出栈*/STACK1 *q; /*定义临时变量*/q=top; /*保存当前栈顶指针*/top=top-link; /*栈顶指针后移*/free(q); /*释放q*/return top; /*返回栈顶指针*/int topx(STACK1 *top) /*读栈顶元素*/if(top=NULL) /*栈是否为空*/printf(Stack is nulln); /*显示栈为空信息*/return 0; /*返回整数0*/return top-data; /*返回栈顶元素*/STACK1 *ptop(STACK1 *top,int *x) /*取栈顶元素,并删除栈顶元素*/*x=topx(top); /*读栈顶元素*/top=pop(top); /*删除栈顶元素*/return top; /*返回栈顶指针*/int empty(STACK1 *top) /*判栈是否为空*/if(top=NULL) /*如果为空*/return 1; /*返回1*/elsereturn 0; /*否则返回0*/STACK2 *initstack2(STACK2 *top) /*初始化*/top=NULL; /*栈顶指针置为空*/return top; /*返回栈顶指针*/STACK2 *push2(STACK2 *top,char x) /*入栈函数*/STACK2 *p; /*临时指针类型为STACK2*/p=(STACK2 *)malloc(sizeof(STACK2); /*申请STACK2大小的空间*/if(p=NULL) /*如果p为空*/printf(memory is overflown!); /*显示内存溢出*/exit(0); /*退出*/p-data=x; /*保存值x到新空间*/p-link=top; /*新结点的后继为当前栈顶指针*/top=p; /*新的栈顶指针为新插入的结点*/return top; /*返回栈顶指针*/STACK2 *pop2(STACK2 *top) /*出栈*/STACK2 *q; /*定义临时变量*/q=top; /*保存当前栈顶指针*/top=top-link; /*栈顶指针后移*/free(q); /*释放q*/return top; /*返回栈顶指针*/char topx2(STACK2 *top) /*读栈顶元素*/if(top=NULL) /*栈是否为空*/printf(Stack is nulln); /*显示栈为空信息*/return ; /*返回空字符*/return top-data; /*返回栈顶元素*/STACK2 *ptop2(STACK2 *top,char *x) /*取栈顶元素,并删除栈顶元素*/*x=topx2(top); /*读栈顶元素*/top=pop2(top); /*删除栈顶元素*/return top; /*返回栈顶指针*/int empty2(STACK2 *top) /*判栈是否为空*/if(top=NULL) /*如果为空*/return 1; /*返回1*/elsereturn 0; /*否则返回0*/int text1(char *s)setbkcolor(BLUE); /*设置背景颜色为蓝色*/cleardevice(); /*清除屏幕*/setcolor(12); /*设置文本颜色为淡红色*/settextstyle(1, 0, 8);/*三重笔划字体, 放大8倍*/outtextxy(120, 120, s); /*输出字符串s*/setusercharsize(2, 1, 4, 1);/*水平放大2倍, 垂直放大4倍*/setcolor(15); /*设置文本颜色为*白色/settextstyle(3, 0, 5); /*无衬字笔划, 放大5倍*/outtextxy(220, 220, s); /*输出字符串s*/getch(); /*键盘输入任一字符*/return ; /*返回*/4 任务一的运行结果任意输入113之间的任意一个数字,输入四个数字后,如果结果是24,则输出very good,否则,输出wrong。二:任务二1 任务二的实验目的1 进一步掌握和利用C语言进行程设计的能力; 2、 进一步理解和运用结构化程设计的思想和方法; 3、 初步掌握开发一个小型实用系统的基本方法; 4、 学会调试一个较长程序的基本方法; 5、 学会利用流程图或N-S图表示算法; 6、 掌握书写程设计开发文档的能力(书写课程设计报告);2 任务二中用到的关键数据的数据类型、名称、用途基本类型:整型(int),用途:int i,key;int score=0;int x;int y;构造类型:结构体,用途: struct Food int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/ food;/*食物的结构体*/ struct Snakeint xN;int yN;int node; int direction; int life; snake蛇的结构体 用于说明蛇的位置以及蛇的节数和移动方向。int score=0; 全局变量 , 用于说明得分。; 3 任务二的源程序代码注释及其注释程序开始初始化(调用init()开始画面(调用DrawK()开始游戏(调用GamePlay()判断是否出现死亡否输出成绩(调用PrScore()是否继续游戏退出游戏(调用Close()否是是贪吃蛇流程图代码: #define N 200 #include #include #include #define LEFT 0x4b00 #define RIGHT 0x4d00 #define DOWN 0x5000 #define UP 0x4800 #define ESC 0x011b int i,key; int score=0;/*得分*/ int gamespeed=50000;/*游戏速度自己调整*/ struct Food int x;/*食物的横坐标*/ int y;/*食物的纵坐标*/ int yes;/*判断是否要出现食物的变量*/ food;/*食物的结构体*/ struct Snake int xN; int yN; int node;/*蛇的节数*/ int direction;/*蛇移动方向*/ int life;/* 蛇的生命,0活着,1死亡*/ snake; void Init(void);/*图形驱动*/ void Close(void);/*图形结束*/ void DrawK(void);/*开始画面*/ void GameOver(void);/*结束游戏*/ void GamePlay(void);/*玩游戏具体过程*/ void PrScore(void);/*输出成绩*/ /*主函数*/ void main(void) Init();/*图形驱动*/ DrawK();/*开始画面*/ GamePlay();/*玩游戏具体过程*/ Close();/*图形结束*/ /*图形驱动*/ void Init(void) int gd=DETECT,gm; initgraph(&gd,&gm,c:tc); cleardevice(); /*开始画面,左上角坐标为(50,40),右下角坐标为(610,460)的围墙*/ void DrawK(void) /*setbkcolor(LIGHTGREEN);*/ setcolor(11); setlinestyle(SOLID_LINE,0,THICK_WIDTH);/*设置线型*/ for(i=50;i=600;i+=10)/*画围墙*/ rectangle(i,40,i+10,49); /*上边*/ rectangle(i,451,i+10,460);/*下边*/ for(i=40;i0;i-)/*蛇的每个环节往前移动,也就是贪吃蛇的关键算法*/ snake.xi=snake.xi-1; snake.yi=snake.yi-1; /*以蛇头的移动开始让整个身子移动,后一位补上前一位的位置坐标*/ /*1,2,3,4表示右,左,上,下四个方向,通过这个判断来移动蛇头*/ switch(snake.direction) case 1:snake.x0+=10;break; case 2: snake.x0-=10;break; case 3: snake.y0-=10;break; case 4: snake.y0+=10;break; /*第二部分:死亡设定模块*/ for(i=3;isnake.node;i+)/*死亡条件一:从蛇的第四节开始判断是否撞到自己了,因为蛇头为两节,第三节不可能拐过来*/ if(snake.xi=snake.x0&snake.yi=snake.y0) GameOver();/*显示失败*/ snake.life=1; break; if(snake.x0595|snake.y0455)/*死亡条件二:蛇是否撞到墙壁*/ GameOver();/*本次游戏结束*/ snake.life=1; /*蛇死*/ if(snake.life=1)/*以上两种判断以后,如果蛇死就跳出内循环,重新开始*/ break; /*第三部分:食物设定模块*/if(snake.x0=food.x&snake.y0=food.y)/*吃到食物以后*/ setcolor(0);/*把画面上的食物东西去掉*/ rectangle(food.x,food.y,food.x+10,food.y-10); snake.xsnake.node=-20;snake.ysnake.node=-20; /*新的一节先放在看不见的位置,下次循环就取前一节的位置*/ snake.node+;/*蛇的身体长一节*/ food.yes=1;/*画面上需要出现新的食物*/ score+=10; PrScore();/*输出新得分*/ /*第四部分:死亡后返回初始设定(或是退出开始新游戏)*/setcolor(4);/*画出蛇*/ for(i=0;isnake.node;i+) rectangle(snake.xi,snake.yi,snake.xi+10, snake.yi-10); delay(gamespeed); setcolor(0);/*用黑色去除蛇的的最后一节*/ rectangle(snake.xsnake.node-1,snake.ysnake.node-1, snake.xsnake.node-1+10,snake.ysnake.node-1-10); /*endwhile(!kbhit)*/ if(snake.life=1)/*如果蛇死就跳出循环*/ break; key=bioskey(0);/*接收按键*/ if(key=ESC)/*按ESC键退出*/ break; /*判断是否往相反的方向移动(向相反方向移动会死亡)第三类死亡条件*/ else if(key=UP&snake.direction!=4) snake.direction=3; else if(key=RIGHT&snake.direction!=2) snake.direction=1; else if(key=LEFT&snake.direction!=1) snake.direction=2; else if(key=DOWN&snake.direction!=3) snake.direction=4; /*endwhile(1)*/ /*第五部分:游戏结束*/ void GameOver(void) cleardevice(); PrScore(); setcolor(RED); settextstyle(0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论