




已阅读5页,还剩61页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
软 件 开 发 基 础 实 验 指 导 书(供软件学院各专业使用)华东交通大学 软件学院 计算机软件与理论教研室编写2011-10-13目 录第 1 章 前 言3一、本课程实验教学的地位和作用3二、基本实验理论3三、应达到的能力和要求4四、目的与要求5五、考核办法5第 2 章 实验一 开发环境及基本数据类型与运算7第 3 章 实验二 顺序结构与分支结构10第 4 章 实验三 循环结构14第 5 章 实验四 数组与字符串18第 6 章 实验五 地址与指针22第 7 章 实验六 使用函数实现模块化设计思想26第 8 章 实验七 函数的嵌套与递归31第 9 章 实验八 简单数据结构的综合应用36附录A 实验报告的模板41附录B 实验报告的范例44附录C C语言程序的上机步骤45附录D Visual C+ 6.0 开发环境48第 1 章 前 言一、本课程实验教学的地位和作用对软件工程专业及相关复合性专业人才来说,软件开发技能是其基础,而程序设计技术又是其基本功。软件开发基础是软件工程专业及相关复合专业教学计划中的一门学科基础核心课程,本课程主要以面向过程的程序设计为例,讲述软件开发中的程序设计技术,为授课对象进一步学习其他专业课程奠定一个软件开发技能的基础。该课程主要包括面向过程的软件开发技术、数据的存储与运算、结构化程序设计中的三种基本结构、复合数据类型和模块化程序设计等内容。该课程的主要任务是使学生掌握面向过程的软件开发技术、熟练掌握一门面向过程的计算机程序设计语言(本课程以C语言为例)、较全面地掌握结构化程序设计方法等方面的知识。实验教学是本课程重要的教学环节,通过实验:使学生加深对讲授内容的理解;熟悉所用的软件开发环境(本课程以Microsoft Visual C+ 6.0作为程序开发环境);学会上机调试程序的基本操作;能够运用面向过程的程序设计语言来开发程序,以解决本专业某些实际问题;并养成严谨的科学态度、培养出良好的专业思维方法及编写出“好”的程序的能力;从而进一步提高抽象思维能力、形式化描述的能力、及分析和解决问题的能力,为后续课程的学习打下一个良好的基础。二、基本实验理论1、掌握一门面向过程的计算机程序设计语言(本课程以C语言为例);2、掌握一种软件开发环境(本课程以Microsoft Visual C+ 6.0作为程序开发环境)的基本操作方法,能够使用该开发环境来编写程序;了解如何在该开发环境下进行编辑、编译、连接和运行C程序;熟悉如何使用该开发环境来调试程序,以达到解决程序中问题的目的。3.掌握面向过程的软件开发技术:通过“模块化”技术来设计软件的层次结构;通过“逐步求精”的方法,来设计问题描述的数据结构和问题求解的算法;通过“结构化”的方法,编写出一个正确的、健壮的、可读性和可移植性好的、以及时/空效率高的程序。三、应达到的能力和要求1、掌握VC 6.0 软件开发环境的基本功能的使用;2、学会针对一个程序设计出一些测试用例,以便发现程序中的问题;学会针对被发现的程序中的问题,如何调试一个程序,以便修改程序,解决相应的问题;3、掌握C语言的各种基本数据类型的使用; 4、掌握数据的格式化输入/出功能的使用;5、掌握实现三种结构(顺序、选择和循环)的编程方法;6、掌握C语言中的复杂数据类型(数组、字符串、指针、结构体和共用体)及用户自定义类型的定义和使用方法;7、掌握用函数来实现模块的方法及调用函数的方法、函数的实参与形参结合的方式、变量的生命周期及作用域(变量的存储类别);8、掌握文件以及文件指针的概念,初步学会针对文件操作的各种标准库函数。9、掌握C语言中常用的标准库函数的使用。四、目的与要求在实验过程中的每一个实验题目,学生要始终贯彻本课程所介绍的面向过程的软件开发技术(模块化、逐步求精和结构化)的思想,养成良好的编程习惯和程序设计风格。每个学生要求独立地完成所布置的上机题目,对编写的程序要保证在统一安排的上机时间内编译、运行、调试、直至测试通过。在每次上机实验前要求做好前期准备工作,给出程序设计的基本文档资料(包括设计的测试用例)和程序代码的清单,按照要求写好预习报告;上机过程中,对程序运行过程中出现的问题及对该问题出现原因的分析、对程序的调试和修改、程序最终正确的运行结果(最好是屏幕截图)等要做好记录;上机结束后,要撰写实验报告,在实验报告中要有本次实验的心得。具体要求如下:1、了解所用的计算机系统(包括VC 6.0)的性能和使用方法。2、复习和掌握与本次实验有关的知识点。3、准备好上机所需的文档、测试用例和程序代码,在上机实验时间内必须完成实验要求中规定的任务,切忌不事先编写好程序就上机(边上机边写程序)!切忌抄别人的程序!(一旦发现二次,将对本课程的最终成绩直接按不及格处理!)4、在做预习报告时,对程序中可能会出现的问题要有事先的估计,对程序中自己把握不住的、有疑问的、或希望通过上机调试的地方,应先作上记号,以便在上机过程中给予特别的关注。5、在上机实验过程中,切忌玩游戏、上网或做一些不相关的事情(一旦发现二次,将对本课程的最终成绩直接按不及格处理!)。6、每次实验结束,均要撰写“实验报告”(模板参加附录A),在实验报告中,要反映上机前的预习、上机过程中的工作、上机后的总结分析这三方面的内容。五、考核办法实验成绩占本课程总成绩的30%,具体考核方法如下;1、凡出现以下情况之一者,本课程实验成绩直接按零分计: (1)对上机实验无故缺勤者(确实有事要请假); (2)对上机过程中发现玩游戏、上网或做一些其它不相关的事情者; (3)一旦发现有一次上机实验是完全抄袭别人的程序者;(4)有二次实验报告未交者;2、在每次上机实验中,凡出现以下情况之一者,直接视本次实验无效(本次实验按零分计算)。 (1)对于没有按要求做上机前预习工作者; (2)没有上交“实验报告”者;3、每次实验的成绩,按以下方式来评判: (1)实验前预习的要求占50%(反映在实验报告中):a. 对实验的题目采用逐步求精的方法给出了问题的求解算法;b. 对问题领域中的求解对象给出了相应的数据结构或数据类型;c. 对最终的求解算法使用了程序流程图或N-S图表示;d. 准备好了测试数据,写出了程序清单。 (2)上机实验过程的要求占30%(反映在上机实验过程和实验报告中):a. 对软件开发环境的熟练程度; b. 程序运行结果的正确性; c. 程序代码的可读性; d. 程序调试的熟练程度。 (3)实验后分析总结的要求占20%(反映在实验报告中): a. 对程序运行情况的分析总结; b. 在程序调试过程中所取得的经验总结。4、本课程实验的总成绩,除了第1条情况外,其它均按上面的第2条和第3条中对每次实验的评判,做平均分来计算。第 2 章 实验一 开发环境及基本数据类型与运算一、实验目的1、熟悉VC 6.0集成环境,了解各基本功能的使用方;2、通过运行几个简单的程序,熟悉C语言程序的结构;3、一个C程序的上机过程;4、学会并掌握基本的数据类型的使用、运算和表达式的计算。二、实验性质 验证性三、实验要求1、认真阅读教材和本次实验的内容,熟悉VC环境的使用过程 2、能够使用VC编写最简单的程序四、预习要求1、仔细阅读教材和实验内容中关于VC环境使用的步骤;2、有条件的话可先在自己的电脑上按照实验内容进行实际操作;3、在预习报告中回答问题。五、实验内容(一)、熟悉VC环境1、请仔细阅读教材中的“1.4运行C程序的步骤与方法”(第6至第14页);2、请仔细阅读本实验指导书中附录C( C语言程序的上机步骤)和附录D (Visual C+ 6.0 开发环境)(二)、程序练习【实验题1】请将下面程序在VC环境中输入,并运行观察其结果。 1) #includevoid main()printf(我爱学C语言!n);printf(告诉你学好C语言的秘笈:n); 2) #includevoid main()int price,weight,value;price=10;weight=20;value=price*weight;printf(价格为%d,重量为%d货物,价值为%dn,price,weight,value);price=5;weight=8;printf(价格为%d,重量为%d货物,价值为%dn,price,weight,value);value=price*weight;printf(价格为%d,重量为%d货物,价值为%dn,price,weight,value);【实验题2】输入一个有错误的程序,编译发现错误,再修改至正确。#includevoid main()int a=12,b=34;c=a+bprintf(%d-%d=%d n,a,b,c); 如实地输入上面的程序,在实验报告中描述:编译时发现的错误;这些错误是由于什么原因引起的;你是如何改正的。【实验题3】输入下面的程序,观察程序的运行结果,再对程序修改。#includevoid main()int a, b,c; c=(a=10, b=3); printf(逗号表达式的值为: %dn,c);c=a+; printf(a=%d ; c=%dn,a,c);c=+b; printf(b=%d ; c=%dn,b,c);c+=a+b; printf(c=c+a+b的值为: %dn,c);c=a/b; printf(a/b的值为: %dn,c);从该示例中,请仔细体会:逗号表达式的计算、复合赋值运算、自增和自减运算、除法运算。再对程序中的自增运算改为自减运算,观察程序的运行结果。最后对将a、b和c这三个变量的类型改为float,观察程序的运行结果。六、思考题1、使用VC编程时,应先创建的工程是什么类型?2、如何运行一个C程序?第 3 章 实验二 顺序结构与分支结构一、实验目的1、掌握scanf、printf函数中控制字符的使用技巧;2、能够编写实现简单的程序;3、掌握关系表达式和逻辑表达式的使用;4、掌握使用if语句来实现分支结构程序设计;5、掌握switch语句的语法和使用技巧;6、进一步熟悉软件开发环境的基本功能和程序的调试方法。二、实验性质 验证性三、实验要求1、认真阅读本次实验的目的,了解本次实验要求掌握的内容;2、在上机前需要预习,将相关内容写在实验报告中;3、在实验时,将实验要求的基本题根据预习时写在实验报告中的程序清单输入VC环境,进行编译、连接、运行、测试、调试和修改,并对相应内容做好记录;4、记录程序的最终运行结果;5、在实验时,将实验内容中的基本题(程序改错和编程题)在预习过程中编写出正确的代码,并在VC环境中运行,且争取完成选作题。四、预习要求1、scanf、printf函数的输入/出控制格式及其使用;2、关系表达式和逻辑表达式的语法、计算方法及运算符的优先级与结合性;3、if语句和switch语句的语法、语义和语用;4、对实验内容中的每个题目,设计出“问题的求解算法及数据结构”和“源程序清单”,并构造出相应的“测试数据”;5、在实验报告中撰写相应的内容,为上机实验做好充分的准备。五、实验内容1程 序 改 错【实验题1】下面程序需要从键盘输入三个数,计算其平均值在屏幕上显示输出。要求平均值需要保留两位小数。源代码如下,程序中存在错误,请将其改正写在旁边,并注明为什么错误。include stdio.hMain() int x,y,z,float ave; /*定义变量*/ printf(请输入三个数:n);/*输入提示*/ scanf(%d,%d,%d,x,y,z);/*从键盘输入*/ ave=x+y+z/3;/*计算*/ printf(平均值是:ave=%f,AVE);【实验题2】下面程序需要从键盘输入一个数,判断其是奇数还是偶数。源代码如下,程序中存在错误,请将其改正写在旁边,并注明为什么错误。#include main() int x; printf(请输入一个数:/n);/*提示输入*/ scanf(%d,&x); if(x=2*n); /*判断*/ printf(x是偶数); printf(x是奇数); 2编 程 题【实验题3】编写程序,在计算机屏幕上显示如下信息:要求: 使用printf函数输出字符。【实验题4】编写一程序,从键盘输入三角形的三条边,如果能构成一个三角形判断其是否是等腰三角形(等边三角形是等腰三角形的特例)。要求: (1)用scanf函数输入三角形的三条边a,b,c,且在输入前要有提示;(2)使用if语句判断,对每种情况都需要有提示。【实验题5】在商场购物时,若所购物品的总价值x(由键盘输入)在某一范围时,付款y按对应折扣支付,即:x x1000 y= 0.9x 1000x20000.8x 2000x30000.7x x3000 编写一程序,根据x的值计算y要求:(1)用scanf函数输入x(x为小数),且在输入前要有提示;(2)使用switch语句判断,计算y的值;(3)使用printf输出y的值,小数点保留2位3选 作 题【选作题1】编程求ax2+bx+c=0的解【选作题2】编写一程序,从键盘输入一个不多于5位的正整数,能显示出它是几位数,并按正反两种顺序显示出各位数字。例如,若输入12345,输出为:位数:n=5正序:12345反序:54321【编程点拨】 先判断x是否为满足要求n大于99999,小于0时;否则不满足要求,提示输入数据错误。 通过%和/运算分离出各个位上的数字。【选作题3】 从终端输入两个实数和一个四则运算符(、*、 /),执行相应的运算并输出运算结果。(如输入:125+261,结果为:125+261=386)【编程点拨】 先用scanf函数,输入一个四则运算的表达式(左操作数、运算符、右操作数),分别保存在不同的变量; 对运算符变量使用switch语句进行判断,根据运算规则,编写相应的表达式求运算结果。六、思考题1、变量在程序中有什么作用,如何从键盘中输入多个变量的值?2、程序中有哪几种流程结构,具体在程序中用什么体现?3、在使用if语句的嵌套时,需要注意什么问题?4、在使用switch语句时,需要注意什么问题?第 4 章 实验三 循环结构一、实验目的1、进一步加深对结构化程序设计思想的理解,学习和掌握程序的调试技巧;2、加深对当型循环、直到型循环和计数型循环差异的理解,熟练掌握这三种循环的应用;3、掌握各种循环中如何正确的设定循环条件和循环初始值,理解循环条循环体的设计,正确的控制循环次数;4、掌握break、continue语句的正确使用;5、能实现一些常用的简单算法(如:穷举、迭代等)。二、实验性质 验证性三、实验要求1、认真阅读本次实验的目的,了解本次实验要求掌握的内容;2、在上机前需要预习,将相关内容写在实验报告中;3、在实验时,将实验要求的基本题根据预习时写在实验报告中的程序清单输入VC环境,进行编译、连接、运行、测试、调试和修改,并对相应内容做好记录;4、记录程序的最终运行结果;5、在实验时,将实验内容中的基本题(程序改错和编程题)在预习过程中编写出正确的代码,并在VC环境中运行,且争取完成选作题。四、预习要求1、while循环、do_while循环和for循环的语法、语义和语用;2、关系表达式和逻辑表达式的语法、计算方法及运算符的优先级与结合性;3、break语句和continue语句的语法、语义和语用;4、对实验内容中的每个题目,设计出“问题的求解算法及数据结构”和“源程序清单”,并构造出相应的“测试数据”;5、在实验报告中撰写相应的内容,为上机实验做好充分的准备。五、实验内容1程 序 改 错【实验题1】 编写程序,求1!+2!+3!+.+10!的值, 源代码如下,程序中存在错误,请将其改正写在旁边。#include main() int i; long sum,temp; /*定义变量*/ for(i=1,i=10,i+) /*循环*/ temp=temp+i; /*计算i的阶乘*/ sum=sum*temp; /*求和*/ printf(1!+2!+3!+.10!=%d,sum);2编 程 题【实验题2】 分别用三种循环语句(while语句、do-while语句、for语句)各编写一个程序实现求1 20的累乘,即:1 2 3 20总结出三种循环语句哪种实现起来方便、灵活。【实验题3】 输入一个字母,输出由这个字母决定其高度的字符“金字塔”。例如输入小写字母d,则输出左边的图形,如输入大写字母D,则输出右边图形,它们的高度都为4。(字母a或A表示高度为,字母b或B表示高度为2,字母z或Z表示高度为26)AA B AA B C B AA B C D C B Aaa b aa b c b aa b c d c b a【编程点拨】 首先根据输入的字符判断需要输出的字母是大写还是小写,以及需要输出的行数; 在外层循环中控制行数; 内层循环控制输出每一行,对每一行可分为两部分:从首字母到该行的最大字母,从该行最大字母的前一个字母到首字母如第3行是 ABC和BA,分别用两个循环实现; 每一行的最大字母跟行号有关系,请注意其变化规律。3选 作 题【选作题1】 一个数如恰好等于它的因子之和,这个数就称为“完数”。编写一个程序,找出1000以内的所有完数,并输出其因子(6是一个完数,它的因子是1,2,3)。【编程点拨】 使用for循环,遍历1-1000之内的所有数n; 在内层循环中,遍历比n的数,判断其是否是n的因子,如果是将其加到累加器; 内层循环结束时,判断累加器中的数是否和n相当,如果是则输出。【选作题2】求的值,其中a是一个数字,如:2 + 22 + 222 + 2222 + 22222(此时a=2,n=5),a和n均由键盘输入。【选作题3】“穿越沙漠”问题。用一辆吉普车穿越1000公里的沙漠。吉普车的总装油量为500加仑,耗油量为1加仑/公里。由于沙漠中没有油库,必须先用车在沙漠中建立临时加油站,该吉普车要以最少的油耗穿越沙漠,应在什么地方建立临时油库,以及在什么地方安放多少油最好?六、思考题1、什么时候使用for语句比较方便?2、break和循环条件有什么联系和区别,什么时候使用break?3、造成“死循环“的主要原因可能会有哪些?4、谈谈你对设计循环体中的“递推型变量”的“循环不变式”的体会?第 5 章 实验四 数组与字符串一、实验目的1、掌握一维和二维数组的定义、赋值及输入输出方法,数组的初始化方法,及数组的应用技巧;2、熟练掌握使用字符数组处理字符串的方法,及有关字符串的标准库函数的功能和使用;3、熟悉并掌握与数组有关的算法(如,排序算法);4、进一步学习和掌握循环结构的使用;5、进一步学习和掌握程序测试和调试的方法。二、实验性质 验证性三、实验要求1、认真阅读本次实验的目的,了解本次实验要求掌握的内容;2、在上机前需要预习,将相关内容写在实验报告中;3、在实验时,将实验要求的基本题根据预习时写在实验报告中的程序清单输入VC环境,进行编译、连接、运行、测试、调试和修改,并对相应内容做好记录;4、记录程序的最终运行结果;5、在实验时,将实验内容中的基本题(程序改错和编程题)在预习过程中编写出正确的代码,并在VC环境中运行,且争取完成选作题。四、预习要求1、一维和二维数组的定义、赋值(包括初始化)及输入输出方法;2、用字符数组处理字符串的方法,二维字符数组的定义和使用;3、有关字符串的标准库函数的功能和使用;4、与数组有关的一些简单算法(如,排序算法);5、对实验内容中的每个题目,设计出“问题的求解算法及数据结构”和“源程序清单”,并构造出相应的“测试数据”;6、在实验报告中撰写相应的内容,为上机实验做好充分的准备。五、实验内容1程 序 改 错【实验题1】下面程序的功能,是从键盘输入一个数组(数组的长度为10),查找数组中正数的个数。源代码如下,程序中存在错误,请将其改正写在旁边。#include main() int a(10); /*定义数组*/ int count,i; /* i循环变量 count 正数个数*/ for(i=0;i=10;i+) /*循环输入*/ scanf(%d,ai); count=1; for(i=0;i0) count+; printf(数组中正数有:%d个,count);2编 程 题【实验题2】编写一程序实现:从键盘输入一个字符串,将其中的大写字母变成小写字母,小写字母变成大写字母,非字母的字符保持不变,输出变换后字符串。要求:(1) 用字符数组表示存储字符串(字符串最大为100); (2) 使用scanf函数逐个输入字符保存在字符数组中;(3) 使用printf函数逐个输出字符数组中的字符(1)用。【实验题3】编写一程序实现:一班级有30名学生要求按他们姓名的顺序排列(按汉语拼音的字母顺序从小到大),并按序输出。【实验题4】编写一程序实现:输入一个数组,将最大的与第一个元素交换,将最小的与最后一个元素交换,输出交换后的数组。要求:(1) 数组长度定义为10; (2) 输出数组时每个元素占8个宽度,每行5个。3选 作 题【选作题1】编写一个程序实现打印魔方阵。所谓魔方阵是指:它的每行每一列的和与对角线之和均相等。程序要求:输入一个自然数n,输出由1到n2的自然数构成的魔方阵。例如,一个3阶魔方阵为: 8 1 6 3 5 7 4 9 2【编程点拨】魔方阵中各数排列规律为: 将“1”放在第一行中间一列; 从“2”开始直到n*n止各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1; 如果上一数的行数为1,则下一个数的行数应为n(指最下一行); 当上一个数的列数为n时,下一个数的列数应为1,行数减1;如果按上面的规则 确定的位置上已有数,或上一个数是第1行第n列时,则把下一个数放在上一个数的下面。【选作题2】求从一个字符串中删除所有指定字符的其余字符串。如字符串为“abcaca”,删除字符“a”后,为“bcc”。【编程点拨】 使用字符数组保存字符串,从字符串数组的第一个元素开始遍历; 如果当前的元素与需要删除的元素相等,则删除; 删除是指将该元素前移到需要拷贝的位置。六、思考题1、数组在程序设计时有什么作用?如果程序在设计时,不知道数组中保存数据的个数,应该怎么办?2、如何对一维数组和二维数组初始化?初始化过程要注意什么事项?在处理一维数组和二维数组时,一般要用到什么结构的程序段?3、在访问数组时,你有一些什么好办法来防止越界问题?4、二维数组在内存中是如何存储的,二维数组中元素的下标与其在内存中排列的位置有什么关系?5、如何将一个元素插入数组中,如何将一个元素从数组中删除?第 6 章 实验五 地址与指针一、实验目的1、掌握指针变量的定义,学会使用指针变量;2、在实际应用中加深对指针、地址和变量关系的理解;3、掌握指针的一些基本应用;理解指针的含义;4、能正确使用指针与数组、字符串的关联;掌握通过指针操作数组元素和字符串的方法;进一步加深对数组名的理解。5、通过实验进一步理解指向指针的指针;二、实验性质 综合性三、实验要求1、认真阅读本次实验的目的,了解本次实验要求掌握的内容;2、在上机前需要预习,将相关内容写在实验报告中;3、在实验时,将实验要求的基本题根据预习时写在实验报告中的程序清单输入VC环境,进行编译、连接、运行、测试、调试和修改,并对相应内容做好记录;4、记录程序的最终运行结果;5、在实验时,将实验内容中的基本题(程序改错和编程题)在预习过程中编写出正确的代码,并在VC环境中运行,且争取完成选作题。四、预习要求1、指针变量的定义的语法,指针变量的语义和语用;2、指针、地址和变量之间的关系;3、有关指针的运算符和表达式;4、指针与数组、字符串的关联;通过指针操作数组元素和字符串的方法;5、对实验内容中的每个题目,设计出“问题的求解算法及数据结构”和“源程序清单”,并构造出相应的“测试数据”;6、在实验报告中撰写相应的内容,为上机实验做好充分的准备。五、实验内容1程 序 改 错【实验题1】下面程序的功能是希望通过指针变量px和py来输出变量x和y的值,调试下面的程序,分析程序运行的结果,指出错误的原因,并改正。#include main( ) int x=10,y=5,*px,*py; px=py; px=x; py=y; printf(x=%d,y=%dn,px,py);2编 程 题【实验题2】有三个整数x,y,z,设置三个指针变量p1,p2 ,p3,分别指向x,y,z。然后通过指针变量使x,y,z三个变量交换顺序,即原来x的值给y,把y的值给z,z的值给x。x,y,z的原值由键盘输入,要求输出x,y,z的原值和新值。【实验题3】使用指针的方法求100的素数要求:(1)先在数组中保存1 100的所有整数; (2)使用指针的方式对数组中非素数剔除。【实验题4】有一个整型二维数组,大小为m*n,找出最大值所在的行和列,以及该最大值。此程序要求用一个函数max实现最大值的寻找,并在max函数中最好使用指针解决, m和n为该函数的形参,数组元素的值在主函数中输入。【实验题5】从键盘输入两个字符串,输出第一个字符串在第二个字符串中的位置(第一个字符串的首字母在第二个字符串中的位置,如“abc”在“bbbacccabcddaw3”的位置为7)要求:(1)使用指针的方法遍历数组; (2)假设字符串的长度不超过100。3选 作 题【选作题1】使用指针的方式,从一个字符串中删除所有指定字符,输出剩余的字符串。如字符串为“abcaca”,删除字符“a”后,为“bcc”。【编程点拨】注意指针的使用,参考实验四的编程方法。【选作题2】有20个数,编写一程序,使其右循环移m个位置(m的值可以从键盘输入),并输出移到后的20个数。【编程点拨】 20个数使用数组保存; 使用指针的方法遍历数组。【选作题3】输入三行字符,每行不超过40个字符,要求统计出其中共有多少大写字母、小写字母、空格、标点符号。【编程点拨】 对输入的三行字符,使用一个二维字符型数组来保存; 使用指针的方法遍历数;。 在统计不同类型字符总数时,编程最好使用switch语句。六、思考题1、指针在程序设计中有什么作用?如何使一个指针指向一个变量?如何使一个指针指向一个数组?2、一维数组名和二维数组名有什么区别?3、能否用一个指针型变量来存放一个具体数(比如一个字符、一个整型数、一个单精度浮点数)?为什么?4、在编写程序时,你有哪些预防“野指针”问题的方法?5、在用指针访问数组时,你有哪些预防“访问越界”问题的方法?第 7 章 实验六 使用函数实现模块化设计思想一、实验目的1、在函数的实际应用中,加深对模块化设计思想的理解;2、掌握函数的定义、声明和调用的方法;3、掌握函数参数传递形式和返回值的概念;4、掌握模块化编程方法中自定义函数和主调函数的模块关系;5、掌握定义无参函数和有参函数的定义及调用方法,掌握定义无返回值参函数和有返回值参函数的定义及调用方法;6、掌握函数调用时如何处理函数的返回值;7、掌握带“参数的宏”与“函数”的差异;进一步理解“文件包含”命令的作用;8、掌握对一个函数功能正确性的测试方法(黑盒测试法)。二、实验性质 综合性三、实验要求1、认真阅读本次实验的目的,了解本次实验要求掌握的内容;2、在上机前需要预习,将相关内容写在实验报告中;3、在实验时,将实验要求的基本题根据预习时写在实验报告中的程序清单输入VC环境,进行编译、连接、运行、测试、调试和修改,并对相应内容做好记录;4、记录程序的最终运行结果;5、在实验时,将实验内容中的基本题(程序改错和编程题)在预习过程中编写出正确的代码,并在VC环境中运行,且争取完成选作题。四、预习要求1、函数的定义、声明和调用的方法;2、函数参数传递形式和返回值;指针、数组名作为参数;3、预编译命令中的“带参数的宏”和“文件包含”命令;4、模块化设计方法;5、找一些资料,了解“黑盒测试”的概念和相关方法;6、对实验内容中的每个题目,设计出“问题的求解算法及数据结构”和“源程序清单”,并构造出相应的“测试数据”;7、在实验报告中撰写相应的内容,为上机实验做好充分的准备。五、实验内容1程 序 改 错 和 程 序 的 分 析【实验题1】调试下面的程序,记录发生的出错信息,并指出错误原因且加以改正。#include stdio.hmain( ) int x,y; printf(%dn,sum(x+y);int sum(a,b); int a,b; return(a+b);【实验题2】下面的程序从键盘上输入两个数,输出两个数的最大公约数和最小公倍数,源代码如下,程序中存在错误,请将其改正写在旁边。#include stdio.hmain() int x,y,acd,amd; /* 定义变量,acd保存最大公约数,amd保存最小公倍数 */ printf(请输入两个数:/n); /* 提示输入 */ scanf(%d,%d,&x,&y); if(xy) /* 如果xy,两个值互换,保证第一个参数为小值 */ x=y; y=x; acd=acd(int m1,int m2); /*调用函数求最大公约数*/ amd=(x*y)/acd; /*求最小公倍数*/ printf(最大公约数=%d,最小公倍数=%d,acd,amc);/* 函数功能:使用辗转相除法求两个数的最大公约数 参数m1:两个数中较小者 参数m2:两个数中较大者 返回值:m1和m2的最大公约数*/int acd(int m1,int m2); int r; while (m1=0) /*使用辗转相除法求最大公约数*/ r=m2%m1; m1=r; m2=m1; return r; /*返回最大公约数*/【实验题3】先读懂程序,在预习中分析出该程序的运行结果,并把它写到实验报告中的对应地方,然后上机运行此程序,看看你在预习中得到的结果是否正确。# define FUE(K) K+3.14159# define PR(a) printf(“a=%dt”, (int)(a)# define PRINT(a) PR(a) ; putchar(n)# define PRINT2(a,b) PR(a); PRINT(b)# define PRINT3(a,b,c) PR(a); PRINT2(b,c)# define MAX(a,b) (ab? b:a)main() int x=2, f, y=2; PRINT(x*FUE(4); for(f=0;f=60;f+=20)PRINT2 ( f,5.12*f+45); x=1; PRINT3(MAX(x+,y),x,y); PRINT3(MAX(x+,y),x,y);2编 程 题【实验题4】写一函数digh(m,k),它将返回整数m从右边开始的第k个数字,如 digh(8542,3)=5,digh(12,4)=0。在主函main()中完成输入、对该函数的调用和输出功能。【实验题5】编写一个函数,计算一个整数m的n次幂,在主函数中输入m和n,并在主函数中完成输入、调用和输出功能。【编程点拨】注意该函数的结果值的“数据溢出”问题。【实验题6】若正整数A的所有因子(包括1但不包括自身,下同)之和为B,而B的因子之和为A,则称A和B为一对亲密数。例如,6的因子之和为1+2+3=6,因此6与6为一对亲密数(即6自身构成一对亲密数);又如,220的因子之和为l+2+4+5+10+11+20+22+44+55+110=284,而284的因子之和为1+2+4+71+142=220,因此,220与284为一对亲密数。编写程序,求500以内的所有亲密数对。要求:(1) 编制 facsum(n) 函数,返回n的所有因子(包括1但不包括自身)之和; (2) 在main函数中调用facsum(),寻找并输出500以内的所有亲密数对;(3) 输出要有文字说明。并且小数在前、大数在后,去掉重复的数对;(4)采用程序改错题的的编码风格对源代码做注释。3选 作 题【选作题1】定义一个宏MAX(x,y,z)从三个数x,y,z中找出最大数,并在主函数中完成对三个数的输入、宏的使用和输出功能。【选作题2】某歌手大赛,共m个歌手,有n个评委给歌手打分,分数采用百分制,去掉一个最高分,去掉一个最低分,然后取平均分,得到歌手的成绩。n个分数由键盘输入,编写程序计算某歌手的成绩。(假设m50,n10)要求:(1)设计一个函数计算一个歌手的成绩; (2)在主函数中完成下面功能:输入评委数n和歌手数m;对每个歌手输入n个评委的分数;调用上面的函数;输出全部歌手的最终分数; (3)对m个歌手的分数采用一个二维数组来存放。六、思考题1、函数调用时,参数是如何传递的?2、如果在函数中有多条return语句,计算机在执行程序时会如何处理?如果想返回多个值,应该怎么办?3、在指针和数组名做参数时,为了避免“访问越界”问题,你有哪些有效的方法?4、为什么函数在使用(调用)前,必须先定义或先说明?5、函数的原型说明的作用是什么?第 8 章 实验七 函数的嵌套与递归一、实验目的1、进一步理解函数的定义、声明和调用的方法;2、进一步理解函数参数传递形式;3、进一步理解指针和数组作为函数参数的使用方法;4、掌握函数的嵌套调用和函数的递归调用;5、掌握函数的嵌套调用和递归函数编写的规律;6、掌握变量的存储类别的使用,学会全局变量和局部变量、动态变量和静态变量的概念和使用方法;7、在应用中进一步加深对变量的生命周期和作用域的理解;8、进一步掌握对一个函数功能正确性的测试方法(黑盒测试法)。 二、实验性质 综合性三、实验要求1、认真阅读本次实验的目的,了解本次实验要求掌握的内容;2、在上机前需要预习,将相关内容写在实验报告中;3、在实验时,将实验要求的基本题根据预习时写在实验报告中的程序清单输入VC环境,进行编译、连接、运行、测试、调试和修改,并对相应内容做好记录;4、记录程序的最终运行结果;5、在实验时,将实验内容中的基本题(程序改错和编程题)在预习过程中编写出正确的代码,并在VC环境中运行,且争取完成选作题。四、预习要求1、掌握函数的嵌套调用和函数的递归调用;2、指针和数组作为函数参数的使用方法;3、变量的存储类别的使用,全局变量和局部变量、动态变量和静态变量的概念和使用方法;4、变量的生命周期和作用域的概念及应用;5、找一些资料,了解“黑盒测试”的概念和相关方法;6、对实验内容中的每个题目,设计出“问题的求解算法及数据结构”和“源程序清单”,并构造出相应的“测试数据”;7、在实验报告中撰写相应的内容,为上机实验做好充分的准备。五、实验内容1程 序 改 错 和 程 序 的 分 析【实验题1】下面程序想使指针变量pt1指向a 和b 中的大者,pt2指向小者,源代码如下,程序中存在错误,请将其改正写在旁边。#include swap(int *p1,int *p2) int *p;p=p1; p1=p2; p2=p;main()int a,b;scanf(%d,%d,&a,&b);pt1=&a; pt2=&b;if(&a&b) swap(pt1,pt2);printf(%d,%dn,*pt1,*pt2);【实验题2】先读懂下面的程序,在预习中分析指出程序中所出现的全部变量的存储类别和作用域,分析程序的运行结果,并把这些分析结果写到实验报告中的对应地方,然后上机运行此程序,看看你在预习中得到的结果是否正确。#include int n=1;void func( ) static int a=2; int b=5; a+=2; b+=5; n+=12; printf(a=%d,b=%d,n=%dn,a,b,n);void main( ) int a=0,b= -10; printf(a=%d,b=%d,n=%dn,a,b,n); func( ); printf(a=%d,b=%d,n=%dn,a,b,n); func( );2编 程 题【实验题3】编写一程序计算并输出:要求:(1)编制一个递归函数pq(n),返回n!值;(2)在main函数中,从键盘输入m与n,调用函数pq计算; (3)在main函数中,输入m与n之前要有提示,并检查输入数据的合理性(mnO),对于不合理的输入,应输出出错信息,不再进行计算。【实验题4】写一递归函数,将读入的整数按位分开后以相反的顺序输出。【实验题5】写一递归函数,计算: 1 当n=0 或 m=ncmn= m 当 n=1 cm-1n-1+cnm-1 当mn13选 作 题【选作题1】编写一程序,从键盘输入x,求s(x)的值(计算后面的20项的和)。已知:, 要求:(1)关于各阶乘的计算要设计一递归函数来实现; (2)关于x的次方也要设计一个函数来实现; (3)对s(x)要设计一个函数来实现; (4)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年潮汐能发电技术创新与商业化瓶颈突破策略报告
- 2025年乐山数学中考试题及答案
- 南充母婴店营销方案设计
- 亚马逊关联营销方案设计
- 2025年电机与拖动试题及答案
- 2025年护士篮球考试试题及答案
- 汽车专业对口试题及答案
- 对应急预案培训(3篇)
- 堵门事件应急预案(3篇)
- 俄语专业八级试题及答案
- 园林养护服务公司简介范文
- 储能项目竣工验收与交付方案
- 2025秋人教版(2024)二年级上册数学教学计划
- 2025至2030中国清真食品市场供需前景调查及发展动向分析报告
- 农业综合服务战略合作协议书
- 检验科实验室生物安全风险评估报告
- 药厂复试面试常见问题及答案解析
- 住院患者自备药品管理制度
- 工程开工方案模板(3篇)
- 复苏室心理护理
- 2025年部编版新教材语文八年级上册教学计划(含进度表)
评论
0/150
提交评论