C语言程序设计实训指导书(内部使用)主讲教师编写前言C语言是一种编程灵活、特色鲜明的程序设计语言,是计算机专业学生的基础课程,学好这种语言可以为后续的面向对象的语言打好坚实的基础,C语言除了学习必须的基本知识:如概念、方法和语法规则之外,更重要的是进行实训,以提高学习者的动手和编程能力,这才是学习语言的最终目的,结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计实训指导书》,以在实训过程中给学生提供帮助。本书分为三个部分:实训总要求、实训模块和项目拓展实例。第一部分为实训总要求,目的是为了让学生编写规范的代码,从开始程序设计就进行规范练习,为以后工作打下良好的基础。第二部分为实训模块,有三个:(1)基础部分,为随堂实训,在分析案例的基础上,使学生掌握该部分内容的知识要点,并能灵活运行在实训中,为使学生目标明确,在实训开始给学生提出实训目的及要求;(2)深化部分,为综合实训,为提高学生的学习积极性,同时为培养软件开发的合作精神,在随堂实训完成的基础上,给学生设计相对该内容综合运用的实例,组织学生进行分组讨论,把每组的讨论结果同大家分享,由学生和老师共同给出评价,该方法可以丰富学生解决问题的方法,拓宽思路;(3)课程设计,为期末的课程设计,是对整个内容的一个综合设计,可以使学生从软件开发的角度开始思考问题、解决问题,形式仍然为分组设计,各小组设定项目经理、技术经理和成员,一般为5人一组,由项目经理组织人员、进行分工和协调工作,技术经理负责开发过程中遇到的疑难问题的解决,并进行开发的全程控制。第三部分为案例拓展实例:学生成绩管理系统。通过该实例从一个简单的顺序结构实例,根据内容逐步进行扩充,由小到大,由浅入深,使设计的功能越来越完善,完成了分支结构、循环结构、数组、函数、指针、结构体和文件内容的应用,最后成为一个完整的设计。本书具有基础性、实用性和系统性,可以指导学生按照从浅入深,从低到高的训练过程,逐步提高他们的编程和动手能力。编者2007年10月实训要求及说明C语言程序设计的实训是学生重要的实习环节。上机实训不仅要求学生掌握C语言程序设计的基本知识,更重要的是培养学生掌握程序设计开发的基本素质、思维方法和技能,为学生综合素质的培养打下坚实基础。实训的形式为教师制定出难易适中的设计题目,学生通过分组讨论进行设计,实训重点放在程序设计开发的全过程上。一、总要求根据所选题目首先进行年算法分析,根据实现的功能进行数据分析,设计相应的数据结构,同时为贯彻“程序设计=算法+数据结构”的思想,要求学生在课下完成流程图的设计,然后根据流程图写出实训代码。二、代码书写要求为保证开发团队的协作和后期修改能有效进行,使学生遵照统一的排版风格、注释标准、命名规则及编码诸原则进行C语言编程,特提出以下规范要求。缩进:1)程序块要采用缩进风格编写,缩进以4个空格(Space)键为单位,不使用TAB键。2)函数体、结构体、循环体以及分支结构中的语句行都须采用缩进风格。3)所有的if、while、for、do结构中的语句即使只有一行也须用括号括起来。3)if、while、for、do语句单独占一行,左、右花括号也各占一行且不缩进。例:if(superHero==theTick){printl(Spoon!);}间隔:所有的标识符都必须被空白字符包围。例如:inttheTick=5;if(theTick==5)空行:代码段之间须以一个空行进行间隔;空格的位置:1)在一个关键字和左括号“(”之间。注意:不要在函数名和左括号之间加空格;2)在参数列表的每个逗号“,”之后;3)二元操作符前后。注意:一元操作符前后都不加空格。例如:inta=10;a=a+1;a++;4)for语句的每个表达式之间。例如:for(inti=0;i20;i++)…。代码行:1)不允许把多个短语句写在一行中,即一行只写一条语句;2)长语句、参数、表达式(超过80个ASCII字符)应分行书写,操作符放在新行之首,划分出的新行要进行适当的缩进,使排版整齐,语句可读。示例:#001perm_count_msg.head.len=NO7_TO_STAT_PERM_COUNT_LEN#002+STAT_SIZE_PER_FRAM;#003act_task_table[STAT_TASK_CHECK_NUMBER+index].occupied#004=stat_poi[index].occupied;命名规则:所有的标识符只能用字母(A-Z或a-z)和数字(0-9)。不得包含货币符号或其它非AS-CII字符。1)变量的命名应尽可能采用有意义的名词,力求可顾名思义。2)可以采用一个单词或多个单词的缩写作为名字,缩写单词的每个字母都要大写。3)对于难以使用英文的情况,可以参考相关行业标准,比如使用国标。4)采用约定俗成的习惯用法。常见的习惯用法:循环变量:i、j、k、m、n长度:length数量:count位置:pos或position下标或索引:i或index设置/获取:set/get大小:size注释:1)为确保程序易读性,注释语句不得小于全部代码行的30%。2)说明性文件(如头文件.h文件、.inc文件、.def文件、编译说明文件.cfg等)头部应进行注释,注释必须列出:版权说明、版本号、生成日期、作者、内容、功能、与其它文件的关系、修改日志等,头文件的注释中还应有函数功能简要说明。3)源文件头部应进行注释,列出:版权说明、版本号、生成日期、作者、模块目的/功能、主要函数及其功能、修改日志等。4)函数头部应进行注释,列出:函数的目的/功能、输入参数、输出参数、返回值、调用关系(函数、表)等。5)边写代码边注释,修改代码同时修改相应的注释,以保证注释与代码的一致性。不再有用的注释要删除。6)注释的内容要清楚、明了,含义准确,防止注释二义性。7)避免在注释中使用缩写,特别是非常用缩写。8)注释应与其描述的代码相近,对代码的注释应放在其上方或右方(对单条语句的注释)相邻位置,不可放在下面,如放于上方则需与其上面的代码用空行隔开。9)对于所有有物理含义的变量、常量,如果其命名不是充分自注释的,在声明时都必须加以注释,说明其物理含义。变量、常量、宏的注释应放在其上方相邻位置或右方。10)数据结构声明(包括数组、结构、类、枚举等),如果其命名不是充分自注释的,必须加以注释。对结构中的每个域的注释放在此域的右方。11)全局变量要有较详细的注释,包括对其功能、取值范围、哪些函数或过程存取它以及存取时注意事项等的说明。12)注释与所描述内容进行同样的缩排。13)将注释与其上面的代码用空行隔开。14)对变量的定义和分支语句(条件分支、循环语句等)必须编写注释。15)对于switch语句下的case语句,如果因为特殊情况需要处理完一个case后进入下一个case处理,必须在该case语句处理完、下一个case语句前加上明确的注释。三、编码原则1)注意运算符的优先级,并用括号明确表达式的操作顺序,避免使用默认优先级。2)避免使用不易理解的数字,用有意义的标识来替代。涉及物理状态或者含有物理意义的常量,不应直接使用数字,必须用有意义的枚举或宏来代替。3)去掉没必要的公共变量。4)仔细定义并明确公共变量的含义、作用、取值范围及公共变量间的关系。5)明确公共变量与操作此公共变量的函数或过程的关系,如访问、修改及创建等。6)当向公共变量传递数据时,要十分小心,防止赋予不合理的值或越界等现象发生。7)防止局部变量与公共变量同名。8)严禁使用未经初始化的变量。9)对所调用函数的错误返回码要仔细、全面地处理。10)明确函数功能,精确(而不是近似)地实现函数设计。模块一:基础部分第一部分c语言的基本认识[实训目的及要求]通过本次实训内容,使学生对C语言程序有一个简单的认识,熟悉VC++6.0的运行环境,掌握C程序的执行方法,了解程序的结构和输出函数等。程序1:#include“stdio.h”main(){printf(“各位同学好!很高兴和大家一起学习C语言!\n);}运行结果:各位同学好!很高兴和大家一起学习C语言!其中,#include“stdio.h”为一编译预处理命令,含义是文件包含,“stdio.h”是一头文件,标准输入和输出头文件,用来控制数据的输入或输出。main是主函数的函数名,表示这是一个主函数。每一个C源程序都必须有,且只能有一个主函数(main函数)。printf的功能是把要输出的内容送到显示器去显示,本质上也是一个函数,是一个由系统定义的标准函数。程序2:#include“stdio.h”main(){printf(“$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n”);printf(“*ThisisaCprogram*\n);printf(“$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n”);}运行结果:$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$*ThisisaCprogram*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$程序3:任给一半径,输出圆的周长.#includemath.h/*include称为文件包含命令*/#includestdio.h/*扩展名为.h的文件称为头文件*/main(){intr,l;/*定义两个整数变量r和l*/printf(inputr:\n);/*输出提示信息*/scanf(“%d”,&r);/*接收数据给变量r*/l=2*3.14*r;/*进行数学运算把面积赋值给变量s*/printf(“circleof%dis%d\n,r,l);/*输出变量r,l的值*/}实训题目1、编一个小程序实现在屏幕上输出以下内容:**********************************学生成绩管理系统**********************************2、根据刚才的例题编写程序,通过键盘输入一个三角形的三边长,求三角形的面积(求一个非负数算术平方根的函数为sqrt(x))。第二部分c程序分析[实训目的及要求]通过本次实训内容,使学生对C语言程序有一个系统的认识,并在此基础上掌握三种基本数据类型、部分运算符号和常用函数的应用,体现在自己动手编写的小程序中。程序1:求三个整数的和。#include“stdio.h”/*文件包含命令*/main()/*主函数*/{floatf1,f2,f3,s;/*定义四个实型变量*/printf(“inputthreefloats:”)/*显示提示信息*/scanf(“%f%f%f”,&f1,&f2,&f3);/*接收三个整型变量*/s=f1+f2+f3;/*求三个变量之和,存入变量s*/printf(“sumoff1,f2,f3is%.2f”,s);/*输出求出的和*/}运行结果:inputthreefloats:345sumoff1,f2,f3is6.00程序2:把输入的大写字母转换为小写字母。#include“stdio.h”/*文件包含命令*/main()/*主函数*/{charch1,ch2;/*定义两个字符型变量*/printf(“inputanupperletter:”)/*显示提示信息*/scanf(“%c”,&ch1);/*接收一个大写字母*/ch2=ch1+32;/*把大写字母转换为小写字母*/printf(“lowerofletter%cis%c”,ch1,ch2);/*输出*/}运行结果:inputanupperletter:SlowerofletterSiss程序3:求一个四位整数的各个数据位。#include“stdio.h”/*文件包含命令*/main()/*主函数*/{intnum,bit1,bit2,bit3,bit4;/*定义四个实型变量*/printf(“inputa