实验指导.docx
- 文档编号:26268632
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:16
- 大小:26.84KB
实验指导.docx
《实验指导.docx》由会员分享,可在线阅读,更多相关《实验指导.docx(16页珍藏版)》请在冰豆网上搜索。
实验指导
生物医学工程08班
《C语言程序设计》实验指导
总学时90(54/36),第1-18周
【实验要求】
1.每次实验课前先复习教材中相关内容(即学习辅导各个实验末尾的“预习内容”),思考题目要求,尽量不看答案自己完成。
实在无法解决的问题在课后通过对照自己的程序与答案,分析并找出错误。
2.实验报告要求:
写下周次、标题、实验目的、实验内容和实验总结。
3.实验内容书写的具体要求:
编程题课前先写好代码,上机调试时在旁边记录修改情况;分析程序运行结果的题目应写下自己判断的运行结果和上机运行的结果,如果二者不同,应分析发生错误的原因。
4.实验总结可写下本次实验的主要收获和存在的问题。
5.关于软件操作方法的问题可参看《学习辅导》第13-15章.
6.《学习辅导》第11-12章是关于程序中常见错误和调试的分析,建议经常浏览,在遇到问题时参考解决。
第1周了解C语言的开发环境
【实验目的】
参见《学习辅导》P248实验目的
1.学习使用WinTC1.9和VC++6.0进行C语言的程序开发;
2.了解在上述环境中编辑、编译、连接和运行C程序的方法;
3.了解C程序的构成和特点。
【实验内容】
1.《学习辅导》P.248-249实验1第(4)(5)(6)题
要求:
(4)即教材例1.1,先自己判断结果,再运行验证,分别记录自己判断的结果和上机运行的结果;
(5)根据系统提示,修改错误直至正确运行,记录原程序和修改情况;
(6)运行时输入数据直至正确,注意输入数据的格式,分析运行结果,读懂各行代码。
2.教材P.16习题第4题
不看答案,自己编程,上机调试有错时也尽量自己找出错误,最后无法解决的问题才参考答案。
【实验总结】
(1)简单描述你以往学习计算机的经历,对于本课程你有多少了解?
有什么样的期望?
(2)在本次实验中你遇到的主要问题,你是怎样解决这些问题的?
有什么主要收获?
第2周数据类型、运算符与表达式
【实验目的】
见《学习辅导》P250实验目的
(1)-
(2)
(1)掌握C语言的数据类型,熟悉如何定义一个整型、字符型和实型(浮点型)的实量,以及对它们赋值的方法;
(2)掌握不同类型数据之间赋值的规律。
【实验内容】
说明:
实验报告中写题目和代码。
预习——调试——修改的要求每次相同,以后不再重复。
1.输入、调试、运行教材第2章实例程序
例2.1-2.4中任选至少2个程序上机调试。
要求:
输入代码前应尽量读懂,逐词输入——逐句更好——而不能一个一个字母地输入。
运行时要事先估计将会出现的结果,并请注意输入数据的格式设置。
2.输入、调试、运行教材第3章实例程序
例3.13或3.14选择至少一个程序上机调试。
3.编程输入一个圆的直径,求圆的周长和面积。
建议:
定义圆周率π为一个符号常量。
4.编程,用户输入两个数,求它们的和。
【实验总结】
第3周顺序结构程序设计
【实验目的】
见《学习辅导》P253实验目的
(1)-(3)
【实验内容】
1.输入、调试、运行例3.15的程序。
要求:
输入代码前应尽量读懂,逐词输入——逐句更好——而不能一个一个字母地输入。
运行时要事先估计将会出现的结果,并请注意输入数据的格式设置。
2.下面这段程序能否实现求两个整数的平均值功能?
如果不能,请分析原因,改正错误。
#include
voidmain()
{
scanf("x=%d,y=%d",x,y);
printf("x=%d,y=%d\n",x,y)
z=(x+y)/2;
printf("z=(x+y)/2=",z);
}
3.第3章习题7华氏温度转换为摄氏温度。
注意:
要求输入、输出时要有相应的文字说明。
温度在实数范围取值。
4.第3章习题4
该题的主要目的是明确scanf函数中的格式符号与运行时输入数据的格式要求。
在教材程序段之后应添加输出部分,使用户输入的数据显示出来。
【实验总结】
第4-5周选择结构程序设计
【实验目的】
参见《学习辅导》P254实验4实验目的
(1)-(6)
【实验要求】
实验课前复习教材第4章,熟悉相关语法,阅读实例。
进度建议:
第6周完成第1-3题;第7周完成第4-5题。
注意:
在调试选择结构的程序时,必须输入符合每个分支的测试数据,以保证程序的坚固性。
【实验内容】
1.参考教材80页例子的语法,修改完善第2周第3题的程序:
编程输入一个圆的直径,求圆的周长和面积。
当用户输入负数时显示“输入错误”的提示。
2.实验4第
(1)题,求分段函数的值,即教材习题4.5。
x=6.2
y=11.4
要求:
屏幕上应出现类似下面所显示的内容
注意:
程序运行时应分别输入3个数据段中的数据进行验证,还应输入3个数据段的边界数据(如1,10)进行验证。
3.课外阅读教材例4.1-4.7,并在例4.6之外自选一个上机调试。
4.输入调试教材例4.6,求一元二次方程的解。
说明:
一元二次方程的解是一个十分经典的分支结构程序实例,本题的要求是读懂程序。
先通读,对照N-S图理解其算法,再逐句读懂每一行代码,理解其语法功能。
注意:
这个程序在运行调试时应输入各种不同的系数(见P.90分析),保证每个分支都能正常运行。
为体现是否读懂了程序,请在实验报告本上回答以下问题:
(1)第4行代码中声明的8个变量分别用于存放什么数据?
(2)第8行代码中的条件“fabs(a)<=1e-6”是什么含义?
(必要时上网搜索)
(3)第14行代码中的符号“%8.4f”是什么含义?
(4)最后两行printf函数的功能是什么?
(输出什么?
什么格式?
)
有余力的同学,请参考课堂讲解时的课件(PPT文件)中的流程图,考虑用户输入a=0时的情况,把程序全面完善。
5.实验4第
(2)题,将百分制成绩改为等级制成绩,即教材习题4.6
请注意题目的要求:
①分别使用if和switch两种格式编写;②调试通过后增加对用户输入错误数据的处理。
提示:
要求①中的if语句应该不难解决;但在switch结构中如何表示类似70-79这样的区间值呢?
通过研读教材我们知道,C语言的switch多分支结构中,case后面只能是一个常量或常量组成的表达式,无法表示区间值。
经过观察可发现,如果成绩用score变量保存,则当70≤x≤79时,x/10的值均为7,所以我们可以用x/10的值来区别各个分数段。
另外“60分以下”实际包含了0-9,10-19,…,50-59共6个分数段,它们进行的处理都是相同的,均为输出“E”。
【实验总结】
【书面练习】
教材习题4.3,求逻辑表达式的值。
第6-8周循环结构程序设计
【实验目的】(参见《学习辅导》实验5实验目的)
1.掌握循环结构的基本思路和程序逻辑;
2.熟悉用while和do-while语句实现循环结构;
3.熟悉使用循环结构实现的一些常用算法和经典实例;
4.进一步学习调试程序的方法。
【实验要求】
1.实验课前复习教材第5章,熟悉相关语法,理解例5.1-5.9的编程思路。
2.课余阅读《学习辅导》第11章,了解编写、运行C语言程序时经常发生的一些错误,上机时逐步做到能够利用系统提示的错误信息分析错误原因并予以解决。
3.课余阅读《学习辅导》第12章,了解程序调试、测试的基本方法,上机时逐步训练自己通过输入不同的数据发现程序的逻辑错误,并予以解决的能力。
【实验内容】
1.上机调试运行例5.4,熟悉while循环语句的基本语法和程序逻辑。
2.编程:
输入正整数n,求阶乘n!
=1*2*…*n。
3.编写一个C程序,输出1~100之间所有能被13整除的数,并求这些数的和。
4.读程序写结果,并回答问题:
(1)#include
main()
{intx,i;x=-1;i=0;
do{x=x*x;i++;}while(!
x);
printf("i=%d,x=%d\n",i,x);
}
自己判断的结果:
上机运行的结果:
循环体执行了_________次。
(2)#include
main()
{intnum=0;
while(num<=2)
{num++;printf("%d\n",num++);}
}
自己判断的结果:
上机运行的结果:
循环体执行了_________次。
5.编程完成下列功能:
输入某地冬天一日测量的10个温度,求最高温、最低温。
输入输出形式自定。
6.上机输入、运行、调试教材P.111例5.9字符串“加密”
输入代码时尽量做到逐句读懂后输入,理解每一个语句的语法功能和结构功能。
通过这个程序,可以了解C语言中接受键盘输入的一串字符并逐个处理的方法之一;以及C语言中把字符作为数值处理的表达方式。
回答问题:
while((c=getchar())!
='\n')这个语句中的条件表示什么含义?
7.实验5
(1),即习题5.2。
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
提示:
可模仿例5.9的方法逐个输入并判断字符;定义5个变量分别保存大写字母、小写字母、空格、数字和其它字符的个数,根据当前读入的字符分类,相应的变量值加1。
进一步的要求:
输入一行字符,分别统计出其中大写字母、小写字母、空格、数字和其它字符的个数。
8.实验5
(2),即习题5.6,求水仙花数。
水仙花数是指满足下列条件的三位整数:
各位数字的立方和正好等于这个数本身。
提示:
此题可以思考两种思路:
(1)列出百位、十位、个位的各种取值,形成一个三重循环,再由三个数字组合成一个三位数并进行判断;
(2)对于100-999间的每一个数,使用适当的表达式求出其百位、十位、个位并进行判断。
9.上机调试例5.5的程序,掌握Fibonacci数列的特点及递推算法的思路。
Fibonacci数列:
1,1,2,3,5,8,13,21,34,55,......。
从第3项开始,每项都是前两项之和。
10.编程:
教材习题5.1输入两个正整数m和n,求其最大公约数和最小公倍数。
说明:
按小学时的思维,只要能够从小到大找出m和n的公约数(同时能够被m和n整除的数),最后找到的那个就是他们的最大公约数;同样地,从小到大找出m和n的公倍数(能够同时整除m和n的数),找到的第一个就是最小公倍数。
习题答案中给出的是另一种常用的算法——辗转求余法,大家要努力读懂。
读懂的方法之一是设定两个数,模拟程序的运行步骤,了解这个算法是如何求出最大公约数和最小公倍数的。
在运行调试该题程序时,应使用几组不同的数来进行测试:
①两数有公约数(≠1);②两数互质(只有公约数1);③一个数正好是另一个的整数倍(大数在前和小数在前的情况)。
【实验总结】
第9-11周数组
【实验目的】
1.掌握数值型数组的定义和引用方法(一维、二维);
2.掌握字符数组的定义和引用方法及常用的字符串处理函数;
3.掌握以数组表达的相关算法。
【实验要求】
1.实验课前复习教材第6章相关内容,熟悉语法和算法。
2.课余阅读《学习辅导》第12章,了解程序调试、测试的基本方法,上机时逐步训练自己通过输入不同的数据发现程序的逻辑错误,并予以解决的能力。
【实验内容】
1.实验6
(1),即教材习题6.2选择排序
2.设有一个已初始化的数值型数组(数组大小及数据自拟)。
用户输入一个数,在该数组中查找该数据。
找到则输出所在元素的下标;找不到则给出提示。
3.实验6
(2),即教材习题6.4在有序数组中插入一个元素。
说明:
设有已排序的数组元素a[1]-a[4],要插入一个元素,必须先查找到相应的插入位置。
然后将各个元素值依次后移。
为简化调试,可在初始化时为数组输入一组有序数据。
4.教材习题6.6,输出杨辉三角的前10行。
5.调试运行教材例6.8输入一行字符,统计其中有多少个单词(单词之间用空格分开)。
6.判断下列程序运行后的输出结果。
请先自己进行判断,再上机验证。
分别记录自己计算、判断的运行结果和上机运行的实际结果。
如果二者不同,请分析发生错误的原因。
(1)chara[]={'a','b','c','d','e','f','g','h','\0'};
inti,j;
i=sizeof(a);j=strlen(a);
printf("%d,%d\n",i,j);
(2)intaa[4][4]={{1,2,3,4},{5,6,7,8},{3,9,10,2},{4,2,9,6}};
inti,s=0;
for(i=0;i<4;i++)s+=aa[i][1];
printf("%d\n",s);
7.实验6(3),即教材习题6.10统计一篇英文文章中的大写字母、小写字母、数字、空格、其他字符的个数。
提示:
定义一个字符型二维数组,包括3行、80列。
为简化运行步骤起见,可初始化存入相应数据。
设定5个变量(或一个包含5个元素的数组)分别记录5种类型字符的个数。
使用双重循环,逐个字符进行判断,分析字符种类,并在相应的变量上进行加1运算。
进一步要求(选做):
统计一篇英文文章中的每个字母(忽略大小写)出现的频数和频率。
【实验总结】
第12-13周函数
【实验目的】
1.掌握定义函数和调用函数的基本语法;
2.掌握函数调用时实参与形参的对应关系。
3.熟悉递归算法及递归函数的基本语法;
4.掌握使用数组名作为参数的函数的定义及调用的基本语法;
5.熟悉局部变量和全局变量的定义方法和作用域的概念。
【实验内容】
1.下面的程序是根据例5.4提供的公式(不是例5.4的代码)编写一个函数求π的近似值,请填空完善程序。
在实验报告中写完整的代码。
#include
______________
voidmain()
{________
printf("pi=%f\n",pi());
}
floatpi()
{
floatn=1,t,pi=0;
do
{t=pow(-1,n-1)/(2*n-1);
pi=pi+t;
________;
}
while(fabs(t)>1e-6);
return________;
}
提醒:
若使用WinTC编译平台,在一个文件中有多个函数时,getch()语句应放在main函数的末尾,而不是整个程序的最后。
2.实验7
(1)即习题7.3,根据“循环”一章中讨论的算法,编写一个判断素数的函数,返回一个表示“是”或“否”的值。
在主函数中输入一个正整数,调用此函数进行判断,并输出结果。
请考虑:
应如何设置判断素数函数的参数个数、类型及返回值的类型。
主函数中又应该如何调用它。
问题的扩展:
显示[100,200]区间内的素数。
3.习题7.1编写两个函数分别求两个正整数的最大公约数和最小公倍数。
如果采用习题5.1答案提供的“辗转求余”算法,则需要注意它在计算最小公倍数时使用了最大公约数的值。
所以在定义最小公倍数函数时要调用最大公约数函数。
可以通过自学“7.5函数的嵌套调用”,了解函数嵌套调用的注意事项。
注:
最大公约数highestcommonfactor或greatestcommondivisor或greatestcommonfactor
最小公倍数leasecommonmultiple
4.使用如下的阶乘定义,用递归算法编写一个求阶乘的函数fac。
然后编写主函数完成下列两题:
(1)编写主函数求任意3个正整数的阶乘的和x!
+y!
+z!
。
(2)编写主函数求1!
+2!
+...+10!
。
阶乘的定义:
5.定义一个函数,在一个数组中查找一个指定的值,找到时返回其下标,找不到则返回-1。
再定义一个主函数,对一个数组进行初始化,然后输入一个数值进行查找。
6.实验8(3),即习题7.9,编写一个函数统计一个字符串中各类字符数。
本题需要注意的是,一个函数中要获得多个计算结果值(字母个数、数字个数、空格个数、其他字符个数),考虑如何在函数中返回多个值。
7.(选做)上题运行通过后,尝试将完成统计功能的函数保存在另一个文件中,主函数所在的文件进行适当的设置和声明以调用这个外部函数。
第14-15周指针
【实验目的】
1.掌握指针和间接访问的概念,会定义和使用指针变量;
2.能正确使用指针访问普通变量;
3.能正确使用指针访问数组;
4.理解使用指针变量作为函数的形参;
5.理解使用指针访问字符串和字符数组的方法。
本次主要内容是调试运行教材实例,通过调试程序、小组讨论理解指针的概念及简单应用。
【实验内容】
1.调试教材实例8.4。
说明:
掌握如何使用指针访问普通变量;区别普通变量、变量的指针、指针变量、指针变量所指向的变量这些容易混淆的概念。
2.调试教材实例8.5。
说明:
掌握如何使用指针访问数组;区别数组、数组元素、数组的首元素、数组的地址、元素的地址、指针变量、指针变量所指向的变量这些容易混淆的概念。
3.调试教材实例8.6。
说明:
这个例子可以帮助我们了解通过指针访问数组的实际运行步骤。
请注意教材中的分析。
4.程序填空:
以下程序求a数组中的所有素数的和,函数isprime用来判断自变量是否为素数。
素数是只能被1和本身整除且大于1的自然数。
#include
intisprime(int);
voidmain(void)
{
inti,a[10],*p=a,sum=0;
printf("Enter10num:
\n");
for(i=0;i<10;i++)scanf("%d",&a[i]);
for(i=0;i<10;i++)
if(isprime(*(p+①))==1)
{
printf("%d",*(a+i));
sum+=*(a+i);
}
printf("\nThesum=%d\n",sum);
}
intisprime(intx)
{
inti;
for(i=2;i<=x/2;i++)
if(x%i==0)return(0);
②;
}
5.教材习题8-6。
要求:
定义一个函数,通过指针操作实现“求一个字符串长度”的功能。
主函数中定义字符数组并输入字符串,求其长度。
第16周结构体
【实验目的】
掌握结构体类型变量和结构体数组的定义和使用。
【实验内容】
1.教材习题9-3。
提示:
a)该题中要求每个学生的数据项为:
编号(num)、姓名(name)和三门课成绩(用score数组的3个元素存放)。
这样就需要定义一个结构体,包含3个成员,两个是字符数组,一个是数值型数组。
b)由于需要处理5个学生的数据,在主函数中定义一个有5个元素的结构体数组。
c)print函数用于按表格形式输出一个结构体数组的各个(数组)元素的(结构体)成员值。
d)对于如何将主函数中的结构体数组数据传递到print函数中,可考虑使用全局变量或数组参数形式。
e)由于main和print函数都要使用同一个结构体类型,应考虑该结构体的作用域。
2.完成上述题目后,建议通过调试教材中的例题或二级统考题中的相关程序等方式进一步加深对相关知识点的了解。
综合练习
【实验目的】
1.综合运用本课程中学习的C语言知识与编程方法,编写一个小规模的应用程序,以提高编程能力。
2.回顾本课程的知识点,对于存在问题的章节自己选择适合的题目进行复习。
【实验内容】
本次实验不需要按以往要求的格式书写实验报告。
只需在第18周实验课下课时上交源程序文件的电子版。
文件中应以适当的文字说明作者情况,题目、主要设计思想。
以下题目任意选做,或自己设计题目。
亦可参照以下网址中的相关题目:
1.关于排序算法的效率
设计一个程序,对我们介绍过的冒泡排序、选择排序、简单交换排序进行比较。
例如比较对于相同的数据,其运行时间、比较和交换次数等。
2.查找算法的步骤模拟
对于我们讨论过的顺序查找、折半查找或其他查找方法,编写程序模拟显示其查找步骤。
3.手机通讯录
编写一个程序,对类似手机通讯录这样简单的信息进行输入、保存、修改、查找、删除等操作。
4.模拟IC卡充值、扣款的操作
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 指导