第一篇:C程序设计教案(第4章实验3B次)
实验二 选择结构程序设计实验一、二、实验学时:2课时 实验目的:
1)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。2)熟练掌握if语句和switch语句。3)结合程序掌握一些简单的算法。
三、实验要求:
1.在上实验课之前,每一个同学必须将实验的题目、程序编写完毕,做好充分的准备。2.所有实验环节均由每位同学独立完成,严禁抄袭他人实验结果,若发现有结果雷同者,按实验课考核办法处理。
四、实验步骤和内容
本实验要求事先编好解决下面问题的程序,然后上机输入程序并调试运行程序。1.有一函数:
(x1)xy2x1(1x10)3x11(x10)
用scanf函数输入x的值,求y值。(习题5.5)
运行程序,输入x的值(分别为x<1、1≤x<
10、x≥10三种情况),检查输出的y值是否正确。
2.给出一个百分制成绩,要求输出成绩等级A、B、C、D、E。90分以上为A,81-89分为B,70-79分为C,60-69分为D,60分以下为E。
1)事先编好程序,要求分别用if语句和switch语句实现。运行程序,并检查结果是否正确。
2)再运行一次程序,输入分数为负值(如-70),这显然是输入时出错,不应给出等级。修改程序,使之能正确处理任何数据。当输入数据大于100或小于0时,通知用户“输入数据错”,程序结束。3.给一个不多于5位的正整数,要求:
1)求出它是几位数;
2)分别打印出每一位数字;
3)按逆序打印出各位数字,例如原数为321,应输出123。应准备以下测试数据:
要处理的数为1位正整数; 要处理的数为2位正整数; 要处理的数为3位正整数; 要处理的数为4位正整数; 要处理的数为5位正整数。除此之外,程序还应当对不合法的输入作必要的处理。例如: 输入负数;
输入的数超过5位(如123456)。
4.输入4个整数,要求按由小到大顺序输出。得到正确结果后,修改程序使之按由大到小顺序输出。
5.根据输入的三角形的三边判断是否能组成三角形,若可以则输出它的面积和三角形的类型。
6.现有十二个小球,其中一个球的重量与其它十一个的重量不相同,但不知道是轻还是重。试用天平称三次,把这个非标准球找出来,并指出它比标准球是轻还是重。要求:
1)用嵌套的选择结构编写程序;2)调试程序时,必须把十二个球或轻或重共24种可能性都找出来。
五、思考题
1)else …if语句、if语句和switch语句的使用 2)一或多分支选择结构语句的用法;
六、实验小结:
第二篇:《C程序设计》实验教案
《C程序设计》实验教案
一、实验的目的与任务:
《C程序设计》是一门实践性很强的课程。通过实验使学生加深对课堂讲授的概念、语法、算法、编程技术的理解;熟悉C程序设计的开发环境;掌握程序设计和调试的基本技能。并通过实践激发学生进一步学习的积极性,培养学生的学习兴趣和创新思维。通过8个实验,使学生经过一定数量的上机训练,了解和掌握C程序设计的环境、程序的数据表示、程序的执行流程控制、程序的整体结构等C程序设计的基本概念和应用技术。
二、实验项目与要求
实验一:C程序的运行环境和运行一个C程序的方法(2学时)
实验性质:验证性实验
一、实验目的
1.了解所用的计算机系统的基本操作方法,学会独立使用该系统。2.了解在该系统上如何编辑、编译、连接和运行一个C程序。3.通过运行简单的C程序,初步了解C源程序的特点。
二、实验内容
1.调用编辑程序,输入教材第一章习题1.1程序,并进行编译和运行。应了解所用的系统是用什么命令进行编译和连接运行的。编译和连接后所得到的目标程序的后缀是什么形式的?
2.输入并运行教材第一章中习题1.4。
3.输入并运行教材第一章中习题1.9,了解如何在运行时向程序变量输入数据。
实验二 数据类型、运算符和表达式(2学时)
实验性质:验证性实验
一、实验目的
1.掌握C语言数据类型,熟悉如何定义一个整型、字符型、实型变量,以及对它们赋值的方法,了解以上类型数据输出时所用格式转换符。
2.学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。
3.进一步熟悉C程序的编辑、编译、连接和运行的过程。
二、实验内容
1.输入并运行教材第三章例3.6.即: #include
printf(“%c %cn”,c1,c2); printf(“%d %dn”,c1,c2); } 在此基础上 ①将第二行改为: int c1,c2;再使之运行,分析结果。②再将第三行、第四行改为: c1=300;c2=400;再使之运行,分析其运行结果。
2.输入并运行教材第三章习题3.6,在上机前先用人工分析程序写出应得结果,上机后将二者对照。
3.输入并运行习题3.10。即: #include
printf(“%d,%d,%d,%d”,i,j, i++,j++);⑤程序改为: main(){int i,j,m=0,n=0;;i=8;j=10;m+=i++;n-=--j;printf(“i=%d,j=%d,m=%d,n=%d”,i,j,m,n);}
实验三 最简单的C程序设计(2学时)
实验性质:验证性实验
一、实验目的
1.掌握C语言中使用最多的一种语句—赋值语句的使用。2.掌握数据的输入输出的方法,能正确使用各种格式转换符。
二、实验内容
1.输入并运行以下程序: #include
void main(){int a,b; float d,e; char c1,c2; double f,g; long m,n;
unsigned int p,q; a=61;b=62; c1=’a’;c2=’b’; d=3.56;e=-6.87;
f=3157.890121;g=0.123456789; m=50000;n=-60000; p=32768;q=40000;
printf(“a=%d,b=%dn c1=%c,c2=%cnd=%6.2f,e=%6.2fn”,a,b,c1,c2,d,e);
printf(“f=%15.6f,g=%15.12fnm=%ld,n=%ldnp=%u,q=%un”,f,g,m,m,p,q); } 在此基础上,做以下改动: ① 将程序第8-13行改为: a=61;b=62; c1=a;c2=b;
f=3157.890121;g=0.123456789; d=f;e=g;
p=a=m=50000;q=b=n=-60000; 运行程序,分析结果。
② 在①的基础上将printf语句改为:
printf(“a=%d,b=%dn c1=%c,c2=%cnd=%15.6f,e=%15.12fn”,a,b,c1,c2,d,e);
printf(“f=%f,g=%fn m=%ld,n=%ldn p=%d,q=%dn”,f,g,m,n,p,q); 运行程序。
2.编写程序,用getchar函数读入两个字符c1、c2,然后分别用putchar函数和printf函数输出这两个字符。
上机运行程序,比较用printf和putchar函数输出字符的特点。
实验四 选择结构程序设计(2学时)
实验性质:设计性实验
一、实验目的
1.了解C语言表示逻辑量的方法(以0代表“假”,以1代表“真”); 2.学会正确使用逻辑运算符和逻辑表达式; 3.熟练掌握if语句和switch语句。
二、实验内容
先编程序,解决以下问题,然后上机调试运行程序。1.有一个函数
xy2x13x11x11x10 x10用scanf函数输入x的值(分别为x<1、1~
10、≥10三种情况),求y值。2.给出一个百分制成绩,要求输出成绩等级‘A’,‘B’,‘C’,‘D’,‘E’。90分以上为‘A’,80~89分为‘B’,70~79分为‘C’,60~69分为‘D’,60分以下为‘E’。
实验五 循环控制(4学时)
实验性质:设计性实验
一、实验目的
1.熟悉用while语句,do-while语句和for语句实现循环的方法。2.掌握在程序设计中用循环的方法实现各种算法(如穷举、迭代、递推等)。
二、实验内容
编程序并上机调试运行。
1.输入两个正整数,求其中最大公约数和最小公倍数。2.用牛顿迭代法求方程2x-4x+3x-6=0在1.5附近的根。
32实验六 数组(4学时)
实验性质:设计性实验
一、实验目的
1.掌握一维数组和二维数组的定义、赋值和输入输出的方法; 2.掌握字符数组和字符串函数的使用。3.掌握与数组有关的算法(特别是排序算法)。
二、实验内容
编程序并上机调试运行。
1.用选择法对10个整数排序。10个整数用scanf函数输入。2.将两个字符串连接起来,不要用strcat函数。
实验七 函数(4学时)
实验性质:设计性实验
一、实验目的
1.掌握定义函数的方法;
2.掌握函数实参与形参的对应关系,以及“值传递”的方式; 3.掌握函数的嵌套调用和递归调用的方法;
4.掌握全局变量和局部变量,动态变量和静态变量的概念和使用方法。
二、实验内容
编程序并上机调试运行。
1.写一个判断素数的函数,在主函数输入一个整数,输出是否是素数的信息。2.求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数。用另一函数根据求出的最大公约数求最小公倍数。
(1)用全局变量的方法。将两个整数的最大公约数、最小公倍数都设为全局变 量。
(2)不用全局变量,两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数2,以求出最小公倍数,返回到主函数输出最大公约数和最小公倍数。
实验八 预处理命令(2学时)
实验性质:设计性实验
一、实验目的
1.掌握宏定义的方法; 2.掌握文件包含处理方法; 3.掌握条件编译的方法。
二、实验内容
编程序并上机调试运行。
1.定义一个带参数的宏,使两个参数的值互换。在主函数中输入两个数作为使用宏的实参,输出已交换后的两个值。
说明:在程序主函数使用宏时只能用两个实参,如SWAP(a,b),不能用三个参数。2.用条件编译方法实现以下功能:
输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下字母(如‘a’变成‘b’,„,‘z’变成‘a’。其它字符不变)。用#define命令来控制是否要译成密码。例如: #define CHANGE 1 则输出密码。若 #define CHANGE 0 则不译成密码,按原码输出。用条件编译方法来处理。
实验九 指针(4学时)
实验性质:设计性实验
一、实验目的 1.掌握指针的概念,会定义和使用指针变量; 2.学会使用数组的指针和指向数组的指针变量; 3.学会使用字符串的指针和指向字符串的指针变量; 4.学会使用指向函数的指针变量;
二、实验内容
编程序并上机调试运行程序(都要求用指针处理)。1.输入三个整数,按由小到大的顺序输出。
2.将一个3*3的矩阵转置,用一函数实现之。在主函数中用scanf函数输入以下矩阵元素:
17 133915511 19将数组名作为函数实参。函数调用后在主函数中输出已转置的矩阵。3.用一个函数实现两个字符串的比较,即自己写一个strcmp函数: strcmp(s1,s2)如果s1=s2,则函数返回值为0;如果s1≠s2,返回它们二者第一个不同字符的ASCII码差值(如“BOY”与“BAD”,第二个字母不同,“O”与“A”之差为79-65=14);如果s1>s2,则输出正值;如s1 两个字符串s1,s2由main函数输入,strcmp函数的返回值也在main函数输出。 实验十 结构体和共用体(4学时) 实验性质:设计性实验 一、实验目的 1.掌握结构体类型变量的定义和使用; 2.掌握结构体类型数组的概念和应用; 3.掌握共用体的概念与使用。 二、实验内容 编程序,然后上机调试运行。 1.有5个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入5 8 个学生数据,要求打印出三门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、三门课的成绩、平均分数)。 要求用一个input函数输入5个学生数据;用一个average函数求总平均分;用max函数找出最高分学生数据;总平均分和最高分的学生的数据都在主函数中输出。 2.输入和运行以下程序: #include union data {int i[2]; float a; long b; char c[4]; }; void main(){union data u; scanf(“%d,%d”,&u.i[0],&u.i[1]); printf(“i[0]=%d,i[1]=%dna=%fnb=%ldnc[0]=%c,c[1]=%c,c[2]=%c,c[3]=%cn”,u.i[0],u.i[1],u.a,u.b,u.c[0],u.c[1],u.c[2],u.c[3]);} 输入两个整数10000、20000给u.i[0]和u.i[1]。分析运行结果。 然后将scanf语句改为: scanf(“%ld”,&u.b); 输入60000给b。分析运行结果。 实验十一 文件(2学时) 实验性质:设计性实验 一、实验目的 1.掌握文件以及缓冲文件系统、文件指针的概念; 2.学会使用文件打开、关闭、读、写等文件操作函数。3.学会用缓冲文件系统对文件进行简单的操作。 二、实验内容 1.从键盘输入一个字符,将其中的小写字母全部转换成大写字母,然后输出到一个磁盘文件“test”中保存。输入的字符以“!”结束。 实验十二 学生成绩管理(4学时) 实验性质:综合性设计性实验 一、实验目的 1.综合运用C程序设计知识,解决实际问题。 二、实验内容 1.有5个学生,每个学生有3门课的成绩,从键盘输入以上数据(包括学生号、姓名、三门课成绩),计算出平均成绩,将原有数据和计算出的平均分数存放在磁盘文件“stud”中。 2.将上题“stud”文件中的学生数据,按平均分进行排序处理,将已排序的学生数据存入一个新文件“stu-sort”中。 3.将上题已排序的学生成绩文件进行插入处理。插入一个学生的三门课成绩。程序先计算新插入学生的平均成绩,然后将它按成绩高低顺序插入,插入后建立一个新文件。 学生的原有数据为: 91101 Wang 89,98,67.5 91103 Li 60,80,90 91106 Fun 75.5,91.5,99 91110 Ling 100,50,62.5 91113 Yuan 58,68,71 要插入的学生数据为: 91108 Xin 90,95,60 10 C语言程序设计实验教案 目 录 实验一visual c++编译环境的使用..............................................................................2 实验二 顺序程序设计...............................................................................................6 实验三 选择结构程序设计........................................................................................9 实验四 循环结构程序设计......................................................................................13 实验五 函数...........................................................................................................17 实验六 指针...........................................................................................................22 实验七 数组...........................................................................................................25 实验八 结构体........................................................................................................32 实验一visual c++编译环境的使用 实验目的: 1.掌握c程序设计编程环境visual c++,掌握运行一个c程序设计的基本步骤,包括编辑、编译、连接和运行。 2.掌握c语言程序设计的基本框架,能够编写简单的c程序。3.了解程序调试的思想,能找出并改正c程序中的语法错误。实验内容: 1.在“我的电脑”上新建一个文件夹,用于存放c程序,文件夹名字可以是学号姓名。2.调试示例,在屏幕上显示一个短句“Hello World!”。 源程序 #include Hello World!基本步骤:(要求熟练掌握)1)启动VC++ “开始”->“程序”->“Microsoft Visual Studio 6.0”->“Microsoft Visual C++6.0”进入VC++编程环境。2)新建文件(*.cpp) “文件”->“新建”,单击“文件”选项卡,选择“C++Source Files”,修改文件保存“目录”和“文件”(文件名),单击“确定”。 3)编辑和保存(注意:源程序一定要在英文状态下输入,即字符标点都要在半角状态下,同时注意大小写,一般都用小写) 在编辑窗口输入源程序,然后执行“文件”->“保存”或“文件”->“另存为” 4)编译(*.obj) 用来检查语法错误 “编译”->“编译”或Ctrl+F7,在产生的工作区队话框中,选择“是”。5)连接(*.exe)“编译”->“构件”或F7 6)运行 “编译”->“执行”或Ctrl+F5 7)关闭程序工作区 “文件”->“关闭工作区” 8)打开文件 “文件”->“打开” 9)查看C源文件、目标文件和可执行文件的存放位置。 源文件在保存目录下,目标文件和可执行文件在“保存目录Debug”中 3.编程,在屏幕上显示一个短句“this is my first c program.”。4.调试示例,在屏幕上显示一个短句“welcome to you!”。源程序(有错误的程序)#include 1)按照实验2中介绍的步骤1)~3)输入上述源程序并保存。 2)编译,“编译”->“编译”(Ctrl+F7),信息窗口中显示编译出错信息,如下图所示。3)找出错误,在信息窗口中依次双击出错信息,编辑窗口就会出现一个箭头指向程序出错的位置,一般在箭头的当前行或上一行,可以找到出错语句。 第4行,出错信息:Welcome是一个未定义的变量,但Welcome并不是变量,出错的原因是Welcome前少了一个双引号。 4)改正错误,重新编译,得下如下图所示出错信息。 出错信息:“}”前少了分号。 5)再次改正错误,在“}”前即printf()后加上“;”(英文状态),生新编译,显示正确 6)连接,“编译”->“构件”(F7),出现如下出错信息。 出错信息:缺少主函数。 7)改正错误,即把“mian”改为“main”后,重新连接,信息窗口显示连接正确。8)运行,“编译”->“执行”(Ctrl+F5),观察结果是否与要求一致。5.改错,改正下列程序中的错误,在屏幕上显示以下3行信息。 **************** Welcome **************** 源程序(有错误的程序)#include } 实验报告要求 将以上各题的源程序、运行结果,以及实验中遇到的问题和解决问题的方法,以及实验过程中的心得体会,写在实验报告上。 Printf(“ Welcome”)Printf(“****************n”); 实验二 顺序程序设计 【实验目的】 1.学会顺序程序设计的思想 2.进一步熟悉Turbo C集成编译环境的使用,达到熟练使用的目的 3.熟练掌握各种数据类型的输入输出格式,并学会使用输入输出函数 4.学会使用表达式 【实验内容】 1.在屏幕中输出一行文字“Hello,Welcome!” 说明: (1)只需要在屏幕中显示一行文字即可 参考程序如下: #include printf(“Hello,Welcome!n”);} 2. 输入一个华氏温度,要求输出摄氏温度。公式为 输出要求有文字说明,取两位小数 说明: (1)摄氏温度F和华氏温度c都应用float类型变量存储(2)注意表达式书写中的各变量的顺序问题(3)输出时只需输出两位小数 参考程序如下: #include float F,c; printf(“input F:”); scanf(“%f”,&F); c=5*(F-32)/9; printf(“c=%.2fn”,c);} 3.输入三角形三边长a、b、c,求三角形周长和l面积s。用scanf输入数据,输出计算结果,输出时要求有文字说明,取消书店后两位小数。说明: (1)程序设计中使用的所有变量均为float类型 c59F32(2)三角形周长公式:labc abc2(3)三角形面积公式;sp(pa)(pb)(pc),其中 p (4)注意应保证输入数据能够构成三角形 (5)需要使用开根号函数sqrt,在程序顶部加上#include #include float a,b,c,l,s; float p; printf(“input a,b,c:”); scanf(“%f,%f,%f”,&a,&b,&c); l=a+b+c; p=(a+b+c)/2; s=sqrt(p*(p-a)*(p-b)*(p-c)); printf(“l=%.2fn”,l);printf(“s=%.2fn”,s);} 4.设圆半径r1.5,圆柱高h3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。用scanf输入数据,输出计算结果,输出时要求有文字说明,取消书店后两位小数。说明: (1)程序设计中使用的所有变量均为float类型(2)圆周长公式:l2r(3)圆面积公式:S1r(4)圆球表面积公式:S24r V14322(5)圆球体积公式: r3 (6)圆柱体积公式:V2rh 参考程序如下: #include 2main(){ float r=1.5,h=3; float l,s1,s2,v1,v2; l=2*PI*r; s1=PI*r*r; s2=4*PI*r*r; v1=4*PI*r*r*r/3; v2=PI*r*r*h; printf(“l=%.2fn”,l);printf(“s1=%.2fn”,s1);printf(“s2=%.2fn”,s2);printf(“v1=%.2fn”,v1);printf(“v2=%.2fn”,v2);} 实验三 选择结构程序设计 【实验目的】 1.了解C语言的逻辑运算 2.学会使用if语句和switch语句 3.熟练掌握选择结构程序设计方法 【实验内容】 1.有一函数 y x x1 1x10 2x 13x11 x10 写一程序,输入x,输出y值 说明: (1)根据输入x的不同求y的值,使用if语句 (2)分别输入三个分段中的三个数,判断输出结果是否正确,测试程序正确与否 参考程序如下: #include float x,y; printf(“input x:”); scanf(“%f”,&x); if(x<1) y=x; if(x>=1 && x<10) y=2*x-1; if(x>=10) y=3*x-11;printf(“y=%fn”,y);} 2.从键盘输入一个字符,可以是数字、字母、或是标点符号,对输入的字符进行判断,如果是数字则输出“* is a number!”,如果是字母则输出“* is a letter!”,如果是其他的字符怎输出“* is the other!”(*为输入的字符)说明: (1)从键盘输入一个字符,用char类型变量存储(2)使用if语句作判断(3)判断条件根据输入字符的ASCII码值的范围,具体的ASCII码值参看书后的ASCII码表 参考程序如下: #include char c; printf(“input a char:”); scanf(“%c”,&c); if(c>=48 && c<=57) printf(“%c is a number!n”,c); else if((c>=65 && c<=90)||(c>=97 && c<=122)) printf(“%c is a letter!n”,c); else printf(“%c is the other!n”,c);} 3.输入两个实数a、b,保证变量a中存储的是较大的数,变量b中存储的实较小的数,并按照由大到小的顺序输出。说明: (1)需要对输入的两个数进行比较,判断是否需要交换两个数(2)按照从大到小的顺序输出两个数 参考程序如下: #include float a,b; float temp; printf(“input a,b:”); scanf(“%f,%f”,&a,&b); if(a { temp=a; } printf(“%f,%fn”,a,b);} 4.输入一年份,判断该年是否是闰年。说明: (1)判断闰年的条件:能够被4整除,但不能被100整除或者能被100整除,又能被400整除 (2)使用一个变量来代表是否是闰年 a=b;b=temp;10(3)如果是闰年则输出“* is a leap year!”,否则输出“* is not a leap year!”。*代表输入的年份 参考程序如下: #include int year; int flag=0; printf(“input a year:”); scanf(“%d”,&year); if((year%4==0 && year%100!=0)||(year%100==0 && year%400==0)) flag=1; if(flag==1) printf(“%d is a leap year!n”,year); else printf(“%d is not a leap year!n”,year);} 5.从键盘输入一个月号,显示输出该月号的英文名称 说明: (1)使用if语句较为麻烦,因为需要做12次比较(2)使用switch语句 (3)如果输入月份超出范围,则应当输出错误信息 参考程序如下: #include int month; printf(“input a month:”); scanf(“%d”,&month); switch(month) { case 1: case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: printf(“January!n”);printf(“February!n”);break;break;printf(“March!n”);break;printf(“April!n”);break;printf(“May!n”);break;printf(“June!n”);break;printf(“July!n”);break;printf(“August!n”);break;printf(“September!n”);break;case 10: printf(“October!n”);break;case 11: printf(“November!n”);break;case 12: printf(“December!n”);break; } } default: printf(“input error!n”);12 实验四 循环结构程序设计 【实验目的】 1.学会使用while、do-while、for语句 2.熟练掌握循环结构程序设计方法 3.掌握选择结构与循环结构的嵌套 【实验内容】 201.求和说明: n!n1(即求1!+2!+„„+20!) (1)首先要求出每一项的n!的值 (2)然后把各项相加得到所求的值 (3)存储求和运算结果的变量的初始值应为0(4)存储求积运算结果的变量的初始值应为1 参考程序如下: ①使用while循环 #include float sum=0; float mid=1; int n=1; while(n!=21) { mid=mid*n; } printf(“sum=%fn”,sum);} ②使用for循环 #include float sum=0; float mid=1; int n; for(n=1;n<=20;n++) { mid=mid*n;n++;sum=sum+mid; sum=sum+mid;} printf(“sum=%fn”,sum);} 2.求出100到200以内最大的素数和最小的素数,并求出两者的差值 说明: (1)素数的概念:只能被1和自身整除的正整数 (2)分别求出这个两个素数,并输出,输出格式为: big one:* small one:* 最小的素数正序找出 最大的素数倒序找出 (3)求出两者的差,并输出,输出格式为: result:* 参考程序如下: #include int big,small; int result; } for(i=200;i>=100;i--){ int i,j;int flag;for(i=100;i<200;i++){ flag=0;for(j=2;j } if(i%j==0){ } flag=1;break;if(flag==0){ } small=i;break;flag=0;for(j=2;j { } if(flag==0){ } big=i;break;if(i%j==0){ flag=1;break;} } result=big-small;printf(“big:%dn”,big);printf(“small:%dn”,small);printf(“reslut:%dn”,result);} 3.输入两个正整数m和n,求其最大公约数和最小公倍数 说明: (1)最大公约数:能够被m和n同时整除的最大正整数(2)最小公倍数:m和n相乘的积除以最大公约数 (3)使用for循环,将m和n同时除以1到m(m为m和n两者中较小者),直到找出最大的正整数即为最大公约数(4)输出格式如下: The greatest common divisor is *! The least common multiple is *!参考程序如下: #include printf(“input m,n:”); scanf(“%d,%d”,&m,&n);if(m>n){ temp=m;m=n; n=temp;} for(i=1;i<=m;i++){ if(n%i==0 && m%i==0) great=i;} least=m*n/great;printf(“The greatest common divisor is %dn”,great);printf(“The least common multiple is %dn”,least);} 4.打印出所有的“水仙花数”,所谓“水仙花数”是指一个3位数,其各位数字立方和等于该数本书。例如,153是一水仙花数,因为153153 说明:(1)“水仙花数”是三位数,所以范围是从100到999(2)使用for循环 (3)循环中需要把数字的每一位都分离出来,然后求和,同原数字比较,进行判断 参考程序如下: #include int i;int temp;for(i=100;i<1000;i++){ a=i/100;b=(i-a*100)/10;c=i%10;temp=a*a*a+b*b*b+c*c*c;if(i==temp)printf(“%dn”,i); 33} } 实验五 函数 【实验目的】 1.掌握C语言函数的定义、声明以及函数的调用方法 2.了解主调函数和被调函数之间的参数传递方式 3.熟练掌握数组作为函数参数的用法 【实验内容】 1.写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。说明: (1)判断素数的函数名为Prime(2)传递参数为int类型的变量(3)输出格式为: * is a prime!或者* is not a prime!参考程序如下: #include if(num%i==0) { } flag=1;break;} if(flag==0)printf(“%d is a prime!n”,num);else printf(“%d is not a prime!n”,num);} main(){ int num;printf(“input a num:”);scanf(“%d”,&num);Prime(num);} 2.写一个函数,用“冒泡法”对输入的10个数字由小到大顺序排列,并输出。说明: (1)排序的函数名为Sort(2)排序前后的输入输出都应在主函数中完成(3)使用数组作为函数参数(4)使用“冒泡法”排序 参考程序如下: #include } } main(){ int num[10];int i;printf(“input 10 numbers:”);for(i=0;i<10;i++) scanf(“%d”,&num[i]);Sort(num);printf(“the sorted numbers:”);for(i=0;i<10;i++) printf(“%d ”,num[i]);} 3.写一函数,使给定的一个二维数组(5×5)转置,即行列互换。说明: (1)使用5×5的二维数组存放数据 (2)矩阵转置的函数名为Turn(2)转置前后的输入输出都应在主函数中完成(3)使用数组作为函数参数 for(j=0;j<9-i;j++){ } if(num[j]>num[j+1]){ temp=num[j]; } num[j]=num[j+1];num[j+1]=temp;18 参考程序如下: #include } } main(){ int num[5][5]={{1,2,3,4,5},{6,7,8,9,0},{11,12,13,14,15},{16,17,18,19,20},{21,22,23,24,25}}; int i,j;printf(“Before array be turned:n”);for(i=0;i<5;i++){ for(j=0;j<5;j++)printf(“%2d ”,num[i][j]);for(j=i;j<5;j++){ } temp=num[i][j];num[i][j]=num[j][i];num[j][i]=temp; printf(“n”);} Turn(num);printf(“After array be turned:n”);for(i=0;i<5;i++){ } } 4.写一函数,使输入的字符串反序存放,在主函数中输入和输出字符串。说明: (1)字符串反序的函数名为Reverse(2)反序前后的输入输出都应在主函数中完成(3)使用数组作为函数参数 for(j=0;j<5;j++)printf(“%2d ”,num[i][j]);printf(“n”);19(4)需要使用strlen函数得到字符串长度,需要在源文件头部加入#include #include } } main(){ char str[50];printf(“input a string:”);scanf(“%s”,str);Reverse(str);printf(“After reversed is %sn”,str);} 5.写一函数,将两个字符串连接。 说明: (1)连接两个字符串的函数名为:Connect(2)将连个字符串存入两个字符串数组中,要保证第一个字符串的长度能够容纳两个字符串之和 (3)连接两个字符串主要是找到第一个字符串的结尾,然后将第二个字符串连接到第二个字符串的后边 (4)输出格式为: The connected string is *!(5)使用数组作为函数参数 (6)连接前后的字符串输出都要在主函数中完成,自定义函数只完成连接功能 参考程序如下: #include str1[i]=str2[j];str1[i]=' ';} main(){ char str1[50],str2[20];int i,j;printf(“input string1:”);scanf(“%s”,str1);getchar();printf(“input string2:”);scanf(“%s”,str2);Connect(str1,str2);printf(“The connected string is %sn”,str1);} 6.写一函数,求字符串的长度,并编写主函数。说明: (1)求字符串长度的函数名为:Count(2)字符串结束的标志是’ ’(3)输出格式为: The length of string is *!(4)使用数组作为函数参数 参考程序如下: #include 实验六 指针 【实验目的】 1.掌握C语言指针变量的定义、声明和赋值 2.学会使用指针变量的程序设计 3.掌握指针作为函数参数的用法 【实验内容】 1.使用指针作为函数参数,写一交换两个数的函数 说明: (1)交换两个数的函数名为:Swap(2)使用指针变量作为函数参数 (3)在主函数中输入输出,自定义函数只完成交换功能 参考程序如下: #include 2.使用指针作为函数参数,写一求数组中最大值和最小值的函数。说明: (1)函数名为:MaxAndMin(2)使用指针指向一维数组 (3)最大值和最小值的输出必须要在主函数中 参考程序如下: #include *max=array[0];*min=array[0];for(i=0;i<10;i++){ if(*max } } main(){ int array[10]={0,1,2,3,4,5,6,7,8,9};int max,min;int *p1,*p2;p1=&max;p2=&min;MaxAndMin(array,p1,p2);printf(“max=%dnmin=%dn”,max,min);} 3.找出以下程序的错误,并加以修改。①交换两个数 #include temp=p1; p1=p2; p2=temp;} main(){ int a,b;int *pointer_1,*pointer_2; scanf(“%d,%d”,&a,&b); pointer_1=&a;pointer_2=&b;Swap(pointer_1,pointer_2); } ②输出数组重点全部元素 #include *p++=i; for(i=0;i<10;i++) printf(“a[%d]=%dn”,i,*p++);} 4.写一函数,求出矩阵中的最大值和最小值,要求使用指针作为函数参数。说明: (1)使用二维数组存放矩阵元素(2)只用指针变量指向数组(3)函数名为:ArrayMaxAndMin 参考程序如下: #include *min=*(array+i*n+j);for(i=0;i } if(*max<*(array+i*n+j))*max=*(array+i*n+j);if(*min>*(array+i*n+j))*min=*(array+i*n+j); } } main(){ int array[3][3]={1,2,3,4,5,6,7,8,9};int max,min;int *p,*p1,*p2;p=array;p1=&max;p2=&min;ArrayMaxAndMin(p,p1,p2,3);printf(“max=%dnmin=%dn”,max,min);} 实验七 数组 【实验目的】 1.掌握一维数组和二维数组的定义、赋值和初始化的方法 2.掌握字符数组的使用 3.熟练掌握与数组相关的各种算法 【实验内容】 1.从键盘输入10个整数,对这个十个数进行排序,并输出 说明: (1)将这10个整数存入一个含有10个元素的一维数组中 (2)冒泡法:从第一个数开始依次让相邻的两个数进行比较,如次序对则不做任何操作;如次序不对则使这两个数交换位置。第一遍比较后,最大的数已放在最后,第二遍只需考虑剩下的数,以此类推直到最后两个数比较后就可以完成排序。(3)比较完成后将数组中元素依次输出 参考程序如下: #include scanf(“%d”,&num[i]);for(i=0;i<=8;i++){ for(j=0;j<9-i;j++){ if(num[j]>num[j+1]){ temp=num[j];num[j]=num[j+1];num[j+1]=temp; } } } printf(“the sorted numbers:”);printf(“%d ”,num[i]);for(i=0;i<10;i++) } 2.从键盘输入一串字符串,统计字符串中特定字符的个数(特定字符也需要从键盘输入),并输出个数 说明: (1)输入时需要用到的输入格式控制字是%s(2)字符串存入一个足够大的字符数组中,保证输入的字符个数不要超过最大个数(3)使用循环控制语句,需要了解字符数组的结束标志是’ ’,作为循环的结束标志(4)输出格式如下: The number of * is *!参考程序如下: #include { if(str[i]==ch)count++;i++;} printf(“The number of %c is %d!n”,ch,count);} 注意: 程序中多了一行getchar(),这并不是多余的,而是因为在输入完字符串后,键入的回车被放入到内存的输入缓冲区中,在输入特殊字符的时候ch得到了上一个回车,而无法得到我们要输入的字符,因此需要使用一行getchar()将缓冲区中的回车读出,相当于清除缓冲区的作用。 3.青年歌手参加歌曲大奖赛,有10个评委进行打分,试编程求这位选手的平均得分(去掉一个最高分和一个最低分)。 说明: (1)将10位评委的打分放入一个含有10个元素的一维数组中(2)程序设计重点是排序 (3)排序后只要用中间的8个元素即可(4)输出格式为: The average is *!参考程序如下: #include scanf(“%f”,&score[i]);for(i=0;i<=8;i++){ for(j=0;j<9-i;j++){ if(score[j]>score[j+1]){ } temp=score[j];score[j]=score[j+1];score[j+1]=temp;} } for(i=1;i<=8;i++){ sum=sum+score[i]; } average=sum/8;printf(“The average is %f!n”,average);} 4.将两个字符串连接起来,不要使用strcat函数。 说明: (1)将连个字符串存入两个字符串数组中,要保证第一个字符串的长度能够容纳两个字符串之和 (2)连接两个字符串主要是找到第一个字符串的结尾,然后将第二个字符串连接到第二个字符串的后边 (3)输出格式为: The connected string is *!参考程序如下: #include printf(“input string1:”);scanf(“%s”,str1);getchar();printf(“input string2:”);scanf(“%s”,str2);for(i=0;str1[i]!=' ';i++);for(j=0;str2[j]!=' ';j++,i++) str1[i]=str2[j];str1[i]=' ';printf(“The connected string is %sn”,str1);} 5.已有一个已排好序的数组,从键盘输入一个数,要求按原来排序的规律将它插入数组中。说明: (1)需要保证数组的元素据个数比插入前多1(2)需要找到在数组中插入的位置 (3)可倒序查找:假设从小到大排序,从最后一个开始查找,如果要插入元素比当前数组元素小则将该数组元素赋予后边一个元素,继续比较;否则将要插入元素赋予该数组元素的下一个元素,然后break结束循环(4)输入该数组即可 参考程序如下: #include if(a[i]>b)a[i+1]=a[i];else { } a[i+1]=b;break;} printf(“The new sorted array is ”);for(i=0;i<10;i++) } printf(“%d ”,a[i]);6.将一个数组中的值按逆序重新存放。例如:原来顺序为8,6,5,4,1,要求改为1,4,5,6,8。说明: (1)只要将原来数组中的值以中间值为中心交换 n1(2)交换次数为2次 (3)注意此时的n是数组最后一个元素的下标 参考程序如下: #include temp=num1[i]; num1[i]=num1[9-i];num1[9-i]=temp;} for(i=0;i<(8+1)/2;i++){ temp=num2[i];num2[i]=num2[8-i];num2[8-i]=temp; } printf(“The converted array1 is ”);for(i=0;i<10;i++) printf(“%d ”,num1[i]);printf(“nThe converted array2 is ”);for(i=0;i<9;i++) printf(“%d ”,num2[i]);} 7.求一个3×3矩阵的对角线元素之和 说明: (1)使用3×3的二维数组存储数据 (2)使用for循环嵌套,判断数组中元素是否是对角线元素,如果是则相加(3)对角线元素的特点是行号和列号相同 参考程序如下: #include int array[3][3]={1,2,3,4,5,6,7,8,9};int sum=0;int i,j;for(i=0;i<3;i++)for(j=0;j<3;j++){ } if(i==j)sum=sum+array[i][j];{ } printf(“summary is %dn”,sum);} 8.设计一个较为复杂的一维数组操作程序,实现对一维数组的基本操作 说明: (1)通过输入函数实现对一维数组的输入,可以将数组定义为100个整型元素,输入其中的10个元素 (2)在屏幕上将数组中的10个元素输出 (3)往数组中插入一个元素,并将插入后的11个元素输出(4)从数组中删除一个元素,并将删除后的10个元素输出 (5)从数组中查找一个元素,并将查找后的元素下标输出,如果元素不存在,给出提示 参考程序如下: #include int a[100],i,j;int ins,del,find,pos;printf(“input the data: ”);for(i=0;i<10;i++)scanf(“%d”,&a[i]);printf(“The array is ”);for(i=0;i<10;i++)printf(“%d ”,a[i]);printf(“ninsert a data: ”);scanf(“%d”,&ins);for(i=0;i<10;i++){ if(ins for(j=9;j>=i;j--)a[j+1]=a[j];a[i]=ins;break; } } if(i==10) a[i]=ins;printf(“nAfter insert: ”);for(i=0;i<11;i++)printf(“%d ”,a[i]);printf(“ndelete a data: ”);scanf(“%d”,&del);for(i=0;i<11;i++){ if(del==a[i]) { for(j=i;j<10;j++) a[j]=a[j+1];break; } } if(i==11) printf(“nnot foundn”);else { printf(“nAfter delte: ”); for(i=0;i<10;i++)printf(“%d ”,a[i]);} printf(“nfind a data: ”);scanf(“%d”,&find);for(i=0;i<10;i++){ if(find==a[i]) { pos=i; break; } } if(i==10) printf(“nnot foundn”);else printf(“npos=%dn”,pos+1);} 实验八 结构体 【实验目的】 1.掌握C语言结构体变量的定义和使用 2.学会设计简单的结构体程序 【实验内容】 1.有一学生信息包含学号、姓名、性别、年龄、电话等信息,要求设以一个结构体用于存储该学生信息,实现学生信息的输入和显示。说明: (1)使用结构体实现学生信息的存储(2)按照序号顺序排列学生信息(3)实现按照序号查找学生信息 参考程序如下: #include if(i==0)printf(“The first onen”);if(i==1)printf(“The second onen”);if(i==2)printf(“The third onen”);printf(“ input number:”);scanf(“%s”,stu[i].num);printf(“ input name:”);scanf(“%s”,stu[i].name);printf(“ input sex:”);scanf(“%s”,stu[i].sex);printf(“ input age:”);scanf(“%d”,&stu[i].age); } printf(“Which one do you want to see?(1,2,3)”);scanf(“%d”,&choice);choice--;printf(“ The number is %sn”,stu[choice].num);printf(“ The name is %sn”,stu[choice].name);printf(“ The sex is %sn”,stu[choice].sex);printf(“ The age is %dn”,stu[choice].age);} 一、实验目的学会使用单片机定时器产生定时中断,并利用定时中断产生更长时间延时。 二、实验设备及器件 IBM PC机 一台 DP-51PRO.NET单片机仿真器、编程器、实验仪三合一综合开发平台 三、实验内容 1.实验二 定时器程序设计 2.编写程序,使P10端口来控制LED闪烁 3.C语言程序 //1ms定时中断实现100ms发光管闪烁 #include“REG51.h” sbit LED=P1^0;void main(void){ TMOD = 0x01;//设置定时器模式 16位定时器 TL0 = 0x18;//设置定时初值 TH0 = 0xFC;//设置定时初值 TR0 = 1;//定时器T0开始计时 ET0=1;//开定时器中断 EA=1; //开总中断 while(1);} //******************** //1ms void pit0(void)interrupt 1(中断程序){ static unsigned char ms_cnt=0;//16 ffff TL0 = 0x18;//设置定时初值 TH0 = 0xFC;//设置定时初值 if(++ms_cnt==100){ ms_cnt=0; LED=!LED;} } 定时器的由程序 直接汇编语言 ORG 0 AJMP MAIN ORG 0BH AJMP PIT0 MAIN: MOV TMOD,#01H MOV TH0,#18H MOV TL0,#0FCH SETB TR0 SETB ET0 SETB EA SJMP $ 生成;********************************** PIT0: MOV TH0,#18H MOV TL0,#0FCH INC R7 CJNE R7,#100,PIT0_R MOV R7,#0 CPL P1.0 PIT0_R: RETI END 四 实验要求 学会使用并掌握单片机定时器中断来实现LED100ms闪烁。 五 实验步骤 1.调试运行本节实验程序。若程序无错误,编译并进行二进制转换,下载程序。 2.连接线路,将A2区的P10端口连接到D1区的任意LED接口。3.观察LED灯闪烁情况 《UML程序设计》 实验指导教程 适合专业:计算机类专业 浙江树人大学信息科技学院 2016.02 课程与实验综述 第一部分实验综述 一.课程简介及实践要求: 《UML程序设计》是以介绍面向对象的统一建模语言UML为主,使学生了解面向对象技术的基本概念,掌握UML的分析和设计方法,同时掌握在Enterprise Architect环境下用UML进行分析和设计的技术。本课程在教学内容方面着重基本理论、基本知识和基本方法,在培养实践能力方面着重设计构思和设计技能的基本训练,熟练的上机操作能力和分析能力。 实验实践训练是UML程序设计教学的重要技能环节。通过实验,使学生加深理解、验证、巩固课堂教学内容,特别是通过设计和综合实验,发挥学生的想象力和创新能力。二.课程实验目的要求: 通过UML的实验,学生应该: 1.学会用UML进行面向对象的思想去分析和设计相关系统;2.学会用Rose建模工具进行软件建模。三.课程实验参考资料 1.(美)Joseph Schmuller著.UML基础、案例与应用.人民邮电出版社,2004 2.(美)Hans-Erik Eriksson.UML 2工具箱.电子工业出版社,2004 3.吴际,金茂忠.UML面向对象分析.北京航空航天大学出版社,2002 4.赵从军.UML设计及应用.机械工业出版社,2004 5.Grady Booch,James Rumbaugh,Ivar Jacobson.UML用户指南.机械工业出版社,2001 6.吴建,郑潮,汪杰.UML基础与Rose建模案例.人民邮电出版社,2004 第二部分 实验实践指导 实验一 构建用例图 一、实验目的 1.学会分析系统中的参与者和用例 2.掌握用例图的绘制方法 二、实验器材 1.计算机一台; 2.Enterprise Architect 工具软件; 三、实验内容 1、分析ATM系统需求,按要求画出用例图; 2、建立一个学生管理信息系统的需求 3、建立设计一个学生管理信息系统的完整的用例图 四、实验步骤 (一)ATM系统的用例图 1.分析 ATM自动取款机:客户可以取钱,存钱,查询余额,转帐,修改密码。通过分析可找出如下几个参与者:(1)ATM(2)客户 通过分析得到如下用例: (1)存款 (2)取款(3)查询余额 (4)转帐(5)修改密码 (6)打印收据 2.绘图步骤: 下面介绍在Enterprise Architect中创建用例图的过程: Enterprise Architect主界面如下图所示: 1、建立项目: 如下图在文件菜单选择新建项目: 如下图 选择文件夹,输入项目名: 如图,选择所需要的选项: 2、建立用例图 在合适的文件平夹下,右键 在UML Behavioral 下选择Use Case,图名处输入用例名如ATM 如下图,比双击ATM 在编辑界面下右键,如下图 3、添加用例 选择Use Case 依次添加存款、取款、查询余额、转帐、修改密码、打印收据,如图1.4所示。 4、添加Actor 在编辑界面下右键,选择Actor,5、添加边界(ATM取款系统) 如下图 6、添加参与者和用例间的关联关系,右键客户,如上图,选择小箭头,添加关联,同理添加ATM的关联 添加Common中的Note,内容为***制,如上图 7、保存图 完成用例图后,保存该图。 8、选择所有的内容,拷贝,粘贴到实验报告中,如下图 uc ATMATM取款系统存款金智勇制取款查询余额客户ATM修改密码打印收据转帐 (二)建立设计一个学生管理信息系统的需求分析与完整的用例图 (1)学生管理信息系统简介 学生管理信息系统主要为学校的学生处设计:方便学校学生处与学院学生口管理员方便管理学生,学生成绩由教务系统提供,教务系统提供相关的WEB service供学生管理信息系统调用。 通过分析可找出如下几个参与者: 学生处管理员、学校领导(学校各种报表统计信息)、学院管理员、班主任(提供学生操行、查询等)、学院领导(学院各种报表统计信息)、学生、后勤管理人员(卫生管理、保卫处异常情况处理)、财务人员、考勤管理员(由副班长提供考勤信息)等 通过分析得到如下一些大的用例: 学生基本信息管理、考勤管理、成绩导入、学校各种报表信息(要求细化)、学院各种报表信息(要求细化)、个人成才规划、新学期注册,操行评定、学生任职信息系统、学生奖惩管理系统(要求细化,包括评优评奖等)、学生变动信息管理(培训内容、助学贷款情况、学校还款情况、勤工助学情况,党员管理),后勤卫生管理、保卫处的学生的异常情况处理、其它的具体由学生自己定。 2.建立设计一个学生管理信息系统的需求分析 分析学生管理信息系统,建立系统需求分析,并要求画出系统功能框图,如学生管理信息系统的功能模块图如下 系统模块图如后勤卫生查询功能子系统模块图如下。 要求分析其它的子系统模块 3.建立一个学生管理信息系统的完整的用例图 完整的要求,就为每一类用户分配一个用例模型,如一般学生查询功能用例 要求分析其它参与者的用例模型 (4)建立用例的文字描述(要求学生写出两个) 1.“基本信息查询”用例 用例编号:04010101(共有4层用例图结构,每层用2位数字表示,采用8位编号。)用例名: 基本信息查询 执行者: 学生自己、学生的班主任、辅导员及其它的特权用户。目的: 查询学生的基本信息,包括姓名、学号、家庭地址等信息。类 型: 端点、基本的 级 别: 二级 过程描述: (三)上传ATM系统的用例图与学生管理信息系统的完整的用例图 五、实验报告要求 1. 整理实验结果。 2. 小结实验心得体会。 实验二 构建类图 一、实验目的 1.理解类的基本概念 2.理解类间的关系 3.掌握类图的绘制方法 二、实验器材 1.计算机一台; 2.Enterprise Architect 工具软件; 三、实验内容 (1)分析学生管理系统中的选课子系统中类及关系,然后画出它们的类图。(2)分析学生管理系统的其它子系统,并画出详细的系统类图 四、实验步骤 (一).选课子系统 1、选课子系统分析 分析学生管理系统中的选课子系统,通过分析可抽象出如下几个类: (1)学生类(student)(2)选课类(SelectCource)(3)课程类(Cource) 学生类、选课类和课程类属性和方法 课程类的属性和方法: 属性包括 (1)课程名称(CourceName)(2)开课教室(Room)(3)课程号(CourceID)(4)授课教师(Teacher)(5)学年(academic year)(6)学期(Term)(7)允许选课的学生人数(SelectNoUp)方法包括 (1)设置课程号(SetCourceID)(2)设置课程名称(SetCourceName)(3)查询课程号(SeekCourceID)(4)查询允许选课的学生人数(SeekSelectNoUp) 选课类的属性和方法: 属性包括 (1)ID号(ID)(2)课程号(CourceID)(3)学号(SNo)(4)成绩(score)方法包括 1)选课(SelectCoure)2)退选(CancelSelected)3)查询选课情况(SeekSelected) 2.绘图步骤: 下面介绍在Enterprise Architect中创建类和它们之间关系的过程: (1)在上图的合适文件夹下选择添加类图,类图名为选课系统类,如下图。 (2)在选课系统类图中,从工具栏中新建元素,选择Class并取名Student表明新增一个类,,同理添加选课类(SelectCource),课程类(Cource),如下图 (2)右键Studen,选择功能与属性---属性,如下图 (7)同样的方法添加Course类与SelectCource类,(8)创建两个类之间的关系,通过分析得出:Course类与SelectCource类之间为单向关联。选择图标栏的“关联”,由Course类指向electCource类。如图所示。 (10)分别在Course类与SelectCource类选项卡中键入名称和多重性,图2.10(11)重复(2)-(10)中的步骤完成选课系统整个类图的创建。(12)如图2.11转换生成代码,查看所生成的三个的代码。 选择对应的类的文件名,生成代码 查看代码 (二)分析学生管理系统的其它子系统,并画出详细的系统类图 一般情况一个子系统至少有一个类,要求建立系统的详细类图,并建立类间的关联 五、实验报告要求 1. 整理实验结果。 2. 小结实验心得体会。 实验三 构建活动图 一、实验目的 1. 熟悉活动图的基本功能和使用方法。 2. 掌握如何使用建模工具绘制活动图方法。 二、实验器材 1.计算机一台; 2.Enterprise Architect 工具软件; 三、实验内容 (1)分析图书管理系统中管理员的活动状态,画出管理员的活动图。(2)分析学生管理系统,并画出详细的活动图,并用活动图细化用例图 四、实验步骤 (一)图书管理系统活动图 1.分析 在图书管理系统中管理员的活动如下: (1)处理还书(2)处理借书(3)处理罚款 读者的活动如下: (1)登录(2)找书(3)预约(4)浏览 2.绘图步骤: 下面介绍在Enterprise Architect中活动图的过程:(1)在的合适文件夹下选择添加活动图(Activity),如下图,在图名中输入在图书管理系统管理员活动图如下图所示 (2)添加活动及其它元素,如下图 图 3.1 (2)绘制图书管理员的活动图,如图3.2所示: 图3.2 (3)创建读者的活动图如图3.3所示: 图3.3 (二)分析学生管理系统,并画出详细的活动图,并用活动图细化用例图 (1)学生基本信息保存的活动图 录入基本信息、点击保存、链接数据库、判定学号是否已存在、判定录入信息是否符合规范(日期信息、身份证号、邮编等信息)-保存。(2)学生基本信息查询的活动图 链接数据库、查询基本信息表、倒出数据内容、填入各字段信息到信息输出框、根据学院代号查询学院名称、写入学院信息到列表框、定位学院信列表框、根据班级代号查询班级名称、写入班级信息、写入班级信息到列表框、定位班级信列表框、。(3)至少分析建立其它3个活动图 (4)根据活动图重新分析用例图并细化用例图,审核类图 五、实验报告要求 1. 整理实验结果。 2. 小结实验心得体会。 实验四 构建顺序图 一、实验目的 学会用顺序图实现用例 二、实验器材 1.计算机一台; 2.Enterprise Architect 工具软件; 三、实验内容 (1)分析系统需求,画出ATM取款的顺序图(2)分析学生管理系统,并画出详细的顺序图 四、实验步骤(一)ATM取款的场景 1、ATM取款的场景分析: (1)通过读卡机,用户插入ATM卡; (2)ATM系统从卡上读取银行ID、帐号、加密密码、并用主银行系统验证银行ID和帐号; (3)用户输入密码,ATM系统根据上面读出的卡上加密密码,对密码进行验证;(4)用户输入取款数量; (5)ATM系统通知主银行系统,传递储户帐号和取款数量,并接收返回的确认信息; (6)ATM系统输出先进、ATM卡和显示帐户余额的收据;(7)ATM系统记录事务到日志文件。寻找场景中的对象:ATM、客户和帐户。 2、绘图步骤: 下面介绍在Enterprise Architect中创建顺序图的过程: (1)在的合适文件夹下选择添加活动图(Activity),如下图,21 在工具菜单中选择选项如下图 选择图—顺序,如下图,选择“显示顺序编号” (2)在顺序图前,为保证对象的可行性,可先在类图中创建Customer、ATM、和Account类。也可新建元素LifeLine。如下图,分别创建Customer、ATM、和Account.(4)根据ATM取款的场景,获得第一条消息为“客户向ATM机提交取款需求”,向图中添加消息。 在图中,点击Customer,选择小箭头,指向ATM,在消息特征编辑窗口中,输入Request。 图4.4 (5)同样的方法添加其它消息,如图4.5所示。 图4.5 (二)分析学生管理系统,并画出详细的顺序图 (1)如学生奖学金评定的顺序图:倒入成绩、操行评定、计算综合评分、奖学金评定(2)用户登入的顺序图: (3)新学期注册顺序图:学生交费--向学院报到--判断是否交费--(是否申请助学金、是否申请缓交)--注册(4)建立党员管理顺序图 (5)建立其它的一个以上顺序图 五、实验报告要求 1. 整理实验结果。 2. 小结实验心得体会。 实验五 构建协作图 一、实验目的 1.学会协作图的绘制方法 2.掌握顺序图和协作图的相互转换。 二、实验器材 1.计算机一台; 2.Enterprise Architect 工具软件; 三、实验内容 (1)分析系统需求,画出ATM取款的协作图。 (2)分析学生管理系统,并画出详细的顺序图 四、实验步骤 (一).ATM取款的场景 1、ATM取款的场景分析: (1)通过读卡机,用户插入ATM卡; (2)ATM系统从卡上读取银行ID、帐号、加密密码、并用主银行系统验证银行ID和帐号;(3)用户输入密码,ATM系统根据上面读出的卡上加密密码,对密码进行验证;(4)用户输入取款数量; (5)ATM系统通知主银行系统,传递储户帐号和取款数量,并接收返回的确认信息;(6)ATM系统输出先进、ATM卡和显示帐户余额的收据;(7)ATM系统记录事务到日志文件。寻找场景中的对象:ATM、客户和帐户。 2、绘图步骤: 下面介绍在Enterprise Architect中创建协作图的过程: (1)在“Logical View”中新建“Collaboration Diagram“,双击图标,出现图5.1,为编辑顺序图做好准备。 图5.1 (2)创建类节点 创建四个类节点分别为ATM,Branch,Consortium,User。 分别选择其中的三个类节点ATM,Branch,Consortium 把它们拖动到CollaborationDiagram图中,如图5.2所示。 图 4.2 选择标记为 User 的类节点。将选定的类拖放到CollaborationDiagram图编辑器中,使其位于 ATM 生命线元素的上方,如图5.3所示。 图5.3 (3)添加连接器链接(Object Link) 协作图中的每个元素均可通过连接器链接与其他元素建立连接。您可以标识这些链 接,并在其中添加消息流。 从建模组件面板的“基本”类别中,选择 “ Object Link ” 图标。单击标记为 User 的生命线元素,然后单击 ATM。将在两个元素之间绘制一条连接器链接。使用相同的步骤绘制以下链接: 从 ATM 至 Consortium 的链接 从 Consortium 至 Branch 的链接 从 ATM 至 Branch 的链接 注意:在创建从 ATM 至 Branch 的链接时,请从 ATM 生命线的右侧水平绘制一条链接,并在到达 Branch 生命线的正上方时单击鼠标左键。这样便会在链接线上出现一个顶点,然后在顶点到 Branch 生命线之间垂直绘制一条链接。 此时,该图应当图5.4类似。 图5.4 在图编辑器中的任意位置单击鼠标右键,选择 “Edit” 的“delete from mode”菜单,可删除模型,如图5.5所示。 图5.5 (4)显示操作流 操作流将在图中显示为与链接平行的带标记箭头。此链接用于向目标元素传输消息或实现这种传输。在图编辑器中,选择 User 和 ATM 之间的连接器链接。右键单击距 ATM 生命线最近的连接器链接部分。如图4.6所示,从弹出式菜单中选择“Open Specification”,弹出”Link Specification For Untile”对话框,在对话框中按右键,从弹出式菜单中选择“Insert To: ATM”,在Message Name中输入public void GetCashOnHand(), 如图5.6所示。 图5.6 在 ATM 和Consortium 之间的连接器链接上,右键单击靠近Consortium生命线的链接部分。 添加消息 “ public void validateAccountInfo()”。Rose显示 2: public void validateAccountInfo()。 在 ATM 和 Branch 之间的连接器链接上,右键单击靠近Branch 生命线的链接部分。 添加消息 “public char getConnected”。Rose显示3: public char getConnected()。 右键单击 Consortium 和 Branch 之间靠近Branch 生命线元素的连接器链接。添加消息 “public void verifyCardWithBank(int stringCardSTrip)”。Rose显示 4: public void verifyCardWithBank(int stringCardSTrip)。 完成的协作图应当与图5.7类似。 图5.7 (5)模型检查并保存 使用Tools工具的”Check Model”,进行模型检查,查看是否有错。 如无误则在完成协作图后,您可以保存该图。在图编辑器中,从菜单中选择“保存”。 (二)分析学生管理系统,并画出详细的协作图 (1)如学生奖学金评定的协作图:倒入成绩、操行评定、计算综合评分、奖学金评定(2)助学贷款申请协作图:学生申请—班主任批准—学院批准-学校领导批准(3)助学勤工俭学申请协作图:(4)建立其它的一个以上协作图 五、实验报告要求 1. 整理实验结果。 2. 小结实验心得体会。 实验六 构建状态图 一、实验目的 1. 熟悉状态图的基本功能和使用方法。2. 掌握如何使用建模工具绘制状态图方法。 二、实验器材 1.计算机一台; 2.Enterprise Architect 工具软件; 三、实验内容 (1)分析图书管理系统中的书和借书证的状态,画出它们的状态图; (2)分析学生管理系统,并画出详细的顺序图 四、实验步骤 (一)图书管理系统 1、分析 在图书管理系统中,分析书的状态如下: (1)可借(2)被借(3)被预约(4)删除 借书证的状态如下: (1)可用(2)不可用(3)删除 2、绘图步骤: 下面介绍在Rose2003中创建类和它们之间关系的过程: (1)在“Logical View“中的“StateChart Diagram”菜单,双击图标,出现图6.1,为编辑状态图做好准备。 图6.1(2)在工具栏中选择“Start State”图标添加到编辑窗口中,如图6.2所示。 图6.2(3)在工具栏中选择“State”图标,添加一个元素,命名为“New book”,如图6.3所示。 图6.3(4)同样的方法添加其它状态,如图6.4所示。 图6.4 5)书的各个状态之间添加转移及相应的事件,如图6.5所示。 32(图6.5(6)同样的方法得借书证的状态图,如图6.6所示。 图6.6 (二)分析学生管理系统,并画出详细的状态图 (1)建立学生交款状态图:已交、未交、缓交、部分申请助学贷款(2)建立学生惩罚(记过以上)状态图: (3)建立学生党员申请状态图:(4)建立其它的一个以上状态图 五、实验报告要求 1. 整理实验结果。 2. 小结实验心得体会。 实验七 构建组件图和配置图 一、实验目的 1.掌握UML中组件图和配置图的建立方法; 2.掌握使用Enterprise Architect绘制组件图和配置图; 二、实验器材 1.计算机一台; 2.Enterprise Architect 工具软件; 三、实验内容 (1)分析学校网上选课系统的组件图,画出系统组件图。(2)分析学校网上选课系统的配置图,画出系统配置图。(3)分析学生管理系统,并画出详细的组件图与配置图 四、实验步骤 (一)网上选课系统 1.分析 设计学校网上选课系统的组件图和配置图,需求如下: 某学校的网上选课系统主要包括如下功能: 管理员通过系统管理界面进入,建立本学期要开的课程、将课程信息保存在数据库中并可以对课程进行改动和删除。 学生通过客户机浏览器根据学号和密码进入选课界面,在这里学生可以进行三种操作:查询已选课程、选课以及付费。 对于以上操作,可通过业务层,并将这些操作结果存入数据库中。 2.绘图步骤: (1)绘制组件图的步骤如下: 确定组件;(系统管理系统, 课程管理系统,选课系统,查询系统,人员信息管理,注册系统,业务操作,备份系统,付费系统) 给组件加上必要的构造型; 确定组件的联系; 绘制组件图。 下面介绍在Rose2003中创建组件图的过程: (a)在“Component View“中的 “New”的 “Component Diagram”中,出现图7.1,为编辑组件图做好准备,35 图7.1(b)创建组件图(根据要求创建)。 (2)绘制配置图的步骤如下: 确定节点;(数据库服务器,应用服务器,打印机,客户端(n个,连接为局域网)) 加上构造型; 确定节点的联系; 绘制配置图。 下面介绍在Rose2003中创建配置图的过程: (a)在“Deployment View“中,出现图7.2,为编辑配置图做好准备,图7.2 图7.3 系统配置图 (二)分析学生管理系统,并画出详细的组件图与配置图 (1)系统组件图 分析系统接口 如建立查询一个学生基本信息的接口,返回一个学生基本信息的类(类中有姓名、学号等属性) 搜索系统用户界面 搜索系统用户界面,作为系统一种特殊的接口,用户与系统的接口,建立单独的包Web InterFace保存用户界面,如学生基本信息操作的用户界面定义如下(从View继承过来的一个类,这里只考虑界面,类只考虑程序,可有部分重复): 为用户界面考虑接口,并关联不同的类 (2)系统配置图 假设有以下的子系统:学生管理系统用到财务子系统、成绩管理子系统,并各自有数据库。 五、实验报告要求 1. 整理实验结果。 2. 小结实验心得体会。 实验八 Enterprise Architect逆向工程 一、实验目的 1.掌握Enterprise Architect中逆向工程的建立方法; 2.掌握根据逆向工程画出类图; 二、实验器材 1.计算机一台; 2.Enterprise Architect 工具软件; 三、实验内容 (1)分析Java程序,实现EA逆向工程。(2)根据逆向工程所得类,画出对应类图。 四、实验步骤 1.分析 Enterprise Architect功能十分强大,从项目需求分析、开发、测试,整个项目过程都可使用Enterprise Architect,特别是在做需求分析与项目系统架构时建模的能力巨强。但是每个人不是在项目一开始就能参与到初期当中来的,有时候整个项目一期完工了,进行二期开发时,这个时候参与进项目,为了能够快速了解整个项目的框架,使用Enterprise Architect的逆向工程的功能极为有用。 2.绘图步骤: (1)分析J2EE源代码,了解其结构 (2)新建一个Enterprise Architect工程,选择合适的文件夹,如下图选择包---代码工程—导入---源程序目录 选择根包,原类型为Java 点击确定即在对应的包下生成三个类Env,EnvList和ListS,新建视图,添加Env,EnvList和ListS到视图中,具体如图所示: 图8.3 五、实验报告要求 1. 整理实验结果。 2. 小结实验心得体会。第三篇:C语言程序设计实验教案
第四篇:实验二 定时器程序设计121
第五篇:UML程序设计实验指导书