语言程序设计实验指导书.docx
《语言程序设计实验指导书.docx》由会员分享,可在线阅读,更多相关《语言程序设计实验指导书.docx(23页珍藏版)》请在冰豆网上搜索。
语言程序设计实验指导书
C语言程序设计
实验指导书
专业:
____________班级:
_______________组序:
_____________
学号:
______________姓名:
_______________
中国矿业大学管理学院
200年月
《C语言程序设计》实验指导书
实验项目如下表:
序号
实验项目名称
计划学时
计划每组人数
实验属性
开出要求
内容提要
1
实验一熟悉TurboC的上机过程
2
1
验证
必选
2
实验二数据类型、运算符和表达式
2
1
设计
必选
3
实验三顺序程序设计
2
1
设计
必选
4
实验四逻辑运算和判断选取控制
2
1
设计
必选
5
实验五循环控制
2
1
设计
必选
6
实验六数组
4
1
设计
必选
7
实验七函数
4
1
设计
必选
8
实验八编译预处理
1
1
设计
必选
9
实验九指针
4
1
设计
必选
10
实验十结构体和共用体
4
1
设计
必选
11
实验十一位运算
1
1
设计
必选
12
实验十二文件
4
1
设计
必选
合计
实验一熟悉TurboC的上机过程
一、实验目的:
1.熟悉TurboC2.0的软件环境,掌握使用TC进行编辑、编译、连接和运行的方法。
2.通过运行简单的C程序,掌握C源程序的特点。
二、实验内容:
1.运行TurboC2.0程序,进入C程序设计环境。
2.选择工作目录
工作目录即用户文件所在的目录,是程序当前的工作目录。
工作目录的改变使用菜单命令File/ChangeDir命令,然后输入已经存在的目录作为新的当前工作目录。
File/Directory菜单命令显示当前目录下的文件列表。
3.建立工作环境
建立工作环境的作用是告诉TC包含文件、库文件存放的位置,以及输出文件存于何处。
使用菜单命令Options/Directories进行设置,按回车键,在弹出的窗口内设置新的文件路径。
目标文件目录(Outputdirectory)存放输出的.obj、.exe文件,可建立一个新目录来存放输出文件。
Pickfilename:
Pick文件名,它保存了用户退出系统时曾经编辑的文件相关信息(文件名,光标位置
等等),以便使用File/Pick菜单命令把最近加载到编辑器的8个文件列出来(称为Pick表),然后可以选择这8个文件中的任一个进行编辑。
此时Pick表可以自动恢复上次退出系统的编辑状态,继续程序的开发。
在编辑状态下,用Alt+F6可以在Pick表中的文件进行跳转操作,而不必退出系统。
如果没有指定Pick文件名,可以新建立或使用系统的默认Pick文件Tcpick.tcp。
可以具有多个pick文件,但当前的环境只能使用其中一个。
4.保存环境设置
将上面设置的环境保存到一个配置文件中,默认名字为Tcconfig.tc,以便启动TurboC时去加载已保存的环境设置。
5.编辑源文件
使用File/Load菜单命令,加载已经存在的C源文件。
建立新文件用Fiel/New命令。
请输入任一C源程序,Insert键可以在插入和改写状态之间切换。
使用Tab键进行缩进。
编辑完毕,用File/Save或F2保存编辑结果到新文件中。
6.编译、连接
(1)单文件源程序的编译、连接
源程序先经过编译,生成目标文件(.obj文件),然后将目标文件进行连接,生成可执行文件(.exe)。
方法一:
CompiletoOBJ:
将源程序编译成.obj文件。
LinkEXEfile:
将目标文件及库文件连接在一起,生成.EXE文件。
方法二:
MakeEXEfile:
直接由源文件,经过编译、连接,然后生成可执行文件。
如果编译、连接中发生错误,在Message窗口中显示出错信息,修改错误后,可重新编译、连接。
(2)多文件源程序的编译、连接
可以用长的源程序分割成几个文件,分别编译然后生成可执行文件。
此时使用Project菜单。
步骤:
第一步:
有三个文件f1.c、f2.c、f3.c组成一个完整的C程序,分别建立三个文件,将f1.c、f2.c、f3.c三个文件保存到同一个文件夹中(如d:
\tc\project\)。
f1.c:
#include"stdio.h"
externa,b;
externmax(intx,inty);
main()
{
inte=1,f=2;
printf("%d\n",max(a,b));
printf("%d\n",max(e,f));
}
f2.c:
inta=3,b=4;
f3.c:
intmax(intx,inty)
{
returnx>y?
x:
y;}
第二步:
构造Project文件,在编辑状态下,编辑一个扩展名为.prj的文件,文件的内容为:
f1
f2
f3
使用Project/Projectname菜单命令,按回车,输入Project文件名,例如:
wang.prj。
使用菜单命令File/Changedir将当前的工作目录设为d:
\tc\project\。
用菜单命令File/Writeto将project文件保存,文件路径为d:
\tc\project\wang.prj。
第三步:
构造EXE文件,按F9键即将三个文件编译、连接成一个EXE文件,文件名为wang.exe。
如果编译、连接出现错误,则必须进行修正,然后再编译。
7.运行程序
如果编译、连接完全正确,则可以用Run命令运行程序。
Run/Run命令将完成编译、连接、运行任务。
如果可以确认源程序无错误,可以直接使用该命令。
程序运行完毕后,仍回到TC环境,用Run/Userscreen查看程序的输出结果,看完后按任意键回到TC环境。
附:
一、TC的热键
F1:
提供当前位置的帮助信息F2:
编辑器里的文件存盘F3:
加载文件
F4:
程序运行到光标所在行F5:
放大/缩小活动窗口F6:
开关活动窗口
F7:
在调试模式下运行程序,跟踪进函数内部
F8:
在调试模式下运行程序,跳过函数调用(单步执行)
F9:
执行make,建立EXE文件F10:
菜单与活动窗口之间切换
Alt+F6:
在pick表中的文件间切换
Alt+主菜单命令的首字符(F、E、R、C、P、O、D、B),执行菜单命令
Esc:
退出菜单
二、
编辑状态栏
Linen:
光标所在行号
Coln:
光标所在列号
Insert:
插入/改写状态,用Insert键转换
Indent:
自动缩进,用Ctrl+OI转换
Tab:
表明能否插入Tab键,用Ctrl+QT切换
三、编辑命令:
在编辑状态下,按F1键盘可以查看编辑命令,包括:
光标移动命令、插入删除命令、块命令、其它命令。
四、菜单
1.文件菜单:
Load:
加载文件;Pick:
最近装进编辑窗口的8个文件列成一个表,让用户选择其一。
New:
建立新文件;Save:
存盘
Writeto:
将编辑窗口的内容写入新文件中,如果文件存在,在覆盖旧文件。
Directory:
显示目录及文件列表
ChangeDir:
改变当前目录
OSShell:
暂时退出TurboC,转到DOS提示符下,输入EXIT返回TurboC。
Quit:
退出
2.运行菜单:
Run/run:
运行程序,可以用Options/Argument传递参数。
编译连接时将Debug/SourceDebugging开关置为None或Standalone,则产生的可执行代码将不包含调试信息,不能进行程序的调试,但可执行文件的字节数减少。
一般在程序调试之前,将Debug/SourceDebugging开关置为On。
ProgramReset:
终止当前调试。
GotoCursor:
程序运行到光标所在的行停止。
Traceinto:
单步执行,但可以跟踪到调试器可访问的函数内部
StepOver:
单步执行,不进入函数内部
3.Option菜单:
可选择编译器任选项(如存储模式、编辑时任选项、诊断及连接时任选项)等等
4.Debug菜单:
检查、改变变量的值,查找函数。
选择程序编译时是否在执行代码中插入调试信息
5.Break/Watch:
增加、删除、编辑监视表达式,设置、清除、执行至断点。
实验二数据类型、运算符和表达式
一、实验目的:
1.掌握C语言数据类型,熟悉如何定义整型、字符型、实型变量,以及对它们赋值的方法,了解以上数据类型输出时所使用的格式转换符号。
2.学会使用C的有关运算符,以及包含这些运算符号的表达式,特别是自加(++)和自减(——)运算符的使用。
3.进一步熟悉C程序的编辑、编译、连接和运行的过程。
二、实验内容:
1.输入以下程序,并编译、运行,分析运行结果:
main()
{charc1,c2;
c1=97;c2=98;
printf(″%c%c″,c1,c2);
}
在此基础上:
(1)加一个printf语句,并运行之。
printf(″%d,%d″,c1,c2);
(2)再将第二行改为:
intc1,c2;
再运行程序。
(3)再将第三行改为:
c1=300;c2=400;
再运行,并分析结果。
2.输入并运行以下程序:
main()
{inti,j,m,n;
i=8;j=10;
m=++i;n=j++;
printf(″%d,%d,%d,%d″,i,j,m,n);
}
分别作以下改动并运行:
(1)将第四行改为:
m=i++;n=++j;
(2)程序改为:
main()
{inti,j;
i=8;j=10;
printf(″%d,%d″,i++,j++);
}
(3)在
(2)的基础上,将printf语句改为:
printf(″%d,%d″,++i,++j);
(4)再将printf语句改为:
printf(″%d,%d,%d,%d″,i,j,i++,j++);
(5)程序改为:
main()
{inti,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);
}
3.先判断以下程序的输出结果,在运行验证。
(1)
main()
{inti=3,j=2,a,b,c,d;
d=(i*3,j=10);
a=(--i==j++)?
--i:
++j;
b=i++;
c=j;
printf(″%d,%d,%d,%d\n″,a,b,c,d);
}
(2)
main()
{inta=110,b=017;
printf(″%x,%d\n″,a++,++b);
}
(3)
main()
{
inta=-1;b=36,c;
c=(++a>0)&&!
(b--<=0);
printf(″%d,%d,%d\n″,a,b,c);
}
4.补充完整以下程序,将从键盘输入的任意大写字母转换为小写字母,将小写字母转换为大写字母。
main()
{charc;
scanf(″%c″,&c);
.......
printf(″%c″,c);
}
实验三顺序程序设计
一、实验目的:
1.掌握赋值语句的使用。
2.掌握数据的输入输出方法,能正确使用各种格式转换符。
二、实验内容:
1.输入以下程序:
#include"stdio.h"
main()
{
inti;
charj;
for(i=1;i<10;i++)
{
scanf("%c",&j);
printf("%c",j);
}
}
(1)运行程序,输入a↙b↙c↙d↙e↙f↙g↙h↙i↙
观察程序的执行结果,是否能够输出字母a,b,c,d,e,f,g,h,i。
为什么?
(2)在scanf语句后面加上语句:
getchar();
运行程序,输入a↙b↙c↙d↙e↙f↙g↙h↙i↙
观察程序的执行结果,是否能够输出字母a,b,c,d,e,f,g,h,i。
为什么?
(4)在源程序的基础上,将scanf语句的%c前面加一空格,即改为:
scanf("└┘%c",&j);
运行程序,输入└┘a↙└┘b↙└┘c↙└┘d↙└┘e↙└┘f↙└┘g↙└┘h↙└┘i↙
观察程序的执行结果,是否能够输出字母a,b,c,d,e,f,g,h,i。
为什么?
运行程序,输入└┘a└┘b└┘c└┘d└┘e└┘f└┘g└┘h└┘i↙
观察程序的执行结果,是否能够输出字母a,b,c,d,e,f,g,h,i。
为什么?
2.做教材上的习题3.6
3.编制一程序,用getchar函数输入字符,然后用putchar函数输出字符,同时要求输出字符的ASCII码。
分别考虑用int和char型变量来接收键盘输入的字符,两者是否等价?
实验四逻辑运算和判断选取控制
一、目的要求
1.了解C语言表示逻辑量的方法(以0代表“假”,以1代表“真”);
2.学会正确使用逻辑运算符和逻辑表达式;
3.熟练掌握if语句和switch语句
二、实验内容
先编程序,解以下问题,然后上机调试运行程序。
1.编写一程序,从键盘输入字符,判别输入字符是数字、大写字母还是小写字母,输出判别结果。
2.给出一个不多于5位的正整数,要求:
(1)求出它是几位数;
(2)分别打印出每一位数字;
(3)按逆序打印出各位数字。
3.任意输入5个字母,如果输入的不是字母,程序应能提示重新输入,然后按照字母的ASCII码值从小到大的顺序输出。
4.有一函数,
,用scanf函数输入任意x的值,求y的值。
实验五循环控制
一、实验目的
1.熟悉用while语句,do-while语句和for语句实现循环的方法。
2.掌握在程序设计中用循环的方法实现各种算法(如穷举、迭代、递推等)。
二、实验内容
编写程序并上机调试运行。
1.输入两个正整数,求其中最大公约数和最小共倍数。
2.输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
3.输出九九表。
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
2
4
6
8
10
12
14
16
18
3
6
9
12
15
18
21
24
27
4
8
12
16
20
24
28
32
36
5
10
15
20
25
30
35
40
45
6
12
18
24
30
36
42
48
54
7
14
21
28
35
42
49
56
63
8
16
24
32
40
48
56
64
72
9
18
27
36
45
54
63
72
81
4.求输入的十个整数中正数的个数及其平均值。
5.两个乒乓球队进行比赛,各出三人。
甲队为A、B、C3人,乙队为X、Y、Z3人。
已抽签决定比赛名单。
有人向队员打听比赛的名单,A说他不和X比,C说他不和X、Z比,请编写找出3对赛手的名单。
(提示:
用循环和判断实现)
实验六数组
一、目的要求
1.掌握一维数组和二维数组的定义、赋值和输入输出的方法;
2.掌握字符数组和字符串函数的使用;
3.掌握与数组有关的算法(特别是排序算法)。
二、实验内容
编写程序并上机调试运行。
1.编写一程序,从键盘输入任意两个字符串,然后将两个字符串连接起来,不要使用strcat函数。
2.编写一程序,从键盘输入任意两个字符串s1和s2,然后比较字符串的大小(字符串比较是从左到右逐位比较),如果s1>s2,输出1;s1=s2,输出0;s13.编写一程序,输入一字符串到数组中,然后将该数组中小写字母转换为大写字母,并复制到另一字符数组中。
(复制时,‘\0’也要复制过去)
4.编写程序,把键盘输入的字符串中的数字字符删除,然后现实该字符串。
实验七函数
一、目的要求
1.掌握定义函数的方法;
2.掌握函数实参与形参的对应关系,以及“值传递”的方式;
3.掌握函数的嵌套调用和递归调用的方法;
4.掌握全局变量和局部变量、动态变量和静态变量的概念和使用方法。
二、实验内容
编写程序,并上机运行之。
1.输入一行字符串,然后写一函数输出该行字符串中最长的单词。
例如Iamastudent中最长的单词为student。
2.写一函数,使输入的一个字符串反序存放,使用“传址”调用方式。
3.写几个函数。
(1)输入10个职工的姓名和职工号;
(2)将职工号由小到大排序,姓名顺序也随之调整;(3)要求输入一个职工号,用折半查找法找出该职工的姓名。
从主函数中输入要查找的职工号,输出该职工姓名。
解释:
折半查找法是先将数据排序,例如有7个数据:
1,3,4,7,10,25,30已经排序,要查找25在序列中的位置。
将序列折半,中间位置为4,中间数为7,如果25等于该中间数则停止,否则继续。
序列分为:
1,3,4和10,25,30。
25比4大,显然25不在序列1,3,4中;对序列10,25,30重新按照折半法查找,中间数为25,已经查找结束。
4.写一个判断素数的函数,在主函数中输入一个整数,输出是否素数的信息。
实验八编译预处理
一、实验目的:
1.掌握宏定义的方法;
2.掌握文件包含处理方法;
3.掌握条件编译的方法;
二、实验内容:
1.定义一个带参数的宏,使两个参数的值交换。
定义另一个带参数的宏,它计算两个参数的最小值。
写出程序,输入两个数作为使用宏时的实参,输出已交换后的两个值,并求出最大值。
2.用条件编译的方法实现以下功能:
输入一行电报文字,可以任选两种输出,一为原文输出;一为将字母变成其下一字母(如’a’变成’b’,…,‘z’变成’a’。
其它字符不变)。
用#define命令来控制是否要译成密码。
例如:
#defineCHANGE1
则输出密码。
如果
#defineCHANGE0
则不译成密码。
按原码输出。
使用条件编译的方法来处理。
3.下面有一程序,请将源程序分为三部分,再进行编译处理。
f1.h:
#include"stdio.h"
#include"string.h"
intmore(char,char);
intmin(int,int);
intstrcmp1(charstr1[],charstr2[]);
f2.c:
main()
{
chara1[]="china";
chara2[]="chinee";
inta;
a=strcmp1(a1,a2);
if(a==1)
printf("str1isgreaterthanstr2\n");
elseif(a==-1)
printf("str1islessthanstr2\n");
elseprintf("str1isequaltostr2\n");
}
f3.c:
intmore(charx,chary)
{
intz;
z=(x>y)?
1:
(x==y)?
0:
-1;
returnz;
}
intmin(intx,inty)
{
intz;
z=(xx:
y;
returnz;
}
intstrcmp1(charstr1[],charstr2[])
{
charlen,i;
intk;
len=min(strlen(str1),strlen(str2));
for(i=0;i<=len;i++)
{
k=more(str1[i],str2[i]);
if(k==-1)
break;
if(k==1)
break;
}
returnk;
}
实验九指针
一、实验目的:
1.掌握指针的概念,会定义和使用指针变量;
2.学会使用数组的指针和指向数组的指针变量;
3.学会使用字符串的指针和指向字符串的指针变量;
4.学会使用指向函数的指针变量;
5.了解指向指针的指针的概念及其使用方法。
二、实验内容:
编写程序,并上机运行之(要求使用指针处理)。
1.编制一函数实现任意3*3阶矩阵的转置,函数的参数用指针形式。
在主函数中输入矩阵元素。
2.从键盘输入任意两个字符串s1和s2,然后用函数实现比较字符串的大小(字符串比较是从左到右逐位比较),如果s1>s2,函数返回1;s1=s2,函数返回0;s1函数的参数采用指针形式。
3.用指向指针的指针的方法对5个字符串排序并输出。
提示:
用二维数组存放5个字符串,设计一个指针数组或二维指针,指向该字符串数组,用strcmp()函数比较字符串的大小。
4.编写一函数,将一个含n个字符的字符串从其第m个字符开始的k个字符复制到另一字符串中。
函数的原型为copystr(char*str1,char*str2,intm,intk)。
5.自行编写一程序,体会使用指向函数的指针的使用方法。
实验十结构体和共用体
一、目的要求:
1.掌握结构体类型变量的定义和使用;
2.掌握结构体类型数组的概念和应用;
3.掌握链表的概念,初步学会对链表进行操作;
4.掌握公用体的概念与使用。
二、实验内容:
1.有5个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入5个学生的数据,要求打印出三门课总平均成绩,以及最高分的学生的数据(包括姓名、学号、三门课的成绩、平均分数)。
要求用一个input函数输入成绩;用average函数求总平均分;用max函数找出最高分学生数据;总平均分和最高分的学生的数据在主函数中输出。
2.建立一个链表,每个结点包括:
学号、姓名、性别、年龄。
输入一个年龄,如果链表中的结点所包含的年龄等于此年龄,则将此结点删除。
3.已有a,b两个链表,每个链表中等结点包括学号、成绩。
要求把两个链表合并,按学号升序排列。
4.输入和运行以下程序:
#include"stdio.h"
uniondata
{inti[2];
floata;
longb;
charj[4];
};
main()
{
uniondatau;
scanf("%d,%d",&u.i[0],&u.i[1]);
printf("%d,%d,%f,%ld,%c,%c,%c,%c",
u.i[0],u.i[1],u.a,u.b,u.j[0],u.j[1],u.j[2],u.j[3]);
}
输入两个整数10000,20000给u.