C语言课程设计教学大纲.doc
C 程序设计训练大纲程序设计训练大纲一、程序设计训练目的和教学要求一、程序设计训练目的和教学要求“C 程序设计训练”是在学习“C 语言程序设计”课程之后进行的一个实践教学环节,程序设计训练的目的是:1进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解;2 针对 C 语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。3掌握 C 语言的编程技巧和上机调试程序的方法。4掌握程序设计的常用算法。本程序设计训练是利用 C 语言理论和实验课中学到的编程知识和编程技巧,通过布置具有一定难度、一定编程量的程序设计训练题目,使学生通过程序设计训练掌握高级编程语言的知识和编程技术,掌握程序设计的思想和方法,具备利用计算机求解实际问题的能力。二、程序设计训练的基本要求二、程序设计训练的基本要求设计步骤的规范不但可以培养学生科学的工作方法和作风,而且还能有效地减少错误,提高工作效率。因此必须严格执行良好的实验步骤规范(包括上级操作规范)。本程序设计训练的基本步骤与要求是:1问题分析及解决方案框架确定充分地分析和理解问题本身,弄清要求做什么(What to do?)。在确定解决方案框架过程中(How to do?),考虑怎样使程序结构清晰、合理、简单和易于调试,并确定每个函数的简单功能,以及函数之间的调用关系。2详细设计和编码确定算法的主要流程,再此基础上进行代码设计(Coding),每个明确的功能模块程序一般不超过 60 行,否则要进一步划分。3上机前编写程序与检查上机前程序检查可有效提高调试效率,减少上机调试程序时的无谓错误。程序检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑,把程序中的明显错误事先排除。4上机调试程序5完成程序设计训练报告 问题描述:题目要解决的问题是什么。设计设计算法:主要算法思想,用流程图表示。实现注释:各项功能的实现程度。调试报告:调试过程中遇到的主要问题,是如何解决的;对设计和编码的回顾讨论和分析;改进设想;经验和体会等。附录:源程序清单和结果。如果题目规定了测试数据,则结果要包含这些测试数据和运行输出,当然还可以含其他测试数据和运行输出。三、程序设计训练的内容三、程序设计训练的内容1、日历问题、日历问题问题描述问题描述在我们现在使用的日历中,闰年被定义为能被 4 整除的年份,但是能被 100 整除而不能被 400 整除的年是例外,它们不是闰年。例如:1700,1800,1900 和 2100 不是闰年,而1600,2000 和 2400 是闰年。给定从公元 2000 年 1 月 1 日开始逝去的天数,你的任务是给出这一天是哪年哪月哪日星期几。输入数据输入数据输入包含若干行,每行包含一个正整数,表示从 2000 年 1 月 1 日(Saturday)开始逝去的天数。输入最后一行是1,不必处理。可以假设结果的年份不会超过 9999。输出要求输出要求对每个测试样例,输出一行,该行包含对应的日期和星期几。格式为“YYYY-MM-DDDayOfWeek”,其中“DayOfWeek”必须是下面中的一个:Sunday,Monday,Tuesday,Wednesday,Thursday,Friday and Saturday“。输入样例输入样例1730174017501751-1输出样例输出样例2004-09-26 Sunday2004-10-06 Wednesday2004-10-16 Saturday2004-10-17 Sunday2、生理周期、生理周期(中国剩余定理(孙子定理)(易)问题描述问题描述人生来就有三个生理周期,分别为体力、感情和智力周期,它们的周期长度为 23 天、28 天和 33 天。每一个生理周期中有一天是高峰,在高峰这天,人会在相应的方面表现出色。例如,智力周期的高峰,人会思维敏捷,精力容易高度集中。因为三个生理周期长度不同,所以通常三个生理指标的高峰不会落在同一天。对于每个人,我们想知道:何时三个生理指标高峰落在同一天?对于体力、感情和智力,我们会给出给出从当前年份的第一天开始,到三个指标分别出现高峰的天数 p,e,i(不一定是第一次高峰出现的时间!)。你的任务是:给定一个从当年第一天开始数的天数 d,输出从给定时间 d 开始(不包括给定时间)下一次三个高峰落在同一天的时间(距给定时间的天数)。例如:给定时间为 10,下次出现三个高峰同天的时间是 12,则输出 2(注意这里不是3)。输入数据输入数据输入四个整数:p,e,i 和 d。p,e,i 分别表示体力、情感和智力高峰出现的时间(时间从当年的第一天开始计算)。d是给定的时间,可能小于 p,e,或 i。(p,e,i 和 d 均为非负的且小于 365 的正整数;所求的时间小于等于 23*28*33=21252。输出要求输出要求从给定时间起,下一次三个高峰同天的时间(距离给定时间的天数)。输入样例输入样例0 0 0 00 0 0 1005 20 34 3254 5 6 7283 102 23 320203 301 203 40-1-1-1-1输出样例输出样例Case 1:the next triple peak occurs in 21252 days.Case 2:the next triple peak occurs in 21152 days.Case 3:the next triple peak occurs in 19575 days.Case 4:the next triple peak occurs in 16994 days.Case 5:the next triple peak occurs in 8910 days.Case 6:the next triple peak occurs in 10789 days.3、约瑟夫问题、约瑟夫问题(做过)问题描述问题描述约瑟夫问题:有只猴子,按顺时针方向围成一圈选大王(编号从到),从第号开始报数,一直数到,数到的猴子退出圈外,剩下的猴子再接着从 1 开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入,后,输出最后猴王的编号。输入数据输入数据每行是用空格分开的两个整数,第一个是 n,第二个是 m(0 m,n 300)。最后一行是:0 0输出要求输出要求对于每行输入数据(最后一行除外),输出数据也是一行,即最后猴王的编号输入样例:输入样例:6 212 48 30 0输出样例:输出样例:5174、恺撒、恺撒 Caesar 密码密码题目描述题目描述Julius Caesar 生活在充满危险和阴谋的年代。为了生存,他首次发明了密码,用于军队的消息传递。假设你是 Caesar 军团中的一名军官,需要把 Caesar 发送的消息破译出来、并提供给你的将军。消息加密的办法是:对消息原文中的每个大写字母,分别用首尾相连的大写字母循环表中该字母之后的第 5 个字母替换(例如:消息原文中的每个字母 A 都分别替换成字母 F,字母 V 都分别替换成字母 A),其他字符不 变,并且假设消息原文的所有字母都是大写的。密码字母:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U输入输入数据数据最多不超过 100 个数据集组成。每个数据集由 3 部分组成:起始行:START密码消息:由 1 到 200 个字符组成一行,表示 Caesar 发出的一条消息结束行:END在最后一个数据集之后,是另一行:ENDOFINPUT输出输出要求要求每个数据集对应一行,是 Caesar 的原始消息。输入样例输入样例STARTNS BFW,JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJXENDSTARTN BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NSWTRJENDSTARTIFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJENDENDOFINPUT输出样例输出样例IN WAR,EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSESI WOULD RATHER BE FIRST IN A LITTLE IBERIAN VILLAGE THAN SECOND INROMEDANGER KNOWS FULL WELL THAT CAESAR IS MORE DANGEROUS THAN HE5、身份证校验身份证校验(易)题目描述题目描述我国国标GB 11643-1999中规定:公民身份号码是 18 位特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。其校验码(最后一位)计算方法和步骤为:(1)十七位数字本体码加权求和公式S=Sum(Ai*Wi),i=0,.,16,先对前 17 位数字的权求和其中 Ai:表示第 i 位置上的身份证号码数字值Wi:表示第 i 位置上的加权因子,前 17 位加权因子从左到右分别为Wi:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2(2)计算模Y=mod(S,11)=S%11(相除取余)(3)通过模 Y 查下表得到对应的校验码Y012345678910校验码10X98765432例如:某身份证前 17 位为 11010519491231002i1234567891011121314151617wi791058421637910584211010519491231002积7905020292427718305004得到和为:167;则模为 y=167%11=2查(3)得校验码为 X请按上面所述步骤编程,输入一个二代身份证号,检查该身份证是否正确。6学生成绩管理学生成绩管理学生信息包括:学号、姓名、年龄、性别、出生年月。主要功能:(1)能按学期、按班级完成对学生成绩的录入、修改。(2 能按班级统计学生的成绩,求学生的总分及平均分,并能根据学生的平均成绩进行排序。(3)能查询学生成绩。(4)能按班级输出学生的成绩单。7、学生成绩的文件管理、学生成绩的文件管理(1)先用记事本编辑文件stu1.dat存储一个班学习成绩。然后在C环境下,建立一个学生信息的结构体,用r方式打开上述文件,再用fscanf读入、用printf在屏幕上显示文件内容。(2)利用循环使每个学生的三门功课的成绩相加,然后再把和除以三就得到了平均成绩。接着用冒泡法利用平均分的高低排出名次。最后用fprintf将每个学生的信息写入到stu2.dat文件。8、校园卡消费记录、校园卡消费记录学生信息包括:学号或工号、学院、姓名、消费地点、日期、时间、金额。主要功能:(1)能按消费地点完成对消费的录入、修改。(2)能按学号或工号统计消费,求消费者的本月的总消费及日均消费余额,并能根据学生的月消费进行排序。(3)能查询消费记录清单。(4)能按工号或学号排序以后输出消费清单。前前 5 道题任抽一道,后道题任抽一道,后 3 道任抽一道,道任抽一道,测试时测试时,断开网络断开网络,断开优盘口断开优盘口,不准看手机不准看手机,不准看资料不准看资料,抽签其中一道题抽签其中一道题,默写出来默写出来,请机房将请机房将 D 盘清空,盘清空,C 盘写保护等。盘写保护等。对于高等程序设计训练的同学,对于高等程序设计训练的同学,917 题再选一题题再选一题9、自动生成真值表、自动生成真值表要求:能自动生成 10 以下(含 10 个)的变量的真值表10、判断两个公式是否等值、判断两个公式是否等值同时进生成二个公式的真值表,判断各解释下的值是否相等。能判断 10 以下(含 10 个)的变量的公式的等值。11 生成主析取、主合取范式生成主析取、主合取范式要求:能判断 10 以下(含 10 个)的变量的公式的主范式。12 判断一个公式是否合法判断一个公式是否合法根据以下思想,编写判断一个公式是否合法能判断 10 以下(含 10 个)的变量的公式是否合法。13 设设 A、B 是两个具有是两个具有 10 个正整数的集合个正整数的集合,试编程求两个集合的并试编程求两个集合的并、交交、差差。14 将将、这个数排成一排这个数排成一排,使得相邻的两个数之使得相邻的两个数之和为和为一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。一个素数,且首尾两数字之和也为一个素数。编程打印出所有的排法。15 设有枚硬币设有枚硬币,其中有一枚硬币是伪造的其中有一枚硬币是伪造的。真伪硬币的区别仅是重量不同,可能重,可能轻。今要求以天平为工具,用最真伪硬币的区别仅是重量不同,可能重,可能轻。今要求以天平为工具,用最少的少的 比较次数挑出伪造硬币,并鉴定它是重还是轻。比较次数挑出伪造硬币,并鉴定它是重还是轻。16 编写一个程序编写一个程序,实现两个多项式的加法运算实现两个多项式的加法运算。在输入中在输入中,先输入第一个多项先输入第一个多项式式、再输入第二个多项式再输入第二个多项式。输入一组整数输入一组整数,两个相邻的整数表示多项式的一项两个相邻的整数表示多项式的一项,分别是它的系数和幂。当输入的幂为负数时,表示一个多项式的结束。一个多分别是它的系数和幂。当输入的幂为负数时,表示一个多项式的结束。一个多项式中各项的顺序是随机的。输出结果中,每一项用项式中各项的顺序是随机的。输出结果中,每一项用“x y”形式的字符串表形式的字符串表示示,x 是该项的系数是该项的系数、y 是该项的幂数是该项的幂数。要求按照每一项的幂从高到低排列要求按照每一项的幂从高到低排列,即即先输出幂数高的项、再输出幂数低的项。系数为零的项不要输出。先输出幂数高的项、再输出幂数低的项。系数为零的项不要输出。例如要执行 2x20-x17+5x9-7x7+16x5+10 x4+22x2-15 和 2x19+3x17+15x10+7x7-10 x5+4x4+13x2-7 的相加,输入的数据有多种形式,每两个连续的整数表示一项:参考输入-1 17 2 20 22 2 5 9-7 7-15 0 16 5 10 4 0-17 7-7 0 3 17 4 4 15 10-10 5 13 2 2 19 9-7相加的结果输出如下:2 20 2 19 1 17 15 10 5 9 6 5 14 4 35 2-22 0提示:用一个有序的链表表示一个多项式,每一项用一个结点表示。在链表中按照项的幂数进行排列。17 对于一个文本文件对于一个文本文件(包含中英文包含中英文、全角全角、半角标点符号半角标点符号),请将其分为两栏请将其分为两栏(用空格分隔)重新保存。(用空格分隔)重新保存。四、程序设计训练的安排四、程序设计训练的安排程序设计训练安排在本学期下半学期,在计算机基础实验室,每人一台机器。程序设计训练完成后提交程序设计训练报告。五、考核方式与评分办法五、考核方式与评分办法通过程序实现、总结报告和学习态度综合考评,并结合学生的动手能力,独立分析解决问题的能力和创新精神。成绩分优、良、中、及格和不及格五等。考核标准包括:1程序设计的正确性,程序结构是否合理、编程风格(50%)。2学生的工作态度、动手能力、创新精神及出勤率(30%)。3总结报告(20%)。六、选用教材及主要参考书六、选用教材及主要参考书1教材1 何钦铭.C 语言程序设计.高等教育出版社,20082 颜晖.C 语言程序设计实验指导.高等教育出版社,20082参考书1 谭浩强.C 语言程序设计(第三版).清华大学出版社,20052 谭浩强.程序设计题解与上机指导(第三版).清华大学出版社,20052010.10