《C语言课程设计实验指导.pdf》由会员分享,可在线阅读,更多相关《C语言课程设计实验指导.pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C C 语言软件开发实习语言软件开发实习课程设计指导书一、课程设计的性质C 语言程序设计是计算机应用与软件以及相关专业的必修课程, 其任务在于使学生建立其基本的程序设计概念,较熟练地掌握 C 语言的基本语法知识,并具备初步的软件设计能力, 为后续课程的学习和毕业设计奠定基础。 课程实践是综合掌握在课堂上所学习内容的重要环节,通过实际动手设计和调试程序,使学生熟悉从设计算法、编写代码、形成源程序、可执行程序和运行程序的全过程。二、课程设计的要求通过训练,使学生熟练掌握所学的语法知识,了解程序的完整结构和程序设计的环境、程序调试技术以及整个问题求解过程,并能够解决一些常见的实用问题。三、学时安排时
2、间(天)16内容基本程序练习:备注讲授基本问题的算法、设计思路,学生自己练习设计讲授框架和基本技术,学生自己设计讲授实验报告格式及基本内容7121315有应用背景的程序练习撰写实验报告四、实习题目及梗概第一部分基本程序1 1 第一天内容第一天内容讲解内容:讲解内容:选择结构:if 语句、switch 语句;循环结构:while 语句、do_while 语句、for 语句;函数:函数的定义、函数说明、函数的调用。练习内容练习内容:1编写一个函数fun,然后设计主函数调用函数fun。函数fun 的功能是:求两数平方根之和,作为函数值返回。例如:输入12 和 20,输出结果为: y = 7.9362
3、38。2编写一个函数fun,然后设计主函数调用函数fun。函数fun 的功能是:计算正整数 num 的各位上的数字之积。例如,若输入:252,则输出应该是:20。若输入:202,则输出应该是:0。3编写一个函数fun,然后设计主函数调用函数fun。函数fun 的功能是:通过某种方式实现两个变量值的交换, 规定不允许增加语句和表达式。 例如变量 a 中的值原为 5,1b 中的值原为 3,程序运行后 a 中的值为 3,b 中的值为 5。4编写一个函数fun,然后设计主函数调用函数fun。函数fun 的功能是:求出两个非零正整数的最大公约数(用递归和非递归两种方法) ,并作为函数值返回。再设计一个函
4、数,函数的功能是计算两个非零正整数的最大公倍数。5编写一个函数fun,然后设计主函数调用函数fun。函数fun 的功能是:统计不超过一个整数 m(包括 m 且 m3)的素数个数(不包括1 和 2) 。6编写函数 int fun (int lim, int aaMAX ),该函数的功能是求出小于 lim 的所有素数并放在 aa 数组中,该函数返回所求出素数的个数。然后编写主函数调用它。2 2第第二天内容二天内容1 请编写函数 float fun(float x,int m), 它的功能是: 将浮点数 x 保留 m 位小数 (m不大于 6) ,第m+1 位四舍五入。例如,输入123.456,保留2
5、 位小数应输出 123.46(或123.459999) 。2 请编写一个函数 unsigned fun ( unsigned w ), w是一个大于 10 的无符号整数,若 w是 n (n2)位的整数,函数求出w 的后 n-1 位的数作为函数值返回。3编写一个函数fun,函数fun的功能是: 从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在 t 中。例如,当 s 中的数为:7654321 时,t 中的数为:642.4 将十进制正整数转换成 k 进制(2k9)数的数字输出。例如,若输入 8 和 2,则应输出 1000(即十进制数 8 转换成二进制表示 1000) 。5 求出 1!、
6、3!、5!、k!(k 是小于 9 的奇数) 。例如:若 k=7,则应输出:1.000006.00000 120.00000 5040.00000。n个n个n1个 6 求s aaa aaa aa a(此处 a 和 n 的值在 1 至 9 之间,aaa表示由 n个 a 组成的整数) 。例如,a=2,n=6,则以上表达式为:s=222222-22222-2222-222-22-2其和值是:197532。7. 用下述公式求的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:1111-+-+3574例如,若输入值为 0.0001,则程序的输出 3.1414。8. 编写一个函数 float fu
7、n(float eps),它的功能是:根据如下公式计算e 的值:e 111111!2!3!n!其中的 eps 是指定的精度。3 3第第三天内容三天内容讲解内容:讲解内容:指针的概念与运算、指针作函数的参数、一维数组的定义和引用、一维数组和指针的关系、字符数组作字符串变量、指向字符串常量的指针变量、字符串操作函数。练习内容:练习内容:1编写一个函数 len,其功能是计算出一个字符串中含有的所有字符个数(不使用库函数strlen) 。2编写函数 fun,函数的功能是:计算一个字符串 s 中的所含有的指定字符的个数, 返回此值。例如,输入字符串Thisisastring,被查找字符为i,则应输出 3
8、。23编写程序,读入一个英文文本行,将其中每个单词的第一个字母改成大写,然后输出此文本行(这里的“单词”是指由空格隔开的字符串) 。4编写函数 fun,其功能是删除一个字符串中的所有空格。例如,输入字符串Thisisastring,则应输出Thisisastring。5编写函数 fun,函数 fun 的功能是:将字符串 a 中的所有字符复制到字符串b 中,要求每复制三个字符之后插入一个空格。6编写函数,函数 fun 的功能是:在字符串 str 中找出 ASCII 码值最大的字符,将其放在第一个位置上,并将该字符前的原字符向后顺序移动。7编写函数,函数 fun 的功能是:首先把 b 所指字符串中
9、的字符按逆序存放,然后将a 所指字符串中的字符和 b 所指字符串中的字符,按排列的顺序交叉合并到c 所指数组中,过长的剩余字符接在 c 所指数组的尾部。例如,当a 所指字符串中的内容为“abcdefg” ,b 所指字符串中的内容为“1234”时,c 所指数组中的内容应该为“a4b3c2d1efg” ;而当a所指字符串中的内容为“1234” ,b 所指字符串中的内容为“abcdefg”时,c 所指数组中的内容应该为“1g2f3e4dcba” 。4 4第第四天内容四天内容讲解内容:讲解内容:选择排序法、冒泡排序法、简单插入排序法和查找与替换方法。练习内容练习内容: :1用选择排序法对数组 a 的元
10、素从小到大排序。例如,输入 2 5 4 1 6 2 7 3 2 9 4,则应输出 12 2 2 3 4 5 6 7 9。选择排序算法。选择排序法采取如下思想对数组a 的元素从小到大排序:将数组 a 的元素处理 n-1 次,第k 次处理时仅处理前 n-k 个元素,方法是选择出这k 个元素中的最大元素,并将其与这些元素中的最后一个交换。 当然, 也可以按每次选择最小元素的办法进行选择排序。2下述程序中,函数 fun 的功能是:用冒泡法对 6 个字符串按由小到大的顺序进行排序。冒泡排序:所谓“冒泡排序” ,也称“起泡排序”或者“气泡排序”,是指这样的一种简单排序方法:若被排序的数组元素个数为N,可以
11、对此数组做N-1 次处理。在第k 次(k=0, 1, ,N-1)处理时,需比较前 N-k 个元素,方法是:连续从前到后比较相邻的两个元素,如果后面的元素小于前面的元素,则将二者交换,否则不变。可见,每经过一次处理,至少此次被处理的 N-k 个元素中的最大元素被移到了本次处理的最后位置,而N-1 次处理后就使所有的元素被排序。3编写函数 fun,函数 fun 的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本算法是: 先对字符串中的头两个元素进行排序。 然后把第三个字符插入到前两个字符中,插入后前三个字符依然有序;再把第四个字符插入到前三个字符中,。待排序的字符串已在
12、主函数中赋值。4编写一个函数,其功能是统计一个子字符串在另一个字符串中出现的次数。例如,假定输入的字符串为this is a string,子字符串为is,则应输出 2。分析参数与返回值。本例中函数fun 的参数的含义为:母字符串str 和子字符串 sub。该函数需要统计子字符串出现的个数, 返回值是 int 类型,必然是统计后所得的出现次数值,观察 main 函数中的输出也能肯定这一点。整理编程思路。 编写该函数需要使用一个循环, 循环中可以考虑通过一个字符类型的指针在 str 中由前到后移动, 每次移动一个字符位, 且将目前指针位置开始的m 个字符与 sub所包含的全部 m 个字符比较(假
13、定 sub 的长度是 m) ,若二者相同则说明子字符串在母字符串中出现一次,进行累计,否则不累计。无论如何,将指针再移到下一个字符位,进行下一3次循环比较。细节考虑。首先,为了实现两组 m 个字符的比较,一个可行的办法是写一个函数来实现,但程序不允许再编写其它函数, 只能使用库函数或自己构成循环。 能够使用的库函数是定义在 string.h 中的 strstr,其函数原型如下:char*strstr(char*str, char*sub)5N 个有序整数数列已放在一堆数组中。下述程序中的函数 fun 的功能是:利用折半查找算法查找整数 m 在数组中的位置。若找到返回其下标值;反之,返回-1折半
14、查找:折半查找也称为二分查找或二分检索, 其基本思想是:在一个数组中查找某个值 m 是否存在时,每次查找前先确定数组中待查的范围:low 和 hitgh (low high,查找结束。6请编写函数 int*fun(char* st), 其中 st 是仅由字符 a、 b 和 c 组成的字符串。 函数的功能是:统计字符串 st 中a、b和c的个数并分别存入不同的内存区,带回内存区的首地址。7从 m(1m10)个字符串中,统计由变量c 中所含字符结尾的字符串个数,此个数由函数值返回 main 函数。5 5第第五天内容五天内容讲解内容:讲解内容:二维数组的定义、引用与初始化、二维数组与指针的关系(二维
15、数组的一维表示、对二维数组的约定、指向一维数组的指针变量、二维数组作函数的参数和用二维数组操作字符串) 。练习内容:练习内容:1将数组 x 的元素倒置输出。例如,若输入12345,则应输出 54321。2请编写函数 voidfun ( intaa , intx, int*n ),它的功能是:删除数组aa 中所有与 x 相等的元素,数组元素个数由n 传入。3请编函数 voidfun(int*a, int*b), 它的功能是: 求出 1 到 100 之内被 7 或 11整除的所有整数放在数组 a 中,通过 n 返回这些数的个数。4输入一个 3 行 3 列矩阵的所有元素,然后输出对角线元素之和。5编
16、写函数,其功能是:实现矩阵(3 行 3 列)的转置(即行列互换) 。例如,原矩阵为:123147456,则转置后的矩阵为:2587893696 6 第六天内容第六天内容讲解内容:讲解内容:递归函数、动态内存管理、结构体类型的定义、结构体变量的定义、结构体变量的成员、整体引用结构体、结构体数据在函数间传递、结构体变量的初始化、结构体数组、结构体指针、单链表。练习内容:练习内容:1请编写函数 int fun(double a , int k, int m, double x),它的功能是:用递归方法在数组a 中查找 x 是否出现,其中数组a 的元素已按由大到小的次序排序,k 和 m 是数组的最小和
17、最大下标,函数采用二分查找算法,若找到则返回1,否则返回 0。N= m /2;If(an = x)Rutrun n;Else4if(anx)Return (a+n+1,m-n,x);ElseReturn(a,n-1,x);2用递归法将一个整数 n 转换成字符串。例如,输入整数483,应输出字符串“483” 。#include#includechars10;intk=0;voidfun (intm)/*found*/if(_)return;fun(m/10);/*found*/sk+=m%10;return;voidmain ()intm;clrscr();printf ( Enterm:);s
18、canf ( %d, &m );fun (m);puts(s);3编写一个函数,函数 fun 的功能是:输入一个整数x,计算 x 的平方和立方。例如,输入 10,则应输出 a=10a2=100a3=1000。4学生的记录由学号和成绩组成,N 名学生的数据已在主函数中放入结构体数组 s 中,请编写函数 fun,它的功能是:把分数最低的学生数据放在 h 所指的数组中,注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。5建立一个单向链表,链表中的每个结点有一个int 类型的数据域,输入 0 时标志链表建立过程结束。例如,输入 12340,则应输出 1,2,3,4,。链表:单向链表的一般
19、结构如下图所示。为了实现链表必须定义能够描述链表中结点的数据类型, 该类型应包含数据存储区和地址存储区两大部分。下例是包含2 个数据域的类型定义:structnodeintcode;5charname20;structnode*next;结点中的成员也被称为“域” 。0(a)单向链表地址部分数据部分(b)链表结点(a)链表链表的建立:有两种基本的建立链表方法,其一,建立链表至少使用两个指针, 一个指针用于指向临时链表的头(如head) ,另一个指针用于分配新结点(如p) ,参见图9.2(a)。由图示可见,由于没有临时指针,表头指针与新结点指针的值难以交换, 致使无法查到临时链表的末结点,只能将
20、头指针连接到新结点末尾,然后将新结点指针作为头指针,因此,用此种方法建立的将是倒置的(新结点连接在末尾)链表。headpp 也是更新后的 head(a)反向链表headendnew更新后的 end(b)正向链表链表的建立建立正向链表的一般方法是至少使用三个指针:一个是表头指针 head,在指向表头后即固定不变;其次是每次生成新结点的指针new;为了将新结点连接到链表的末尾还必须有一个指针 end 指向末结点。这样每次循环将新结点new 连接到末结点上:end-next=new;,然后更新 end 以指向新的末结点:end=new;,为下一次的连接做准备。参见图9.2(b)。“遍历”链表的所有结
21、点:第二部分第二部分实用程序实用程序1 1时钟模拟程序设计时钟模拟程序设计实现结果:实现结果:设计一个时钟表盘,能及时读取系统的时间,并根据当前时间计算并绘制出在时钟表盘上时钟时针、分针和秒针的具体位置,形成时钟运转动画。2.2.计算器程序的设计。计算器程序的设计。实现结果:实现结果:实现一个计算器功能的程序。 能够用 C 语言提供的图形库函数绘制计算器界面、基本的运算程序、计算界面数据数据、运算符定位和刷新功能。3.3. 单链表基本算法实现程序。单链表基本算法实现程序。实现结果:实现结果:定义单链表数据结构、实现单链表的建立、销毁、查找、插入、删除、排序算法、利用单链表的算法实现多项式相加减
22、应用。4.4.五子棋对战游戏设计。五子棋对战游戏设计。实现结果:实现结果:实现利用计算机评判两个人五子棋比赛游戏、 用 C 语言提供的图形库函数实现绘制五子棋棋盘,实现五子棋规则评判算法。65 5其它自选程序。其它自选程序。五、总结与考核考核主要考察学生在课程设计过程中的工作情况。 考核一共分三部分: 第一部分是基础知识的完成情况,占主要考核成绩的30%,要求学生上交一份电子档的程序。第二部分是实用程序, 要求学生在 4 个题目中选择一个 (或者学生在经过教师同意的情况下可以自己设计一个题目) ,占考核成绩的 50%,要求学生上交一份电子档的程序,并上交一份程序设计报告。报告形式如下。第三部分
23、是平时表现,主要考查出勤情况、课堂表现等,占考核成绩的30%。7实验报告实验报告课程名称:课程名称:C C 语言软件开发实习语言软件开发实习实验项目:实验项目:专业班级:专业班级:姓姓名:名:学学号:号:实验室号:实验室号:实验组号:实验组号:实验时间:实验时间:批阅时间:批阅时间:指导教师:指导教师:成成绩:绩:8沈阳工业大学实验报告沈阳工业大学实验报告(适用计算机程序设计类)专业班级:学号:姓名:实验名称:1.实验目的:(1)掌握 C 语言的基本语法结构、程序设计方法和一些常见的算法;(2)掌握对程序排查错误的能力。2.实验内容:3. 实验方案 (程序设计说明)包括算法设计思路, 必要的流
24、程图,界面设计说明、使用模块及变量的说明等。4. 实验步骤或程序(经调试后正确的源程序)(填写主要步骤与程序代码等。见附件A)5程序运行结果6出现的问题及解决方法9附件附件 A A沈阳工业大学实验报告沈阳工业大学实验报告(适用计算机程序设计类)专业班级:学号:姓名:实验步骤或程序实验步骤或程序:(可加附页)10 范例范例 沈阳工业大学实验报告沈阳工业大学实验报告(适用计算机程序设计类)专业班级: 国际贸易 0501学号: 05010022姓名: 李晓光实验室:综合楼 310 机房实验组号(或微机编号) :B4实验名称:1. 实验目的:掌握用 Access 创建查询的方法能够使用 SQL 语言进
25、行简单查询2. 实验内容:(1) 学习掌握创建表的方法。(2) 学习向表中添加记录的方法。(3) 学习设定表之间的关系。(4) 学习 SQL 语言的语法格式。3. 实验方案(程序设计说明)(1) 创建学生管理数据库。(2) 在数据库中建立学生表、课程表、选课表。(3) 建立 3 个表的关联关系。(4) 向表中添加数据。(5) 用 SQL 语言完查询任务。4.实验步骤或程序(经调试后正确的源程序)(填写主要步骤与程序代码等见附件A)11附件附件 A A沈阳工业大学实验报告沈阳工业大学实验报告(适用计算机程序设计类)专业班级: 国际贸易 0501学号: 05010022姓名: 李晓光实验步骤或程序
26、实验步骤或程序:1创建数据库及表,并向表中添加数据。学生表数据如下:课程表数据如下:选课表数据如下:2创建查询(1)查询全部学生信息。12在 SQL 窗口输入语句:SELECT * FROM 学生,如图所示。运行结果如下:(2)查询王明所选修的课程编号和成绩。在 SQL 窗口输入语句:SELECT 课程号,成绩FROM 选课WHERE 学号 IN (SELECT 序号FROM 学生WHERE 学生.姓名“王明”)如图所示。运行结果如下:13分析:从学生表课查到“王明”的学号为“0501002” ,从选课表可查到“0501002”只选了一门课,课程号为“002” ,成绩 60。该 SQL 语句是
27、正确的。(3)查询刘晓轩选修的课程名称及任课教师。在 SQL 窗口输入语句:SELECT 课程号,教师FROM 课程WHERE 课程 IN (SELECT 课程号FROM 选课WHERE 学生号 IN(SELECT 学号FROM 学号WHERE 姓名“刘晓轩”)如图所示。运行结果如下:分析:从学生表课查到“刘晓轩”的学号为“ 0501003” ,从选课表可查到“0501003”只选了三门课,课程号为 001、002、003,从课程表可以查到这三门课的任课教师是张扬、王一、黄晶。该 SQL 语句是正确的。14实验报告说明1 1实验项目:实验项目:即实验题目,要求与实验指导书中一致。2 2实验目的实验目的:目的要明确,抓住重点,符合实验指导书中的要求。3 3实验方法实验方法:是实验报告极其重要的内容,包括算法设计思路,必要的流程图,界面设计说明,使用模块和变量说明等。4 4实验步骤或程序实验步骤或程序:实验完成的主要步骤与程序代码等。5 5出现的问题及解决方法:出现的问题及解决方法:记录实验过程中遇到的问题,解决问题的方法。6.6. 注:注:实验报告成绩将记入实验成绩,要按照实验教师要求及时上交。7 7模版中蓝色字部分在完成实验报告后删除。模版中蓝色字部分在完成实验报告后删除。六、参考书牛连强等, C 语言程序设计 ,大连理工大学出版社,2002。15
限制150内