C程序设计训练

  • 格式:doc
  • 大小:46.50 KB
  • 文档页数:6

《程序设计实践》教学大纲一、课程性质与任务。

进一步培养学生结构化程序设计的思想,加深对高级语言基本语言要素和控制结构的理解,针对c语言中的重点和难点内容进行训练,独立完成有一定工作量的程序设计任务,同时强调好的程序设计风格。

二、课程内容与要求为了使学生从课程设计中尽可能取得尽比较大的收获,对课程设计题目分成2类,1类为技巧性强题目,1类为综合题目。

学生从这2类型题目中各选择部分完成。

设计步骤的规范不但可以培养学生科学的工作方法和作风,而且还能有效地减少错误,提高工作效率。

因此必须严格执行良好的实验步骤规范(包括上级操作规范)。

本课程设计的基本步骤是:1、问题分析及解决方案框架确定充分地分析和理解问题本身,弄清要求做什么(What to do?)。

在确定解决方案框架过程中(How to do?),综合考虑系统功能,考虑怎样使系统结构清晰、合理、简单和易于调试。

最后确定每个过程和函数的简单功能,以及过程(或函数)之间的调用关系。

2、详细设计和编码确定算法的主要流程,再此基础上进行代码设计(Coding),每个明确的功能模块程序一般不超过60行,否则要进一步划分。

3、上机前程序静态检查上机前程序静态检查可有效提高调试效率,减少上机调试程序时的无谓错误。

静态检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑。

把程序中的明显错误事先排除。

4、上机调试程序5、完成课程设计报告①需求和规格说明:问题描述:题目要解决的问题是什么②设计设计思路:主要算法思想设计表示:每个函数或过程的功能,列出每个过程或函数所调用的过程或函数实现注释:各项功能的实现程度、在完成基本要求的基础上还实现了什么功能详细设计:主要算法的伪代码。

这部分不作强制性要求③试报告:调试过程中遇到的主要问题,是如何解决的;对设计和编码的回顾讨论和分析;改进设想;经验和体会等④附录:源程序清单和结果。

如果题目规定了测试数据,则结果要包含这些测试数据和运行输出,当然还可以含其他测试数据和运行输出。

三、成绩考核及评定方法。

通过程序实现、总结报告和学习态度综合考评,并结合学生的动手能力,独立分析解决问题的能力和创新精神。

成绩分优、良、中、及格和不及格五等。

考核标准包括:1、程序设计的正确性,程序结构是否合理、编程风格(50%)。

2、学生的工作态度、动手能力、创新精神(20%)。

3、总结报告(30%)四、课程设计实习题(一)基本要求题目1、一司机出车祸后驾车逃离现场,第一位目击者记得车牌号前两位数字相同,且后两位数字也相同;第二位目击者是一位数学家,他看出车牌号是四位完全平方数。

试编程推算肇事车的车牌号。

2、有17个人围成一圈,从0号的人开始报数,凡报到3的倍数的人离开圈子,然后再数下去。

直到最后只剩下一个人为止。

问此人原来的位置是多少号。

3、编写一个程序,求3X4数组的转置矩阵。

要求在main函数里读数,在change函数里把矩阵转置。

4、用条件编译方法实现以下功能:输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母(如‟a‟变成‟b‟……….‟z‟变成‟a‟。

其他字符不变)。

用#define命令来控制是否要译成密码。

例如:#define change 1则输出密码。

若#define change 0则不译成密码,按原码输出。

5、用指向指针的方法对n个字符串排序并输出。

6、用指向指针的方法对n个整数排序并输出。

要求将排序单独写成一个函数。

N个整数在主函数中输入。

最后在主函数中输出。

7、有n个学生,每个学生的数据包括学号、姓名、年龄和两科成绩。

请编程用结构类型的数据处理方式实现如下目标:(1)在main函数中输入原始数据;(2)在count函数中输出各学生的总分和平均分;(3)输出总分最高的学生;(4)编写sort函数将各学生的数据按总分降序输出。

8、用链表方式建立5个学生的成绩统计表,每个学生的信息包括学号和一门课成绩。

要求:(1)程序执行前只含头结点;(2)从键盘输入各学生的成绩时,按学号输入,但各学生在链表中所占接点的位置按成绩的排列;(3)程序要能删除特定分数线以下的学生所占的结点,并释放相应的内存。

9、编写密码加密和解密函数,对一个明码串,根据其ASCⅡ码值在反转ASCⅡ码表ASC(255)、ASC(254)、ASC(253)、……、ASC(0)中对应位置进行加密或解密。

如明密“abf1243”,其ASCⅡ码分别是97、98、99、49、50、51、52,根据反转ASCⅡ码表,将其转换成ASC Ⅱ码是255-97、255-98、255-99、255-49、255-50、255-51、255-52的密码串。

