《C语言程序设计》上机实验指导手册.docx

上传人:b****4 文档编号:24485089 上传时间:2023-05-28 格式:DOCX 页数:22 大小:48.29KB
下载 相关 举报
《C语言程序设计》上机实验指导手册.docx_第1页
第1页 / 共22页
《C语言程序设计》上机实验指导手册.docx_第2页
第2页 / 共22页
《C语言程序设计》上机实验指导手册.docx_第3页
第3页 / 共22页
《C语言程序设计》上机实验指导手册.docx_第4页
第4页 / 共22页
《C语言程序设计》上机实验指导手册.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

《C语言程序设计》上机实验指导手册.docx

《《C语言程序设计》上机实验指导手册.docx》由会员分享,可在线阅读,更多相关《《C语言程序设计》上机实验指导手册.docx(22页珍藏版)》请在冰豆网上搜索。

《C语言程序设计》上机实验指导手册.docx

《C语言程序设计》上机实验指导手册

 

C语言程序设计

上机实验指导手册

 

电子与信息工程学院

计算机科学系

第一部分上机实验的指导思想和要求

一、上机实验的目的

学习《C语言程序设计》课程不能满足于“懂得了”,满足于了解了语法和能看懂书上的程序,而应当掌握程序设计的全过程,即能独立编写出源程序,独立上机调试程序,独立运行程序和分析结果。

“程序设计”是一门实践性很强的课程,必须十分重视实践环节。

许多实际的知识不是靠听课和看书学到手的,而是通过长时间的实践积累的。

要提倡通过实践去掌握知识的方法。

必须保证有足够的上机实验时间,学习本课程应该至少有30小时的上机时间,最好能做到与授课时间之比为1:

1。

除了学校规定的上机实验以外,应当提倡学生自己课余抽时间多上机实践。

上机实验的目的,绝不仅是为了验证教材和讲课的内容,或者验证自己所编的程序正确与否。

学习程序设计,上机实验的目的是:

(1)加深对讲授内容的理解,尤其是一些语法规定,光靠课堂讲授,既枯燥无味又难以记住,但它们是很重要的,初学者的程序出错往往错在语法上。

通过多次上机,就能自然地、熟练地掌握。

通过上机来掌握语法规则是行之有效的方法。

(2)熟悉所用的计算机系统的操作方法,也就是了解和熟悉C语言程序开发的环境。

一个程序必须在一定的外部环境下才能运行,所谓“环境”,就是指所用的计算机系统的硬件和软件条件,或者说是工作平台。

使用者应该了解为了运行一个C程序需要哪些必要的外部条件(例如硬件配置、软件配置),可以利用哪些系统的功能来帮助自己开发程序。

每一种计算机系统的功能和操作方法不完全相同,但只要熟练掌握一两种计算机系统的使用,再遇到其他系统时便会触类旁通,很快就能学会。

(3)学会上机调试程序。

也就是善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行。

经验丰富的人,在编译连接过程中出现“出错信息”时,一般能很快地判断出错误所在,并改正之。

而缺乏经验的人即使在明确的“出错提示”下也往往找不出错误而求助于别人。

要真正掌握计算机应用技术,就不仅应当了解和熟悉有关理论和方法,还要求自己动手实现。

对程序设计来说,则要求会编程序并上机调试通过。

因此调试程序不仅是得到正确程序的一种手段,而且它本身就是程序设计课程的一个重要的内容和基本要求,应给予充分的重视。

调试程序固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来累积经验,而且有些经验是只能“会意”难以“言传”。

别人的经验不能代替自己的经验。

调试程序的能力是每个程序设计人员应当掌握的一项基本功。

因此,在做实验时千万不要在程序通过后就认为万事大吉、完成任务了,而应当在己通过的程序基础上作一些改动(例如修改一些参数、增加程序的一些功能、改变某些语句、改变输入数据的方法等),再进行编译、连接和运行。

甚至于“自设障碍”,即把正确的程序改为有错的(例如语句漏写分号;用scanf函数输入变量时,漏写“&”符号;比较符“==”错写为赋值号“=”;使数组下标出界;使整数溢出等),观察和分析所出现的情况。

这样的学习才会有真正的收获,是灵活主动的学习而不是呆板被动的学习。

二、上机实验前的准备工作

在上机实验前应事先做好准备工作,以提高上机实验的效率,准备工作至少应包括:

(1)了解所用的计算机系统(包括C编译系统和工作平台)的性能和使用方法;

(2)复习和掌握与本实验有关的教学内容;

