已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
吉首大学 Jishou University 课 程 设 计题 目:编写一个C语言代码美化程序 作 者: 学 号: 所属院系:数学与计算机科学学院 专业年级: 09级网络工程 指导老师: 职称: 时 间: 2010年10月17日-10月24日 目录一、摘要二、需求分析三、概要分析四、源代码详细分析及测试五、总结六、参考文献 编写一个C语言代码美化程序一、摘要 题目要求:编写一个C语言代码美化程序,能处理符合语法的C代码,进行重新排版,使之更加美观易读。设计要求:(1) 程序采用字符界面(2)显示功能菜单,用户指定键即可进入相应功能(3) 可由用户选择输入文件(.c文件),程序对它进行格式化(4) 将修改以后的文件输出到另一个.c文件开发语言与环境:C语言是目前世界上流行、使用最广泛的高级程序设计语言。它是一种结构化语言,层次清晰,便于按模块化方式组织程序,易于调试和维护。C语言的表现能力和处理能力极强。它不仅具有丰富的运算符和数据类型,便于实现各类复杂的数据结构。它还可以直接访问内存的物理地址,进行位一级的操作。因此,我们这次使用的开发平台为VC+6.0,采用的高级语言为c语言。二、需求分析当今时代是飞速发展的信息时代,在各行各业中离不开信息处理,这正是计算机被广泛应用于信息系统的环境。计算机的最到好处的于利用它能够进行信息管理,使用计算机进行信息控制,不仅提高了工作效率,而且大大的提高了其安全性。C/C+语言无疑是当今嵌入式开发中最为常见的语言。但其中对于C/C+语言代码的书写是一个令人头痛的问题,很多程序员尤其是新手写出来的C/C+源程序代码让人感觉杂乱无章,给人一种很不好的印象。甚至几个月后自己对自己编写的C/C+源程序代码都看不懂。针对这一种情况,我们认为编写一个美化C/C+代码的美化工具很有必要性,该程序可以快速的对乱糟糟的代码进行自动排版,让程序看起来更符合规范,更加符合大家的习惯,看起来不那么费力。让程序起到很好的美化效果,并且不改动原来程序的功能。编制这样一个程序,对大家一定可以起到很大的帮助。 这次的小程序,我们小组人员的分工如下:谭向宏:完成了两个主要子函数的编制;吴方朴:对主函数的调试,调用函数;刘晖:搜集资料,做测试实例,测试。大家的共同合作下,完成了这一小程序,过程虽艰苦,但收获颇丰。3、 概要分析:C程序美化流程图 从主函数开始输入需要美化的文件名 用读写方式打开以上文件名的文件。 N Y 用只写方式打开另一 文件作为存储用途 N Y调用函数readln() 按行读取数据调用函数check()查找指定字符 做换行,加空格等操作,逐 行对代码进行美化。 关闭两个文件 结束这次的美化代码程序,定义并调用了两个被调函数,由主函数调用完成。函数的大致流程如下:首先输入要美化的c原文件的文件名,用读写方式打开该文件,然后用只写方式打开另一文件,若文件不存在则会新建一文件,然后调用函数readin按行读取数据,并将读取的数据放入定义的全局变量数组中,用函数check 找到关键符号,在输出的同时做换行加空格等操作,对文件进行美化。美化完成后,关闭两个文件 ,一个美化文件过程便完成了。四、源代码详细说明及测试 1、代码详细说明:原理:对于美化代码,无非是对不整齐的代码将它重新排版对齐,其中就是要对原文件的代码去除空格以及多余的字符之类的,从而起到美化的效果,为了达到这种功能,我们定义了函数进行相关的操作 首先确定所需要的函数模块:第一部分是主函数部分:void main()第二部分是按行读出的模块部分:int readln(FILE *fp) 第三部分是符号查找匹配部分: char * check(char str,char tar) 第一部分:主函数部分,主要代码及分析如下:void main() FILE *infp,*outfp; /设置文件指针 char *p,fn64; int j; printf部分:字符界面设置; scanf(%s,fn); /输入你要修改的文件名; infp=fopen(fn,r+); /应用读写方式打开输入的文件; if(infp=NULL) /若打开文件失败 ,报错; printf(文件夹打开错误,请重新输入.n); return; outfp=fopen(tempwenjian.c,w); /为输出打开一个文件,若不存在该文 件自动新建生成一文件名为tempwenjian.c的文件; if(outfp=NULL) /若打开文件失败,报错; printf(不能创建文件夹.n); return; 这部分的while循环是精华部分,涉及到了函数的调用; while(readln(infp)!=EOF_REACHED) /调用readln函数,若函数返回值不是0,做循环 ; p=check(strl,); /调用函数,查找符号 : if(p!=NULL) /查找成功 magin-; fprintf(outfp,n); /在符号之前输出换行符; for(j=0;jmagin;j+) fprintf(outfp, ); fprintf(outfp,%s,strl); /在tempwenjian.c文件中,以字符串格式输出 该行数据 ; p=check(strl,); /调用函数,查找符号 : if(p!=NULL) /查找成功 magin+; fprintf(outfp,n); /在之后输出换行符; fprintf(outfp,n); /最后输出换行符; printf(恭喜您,美化代码成功!n); fclose(infp); /关闭原文件; fclose(outfp); /关闭出入文件; 第二部分:按行读出的模块部分:在原始的代码中,及自己输入文件名的那个原文件中,按行读出字符 ,刚放入全局变量数组str1中。细节及详细解释如下:Int readln(FILE *fp) / /按行读取数据,以文件类型指针接收输入的 待美化的文件; int i=0,j=0; register int c; while(!feof(fp) /当文件未结束,作while循环; c=fgetc(fp); /从文件读入一个字符,赋给c变量; strli=c; /把该 读入的字符赋给要输出的数组; if(c!= &c!=t) j=1; /如果读入的该字符不是空格且不是一个水平制表,就令 j=1;表示读入的该字符为一个有效字符; i+=j; /如果读入的字符为有效字符,i加1;if(c=n) /如果读入的该字符为一换行符,即该行数据已读完毕,使该输出数据为空字符; strli=0; return READ_OK; /该行读入完毕,且该行撤消了换行操作,返回主调函数,带回数据1; /读完某一行时结束,循环结束; magin=i; if(i) /如果文件只有一行,继续执行以下操作: strli-1=n; /若文件只有一行 ,在结尾处执行换行操作; strli=0; return EOF_LINE; /返回主调函数,带回数据2; else return EOF_REACHED;第三部分:符号查找匹配部分:char * check(char str,char tar) /被调函数,是一个返回字符指针的函数,用来查找; register int i=0,c; static int status=CODE; /令status=0; do c=stri; /在存储的该行字符中,第i个字符赋给 c,即从第一个字母开始查找匹配 的符号; switch(c) case :switch(status) case CODE: status=QUOTE;break; /“后若为开始,把status重新赋值为1,不满足status=0,需要继续循环; case SLASHinQUOTE: status=CODE;break; /否则就把status重新归为code 0; case QUOTE: status=CODE;break; break; case :switch(status) case QUOTE:status=SLASHinQUOTE;break; /如果c为 ,status=1,则把status的值赋为2,不满足status=0,继续循环;break; case n:switch(status) case LINEQ:status=CODE;break; /如果c为换行符,且status=5,则把status归零;break; case :switch(status) case CODE:status=QUOTE2;break; /如果c为字符,status为0时,status改赋值为3,不满足status=0,继续循环, case QUOTE2:status=CODE;break; / 如果c为字符,当status为3时,即,下一次循环到来时,status归零; break; case /:switch(status) case CODE:status=SLASH;break; /如果c为字符/,status为0时,status改赋值为4,不满足status=0,继续循环 case SLASH:status=LINEQ;break; /如果c为字符/,status为4时,status改赋值为5,不满足status=0,继续循环 case PARAQ:status=CODE;break; / 如果c为字符,status为5时,即,下一次循环到来时,status归零; break; case *:switch(status) case SLASH:status=PARAQ;break; /如果c为*,且status=6,则把status归零; break; default: switch(status) case SLASH:status=CODE;break; /对于c以上情况均不满足,如果status=4,则归零; if(c=tar&status=CODE) /找到了相匹配的字符且status=0 return str+i; /如是找到了匹配的字符,就返回匹配的字符的地址; i+; while(c);return NULL;2、运行与调试程序运行画面代码printf( 吉首大学课程设计C语言美化程序n);printf(C Program beautifiern);printf(*n);printf(*制作人:谭向宏、吴方朴、刘辉*n);printf(*n);printf(请输入您需要美化的C文件:);其中包括程序的主题C语言美化程序,包括制作人,输入提示的操作。运行的画面如下: 图1 箭头所示为输入C文件的名称下面我们对一个杂乱的C代码进行美化操作操作前的效果图如下: 图2以上为一段简单的密码C代码,初看起来给人的感觉特别混乱,杂乱无章,给人很不好的感觉以下的代码是经过C程序美化后的效果: 图3 以上给人的感觉比较舒服,没有前面的那种杂乱感了 2、操作错误的提示界面: 图4 3、当们在输入C文件的地方,随意输入一个不存在或者错误的C文件名字时,就会出现以下界面: 图5系统会提示您文件夹打开错误,请重新输入按任意键取消对话框 4、当您输入正确的C文件时 图6操作界面如下: 图7 系统将会提示您,恭喜您,美化代码成功!当C文件被美化后,将会以一个新的文件temp.c的文件作为修改后的文件,即为我们所需要的最终文件3、完整源代码如下:#include #include #include#define EOF_REACHED 0#define READ_OK 1#define EOF_LINE 2/各种状态:#define CODE 0 / c code#define QUOTE 1 / #define SLASHinQUOTE 2 / ? #define QUOTE2 3 / #define SLASH 4 / /#define LINEQ 5 / /#define PARAQ 6 / /*/char strl128; /存储输出数据的数组;int magin;char * check(char str,char tar) /*被调函数,是一个返回字符指针 的函数,用来查找;*/ register int i=0,c; static int status=CODE; /令status=0; do c=stri; /*在存储的该行字符中,第i个字符赋给 c,即从 第一个字母开始查找匹配的符号;*/ switch(c) case :switch(status) case CODE: status=QUOTE;break; /“后若为开始,把status重新赋值为1,不满足status=0,需要继续循环; case SLASHinQUOTE: status=CODE;break; /否则就把status重新归为code 0; case QUOTE: status=CODE;break; break; case :switch(status) case QUOTE:status=SLASHinQUOTE;break; /如果c为 ,且status=1,则把status的值赋为2,不满足status=0,继/续循环;break; case n:switch(status) case LINEQ:status=CODE;break; /如果c为换行符,且status=5,则把status归零;break; case :switch(status) case CODE:status=QUOTE2;break; /如果c为字符,当status为0时,把status改赋值为3,不满足status=0,/继续循环, case QUOTE2:status=CODE;break; / 如果c为字符,当status为3时,即,下一次循环到来时,status归零; break; case /:switch(status) case CODE:status=SLASH;break; /如果c为字符/,当status为0时,status改赋值为4,不满足status=0,/继续循环 case SLASH:status=LINEQ;break; /如果c为字符/,当status为4时,status改赋值为5,不满足status=0,/继续循环 case PARAQ:status=CODE;break; / 如果c为字符,当status为5时,即,下一次循环到来时,status归零; break; case *:switch(status) case SLASH:status=PARAQ;break; /如果c为*,且status=6,则把status归零; break; default: switch(status) case SLASH:status=CODE;break; /对于c以上情况均不满足,如果status=4,则归零; if(c=tar&status=CODE) /找到了相匹配的字符且status=0 return str+i; /如是找到了匹配的字符,就返回匹配的字符的地址; i+; while(c);return NULL;int readln(FILE *fp) /按行读取数据,以文件类型指针接收输入的 待美化的文件; int i=0,j=0; register int c; while(!feof(fp) /当文件未结束,作while循环; c=fgetc(fp); /从文件读入一个字符,赋给c变量; strli=c; /把该 读入的字符赋给要输出的数组; if(c!= &c!=t) j=1; /如果读入的该字符不是空格且不是一个水平制表, /就令 j=1;表示读入的该字符为一个有效字符; i+=j; /如果读入的字符为有效字符,i加1;if(c=n) /如果读入的该字符为一换行符,即:该行数据已读完 /毕,使该输出数据为空字符; strli=0; return READ_OK; /该行读入完毕,且该行撤消了换行操作, /返回主调函数,带回数据1; /读完某一行时结束,循环结束; magin=i; if(i) /如果文件只有一行,继续执行以下操作: strli-1=n; /若文件只有一行 ,在结尾处执行换行操作; strli=0; return EOF_LINE; /返回主调函数,带回数据2; else return EOF_REACHED;void main() FILE *infp,*outfp; /设置文件指针 char *p,fn64; int j; printf( 吉首大学课程设计C语言美化程序n); /以下六行字符为提示性界面 printf(C Program beautifiern); printf(*n); printf(*制作人:谭向宏、吴方朴、刘辉*n); printf(*n); printf(请输入您需要美化的C文件:); scanf(%s,fn); /输入你要修改的文件名; infp=fopen(fn,r+); /应用读写方式打开输入的文件; if(infp=NULL) /若打开文件失败 ,报错; printf(文件夹打开错误,请重新输入.n); return; outfp=fopen(tempwenjian.c,w); /为输出打开一个文件,若不存在该文件自动新建生成一/文件名为tempwenjian.c的文件; if(outfp=NULL) /若打开文件失败,报错; printf(不能创建文件夹.n); return; while(readln(infp)!=EOF_REACHED) /调用readln函数,若函数返回值不是0,做循环 ; p=check(strl,); /调用函数,查找符号 : if(p!=NUL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 18年全国高考卷1及答案
- 真核细胞型微生物2.1真菌Fungu
- 质检行业成果转化立项申请书
- 软件工程详细设计
- 交通行业员工技能提升培训方案-大纲
- 会计师事务所职业道德年度自查报告
- 2026年保密知识竞赛题库及答案
- 2026年烟草普法知识竞赛题库及答案
- 2026年建设工程合同纠纷实务考试题及答案解析
- 解读工程设计资质标准
- 2026年新疆新业国有资产经营集团有限责任公司人员招聘笔试参考题库及详细答案解析
- 大体积混凝土冷却水管安装施工工艺
- 2026年仓库安全培训考试题及答案
- 2026年上海市中考真题历史试题【含答案解析】
- 中国石油天然气股份有限公司辽宁盘锦销售分公司大洼新开加油站项目水土保持方案报告表
- 邮政相关基础知识考试题库及答案2025年
- 变电所分列运行管理制度培训课件
- 肥料登记证申请办理流程
- 《新能源专业导论》新能源相关专业全套教学课件
- 2026航天科工十院校园招聘笔试历年难易错考点试卷带答案解析
- 佛教协会工作制度制度
评论
0/150
提交评论