10、编写文件拷贝程序,执行格式:HCOPY file_name1 file_name211、编写对C 源程序加行号的程序,执行格式:ADD file_name12、编写简易计算器程序,输入格式:data1 op date213、编写求 X n 函数14、编写求以下函数)!(!!n m n m C n m -= 15、编写求子串函数substr(s,n1,n2),在串s 中从n1位置开始取n2个字符的子串16、文本文件连接程序:FCAT file_name1 file_name217、超文本文件转换成文本文件程序:TRAN file_name1 file_name218、文件分割程序:FG file_name SIZE ,如FG XSDOS.LHP 360K19、文件加密程序:将待加密文件以二进制打开,读入32个字节,分别与口令异或,在将4、5、6三个字分别与0xaaaa 异或,即完成加密,执行第二次就解密20、文本文件内容显示程序:HTYPE file_name21、求矩阵a 、b 乘积,结果存入矩阵c 中并按矩阵形式输出。

矩阵相乘的前提:矩阵A (m×p)的列数p=矩阵B (p ×n )。

即:C (m×n)=A ·B 要求C= 其计算公式是:∑==pk kj ikb acij 1 (i=1,2,…,m j=1,2,…,n)22、编写字串 str1 中找出所有小写字母转成大写字母,大写字母转成小写字母后,结果依次存入字符数组 str2 中,str1 不变仍为原字串的程序。

例如,字符串 str1 为 "91A2BC. a1bc",调用函数 fun 后,字符数组 str2将存入"91a2bc. A1BC",str1仍然是"91A2BC. a1bc" 。

23、编写在字串 str1 中找出所有非数字的字符串当成一个空格,存入字符数组str2 中(所有数字字符也必须依次存入 str2 中),str1 不变仍为原字串的程序。

例如,字符串 str1 为 "$Ts!47&*s456 a23* +B9k",调用函数 fun 后,字符数组str2将存入" 47 456 23 9 ",str1仍然是"$Ts!47&*s456 a23* +B9k"。

24、编写将a 所指字符串中的字符按逆序存放,然后和b 所指字符串中的字符,按排列的顺序交叉合并到c 所指数组中,过长的剩余字符接在c 所指数组的尾部。

例如,当a 所指字符串中的内容为"abcdefg",b 所指字符串中的内容为"1234"时,c 所指数组中的内容应该为"g1f2e3d4cba";而当a 所指字符串中的内容为"1234",b 所指字符串中的内容为"abcdefg"时,c 所指数组中的内容应该为"4a3b2c1defg"。

25、编写一个将某个范围在-32768~32767之间的整数转换为R 进制(R=2,5,8,16)的通用程序。

(二)综合题目:1、八皇后问题八皇后是一个古老而著名的问题,是回溯算法的典型例题。

该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

高斯认为有76种方案。

1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。

对于八皇后问题的实现,如果结合动态的图形演示,则可以使算法的描述更形象、更生动,能产生良好的效果。

请用实现八皇后问题的求解程序,能够演示全部的92组解。

提示,八皇后问题的实现,主要应解决以下问题。

回溯算法的实现。

为解决这个问题,我们把棋盘的横坐标定为i,纵坐标定为j,i和j的取值范围是从1到8。

当某个皇后占了位置(i,j)时,在这个位置的垂直方向、水平方向和斜线方向都不能再放其它皇后了。

用语句实现,可定义如下三个整型数组:a[8],b[15],c[24]。

其中:a[j-1]=1 第j列上无皇后a[j-1]=0 第j列上有皇后b[i+j-2]=1 (i,j)的对角线(左上至右下)无皇后b[i+j-2]=0 (i,j)的对角线(左上至右下)有皇后c[i-j+7]=1 (i,j)的对角线(右上至左下)无皇后c[i-j+7]=0 (i,j)的对角线(右上至左下)有皇后(2)为第i个皇后选择位置的算法如下:for(j=1;j<=8;j++) /*第i个皇后在第j行*/if ((i,j)位置为空) /*即相应的三个数组的对应元素值为1*/{占用位置(i,j)/*置相应的三个数组对应的元素值为0*/if I<=8为i+1个皇后选择合适的位置;else 输出一个解}2.学籍管理系统:(1)分析和描述大学学籍管理的基本要求与内容。

基本要求与内容:a.使用汉字菜单;b.具有建立数据文件功能;c.具有数据输入功能;d.具有数据删除功能;e.具有各种查询(如按学号查询、按姓名查询、按成绩查询等)及输出功能;f.其它功能;(2)描述及绘制出学籍管理的功能结构框图;五、参考函数1、菜单选择函数void menu(void){ char ch;printf(“1.Check Spelling\n”);printf(“2.Correct Spelling Errors\n”);printf(“3.Display Spelling Errors\n”);printf(“4.Quit\n”);do {ch=getchar(); /*read the selection from the keyboard*/switch(ch){case …1‟:check_spelling();break;case‟2‟:correct_errors();break;case‟3‟:display_errors();break;case‟4‟:exit(0); /*return to OS*/}}while(ch!=‟1‟&&ch!=‟2‟&&ch!=‟3‟);}2、口令检查函数用户有三次输入口令的机会。