(3)准备好上机所需的程序。

由于计算机实验室给每个学生安排的时间是有限的,要珍惜时间,充分利用。

应当在上机前按指定的题目编写好程序。

手编程序应书写整齐,并经人工检查无误后才能上机,以提高上机效率。

初学者切忌不编程序或抄别人程序去上机,应从一开始就养成严谨的科学作风;

(4)对运行中可能出现的问题事先作出估计,对程序中自己有疑问的地方,应作出记号,以便在上机时给予注意;

(5)准备好调试和运行时所需的数据。

三、上机实验的步骤

上机实验时一人一组,独立上机,复杂分组进行,相互讨论完成任务。

上机过程中出现的问题,除了是系统的问题以外,一般应自己独立处理,不要轻易举手问教师。

尤其对“出错信息”,应善于自己分析判断。

这是学习调试程序的良好机会。

上机实验一般应包括以下几个步骤:

(1)进入C工作环境(Dev-C++5.8.3)。

(2)输入自己所编好的程序。

(3)检查一遍已输入的程序是否有错(包括输入时打错的和编程中的错误),如发现有错,及时改正。

(4)进行编译和连接。

如果在编译和连接过程中发现错误,屏幕上会出现“出错信息”,根据提示找到出错位置和原因,加以改正。

再进行编译……,如此反复直到顺利通过编译和连接为止。

(5)运行程序并分析运行结果是否合理和正确。

在运行时要注意当输入不同数据时所得到的结果是否正确。

(6)输出程序清单和运行结果。

四、实验验收

(1)现场验收,学生讲解、提问、答辩的方式,通过三方面的表现给出实验成绩;

(2)提交程序清单(电子版)。

 

第二部分关于程序的调试和测试

一、程序错误的类型

为了帮助各位同学调试程序和分析程序,下面简单介绍程序出错的种类。

(1)语法错误

即不符合C语言的语法规定,例如将main错写为naim,括号不匹配,语句最后漏了分号等,这些都会在编译时被发现并指出。

这些都属于“致命错误”,不改正是不能通过编译的。

对一些在语法上有轻微毛病但不影响程序运行的错误(如定义了变量但始终未使用),编译时会发出“警告”,虽然程序能通过编译,但不应当使程序“带病工作”,应该将程序中所有导致“错误(error)”和“警告(warning)”的因素都消除,再使程序投入运行。

(2)逻辑错误

这是指程序无语法错误,也能正常运行,但是结果不对。

例如求s=l+2+3+…+100,有人写出以下语句:

for(s=0,i=1;i<100;i++)

s=s+i;

语法没有错,但求出的结果是l+2+3+…+99之和,而不是l+2+3+…+100之和,原因是少执行了一次循环。

这类错误可能是设计算法时的错误,也可能是算法正确而在编写程序时出现疏忽所致。

这种错误计算机是无法检查出来的。

如果是算法有错,则应先修改算法,再改程序。

如果是算法正确而程序写得不对,则直接修改程序。

(3)运行错误

有时程序既无语法错误,又无逻辑错误,但程序不能正常运行或结果不对。

多数情况是数据不对,包括数据木身不合适以及数据类型不匹配。

如有以下程序:

voidmain()

{inta,b,c;

scanf(“%d,%d”,&a,&b);

c=a/b;

printf(“%d\n”,c);

}

当输入的b为非零值时,运行无问题。

当输入的b为零时,运行时出现“溢出(overflow)”的错误。

如果在执行上面的scanf语句时输入456.7834.56,则输出c的值为2,显然是不对的。

这是由一于输入的数据类型与输入格式符%d不匹配而引起的。

二、程序的测试

程序调试的任务是排除程序中的错误,使程序能顺利地运行并得到预期的效果。

程序的调试阶段不仅要发现和消除语法上的错误,还要发现和消除逻辑错误和运行错误。

除了可以利用编译时提示的“出错信息”来发现和改正语法错误外,还可以通过程序的测试来发现逻辑错误和运行错误。

程序的测试的任务是尽力寻找程序中可能存在的错误。

在测试时要设想到程序运行时的各种情况,测试在各种情况下的运行结果是否正确。

程序测试是程序调试的一个组成部分。

有时程序在某些情况下能正常运行,而在另外一些情况下不能正常运行或得不到正确的结果,因此,一个程序即使通过编译并正常运行而且结果正确,还不能认为程序没有问题了。

要考虑是否在任何情况下都能正常运行并且得到正确的结果。

