软件工程c上机实验指导书修订.docx
- 文档编号:10039192
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:51
- 大小:42.02KB
软件工程c上机实验指导书修订.docx
《软件工程c上机实验指导书修订.docx》由会员分享,可在线阅读,更多相关《软件工程c上机实验指导书修订.docx(51页珍藏版)》请在冰豆网上搜索。
软件工程c上机实验指导书修订
文档编号:
实验指导书英文名称缩写–版本
《软件设计基础》
课程实验指导书
(适用于软件工程专业)
软件工程系
辽宁工程技术大学软件学院
年月日
实验1C程序的运行环境和运行一个C程序的方法
一、实验目的
1、了解如何编辑、编译、连接和运行一个C程序;
2、通过运行简单的C程序,初步了解C程序的特点。
二、实验内容
1、学习进入C的工作环境并熟悉TurboC集成环境;
2、练习输入并运行一个简单的C程序,掌握和理解C程序的结构;
3、初步了解C程序的编译、连接和运行的过程。
三、实验性质
验证性实验
四、实验学时
2学时
五、实验环境
TurboC2.0
四、实验原理及步骤
1、启动TurboC
进入TurboC集成环境后,首先在屏幕上显示TurboC主菜单窗口。
在该窗口,有8个菜单条目。
每一个菜单的意义如下:
File处理文件(包括装入、存盘、选择、建立、换名写盘),目录操作(包括列表、改变工作目录),退出系统及调用DOS;
Edit建立、编辑源文件;
Run控制运行程序。
如果程序已经编译连接好,且Debug/SourceDebugging以及Option/Compiler/Codegeneration/OBJDebugInformation开关置为On,则可以用此菜单初始化调试阶段;
Compile编译并生成目标程序与可执行文件;
Project允许说明程序中包含哪些文件的管理条目;
Options可以选择集成环境任选项(如存储模式、编译时的任选项、诊断及连接任选项)及定义宏;也可以记录IncludeOutput及Library文件目录,保存编译任选项和从配置文件加载任选;
Debug检查、改变变量的值,查找函数,程序运行时查看调用栈。
选择程序编译时是否在执行行代码中插入调试信息;
Break/Watch增加、删除、编辑监视表达式,及设置、清除、执行至断点;
特别要指出的是,除了Edit项外,每一个菜单又有对应的子菜单。
而选择Edit项目后,只是进入编辑器;
为了从主菜单中选择所需要的功能,可以用以下两种方式之一:
按F10键后,可以看到屏幕上部主菜单中有反白显示,此时,利用左、右光标移动键(←与→)选择需要的菜单,然后按回车(Enter)键。
直接按Alt+主菜单条目中的首字母(分别为F、E、R、C、P、O、D、B),此时就会出现相应的子菜单。
例如,按Alt+F表示选择文件子菜单(File)。
当出现子菜单时,其中某个条目是高亮度的,此时可以利用上、下光标移动键(↑与↓)来移动该高亮度线,从而选择所需要的功能。
在菜单调用时,按Esc键后将直接返回到活动窗口。
2、输入程序
(1)输入以下程序,并运行。
main()
{
printf("Howareyou!
");
}
(2)有下面的C程序,计算由键盘输入的任意两个整数的积。
#include(stdio.h);
main()
scanf(“%x,%y”,&x,%y)
p=prodct(x,t)
printf(“Theproductis:
”,p)
intprodct(inta,intb)
intc
c=a*b
returnc
调试上述程序:
静态地检查上述程序,改正程序中的错误;在编辑状态下照原样键入上述程序;编译并运行上述程序,记下所给出的出错信息;按照事先静态检查后所改正的情况,进行纠错;再编译执行纠错后的程序;如还有错误,再编辑改正,直到不出现语法错误为止。
下面给出6组测试用例,你认为哪几组较好?
为什么?
0,0
0,99
20,50
33000,20
-5,-2
-5,2
要测试出上述程序中所有错误,你认为应当用几组测试用例?
3、运行程序
按Ctrl+F9运行程序,如果没有报错,可以按Alt+F5查看运行结果,再按空格键回到编辑窗口。
4、保存文件
按F2键,弹出一个对话框,在对话框中输入文件名,如:
exam1.c。
5、退出TC程序
按Alt+X键,弹出对话框,提示是否真的要退出TC,如果输入Y就会退出TC。
6、打开已经存在的文件
首选启动TC;
按F3,弹出对话框;
在该对话框中,输入文件名即可。
五、实验报告
1.提交源程序
2.总结实验中在编辑、编译、运行等各环节中所出现的问题及解决方法。
实验2数据类型、运算符和表达式
一、实验目的
1、掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它们赋值的方法;
2、掌握不同的类型数据之间赋值的规律;
3、学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用;
4、进一步熟悉C程序的编辑、编译、连接和运行的过程。
二、实验内容
1、输入有代表性的程序,比较整型数据、字符型数据以及字符串型数据的区别与联系;
2、输入程序,体会C编译系统自动的数据类型转换。
三、实验性质
验证性实验
四、实验学时
2学时
五、实验环境
TurboC2.0
六、实验原理及步骤
1、用printf函数来输出以下表达式运行结果
(1)当x=5,y=6,z=7时
x y>x x! =y x==z-2 x=x-2 x>=z x<=z (2)当x=0,y=-1,z=1时 x&&y x||y y&&z y||z x&y x|y 2、下面的程序试图计算由键盘输入的任意两个整数的平均值 #include main() { intx,y,a; scanf(“%x,%y,&x,&y); a=(x+y)/2; printf(“Theaverageis: ”a); } 调试无语法错误后,分别使用下列测试用例对上述程序进行测试: (1)2,6 (2)1,3 (3)-2,-6 (4)-1,-3 (5)-2,6 (6)-1,3 (7)1,0 (8)1,6 (9)32800,33000 (10)-32800,33000 分析上述哪几组测试用例较好? 通过测试,你发现程序有什么错误了吗? 若有错误,请指出错误原因。 操作符sizeof用以测试一个数据或类型所占用的存储空间的字节数。 请编写一个程序,测试各基本数据类型所占用的存储空间大小。 3、编写一个C语言程序,测试下列各表达式 i,j i+1,j+1 i++,j++ ++i,++j i+++++j ++i+++++j++ 要求在各表达式中i和j都分别有相同的初值。 在实验中注意下列问题: 哪些表达式是错误的? 为什么? 理解+,++,++i,i++的意义和优先级别。 七、实验报告 1.提交源程序 2.分析以下两个问题: (1)“=”和“==”有什么区别? (2)“&”和“&&”、“|”和“||”有什么区别? 实验3最简单的C程序设计 一、实验目的 1、掌握C语言中使用最多的一种语句——赋值语句的使用方法; 2、掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。 二、实验内容 1、掌握C语言程序输入、输出的方法和格式; 2、掌握各种格式转换符的正确使用方法; 3、编写程序,练习小数的输出用法; 4、编程序,用getchar函数读入两个字符给c1、c2,然后分别用putchar函数和scanf函数输出这两个字符。 三、实验性质 验证性实验 四、实验学时 2学时 五、实验环境 TurboC2.0 六、实验原理及步骤 第一组实验程序: 1、输入并编辑下面的程序 main() { inta,b; floatc,d; longe,f; unsignedintu,v; charc1,c2; scanf(“%d,%d”,a,b); scanf(“%f,%f”,c,d); scanf(“%ld,%ld”,e,f); scanf(“%o,%o”,u,v); scanf(“%c,%c”,c1,c2); printf(“\n”); printf(“a=%7d,b=%7d\n”,&a,&b); printf(“c=%10.2f,d=%10.2f\n”,&c,&d); printf(“e=17ld,f=%17ld\n”,&e,&f); printf(“u=%o,d=%o\n”,&u,&v); printf(“c1=%c,d=%c\n”,&c1,&c2); 这个程序有语法错误吗? 为什么? 2、调试上述程序无语法错误后,用下面的测试数据,对程序进行测试。 a=123,b=456,c=17.6,d=71837.65,e=70000,f=2174506 u=62000,v=58765,c1=’a’,c2=’b’ 分析运行结果。 特别注意输入c1,c2的值是什么? 什么原因? 3、将输入e和f的语句改为: scanf(“%d,%d”,&e,&f); 再用上述测试数据测试并分析结果。 4、将输入u、v的语句改为: scanf(“%d,%d”,&u,&v); 再用上述测试数据测试并分析结果。 5、将输出e ,f 的语句改为: printf(“e=%17d,f=%17d\n”,e,f); 再用上述测试数据测试并分析结果。 6、将输出u、v的语句改为: printf(“u=%u,v=%u\n”,u,v);或 printf(“u=%d,v=%d\n”,u,v); 再用上述测试数据测试并分析结果。 7、请修改程序和改变数据输入的形式,分析各种情况下的输入与输出。 8、在scanf(“%c,%c”,&c1,&c2);语句之前加一个语句: getchar(); 9、验证转义字符\n与\r的意义有何不同。 第二组实验程序: 1、输入x,y,编写程序求z=x+|y|的值 程序中用scanf函数输入x和y的值,请分析以下两个语句 scanf(“%f%f”,x,y); scanf(“%f%f”,&x,&y); 哪一个是正确的,分别运行之,分析程序运行结果。 如果scanf函数改为scanf(“%f,%f”,&x,&y);应该怎样输入数据。 2、编写输入三角形的三边长a、b、c,求三角形面积area的程序。 输入前要加提示语句; 输出结果前要有必要的文字说明; 输入一组数据3、4、5,观察运算结果; 输入另外一组数据3、4、8,观察运算结果,分析这个运算结果是否有效。 *第三组实验程序: 1、编写一个程序,由键盘输入学生的三门课英语、数学和程序设计的成绩,计算并输出总成绩、平均成绩。 2、编写一个程序,输入一个三位正整数,要求反向输出对应的整数,如输入789,则输出987。 七、实验报告 1.提交源程序 2.分析以下两个问题: (1)总结在printf函数中可以使用的各种格式指定符,并给出样例; (2)总结在printf函数中可以使用的各转义字符及其功能。 实验4逻辑结构程序设计 一、实验目的及内容 1、了解条件与程序流程的关系; 2、了解用不同的数据使程序的流程覆盖不同的语句、分支和路径; 3、学会正确使用逻辑运算符和逻辑表达式; 4、熟练掌握if语句和switch语句。 二、实验性质 验证性实验 三、实验学时 2学时 四、实验环境 TurboC2.0 五、实验原理及步骤 第一组实验程序: 1、有如下程序段: {…… if(a>1&&b==0)x=x/a; if(a==2||x>1)x=x+1; } 为了更容易明白程序的逻辑结构,用流程图来加以描述。 要求增加一些输入语句和输出语句,以便使上述程序能在不同的a,b和x值下运行,并且能观察程序流程经过(覆盖)了哪些语句、哪些分支及哪些路径。 2、实验步骤 记下分别使用下列各组数据运行时的操作流程。 a=1,b=1,x=1; a=1,b=1,x=2; a=3,b=0,x=1; a=2,b=1,x=4; a=2,b=1,x=1; a=1,b=0,x=2; a=2,b=1,x=1; a=3,b=0,x=2。 3、分析讨论 用哪一组数据就可使程序中的每个处理语句都执行一次? 为了找出程序中各条处理语句中的错误,应该使用什么样的数据对程序进行测试? 请上机验证自己的结论。 用哪两组数据就可以使程序段中的每个分支都运行一次? 这种情形与上面的讨论有何不同? 如果为了找出程序中积压分支中的错误,应该使用什么样的数据对程序进行测试? 请上机验证自己的结论。 用哪两组数据就可以把判定框中的每个条件运算都进行一次? 如果为了测试出判定条件中的错误,应使用哪些数据对程序进行测试? 请上机验证自己的结论。 用哪四组数据才可以把各种条件的组合都检测一遍? 如果为了测试各种条件的组合的情形,应该使用什么样的测试数据? 请上机验证自己的结论。 用哪四组数据才可以把起始到终止的各条路径都覆盖一次? 如果为了测试出程序在不同路径下的错误,应该使用什么样的测试数据? 请上机验证自己的结论。 第二组实验程序: 1、用scanf函数输入一个年份year,计算这一年2月份的天数days,然后用输出函数printf输出days。 实验步骤与要求: (1)有变量定义为整型; (2)输入前要加提示语句; (3)输出结果前要有必要的文字说明。 说明: (1)闰年的条件是: year能被4整除但不能被100整除,或者year能被400整除。 (2)如果year是闰年,则2月份的天数为29天,不是闰年则为28天。 2、编写程序,输入三角形三边a、b、c,判断a、b、c能否构成三角形,若不能则输出相应的信息,若能则判断组成的是等腰、等边、直角还是一般三角形。 实验步骤与要求: (1)输入一组数据3,4,8,观察程序运行结果,并与实验二中程序2做比较。 (2)另外再输入几组数据进行测试。 3,4,5 3,3,3 3,3,5 (3)如果程序有误,可采用“跟踪打印”的调试方法,确定错误的出处。 3、编写程序,输入奖金数a,计算并输出税率、应缴税款和实得奖金数。 奖金税率 a<5000.00 500≤a<10000.05 1000≤a<20000.08 2000≤a<50000.10 5000≤a0.15 实验步骤与要求: (1)用if语句编程,自变量和函数值均为双精度类型; (2)用scanf函数输入奖金数a,输出结果采用以下形式: a=具体值 rate=税率值 tax=应缴税款 profit=实得奖金数 (3)分别输入a=280,512,1000,4250,5100,运行该程序 (4)用if~elseif语句和switch语句编程,其它同上。 *第三组实验程序: 1、编写一个程序,要求输入一个字符并判断它是字母字符、数字字符、还是其他字符。 2、编写一个程序,求一元二次方程ax2+bx+c=0的根。 3、输入一个无符号整数,判断该数是偶数还是奇数。 六、实验报告 1.提交源程序 2.分析以下问题: 对于多分枝选择结构何时使用if语句的嵌套,何时使用switch语句? 实验5循环控制 一、实验目的及内容 1、熟悉掌握用while语句,do-while语句和for语句实现循环的方法; 2、掌握在程序设计中用循环的方法实现一些常用算法; 3、掌握在程序设计条件型循环结构时,如何正确地设定循环条件、如何控制循环的次数以及条件型循环结构的基本测试方法; 4、掌握如何正确地控制计数型循环结构的次数、对计数型循环结构进行测试的基本方法及在嵌套循环结构中提高程序效率的方法。 二、实验性质 验证性实验 三、实验学时 2学时 四、实验环境 TurboC2.0 五、实验原理与步骤 第一组实验程序(条件型循环结构) 1、下面是一个计算e的近似值(使误差小于给定的δ)的程序。 //缺? ? //缺? ? main() { doublee=1.0,x=1.0,y,detax; inti=1; printf(“\npleaseinputenteraerror: ”);//未定义函数 scanf(“%lf”,&detax);//未定义函数 y=1/x; while(y>=detax) { x=x*I;//未定义变量I y=1/x; e=e+y; ++i; } printf(“%12.10lf”,e);//未定义函数 } 2、实验步骤 (1)阅读上面的程序,写出程序所依据的计算公式。 (2)当输入的detax各是什么值时,能分别使程序按下面的要求运行: 不进入循环; 只循环一次; 只循环两次; 进入死循环(程序将永远循环下去)。 为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句? (3)原程序中while语句中的y>=detax,分别换成y>detax,y=detax, y 假如不知道机器内的程序中的各语句实际上是什么,分别输入什么样的detax来测试出while语句的循环条件写错了。 (4)把原程序中while语句之前的y=1/x语句去掉,观察程序的运行将会发生什么样的变化。 假如不知道机器内的程序实际上是怎么写的,输入什么样的detax就能测试出少了上述这条语句。 (5)若把原程序中的++i换成i++,观察程序的运行发生了什么变化? 假如不知道这条语句到底是怎么写的,输入什么样的detax就能测试出这条语句写错了。 (6)把原程序中的while结构改写成do—while结构,再分别按上述的 (2)、(3)两步进行实验。 3、分析讨论 总结一下测试条件循环结构的一般方法。 第二组实验程序(计数型循环结构) 1、下面是一个用以计算和的C程序。 main() { inti,j; longsum=0; for(i=1,i<=20,i++)//查查错误 for(j=1;j<=3;j++) sum=sum+(i+1)*(i+1)*(j+2) printf(“sumis: %d\n”,sum); } 2、实验步骤 (1) 将上述程序中的和分别做什么样修改,能使程序按如下要求运行: 不循环; 外循环1次,不进入内循环; 外循环,内循环各1次; 外循环1次,内循环2次; 外循环2次,内循环1次; 外循环19次,内循环3次; 外循环20次,内循环2次; 外循环21次,内循环3次。 (2)试修改程序,以便能知道控制表达式 i=1;j<=20;i++ 和 j=1;j<3;j+= 各执行了多少次? (3)内循环与外循环的控制表达式进行对换,观察程序的执行结果有无变化,并且观察对换后的外循环与内循环控制表达式执行的总次数有无变化? (4)将(3)中程序写为 main() { inti,j,k; longsum=0; for(j=1.j<=3.j++) { k=j+2; for(i=1;i<=20;i++)//有错误 sum=sum+(i+1)*(i+1)**k;//有错误 } printf(“sumis: %d\n”,sum); } 观察程序的执行结果有无变化? (5)将(3)中程序改写为 main() { intI,j,m,n; longsum=0; for(j=1;j<=3;j++) { m=j+2; for(I=1;j<=20;I++)//循环会终止吗,为什么,注意观察j的变化 { n=I+1; sum=sum+m*m*k; } } printf(“sumis: %d\n”,sum); } 观察程序的执行结果有无变化? (6)在(5)的程序中,若将外循环控制表达式分别做如下修改: j=1;j<3;j++ j=1;j=3;j++ j=1;j>=3;j++ j=1;j>3;j++ j=1;j<=3;j-- j=1;j>3;j-- j=1;j<3;j++ j=0;j<=3;j+= j=0;j<3;j++ j=1;j<=3;j++ j=1;j<3;++j 观察程序的执行结果有无变化? *第三组实验程序: 1、编写一个程序,将输入的正文复制到输出,复制过程中删除每个输入行的前置空格。 2、求解满足条件1+2+3+···+n≥300的最小的n及总和值。 3、编写一个程序,把用户输入的数据累加,直到输入零为止,输出累加的结果。 4、输入一个正整数n,求sum=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)的值。 5、打印输出半径为1到10的圆的面积,若面积在40到90之间则予以打印,否则,不予打印。 六、实验报告 1.提交源程序 2.分析以下两个问题: (1)如何测试计数型循环结构的控制表达式中的错误? (2)从实验中你得到了哪些提高嵌套循环程序效率的启示? 实验6数组 一、实验目的及内容 1、掌握一维数组和二维数组的定义、赋值和输入输出的方法; 2、掌握字符数组和字符串函数的使用; 3、掌握与数组有关的算法,特别是排序算法。 二、实验性质 验证性实验 三、实验学时 2学时 四、实验环境 TurboC2.0 五、实验原理与步骤 1、编写程序,测试下列数组的定义方式是否正确 (1)main() { intn; scanf(“%d”,&n); inta[n]; …… } (2)main() { constintn=10; inta[n]; } (3) #include #defineM10 main() { inta[M]; } (4)main() { inta[2+2*4]; } (5)#include #defineM2 #defineN8 main() { inta[M+N]; } 通过这一实验,可以说明什么问题? 2、运行下面的C程序,根据运行结果,可以说明什么? main() { intnum[5]={1,2,3,4,5}; intii; for(i=0;i<=5;i++)//尤其注意最后一次循环 printf(“%d”,num[i]); } 3、操作符&用以求一个变量的地址,这在函数scanf中已经使用过了。 现在要你设计一个程序,返回一个3*5的二维数组各元素的地址,并由此说明二维数组中各元素是按什么顺序存诸的。 4、为一个起泡排序程序设计测试用例,并测试之。 5、1983年,在ACM图林奖颁奖大会上,杰出的计算机科学家,UNIX的鼻祖,C语言的创始人之一,图林大奖得主,KenThompson上台的第一句话是: “我是一个程序员,在我的1040表上,我自豪地写上了我的职业。 作为一个程序员,我的工作就是写程序,今天我将向大家提供一个我曾经写过的最精练的程序。 ”这个程序如下: #include chars[]={'\t','0','\n','}',';','\n','\n','/','*','\n',0}; /*(213
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 软件工程 上机 实验 指导书 修订