高级计算机语言实验指导书.docx
《高级计算机语言实验指导书.docx》由会员分享,可在线阅读,更多相关《高级计算机语言实验指导书.docx(17页珍藏版)》请在冰豆网上搜索。
高级计算机语言实验指导书
高级计算机语言
实验指导书
淮北煤炭师范学院
电子技术实验室
实验1
C程序的运行环境和运行一个C程序的方法
1.实验目的
(1)了解所用的计算机系统的基本操作方法,学会独立使用该系统。
(2)了解在该系统上如何编辑、编译、连接和运行一个C程序。
(3)通过运行简单的C程序,初步了解C程序的特点。
2.实验内容和步骤
(1)检查所用的计算机系统
是否已安装了C编译系统并确定它所在的子目录。
如果使用的是Windows和Tur-boC,可以按以下步骤进行操作:
单击Windows桌面上的“开始”按钮,从菜单中选中并单击“查找(F)",在其右面的下拉菜单中选择“文件或文件夹(F)",屏幕上出现“查找”窗口,在“名称”栏中输人文件名“tc.exe”,然后单击“开始查找”按钮,系统会自动在指定的范围内寻找所需的文件,如果找到,就会显示出文件路径(例如,C:
\tc)。
请注意搜索范围,应当使“搜索”栏中的内容为“C:
\”,表示从根目录开始寻找,即搜索整个C盘。
(2)进入C的工作环境
①单击桌面上的“开始”按钮,从菜单中选择“程序”,单击它然后在其下拉菜单中选择“MS-DOS”,屏幕上出现MS-DOS窗口。
②用DOS命令cd,使当前目录改变为用户专用的子目录(例如C:
\tc\ZHANG)。
③用dir命令检查用户目录中已有哪些文件。
④调用Turbo,一般情况下Turboc所在的目录为C:
\tc.调用Turboc的命令一般为,C:
\tc\tc。
此时屏幕上出现Turboc的工作环境。
(3)熟悉TurboC集成环境
①了解和熟悉编辑(Edit)窗口和信息(Message)窗口的作用。
试一下能否向信息窗口输人程序。
按功能键F5,观察它有什么作用,再按一次F5,再观察它有什么作用。
按F6,观察它有什么作用;再按一次F6,再观察它有什么作用。
②按功能键F10,并按回车键,观察“File”菜单,了解它们的作用和用法。
用键盘上的“
”键,分别选中Edit、Run、Compile、Project、Option、Debug、Break/watch,观察它们的菜单,大致上了解它们的作用(但不必要求全部深人了解,以后用到时再深人了解)。
③选择File菜单中的New并按回车键,在编辑窗口中随意输人几行字符,观察窗口顶部左端line和col后面数字的变化。
(4)输人并运行一个简单的程序
1再选择File菜单中的New并按回车键,使编辑窗口变成空白
②输入下面的程序(教材第1章例1.1)。
③按功能键F9进行编译和连接,观察屏幕上显示的编译信息。
如果出现“出错信息”,则应找出原因并改正之,再进行编译。
④如果编译无错误,按Ctrl和F9键使程序运行,按Alt和F5键,切换到用户屏,观察分析运行结果。
(5)输人并编辑一个C程序
1再选择File
New,使编辑窗口变成空白。
2输人以下程序(教材第1章例1.2,但故意漏打或打错几个字符)。
3按F9进行编译,仔细分析编译信息窗口和Message窗口,可能显示有多个错误,逐个修改,直到不出现错误。
请与教材上的程序对照。
4运行程序,分析运行结果。
(6)输人并运行一个需要在运行时输人数据的程序
清空逻辑窗口,输人下面的程序。
编译并运行,在运行时从键盘输人整数2和5,然后按回车键,按Ah和FS键,观察运行结果。
将程序中的第2行改为:
Inta;b;c;
再进行编译,观察其结果。
④将子程序max的第3,4两行合并为一行,即
if(x>y)z=x;elsez=y;
进行编译和运行,分析结果。
(7)运行一个自己编写的程序题目是教材第1章的习题1.6,即:
输人a、b、c三个值,输出其中最大者。
1输入自己编写的源程序。
2检查程序有无错误(包括语法错误和逻辑错误),有则改之。
3编译和连接,仔细分析编译信息,如有错误应找出原因并改正
④运行程序,输人数据,分析结果。
4自己修改程序(例如,故意改成错的),分析其编译和运行情
⑥将调试好的程序保存在自己的用户目录中,文件名自定。
⑦用File
New将编辑窗口清空,再选File
Load将该文件读人,检查编辑窗口中内容是否是刚才保存的程序。
⑧关闭TurboC,用DOS命令dir检查用户目录中的文件名,有无后缀为.c、.obj和.exe的文件。
3.预习内容
(1)《C程序设计(第二版)》第1章;
(2)本书第二部分14.3-14,10节。
这是第一个实验,我们写得比较详细,目的是帮助读者考虑怎样更好地通过实验得到多的收获,而不要满足于验证书本知识。
在以后的实验中,请读者参考本实验的思路,己设计具体的实验步骤,尽可能自己补充增加一些内容,以提高自己的实践能力。
实验2数据类型、运算符和表达式
1.实验目的
(1)掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它赋值的方法。
(2)掌握不同的类型数据之间赋值的规律。
(3)学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++)和自减(--)运算符的使用。
(4)进一步熟悉C程序的编辑、编译、连接和运行的过程。
2.实验内容和步骤
(l)输人并运行下面的程序
1运行此程序。
2在此基础上增加一个语句:
再运行,并分析结果。
3将第2行改为:
再使之运行,并观察结果。
④再将第3、4行改为:
再使之运行,分析其运行结果。
⑤再将第3、4行改为:
再使之运行,分析其运行结果。
再将第3、4行改为:
再使之运行,分析其运行结果。
(2)输人并运行教材第3章习题3.6给出的程序
在上机前先用人工分析程序,写出应得结果,上机后将二者对照
(3)输人并运行下面的程序
请对照程序和运行结果分析:
将一个负整数赋给一个无符号的变量,会得到什么结果。
画出它们在内存中的表示形式。
将一个大于32767的长整数赋给整型变量,会得到什么结果。
画出它们在内存中的表示形式。
将一个长整数赋给无符号变量,会得到什么结果(分别考虑该长整数的值大于或等于65535以及小于65535的情况)。
画出它们在内存中的表示形式。
读者可以改变程序中各变量的值,以便比较。
例如:
a=65580,b=40000,e=65535,f=65580。
(4)输人习题3.10
1运行程序,注意i、j、m、n各变量的值,分别作以下改动并运行。
2将第4、5行改为:
再运行。
3将程序改为:
4在③的基础上,将Printf语句改为:
5再将Printf语句改为:
6将程序改为
(5)按习题3.7的要求编程序并上机运行该题的要求是:
要将“China”译成密码,译码规律是:
用原来字母后面的第4个字母代替原来的字母。
例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。
因此,"China”应译为“Glmre。
请编一程序,用赋初值的方法使c1、c2、c3、c4、c5五个变量的值分别为c,l、m、r、e,经过运算,使cl、2、c3、c4、c5分别变为G、l、m、r、e,并输出。
输人事先已编好的程序,并运行该程序。
分析是否符合要求。
改变cl、cZ、c3、c4、c5的初值为:
T、o、d、a、y,对译码规律作如下补充:
w用A代替,x用B代替,Y用C代替,z用D代替。
修改程序并运行。
将译码规律修改为:
将字母用它前面的第4个字母代替,例如E用A代替,Z用u代替,D用Z代替,C用Y代替,B用X代替,A用v代替。
修改程序并运行。
3.预习内容
预习教材第3章。
实验3最简单的C程序设计
1.实验目的
(1)掌握C语言中使用最多的一种语句——赋值语句的使用方法。
(2)掌握各种类型数据的输人输出的方法,能正确使用各种格式转换符。
2.实验内容和步骤
(1)掌握各种格式转换符的正确使用方法
1输入程序
2运行此程序并分析结果。
3在此基础上,修改程序的第8-13行:
运行程序,分析结果。
4改用scanf函数输入数据而不用赋值语句,scanf函数如下:
输人的数据如下:
61,62,a,b,3.56,-6.87,3157.890121,0.123456789,50000,-60000,37678,40000
(说明:
lf和ld格式符分别用于输人doub挽型和long型数据)分析运行结果。
5在④的基础上将Printf语句改为:
运行程序。
6将p、q改用%0格式符输出。
7将scanf函数中的%H和肠ld改为%f和%d,运行程序并观察分析结果。
(2)按习题4.8要求编写程序题目为:
设圆半径:
一1.5,圆柱高h一3,求圆周长、圆面积、圆球表面积、圆球体积、圆柱体积。
用scanf输人数据,输出计算结果。
输出时要有文字说明,取小数点后两位数字。
(3)编程序,用getchar函数读人两个字符给c1、c2,然后分别用putchar函数和scanf函数输出这两个字符。
上机运行程序,比较用Printf和putchar函数输出字符的特点。
3.预习内容预习教材第4章。
实验4逻辑运算和判断选取控制
1.实验目的
(l)了解C语言表示逻辑量的方法(以0代表“假”,以非0代表“真”)。
(2)学会正确使用逻辑运算符和逻辑表达式。
(3)熟练掌握if语句和switch语句。
(4)结合程序掌握一些简单的算法。
(5)学习调试程序。
2.实验内容本实验要求事先编好解决下面问题的程序,然后上机输人程序并调试运行程序。
(1)有一函数:
用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。
(习题5.6)
1事先编好程序,要求分别用if语句和switch语句实现。
运行程序,并检查结果是否正确。
2再运行一次程序,输人分数为负值(如-70),这显然是输人时出错,不应给出等级。
修改程序,使之能正确处理任何数据。
当输人数据大于100或小于。
时,通知用户“输入数据错”,程序结束。
(3)给一个不多于5位的正整数,要求:
1求出它是几位数;
2分别打印出每一位数字;
3按逆序打印出各位数字,例如原数为321,应输出123.(习题5.7)
应准备以下测试数据:
·要处理的数为1位正整数;
·要处理的数为2位正整数;
·要处理的数为3位正整数;
·要处理的数为4位正整数;
·要处理的数为5位正整数。
除此之外,程序还应当对不合法的输人作必要的处理。
例如:
·输人负数;
·输人的数超过5位(如123456)。
(4)输人4个整数,要求按由小到大顺序输出。
得到正确结果后,修改程序使之按由大到小顺序输出。
(习题5.9)
3.预习内容
预习教材第5章。
实验5循环控制
1.实验目的
熟悉掌握用while语句,do-while语句和for语句实现循环的方法。
掌握在程序设计中用循环的方法实现一些常用算法(如穷举、迭代、递推等)。
进一步学习调试程序。
2.实验内容
编程序并上机调试运行。
(1)输人两个正整数m和n,求它们的最大公约数和最小公倍数。
(习题6.1)
在运行时,输人的值m>n,观察结果是否正确。
再输人时,使m修改程序,不论m和n为何值(包括负整数),都能得到正确结果。
(2)输人一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。
(习题6.2)
在得到正确结果后,请修改程序使之能分别统计大小写字母、空格、数字和其他字符的个数。
(3)用牛顿迭代法求方程2x
-4x
+3x-6=0在1.5附近的根。
(习题6.12)
在得到正确结果后,请修改程序使所设的x初值由1.5改变为100、1000、10000,再运行,观察结果,分析不同的x初值对结果有没有影响,为什么?
修改程序,使之能输出迭代的次数和每次迭代的结界,分析不同的x初始值对迭代的次数有无影响。
(4)猴子吃桃问题。
猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。
第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
以后每天早上都吃了前一天剩下的一半零一个。
到第10天早上想再吃时,见只剩一个桃子了。
求第一天共摘了多少桃子。
(习题6.10)
在得到正确结果后,修改题目,改为猴子每天吃了前一天剩下的一半后,再吃两个。
请修改程序,并运行,检查结果是否正确。
3.预习内容
预习教材第6章。
实验6数组
1.实验目的
(1)掌握一维数组和二维数组的定义、赋值和输人输出的方法;
(2)掌握字符数组和字符串函数的使用;
(3)掌握与数组有关的算法(特别是排序算法)。
2.实验内容编程序并上机调试运行。
(1)用选择法对10个整数排序。
10个整数用scanf函数输人。
(习题7.2)
(2)有15个数存放在一个数组中,输人一个数,要求用折半查找法找出该数是数组中第几个元素的值。
如果该数不在数组中,则输出“无此数”。
以15个数用赋初值的方法在程序中给出。
要找的数用scanf函数输入。
(习题7.9)
(3)将两个字符串连接起来,不要用strcat函数。
(4)找出一个二维数组的“鞍点”,即该位置上的元素在该行上最大,在该列上最小。
也可能没有鞍点。
(习题7.8)
应当至少准备两组测试数据:
①二维数组有鞍点
②二维数组没有鞍点
用Scanf函数从键盘输人数组各元素的值,检查结果是否正确。
题目并未指定二维数组的行数和列数,程序应能处理任意行数和列数的数组。
因此,从理论上来说,应当准备许多种不同行数和列数的数组数据,但这样的工作量太大,一般来说不需要这样做,只需准备典型的数据即可。
如果已指定了数组的行数和列数,可以在程序中对数组元素赋初值,而不必用Scanf司函数。
请读者修改程序以实现之。
3.预习内容
预习教材第7章。
实验7函数
1.实验目的
(l)掌握定义函数的方法;
(2)掌握函数实参与形参的对应关系以及“值传递”的方式;
(3)掌握函数的嵌套调用和递归调用的方法;
(4)掌握全局变量和局部变量动态变量、静态变量的概念和使用方法。
(5)学习对多文件程序的编译和运行。
2.实验内容编程序并上机调试运行。
(1)写一个判别素数的函数,在主函数输人一个整数,输出是否素数的信息。
(习题8.3)
本程序应当准备以下测试数据:
17、34、2、1、O。
分别输人数据,运行程序并检查结果是否正确。
(2)用一个函数来实现将一行字符串中最长的单词输出。
此行字符串从主函数传递给该函数。
(习题8.10)
把两个函数放在同一个程序文件中,作为一个文件进行编译和运行。
把两个函数分别放在两个程序文件中,作为两个文件进行编译、连接和运行。
(3)用递归法将一个整数n转换成字符串。
例如,输人483,应输出字符串“483”。
n的位数不确定,可以是任意的整数。
(习题8.17)
(4)求两个整数的最大公约数和最小公倍数。
用一个函数求最大公约数,用另一函数根据求出的最大公约数求最小公倍数。
(习题8.1)
①不用全局变量,分别用两个函数求最大公约数和最小公倍数。
两个整数在主函数中输人,并传送给函数1,求出的最大公约数返回主函数,然后再与两个整数一起作为实参传递给函数2,以求出最小公倍数,再返回到主函数输出最大公约数和最小公倍数。
②用全局变量的方法,分别用两个函数求最大公约数和最小公倍数,但其值不由函数带回。
将最大公约数和最小公倍数都设为全局变量,在主函数中输出它们的值。
(5)写一函数,输人一个十六进制数,输出相应的十进制数。
(习题8.16)
3.预习内容
(l)教材第8章;
(2)本书第二部分“turboc的上机过程”中的14.9.2小节“对多文件程序进行编译和连接”。
实验8指针
1.实验目的
(1)通过实验进一步掌握指针的概念,会定义和使用指针变量;
(2)能正确使用数组的指针和指向数组的指针变量;
(3)能正确使用字符串的指针和指向字符串的指针变量;
(4)能正确使用指向函数的指针变量;
(5)了解指向指针的指针的概念及其使用方法。
2.实验内容编程序并上机调试运行程序(都要求用指针处理)。
(1)输人三个整数,按由小到大的顺序输出,然后将程序改为:
输人三个字符串,按由小到大顺序输出。
(习题10.1、10.2)
(2)将一个3
3的矩阵转置,用一函数实现之。
(习题10.9)
在主函数中用scanf函数输人以下矩阵元素:
将数组名作为函数实参,在执行函数的过程中实现矩阵转置,函数调用结束后在主函数中输出已转置的矩阵。
(3)有n个人围成一圈,顺序排号。
从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
(习题10.5)
(4)用一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:
intstrcmp(char*pl,char*p2);
设pl指向字符串s1,p2指向字符串s2,要求当sl=s2时,函数返回值为0;如果s1
s2,则返回它们二者第一个不相同字符的ASCII码差值(如“BOY”,与“BAD”的第二个字母不相同,“O”与“A”之差为79-65=14);如果s1>s2,则输出正值;如果s1(习题10.17)
两个字符串s1、s2由main函数输人,strcmp函数的返回值也由main函数输出。
(5)写一个用矩形法求定积分的通用函数,分别求:
说明:
sin、cos、exp已在系统的数学函数库中,程序开头要用#include(习题10.13)
(6)用指向指针的指针的方法对n个整数排序并输出。
要求将排序单独写成一个函数。
n和各整数在主函数中输人,最后在主函数中输出。
(习题10.21)
3.预习内容
预习教材第10章。
注:
第10章实验内容较多,而且需要通过实验深人掌握。
如果可能,最好多花些时旬,把上面列出的实验内容都完成。
本实验内容较多,可分两次完成。
实验9结构体和共用体
1.实验目的
(l)掌握结构体类型变量的定义和使用;
(2)掌握结构体类型数组的概念和使用;
(3)掌握链表的概念,初步学会对链表进行操作;
(4)掌握共用体的概念与使用。
2.实验内容编程序,然后上机调试运行。
(1)有10个学生,每个学生的数据包括学号、姓名、3门课的成绩,从键盘输人10个学生数据,要求打印出3门课总平均成绩,以及最高分的学生的数据(包括学号、姓名、3门课的成绩、平均分数)。
(习题11.5)
要求用input函数输入10个学生数据;用average函数求总平均分;用max函数找出最高分的学生数据;总平均分和最高分学生的数据都在主函数中输出。
(2)13个人围成一圈,从第1个人开始顺序报号1、2、3。
凡报到“3”者退出圈子,找出最后留在圈子中的人原来的序号。
(习题11.9)
本题要求用链表实现。
(3)建立一个链表,每个结点包括:
学号、姓名、性别、年龄。
输人一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删去。
(习题11.11)
(4)输入和运行以下程序
输人两个整数10000、20000给u.i[o]和u.i[l],分析运行结果。
然后将scanf语句改为:
输入60000给b,分析运行结果。
3.预习内容
预习教材第11章。