测试的任务就是要找出那些不能正常运行的情况和原因。

下而通过一个典型的和容易理解的例子来说明测试的概念。

求一元二次方程ax2+bx+c=0的根。

有人根据求根公式x1,2=(-b±sqrt(b2-4ac))/2a编写出以下程序:

#include

#include

voidmain()

{

floata,b,c,disc,x1,x2;

scanf(“%f,%f,%f”,&a,&b,&c);

disc=b*b-4*a*c;

x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);

printf(”x1=%6.2f,x2=%6.2f\n”,x1,x2);

}

当输入a,b,c的值为1,-2,-15时,输出xl的值为5,x2的值为-3。

结果是正确无误的。

但是若输入a,b,c的值为3,2,4时,屏幕上出现了出错信息,程序停止运行,原因是此时b2-4ac小于0,出现了对负数求平方根的运算,故出错。

因此,此程序只适用b2-4ac≥0的情况。

我们不能说上面的程序是错的,而只能说程序对可能出现的情况“考虑不周”,所以不能保证在任何情况下都是正确的。

使用这个程序必须满足一定的前提(b2-4ac≥0),这样,就给使用程序的人带来不便。

人们在输入数据前,必须先算一下,看b2-4ac是否大于或等于0。

一个程序应能适应各种不同的情况,并且都能正常运行并得到相应的结果。

下面分析一下求方程ax2+bx+c=0的根,有几种情况:

(1)a≠0时

①b2-4ac>0有两个不等的实根:

x1,2=(-b±sqrt(b2-4ac))/2a

②b2-4ac=0有两个相等的实根:

x1=x2=-b/2a

③b2-4ac<0有两个不等的共轭复根:

x1,2=(-b±sqrt(b2-4ac)i)/2a

(2)a=0时,方程就变成一元一次的线性方程:

bx+c=0

①当b≠0时,x=-c/b

②当b=0时,方程变为0x+c=0

当c=0时,x可以为任何值;

当c≠0时,x无解。

综合起来,共有6种情况:

①a≠0,b2-4ac>0

②a≠0,b2-4ac=0

③a≠0,b2-4ac<0

④a=0,b≠0

⑤a=0,b=0,c=0

⑥a=0,b=0,c≠0

应当分别测试程序在以上6种情况下的运行情况,观察它们是否符合要求。

为此,应准备6组数据。

用这6组数据去测试程序的“健壮性”。

在使用上面这个程序时,显然只有满足①②情况的数据才能使程序正确运行,而输入满足③~⑥情况的数据时,程序出错。

这说明程序不“健壮”。

为此,应当修改程序,使之能适应以上6种情况。

可将程序改为:

#include

#include

voidmain()

