青岛理工大学《C语言程序设计》题目打字练习程序指导教师:李兰老师姓名:学号:2011班级:专业:计算机科学地点:现代教育中心机房201时间:2012.6.26 至2012.6.29一、内容本程序主要实现的是对使用者的打字速度进行练习和提高。
因为界面友好亲和,因此能让使用者在轻松愉快中练习并快速提高自己的打字速度和准确性。
程序主要的功能有记录使用者在本次使用中的击中数和总下落字母的个数之比。
并且游戏设置了九个等级,随着数字的增加,等级越高,字母下落的速度逐步提高,这样能够更好的迎合不同水平的用户需求。
使用本程序很简单,因为在写代码时,我很注重的是界面的友好,所以,在用户的每次操作前,界面上都有详细的操作提醒,只要跟着提示输入就能很快速地进入并开始练习。
二、上机环境操作系统:windows XP(win7兼容)开发工具:VC6.0三、函数调用关系图四、各函数功能说明1、void main( ) 主函数2、void printScreen( ) 刷新屏幕函数3、int levelChoice( ) 游戏等级选择函数4、int newWord( ) 生成新字符函数5、int moving( ) 字符下降函数6、int wordHit( ) 击中字符函数7、int result ( ) 结果输出函数8、int start( ) 程序开始提示操作9、void leave( ) 函数结束五、流程图六、程序运行效果图七、总结通过这次的C语言课程设计,我对程序设计的过程有了很具体的认识,我明白了作为一个开发者应该具有坚持和吃苦耐劳的素质和乐于交流和共享的品德。
而且由于在程序设计和代码编写的时候,程序中用到的很多函数是我们在课堂上并没有接触到甚至是没有听说过的,因此我们还得大量地参考有关书籍,并且从互联网上查找函数等的相关信息。
与此同时,与同学的交流更是并不可少的,这个也是作为将来的一个开发者必须要具备的素质,那就是团队合作精神。
因为不论将来是走向企业还是做科学研发,系统和程序都是相当复杂和庞大的,我们不可能有能力能够一个人写了所有的代码,因此就得靠团队的协作。
所以,从这次的程序课程设计中,我充分得感受到了这一点,有时候和同学的交流绝对是提高工作效率的最好途径之一。
在后期,大体的代码写完了之后,我还经历了漫长的程序调试过程,因为是第一次真正地开始做一个小项目,所以在编写代码的过程中肯定存在着很多的错误。
调试是一项非常需要耐心和细致观察能力的工作,有时候我们可能会一两个小时都修改不了一个错误,这时候人是容易烦躁和选择放弃的,所以必须要有坚持不懈的精神,不然程序是不可能写的好的,我们最后也只能是半途而废。
当然,值得一提的是,我已经摒弃了最开始学习编程时会缺漏标点符号等等的小错误,这在一定程度上提高了调试的效率,节省了时间。
总的来说,通过这次的程序设计,我的收获良多!对C语言的认识和掌握也进入新的一个阶段。
比如,switch语句的使用,我不但对switch语句的语法能够全面的掌握,而且能够很熟练的使用它。
另一点,我开始能够较为熟练的使用数组和掌握函数的编写和调用的关系。
本程序共用了九个函数,每一个函数的每一个语句都是经过不断的斟酌后才写出的,而且充分得利用的C语言的简洁高效表达的特点,让代码在最短的长度内发挥出最多的作用,提高了程序运行得速度。
我觉得C语言在这点上是非常的好用!八、参考文献李春葆C语言程序设计教程(第二版)清华大学出版社2011李春葆C语言程序设计教程(第二版)学习指导清华大学出版社2012刘汝佳算法竞赛入门经典清华大学出版社2012九、程序清单#include <stdio.h> #include <time.h>#include <stdlib.h> #include <conio.h> #include <dos.h>#include <windows.h> #define xLine 70 #define yLine 20#define full 100#define true 1#define false 0/*---------------------------------------------------------------------*/void printScreen(int level,int right,intsum,char p[yLine][xLine])/* 刷新屏幕的输出图像 */{int i,j;system("cls");system("Color E5");printf("等级:%d 按0退出;1暂停得分:%d/%d\n",level,right,sum);/* 输出现在的等级,击中数和现在已下落总数 */printf("----------------------------------------------------------------------\n"); for (i=0;i<yLine;i++){for(j=0;j<xLine;j++)printf ("%c",p[i][j]);printf("\n");}/* for (i) */printf("----------------------------------------------------------------------\n"); }/* printScreen *//*---------------------------------------------------------------------*/ void leave()/* 离开程序时,调用该函数结束程序。
*/{system("cls");system("Color F3");printf ("\n\n\n\n 非常感谢您的使用.");Sleep (0);exit (0);}/*----------------------------------------------------------------------*/int levelChoice(int level)/* 进入游戏时选择游戏等级 */{while (true)/* void */{ system("cls");system("Color F3");printf(" *\n ***\n *****\n*******\n******************************\n************************\n******************\n**************\n**************\n****************\n******************\n********************\n ************\n *** ***\n * *\n");printf("\n\n\n\n\n 请输入数字1-9选择游戏等级,按0返回. \n\n");level=getch();level=level-48;if (level>0&&level<10){printf(" 选择等级:%d",level);return (level);}else if (level==0)leave ();elseprintf ("Please input acorrect number!\n");}/* while (true) */}/* levelChoice *//*---------------------------------------------------------------------*/int newWord(int sum,charp[yLine][xLine])/* 随生成一个新的字符并将其加入数组的首行 */{int j,w;if (sum!=full){j=(rand()%(xLine-2))+1;w=(rand()%26)+65;p[0][j]=w;return (++sum);}/* if */return (sum);}/* newWord *//*---------------------------------------------------------------------*/int moving(int miss,char p[yLine][xLine])/* 将最后一行置空,并使所有在数组中其他行的字符下降一行 */ {int i,j;char w;for (j=1,i=yLine-1;j<xLine-1;j++)/* 遍历最后一行的所有字符,如果该字符非空则将其置空并使miss加一 */{if (p[i][j]!=' '){miss++;p[i][j]=' ';}}for (i=yLine-2;i>=0;i--)/* 从倒数第二行的最后一个字符开始开始向前遍历该数组内的元素,如果该位置非空则将该字符移动至下一行 */{for (j=xLine-2;j>0;j--){if (p[i][j]!=' '){w=p[i][j];p[i][j]=' ';p[i+1][j]=w;}/* if */}/* for(j) */}/* for(i) */return (miss);}/* moving *//*---------------------------------------------------------------------*/int wordHit(char p[yLine][xLine])/*判断是否有字符从键盘键入。
如果有,则从最后一行的最后一个元素开始遍历该数组,找出该字符,并把对应位置置空,且返回1。
如果有输入,但屏幕上无对应项,或无输入则返回0*/{int i,j;char key;if(kbhit())/* 判断用户是否从键盘键入字符。
如果kbhit返回值为 */key=getch();if(key){if (key=='0') leave();if (key=='1'){system("cls");printf ("按任意键继续打字游戏.");getch();}for (i=yLine;i>0;i--){for (j=xLine;j>0;j--){if(key-32==p[i-1][j-1]){p[i-1][j-1]=' ';return (true);}/* if */}/* for (j) */}/* for (i) */}/* if (key) */return (false);}/* wordHit *//*---------------------------------------------------------------------*/int result(int right)/*判断该次的成绩并输出对应的结果,询问用户是否继续,若继续,判断是否可以进入下一级别。