大学数据结构实验指导书.docx
《大学数据结构实验指导书.docx》由会员分享,可在线阅读,更多相关《大学数据结构实验指导书.docx(24页珍藏版)》请在冰豆网上搜索。
大学数据结构实验指导书
《数据结构Ⅰ》实验指导书
C语言基础
姓名:
学号:
2008091
班级:
商务08班
指导教师:
石林
山东建筑大学商学院
电子商务教研室
目录:
实验一C源程序的编辑、编译、调试和运行………………………3
实验二基本输入/输出函数和运算符、表达式……………………5
实验三顺序结构、选择结构程序设计……………………………8
实验四循环结构程序设计…………………………………………11
实验五数组的应用……….………………………………………16
实验六函数的应用…………………………………………………19
实验七指针的应用………………………………………………21
实验八结构体的应用……………………………………………23
附录一…………………………………………………………………24
实验一C源程序的编辑、编译、调试和运行
一、实验目的及任务:
1、熟悉C语言运行环境TC3.0和VC++。
2、掌握C语言程序的书写格式和C语言程序的结构。
3、掌握C语言上机步骤,了解运行一个C程序的方法。
二、实验环境
TC编程环境;VC++编程环境;主机操作系统为Windows2000或WindowsXP;
三、预备知识
要深入掌握TC编译环境,熟悉各个命令;掌握VC++编译环境。
四、实验步骤
1、C语言上机步骤:
(1)安装TC3.0。
(2)进入系统。
在C盘或其他盘上找到TC或TURBOC2,然后双击其图标打开文件夹,在TC/BIN/中找到TC.EXT并双击即可。
然后进行编辑源程序->编译->连接->执行程序->显示结果
(3)常用命令
编辑切换(F6,编译(F9),运行(CTRL+F9),显示结果(ALT+F5)其它常用命令见"附录一".
2、使用VC++建立C源程序
(1)打开VC++编译软件,通过“file/new/win32consloeapplication”建立一个空工程,输入工程名字;
(2)再运行”file/new/c++sourcefile”建立一个C源文件,输入文件名;
(3)编辑源程序代码
3、有下面的C程序,目的是求两个由键盘输入的数的乘积。
试编译运行,查看结果。
/********exl.c********/
#include
voidmain()
{
intprodct(inta,intb);
intx,y,p
scanf("%d,%d",&x,&y)
p=prodct(x,y)
printf("Theproductis:
%d",p)
}
intprodct(inta,intb)
{intc
c=a*b
returnc
}
五、实验报告内容
请编辑并运行上述程序。
1)静态地检查上述程序,改正程序中的错误
2)在编辑状态下照原样键入上述程序.
3)编译并运行上述程序,记下所给出的出错信息
4)按照事先静态检查后所改正的情况,进行纠错.
5)再编译执行纠错后的程序,如还有错误,再编辑改正,直到不出现语法错误为止
6)下面给出6组测试用例,你认为哪几组较好,为什么
(1)0,0
(2)0,99
(3)20,50
(4)33000,20
(5)-5,-2
(6)-5,2
要测试出上述程序中所有错误,你认为应当用几组测试用例
六、思考题
1、有哪些方法可以进入TC编译环境?
2、编写一个程序,要求输入圆的半径,计算圆的周长和面积并输出。
实验二基本输入/输出函数和运算符、表达式
一、实验目的及任务:
1、掌握C语言程序输入,输出的方法和格式。
2、学会有关C语言的有关运算符,以及包含这些运算符的表达式,特别是是++和--运算符的使用。
3、掌握C语言表达式的运行规则。
4、进一步熟悉C程序的编辑环境。
二、实验环境
TC或者VC++编程环境;主机操作系统为Windows2000或WindowsXP;
三、预备知识
要深入理解输入输出函数的格式和用法,掌握运算符和表达式的概念和应用。
四、实验步骤
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);
(1)这个程序有语法错误吗,为什么?
(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);
再用上述测试数据测试并分析结果.
2、编写一个C语言程序,测试下列各表达式
i,j
i+1,j+1
i++,j++
++i,++j
i+++++j
++i+++++j++
要求在各表达式中i和j都分别有相同的初值.在实验中注意下列问题:
(1)哪些表达式是错误的,为什么?
(2)理解+,++,++i,i++的意义和优先级别。
3、下面的程序试图计算由键盘输入的任意两个整数的平均值:
#include
main()
{
intx,y,a;
scanf("%x,%y,&x,&y);
a=(x+y)/2;
printf("Theaverageis:
"a);
}
调试无语法错误后,分别使用下列测试用例对上述程序进行测试:
2,6;1,3;-2,-6;-1,-3;-2,6;-1,3;1,0;1,6;32800,33000;-32800,33000;
(1)分析上述哪几组测试用例较好,通过测试,你发现程序有什么错误了吗?
若有错误,请指出错误原因。
4、输入以下程序
main()
{intj,k,m,n;
k=8;
j=10;
m=k++;
n=++j;
printf("%d,%d,%d,%d",k,j,m,n);
}
(1)运行程序,观察结果
(2)分析++在变量之前和在变量之后的不同点
五、实验报告内容
完成上述题目及思考题内容。
六、思考题
1、操作符sizeof用以测试一个数据或类型所占用的存储空间的字节数,请编写一个程序,测试各基本数据类型所占用的存储空间大小。
实验三顺序结构、选择结构程序设计
一、实验目的及任务:
1、了解条件与程序流程的关系。
2、了解C语句表示逻辑量的方法(以0代表"假"以1代表"真")。
3、学会正确使用逻辑运算符和逻辑表达式。
4、熟练掌握if语句和switch语句。
二、实验环境
TC或者VC++编程环境;主机操作系统为Windows2000或WindowsXP;
三、预备知识
要深入理解顺序结构及选择结构的特点,掌握各自的语句实现。
四、实验步骤
1、有如下程序段:
{
if(a>1&&b==0)x=x/a;
if(a==2||x>1)x=x+1;
}
要求增加一些输入语句和输出语句,以便使上述程序能在不同的a,b和x值下运行,并且能观察程序流程经过(覆盖)了哪些语句,哪些分支及哪些路径。
记下分别使用下列各组数据运行时的操作流程:
(1)a=1,b=1,x=1;
(2)a=1,b=1,x=2;
(3)a=3,b=0,x=1;
(4)a=2,b=1,x=4;
(5)a=2,b=1,x=1;
(6)a=1,b=0,x=2;
(7)a=2,b=1,x=1;
(8)a=3,b=0,x=2.
2、已知三个数a,b,c,找出最大值放于max中。
#include"stdio.h"
main()
{
inta,b,c,max;
/*定义四个整型变量*/
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
if(a>=b)
max=a;/*a>=b*/
else
max=b;/*amax)
if(c>=max)
max=c;/*c是最大值*/
printf("max=%d",max);
}
实验步骤:
若输入下列数据,分析程序的执行顺序并写出运行结果
(1)a=1,b=2,c=3
(2)a=2,b=1,c=3
(3)a=3,b=2,c=1
(4)a=3,b=1,c=2
(5)a=3,b=3,c=2
(6)a=2,b=1,c=2
3、输入某学生的成绩,经处理后给出学生的等级,等级分类如下:
90分以上(包括90):
A
80至90分(包括80):
B
70至80分(包括70):
C
60至70分(包括60):
D
60分以下:
E
输入测试数据,同方法一一样调试程序并写出结果。
五、实验报告内容
完成上述题目及思考题内容。
六、思考题
1、输入4个整数,要求按由小到大的顺序输出。
实验四循环结构程序设计
一、实验目的及任务:
1,掌握在程序设计条件型循环结构时,如何正确地设定循环条件,以及如何控制循环的次数。
2,了解条件型循环结构的基本测试方法。
3,掌握如何正确地控制计数型循环结构的次数。
4,了解对计数型循环结构进行测试的基本方法。
5,了解在嵌套循环结构中,提高程序效率的方法。
二、实验环境
TC或者VC++编程环境;主机操作系统为Windows2000或WindowsXP;
三、预备知识
要深入理解循环程序结构的特点,掌握其各种方式的语句实现。
四、实验步骤
1、
(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;
y=1/x;
e=e+y;
++i;
}
printf("%12.10lf",e);
}
(2)实验步骤
1)阅读上面的程序,写出程序所依据的计算公式。
2)当输入的detax各是什么值时,能分别使程序按下面的要求运行:
不进入循环;
只循环一次;
只循环两次;
进入死循环(程序将永远循环下去)
为了能知道程序循环了多少次,应该在程序中增加一条什么样的语句?
3)原程序中while语句中的y>=detax,分别换成y>detax,y=detax,y4)把原程序中while语句之前的y=1/x语句去掉,观察程序的运行将会发生什么样的变化。
5)若把原程序中的++i换成i++,观察程序的运行发生了什么变化
6)把原程序中的while结构改写成do—while结构,再分别按上述的2),3)两步进行实验。
2、求5!
3、求和s=1!
+2!
+3!
4、求和s=1!
+3!
+5!
5、求和s=3+33+333
6、有一数列:
2/1,3/2,5/3,8/5,…求出这个数列的前10项之和.
7、打印500以内的"水仙花数"。
"水仙花数"是一个三位数,其各位数立方和等于该数本身。
8、用牛顿迭代求方程2x3-4x2+3x-6=0在1.0附近的根。
9、打印下列图案
*
***
*****
********
10.断m是否是素数。
五、实验报告内容
完成上述题目及思考题内容。
六、思考题
1、求和1!
+2!
+3!
+4!
+…20!
。
实验五数组的应用
一、实验目的及任务:
1、掌握数组定义的规则。
2、掌握C语言数组的基本用法。
3、掌握一维数组的定义,赋值和输入输出的方法。
4、掌握字符数组的使用。
5、掌握二维数组的定义,赋值和输入输出的方法。
二、实验环境
TC或者VC++编程环境;主机操作系统为Windows2000或WindowsXP;
三、预备知识
要深入理解数组的定义,数组的功能及操作特点;
四、实验步骤
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};
inti;
for(i=0;i<=5;i++)
printf("%d",num[i]);
}
4、输入10个数,计算其中负数的个数。
#include
main()
{chardata[10];
inti,sum=0;
for(i=0;i<10;i++)
{scanf("%d",data[i]);
if(data[i]<0)
sum=sum+1;
}
printf("负数个数为:
%d\n",sum);
}
五、实验报告内容
完成上述题目及思考题内容。
六、思考题
1、已有一个已排好序的数组,今输入一个数,要求按原来排序的规律将它插入数组中。
2、将一个数组中的值按逆序重新存放。
例如,原来顺序为8,6,5,4,1。
要求改为1,4,5,6,8。
实验六函数的应用
一、实验目的及任务:
1、掌握C语言函数定义及调用的规则。
2、理解参数传递的过程。
3、掌握C语言函数的声明及函数的递归调用。
二、实验环境
TC编程环境;VC++编程环境;主机操作系统为Windows2000或WindowsXP;
三、预备知识
要深入理解函数的定义,掌握函数参数的种类及特点。
四、实验步骤
1、上机调试下面的程序,记录系统给出的出错信息,并指出出错原因。
main()
{
int,y;
printf("%d\n",sum(x+y));
intsum(a,b)
{
inta,b;
return(a+b);
}
}
2、写一函数,使给定的一个二位数组(4×4)转置,即行列互换。
/*矩阵的转置*/
五、实验报告内容
完成上述题目及思考题内容。
六、思考题
1、针对以上实验内容写出相应的参数传递过程并分析结果。
2、讨论参数的传递的几种形式。
实验七指针的应用
一、实验目的及任务:
1、熟悉指针的正确用法。
2、了解指针的特点。
3、掌握指针的用法。
二、实验环境
TC编程环境;VC++编程环境;主机操作系统为Windows2000或WindowsXP;
三、预备知识
要深入理解指针的定义,掌握指针的应用。
四、实验步骤
1、指出下面程序错误的原因
main()
{
intx=10,y=5,*px,*py;
px=py;
px=&x;
py=&y;
printf("*px=%d,*py=%d,*px,*py);
}
2、使指针变量pt1指向a和b中的大者,pt2指向小者,以下程序能否实现此目的
swap(int*p1,int*p2)
{
int*p;
p=p1;p1=p2;p2=p;
}
main()
{
inta,b,*pt1,*pt2;
scanf("%d,%d",&a,&b);
pt1=&a;pt2=&b;
swap(pt1,pt2);
printf("%d,%d\n",*pt1,*pt2);
)
五、实验报告内容
完成上述题目及思考内容。
六、思考题
输入一行文字,统计大写字母,小写字母,空格,数字字符及其他字符各多少个
实验八结构体的应用
一、实验目的及任务:
1、掌握结构体类型方法以及结构体变量的定义和引用。
2、掌握指向结构体变量的指针变量的应用,特别是链表的应用。
3、掌握运算符"."和"—>"的应用。
二、实验环境
TC编程环境;主机操作系统为Windows2000或WindowsXP;
三、预备知识
要深入理解结构体的定义及操作特点,能够使用结构体解决相关问题。
四、实验步骤
1、要求编写程序:
有4名学生,每个学生的数据包括学号,姓名,成绩,要求找出成绩最高者的姓名和成绩,上机运行程序。
五、实验报告内容
完成上述题目及思考题内容。
六、思考题
1、如何使用结构体指针来建立链表?
附录一:
TC编译环境常用热键
基本操作:
F10-----调用主菜单
F2------存盘
F3------打开
Alt+F9------Compile
Ctrl+F9------Run
Alt+F5------UserScreen
文本编辑:
←↑→↓-------移动光标
PgUp,PgDn------上下翻页
Ctrl+PgUp,Ctrl+PgDn------文件首尾
HomeEnd
DdeleteInsert
Bkspace
块操作:
Ctrl+KB-------块开始标记Ctrl+KK--------块结束标记
Ctrl+KC-------块拷贝Ctrl+KV--------块移动
Ctrl+KY-------块删除Ctrl+KH--------块隐藏
窗口操作:
F5-----窗口缩放
F6-----窗口切换
程序调试:
F8-----StepoverF7-------Traceinto
F4-----GotoCursorCtrl+F7--------AddWatch
Ctrl+F8------ToggleBreakpointCtrl+F2--------ProgramReset