{floata,b,c,disc,x1,x2,p,q;

printf("inputa,b,c:

");

scanf(“%f,%f,%f”,&a,&b,&c);

if(a==0)

if(b==0)

if(c==0)

printf("Itistrivial.\n);

else

printf("Itisimpossible.\n);

else

{printf("Ithasonesolution:

\n);

pirntf("x=%6.2f\n",-c/b);

}

else

{disc=b*b-4*a*c;

if(disc>=0)

if(disc>0)

{printf("Ithastworealsolutions:

\n");

x1=(-b+sqrt(disc))/(2*a);

x2=(-b-sqrt(disc))/(2*a);

printf(”x1=%6.2f,x2=%6.2f\n”,x1,x2);

}

else

{printf("Ithastwosamerealsolutions:

\n");

printf("x1=x2=%6.2f\n",-b/(2*a));

}

else

{pritnf("Ithastwocomplexsolutions:

\n");

p=-b/(2*a);

q=sqrt(-disc)/(2*a);

printf("x1=%6.2f+%6.2fi,x2=%6.2f-%6.2fi\n",p,q,p,q);

}

}

}

为了测试程序的“健壮性”,我们准备了6组数据:

①3,4,1②1,2,1③4,2,1④0,3,4⑤0,0,0⑥0,0,5

分别用这6组数据作为输入的a,b,c的值,得到以下的运行结果:

①inputa,b,c:

341

Ithastworealsolutions:

x1=-0.33,x2=-1.00

②inputa,b,c:

121

Ithastwosamerealsolutions:

x1=x2=-1.00

③inputa,b,c:

421

Ithastwocomplexsolutions:

x1=-0.25+0.43i,x2=-0.25-0.43i

④inputa,b,c:

034

Ithasonesolutions:

x1=-1.33

⑤inputa,b,c:

000

Itistrivial.

⑥inputa,b,c:

005

Itisimpossible.

经过测试,可以看到程序对任何输入的数据都能正常运行并得到正确的结果。

以上是根据数学知识知道输入数据有6种方案。

但在有些情况下,并没有现成的数学公式作为依据,例如一个商品管理程序,要求对各种不同的检索作出相应的反应。

如果程序包含多条路径(如由if语句形成的分支),则应当设计多组测试数据,使程序中每一条路径都有机会执行,观察其运行是否正常。

以上就是程序测试的初步知识。

测试的关键是正确地准备测试数据。

如果只准备4组测试数据,程序都能正常运行,仍然不能认为此程序己无问题。

只有将程序运行时所有的可能情况都作过测试,才能作出判断。

测试的目的是检查程序有无“漏洞”。

对于一个简单的程序,要找出其运行时全部可能执行到的路径,并正确地准备数据并不困难。

但是如果需要测试一个复杂的大程序,要找到全部可能的路径并准备出所需的测试数据并非易事。

例如:

有两个非嵌套的if语句,每个if语句有两个分支,它们所形成的路径数目为2×2=4。

如果一个程序包含100个if语句,则可能的路径数目为2100=1.267651×1030,要测试每一条路径儿乎是不可能的。

实际上进行测试的只是其中一部分(执行几率最高的部分)。

因此,经过测试的程序一般还不能轻易宣布为“没有问题”,只能说“经过测试的部分无问题”。

正如检查身体一样,经过内科、外科、眼科、五官科……各科例行检查后,不能宣布被检查者“没有任何病症”,他有可能有隐蔽的、不易查出的病症。

所以医院的诊断书一般写为“未发现异常”,而不能写“此人身体无任何问题”。

我们应当了解测试的目的,学会组织测试数据,并根据测试的结果修改完善程序。

第三部分实验内容与安排

实验一简单的C程序实验

1.实验目的

(1)了解Dev-C++集成环境的窗口界面,熟练掌握如何编辑、编译、连接、运行一个C程序以及如何保存和修改C语言的源程序。

(2)通过运行简单的C程序,初步了解C源程序的结构和特点。

(3)学会简单的读程序和调试程序。

2.实验内容

(1)输出图形。

 

(2)求下图所示田径场的周长和面积。

 

(3)已知圆的周长与面积公式为:

Cir=2*3.14*rad

Area=3.14*rad*rad

从键盘输入一个半径值,求该圆的周长和面积。

要求:

用主函数实现半径的输入,圆周长和面积的输出,周长和面积用不同的函数来实现。

3.预习内容

《C程序设计(第四版)》第1章、第3章

实验二顺序程序设计

1.实验目的

(1)掌握C语言中使用最多的一种语句——赋值语句的使用方法。

(2)掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法,了解字符型数据和整型数据的内在关系。

(3)掌握不同的类型数据之间赋值的规律。

(4)掌握对各种类型数据的正确输入方法。

(5)学会使用C的有关算术运算符,以及包含这此运算符的表达式。

(6)掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。

(7)进一步掌握编写程序和调试程序的方法。

2.实验内容和步骤

(1)用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,C2=’a’。

问在键盘上如何输入?

#include

intmain()

{

inta,b;

floatx,y;

charc1,c2;

scanf(“a=%db=%d”,&a,&b);

scanf(“%f%f”,&x,&y);

scanf(“%c%c”,&c1,&c2);

………………

return0;

}

(2)设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。

用scanf输入数据,输出计算结果,输出时要求有文字说明,取小数点后2为数字。

请编程序。

(3)求ax2+bx+c=0方程的根。

a,b,c由键盘输入,假设b2-4ac>0。

3.预习内容

《C程序设计(第四版)》第3章。

实验三选择结构程序设计

1.实验目的

(1)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。

(2)学会正确使用逻辑运算符和逻辑表达式。

(3)熟练掌握if语句和switch语句。

(4)结合程序掌握一些简单的算法。

(5)进一步学习调试程序的方法。

2.实验内容

本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序。

(1)有3个整数a,b,c,由键盘输入,输出其中最大的数。

(2)有一函数:

x(x<1)

y=2x-1(1≤x<10)

 3x-11(x≥10)

写程序,用scanf函数输入x的值,输出y相应的值。

运行程序.输入x的值(分别为x<1、1~10、x>10这3种情况),检查输出的y值是否正确。

(3)给出一个百分制成绩,要求输出成绩等级A、B、C、D、E。

90分以上为A,81~89分为B,70~79分为C,60~69分为D,60分以下为E。

①事先编好程序,要求分别用if语句和switch语句来实现。

运行程序,并检查结果是否正确。

②再运行一次程序,输入分数为负值(如-70),这显然是输入时出错,不应给出等级,修改程序,使之能正确处理任何数据,当输入数据大于100和小于0时,通知用户“输入数据错”,程序结束。

(4)给一个不多于5位的正整数,要求:

①求出它是几位数;②分别输出每一位数字;③按逆序输出各位数字,例如原数为321,应输出123。

应准备以下测试数据:

·要处理的数为1位正整数;

·要处理的数为2位正整数;

·要处理的数为3位正整数;

·要处理的数为4位正整数;

·要处理的数为5位正整数。

除此之外,程序还应当对不合法的输入做必要的处理,例如:

·输入负数;

·输入的数超过5位(如123456)。

3.预习内容

《C程序设计(第四版)》第4章。

 

实验四循环结构程序设计

(一)

1.实验目的

(1)熟悉掌握用while语句、do-while语句实现循环的方法。

(2)掌握在程序设计中用循环的方法实现一些常用算法。

(3)进一步学习调试程序。

2.实验内容

编程序并上机调试运行。

(1)输入两个正整数m和n,求它们的最大公约数和最小公倍数。

在运行时,输入的值m>n,观察结果是否正确。

再输入时,使m

修改程序,不论m和n为何值(包括负整数),都能得到正确结果。

(2)分别求出1~100的和、1~50的平方和、1~10的倒数和,并计算三者之和。

(3)输出所有的“水仙花数”,所谓的“水仙花数”是指一个3位数,其各位数字立方和等于该数本身。

例如153是一个“水仙花数”,因为153=13+53+33。

(4)编程序找出1000之内的所有完数,并输出。

所谓完数,是指一个数如果恰好等于它的因子之和,这个数就称为“完数”。

例如,6的因子为1,2,3,而6=1+2+3,因此6是完数。

3.预习内容

《C程序设计(第四版)》第5章

 

实验五循环结构程序设计

(二)

1.实验目的

(1)熟悉掌握用for语句实现循环的方法。

(2)掌握在程序设计中用循环的方法实现一些常用算法。

(3)进一步学习调试程序。

2.实验内容

编程序并上机调试运行。

(1)有一个分数序列:

2/1,3/2,5/3,5/8,13/8,21/13,……

求出这个数列的前20项之和。

(2)一个球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。

求它在第10次落地时,共经过多少米,第10次反弹多高。

(3)输出以下图案:

*

***

*****

*******

*****

***

*

3.预习内容

《C程序设计(第四版)》第5章

 

实验六数组

(一)

1.实验目的

(1)掌握一维数组和二维数组的定义、赋值和输入输出的方法。

(2)掌握与数组有关的算法(特别是排序算法)。

2.实验内容

编程序并上机调试运行。

(1)已有一个已排好序的数组,要求输入一个数后,按原来排序的规律将它插入到数组中。

(2)将一个数组中的值按逆序重新存放。

例如,原来顺序为8,6,5,4,1,要求改为1,4,5,6,8。

(3)输出以下的杨辉三角形(要求输出10行)。

1

11

121

1331

14641

15101051

………………………………

(4)输出“魔方阵”。

所谓魔方阵是指这样的方阵,它的每一行、每一列和对角线之和均相等。

例如,三阶魔方阵为(此题选做)

816

357

492

3.预习内容

《C程序设计(第四版)》第6章。

 

实验七数组

(二)

1.实验目的

(1)掌握字符数组和字符串函数的使用。

(2)掌握与字符数组有关的算法。

2.实验内容

编程序并上机调试运行。

(1)找出一个二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。

也可能没有鞍点。

(此题选做)

(2)编一个程序,将两个字符串s1和s2比较,若s1>s2,输出一个正数;若s1=s2,输出0;若s1

不要使用strcmp函数。

(3)编写一个程序,将字符数组s2中的全部字符复制到字符数组1中。

不用strcpy函数。

复制时,’\0’也要复制过去,’\0’后面的字符不复制。

3.预习内容

《C程序设计(第四版)》第6章。

 

实验八函数

(一)

1.实验目的

(1)掌握定义函数的方法。

(2)掌握函数实参与形参的对应关系,以及“值传递”的方式。

(3)掌握函数的调用方法和过程。

(4)掌握函数的递归调用

2.实验内容

编程序

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 简洁抽象

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1