《高级语言程序设计》实验指导书.docx
《《高级语言程序设计》实验指导书.docx》由会员分享,可在线阅读,更多相关《《高级语言程序设计》实验指导书.docx(52页珍藏版)》请在冰豆网上搜索。
《高级语言程序设计》实验指导书
《高级语言程序设计》
实验指导书
浙江农林大学数学实验室
前言
一、实验的目的
学习C程序设计课程不能满足于能看懂书上的程序,而应当熟练地掌握程序设计的全过程,即独立编写源程序、独立上机调试、独立运行程序和分析结果。
上机实验的目的,绝不仅仅是为了验证教材和讲课的内容,以及自己编写的程序的正确与否。
程序设计课程上机实验的目的是:
1.加深对讲授内容的理解,尤其是一些语法规定。
通过实验来掌握语法规则是行之有效的方法。
2.学会上机调试程序。
通过反复调试程序掌握根据出错信息修改程序的方法。
3.通过调试完善程序。
二、实验前的准备工作
1.了解所用的计算机系统(包括C编译系统)的性能和使用方法。
2.复习和掌握与本实验有关的教学内容。
3.准备好上机所需的程序,切忌不编程或抄别人的程序去上机。
4.对程序中出现的问题应事先估计,对程序中自己有疑问的地方应先作上记号,以便上机时给予注意。
5.准备好调试程序和运行程序所需的数据。
三、实验任务与时间安排
实验序号
实验内容
拟实验时间
实验
形式
1
熟悉开发环境
1
验证性
2
数据类型、运算符和表达式
2
验证性
3
顺序结构程序设计
3
验证性
4
选择结构程序设计
3
验证性
5
循环结构程序设计
4
验证性
6
数组程序设计
5
验证性
7
函数程序设计
(一)
3
验证性
8
函数程序设计
(二)
3
验证性
9
指针程序设计
(一)
3
验证性
10
指针程序设计
(二)
3
验证性
11
结构体与共用体
2
验证性
12
文件操作
1
验证性
13
综合实验
3
设计性
四、完成实验报告
完成实验后,需撰写实验报告。
实验报告中应包含以下内容:
1.实验目的。
2.实验内容。
3.程序清单。
4.运行结果。
5.对运行结果的分析,以及本次调试程序所取得的经验。
实验一熟悉开发环境(验证性)
(上机实验1学时)
一、实验目的
1.了解Windows环境下C语言的运行环境,了解所用的计算机系统的基本操作方法,学会独立使用该系统。
2.了解在该系统上如何编辑、编译、连接和运行一个C源程序。
3.通过运行简单的C源程序,初步了解C源程序的特点。
二、实验内容
1.检查自己所用的计算机系统。
(1)了解Windows资源管理器的使用方法,查找VisualC++6.0所在目录。
(2)启动“记事本”程序,掌握文本文件(后缀名为.txt)的建立方法。
2.学习进入并熟悉VC++6.0集成环境。
(1)在桌面上找到名为“MicrosoftVisualC++6.0”的图标,或通过“开始”菜单
进入VisualC++6.0,新建一个名为“实验一”的工程。
(2)熟悉VC++6.0的集成环境,了解各菜单项有哪些子菜单。
3.练习在工程“实验一”中编辑并运行简单的C源程序。
(1)新建一个C源文件Exercise1_1.c(程序见教材例1.1),注意区分大小写,在英
文模式输入代码。
(2)编译、连接并运行程序,并熟悉Ctrl+F7、F7、Ctrl+F5等快捷键的作用。
(3)新建一个C源文件Exercise1_2.c(程序见教材例1.3)。
运行程序,若程序有
错(出现error(s)),则修改后继续运行程序。
当没有错误信息时,输入:
2,5
并按Enter键,查看运行结果。
4.新建一个C源文件Exercise1_3.c,编辑并运行一个自己编写的程序,程序的
功能是求两个整数的最小者,要求如下(譬如输入:
6,11):
(1)在输入两个整数之前,有语句提示“请输入两个数:
”。
(2)最终输出结果为“较小数为6”。
三、实验步骤
1.启动VisualC++6.0
单击“开始/程序/MicrosoftVisualStudio6.0/MicrosoftVisualC++6.0”,得到VisualC++6.0启动后的用户界面,如图1-1所示。
*2.创建新工程
(1)单击菜单“文件/新建”,显示“新建”对话框,如图1-2所示。
(2)在此对话框的列表栏中,选择“Win32ConsoleApplication”(Win32控制台应用程序)。
在“工程名称”栏中输入一个工程名,如“实验一”。
在“位置”栏选择(或输入)工程所在的路径,如图中所示“D:
\C实验\实验一”。
单击“确定”按钮。
(3)再单击的“Win32ConsoleApplication-步骤1共1步”对话框中选择一个空工程(Anemptyproject)单选项。
然后单击“完成(Finish)”按钮,如图1-3所示。
(4)在“新建工程信息”对话框中单击“确认”按钮,完成工程创建过程。
图1-1VisualC++6.0用户界面
图1-2“新建”对话框
3.创建C源程序文件
(1)选择“文件”菜单项,出现一个下拉式菜单,再选择该菜单中的“新建”选项(热键为Ctrl+N),打开“新建”窗口。
(2)选择“文件”,在它的下拉列表框中选择“C++SourceFile”,如图1-4所示。
在右边的“文件名”栏中输入你要创建的C源程序名字,譬如“eg1_1.c”,再单击“确定”,出现编辑屏幕,如图1-5所示。
点左边窗口下方的“FileView”,可以看到“实验一Files”下有3个文件夹:
“SourceFiles”、“HeaderFiles”和“ResourceFiles”。
其中“SourceFiles”文件夹下面可以找到新创建的文件“eg1_1.c”。
(3)在“C源程序编辑”窗口下编辑C源程序。
在编辑窗口键入C源程序。
如图
图1-3“Win32ConsoleApplication-Step1of1”对话框
图1-4“新建C源文件”对话框
1-6所示。
4.对源程序进行编译
按热键“Ctrl+F7”或通过“组建”菜单中的“编译”命令,或使用工具栏中的“编译”工具进行编译(如图1-7所示),生成目标程序(eg1_1.obj)。
在编译过程中发现的错误显示在屏幕下方的“编译”窗口中。
上述程序的“编译”窗口,如图1-8所示。
5.将目标程序进行连接
编译无错误后,按热键“F7”或执行“组建”菜单中的“组建”命令或通过工具栏中的“连接”工具,连接成功后,生成可执行文件实验一.exe(如果刚开始没有新建工程“实验一”,只是新建一个源程序,得到的将是eg1_1.exe),见图1-9。
图1-5编辑C源程序窗口
图1-6编辑C源程序
编译连接运行
图1-7工具栏中的“编译”、“连接”、“运行”命令
图1-8“编译”窗口
图1-9“连接”窗口
6.执行程序
按热键“Ctrl+F5”,或通过“组建”菜单中的“执行”命令,或通过工具栏中的“!
”工具运行程序。
这时,运行该可执行文件,并将结果显示在另外一个显示执行文件输出结果的窗口中,如图1-10所示。
图1-10控制台窗口
7.退出VC++6.0环境
单击菜单“文件/退出”,可以退出VC++6.0环境,回到Windows环境。
※如何关闭/打开工作空间
单击菜单“文件/关闭工作空间”,关闭工作空间。
再单击菜单“文件/打开工作空间”,在弹出的对话框中选定“D:
\C实验\实验一\实验一.dsw”,单击“打开”按钮,则可打开工作空间,对已建立的工程文件进行修改。
*如果只要求建立一个C源程序,可以跳过步骤2。
若要求同时建立几个源文件,必须先完成步骤2。
四、实验要求
1.复习教材有关内容。
2.掌握C控制台程序的开发、调试步骤。
3.完成实验报告。
实验二数据类型、运算符和表达式(验证性)
(上机实验2学时)
一、实验目的
1.掌握C语言的基本数据类型。
2.理解常量、变量的意义与区别。
3.理解不同类型的数据在内存中的存储形式(注意区别字符常量与字符串常量)。
4.掌握运算符的规则。
5.掌握不同数值类型的混合运算规则。
二、实验内容与步骤
1.新建源文件Exercise2_1.c,比较整型数据、字符型数据以及字符串型数据的区别与联系。
/*Exercise2_1.c*/
#include
intmain()
{charc1,c2;//第3行
c1='a';c2='b';//第4行
printf("%c%c\n",c1,c2);
printf("%d,%d\n",c1,c2);
return0;
}
(1)运行此程序。
(2)将第3行改为:
intc1,c2;
然后再运行程序,并观察结果是否相同。
说明整型数据与字符型数据有什么关系?
(3)将第4行依次改为:
c1=a;c2=b;
c1="a";c2="b";
每改一次后,都运行程序,观察结果。
说明单引号“'”能去掉吗?
能改成双引号“"”吗?
(4)请修改程序,使输出结果为一个笑脸符号和一个百分比符号“%”。
2.新建源文件Exercise2_2.c,体会C编译系统自动的数据类型转换,问'a'与a有什么区别?
/*Exercise2_2.c*/
#include
intmain()
{
inta=2;
floatb=1.0;
doublec=2.5;
printf("%f\n",'a'%3+a+b-c);
return0;
}
3.将习题编程并上机运行。
(1)源文件如下,源文件名Exercise2_3.c
/*Exercise2_3.c*/
#include
intmain()
{
inti,j,m,n;
i=8;
j=10;
m=++i;//第7行
n=j++;
printf("%d,%d,%d,%d\n",i,j,m,n);
return0;
}
①运行程序,注意i,j,m,n的值,分析赋值运算符“=”与自增运算符“++”的优先级和结合性。
能否找到等价的两个语句可以替代第7行的语句“m=++i;”?
②将第7,8行改为:
m=i++;
n=++j;
再次运行程序,并分析运行结果。
(2)按第3章习题6的要求编程并上机运行,源文件名Exercise2_4.c。
要将“China”译成密码,密码规律是:
用原来的字母后面第4个字母代替原来的字母。
例如,字母“A”后面第4个字母是“E”,用“E”代替“A”,因此,“China”应译为“Glmre”。
请编一程序,用赋初值的方法使c1、c2、c3、c4、c5这5个变量的值分别为'C','h','i','n','a',经过计算,使c1、c2、c3、c4、c5分别变为:
'G','l','m','r','e',并输出。
※程序提示:
①定义变量;(变量应该定义成何种类型?
)
②赋值;(如何操作?
)
③输出;
三、实验要求
1.复习教材有关内容。
2.完成实验报告。
实验三顺序结构程序设计(验证性)
(上机实验3学时)
一、实验目的
1.掌握C语言的语句。
2.掌握输入输出函数的格式。
3.掌握顺序结构的程序设计方法。
二、实验内容与步骤
1.掌握各种格式转换符的正确使用方法,源文件名Exercise3_1.c。
/*Exercise3_1.c*/
#include
intmain()
{charc1,c2;
inti1,i2;
floatf1,f2;
doubled;
unsignedshortu1,u2;
c1='a';c2='b';/*第7行*/
i1=48;i2=49;/*第8行*/
f1=3.56f;f2=-6.87f;/*第9行*/
d=55.5555;/*第10行*/
u1=1;u2=-1;
printf("c1=%c,c2=%c\n",c1,c2);
printf("i1=%d,i2=%d\n",i1,i2);
printf("\n");
printf("f1=%6.2f\nf2=%6.2f\n",f1,f2);
printf("ABCDEF\n");
printf("d1=%15.8f\n",d);
printf("u1=%u,u2=%u\n",u1,u2);
return0;
}
(1)运行程序并分析运行结果,特别要注意u2的输出结果。
(2)分析程序第9行为什么加字母“f”,加上有什么意义?
在此基础上,修改程序的第7行:
c1=a;c2=b;
分析运行结果。
(3)依次修改程序第8-10行语句,采用scanf函数接收从键盘输入的数据,特别注意double型数据的输入:
scanf("%d,%d”,&i1,&i2);//输入int型数据用%?
scanf("%f,%f",&f1,&f2);//输入float型数据用%?
scanf("%lf",&d);//输入double型数据用%?
运行程序,输入数据如下(注意每组数据间的空格,相邻的两个用“,”隔开的数据为一组):
48,493.56,-6.8755.5555
2.编写程序,练习小数的输出用法,源文件名Exercise3_2.c。
按第3章习题7的要求编写程序并运行:
设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积,圆球表面积、圆球体积、圆柱体体积。
用scanf输入数据,输出计算结果,输出时要有文字说明,取小数后2位数字。
程序中的π用PI代替。
※程序提示:
/*Exercise3_2.c*/
#definePI3.14159
定义变量;/*变量应该定义成何种类型?
*/
输入;/*输入格式?
*/
求解;/*程序中的语句和数学公式的区别?
*/
输出;/*输出格式?
*/
3.参考例3.9,用getchar函数读入两个字符给变量c1和c2,然后分别用putchar函数和printf函数输出这两个字符。
源文件名Exercise3_3.c。
※程序提示:
/*Exercise3_3.c*/
定义变量;/*变量应该定义成何种类型?
*/
输入;/*用getchar函数怎么输入两个字符?
*/
输出;
注意:
输入两个字符时必须是连续的,两个字符之间不能有分隔字符,否则系统会把分隔字符作为第二个字符读入。
(1)变量c1,c2应定义为字符型还是整型?
还是两者皆可。
(2)如想读入字符’a’和’b’给变量c1和c2,用getchar函数和scanf函数分别应该怎么读入数据?
两个函数各有什么特点?
(3)要求输出c1和c2值的ASCII码,应如何处理?
用putchar函数还是printf函数?
4.(项目拓展题)使用printf函数编写学生成绩管理系统的用户界面。
源文件名Exercise3_4.c。
运行结果如下:
三、实验要求
1.复习教材有关内容。
2.完成实验报告。
实验四选择结构程序设计(验证性)
(上机实验3学时)
一、实验目的
1.掌握关系运算符和逻辑运算符。
2.掌握if语句。
3.掌握switch语句。
4.掌握选择结构程序设计。
二、实验内容与步骤
1.求下列分段函数的输出值,程序运行中动态输入x的值,根据x所在范围决定输出值。
用scanf函数输入x的值,求y的值,并用“%.2f”的格式输出。
源文件名Exercise4_1.c。
※程序提示:
/*Exercise4_1.c*/
定义变量;/*变量应该定义成何种类型?
*/
输入;/*输入格式?
*/
求解;/*采用什么结构?
*/
输出;/*输出格式?
*/
2.输入一个百分制成绩,输出成绩等级A、B、C、D、E和成绩(保留2位小数)。
90分及以上为A,80-89为B,70-79为C,60-69为D,60分以下为E。
要求从键盘输入成绩,然后输出相应等级,分别用if语句和switch语句实现,参考例5.7。
源文件名Exercise4_2.c和Exercise4_3.c。
※程序提示:
(1)使用if语句的main函数结构如下:
/*Exercise4_2.c*/
定义变量;/*变量应该定义成何种类型?
*/
输入;/*输入格式?
*/
根据不同的成绩段,得到相应的等级;/*采用if语句*/
输出;/*输出格式?
*/
(2)使用switch语句的main函数结构如下:
(参考例4.6)
/*Exercise4_3.c*/
定义变量;
输入;
根据不同的成绩段,得到相应的等级;/*采用switch语句*/
问:
如何将一个分数段的分数转化成一个确定值?
break语句是否可加可不加,将break语句去掉再试一下。
输出;
3.输入4个整数,按由小到大顺序输出。
得到正确结果后,修改程序使之按由大到小的顺序输出,输出格式“%3d”。
参考例4.3,源文件名Exercise4_4.c。
※程序提示:
/*Exercise4_4.c*/
定义变量;/*变量应该定义成何种类型?
*/
输入;/*输入格式?
*/
将4个整数从小到大排列;/*可以采用switch语句吗?
*/
输出;
4.输入一个不多于3位的正整数,要求输出它是几位数。
源文件名Exercise4_5.c。
应准备以下测试数据:
①要处理的数为1位正整数;
②要处理的数为2位正整数;
③要处理的数为3位正整数;
除此之外,程序还应当对不合法的输入作必要的处理,并给出中文提示。
例如:
①输入负数或零;
②输入的数超过3位
※程序提示:
/*Exercise4_5.c*/
定义变量;/*变量应该定义成何种类型?
*/
输入;/*输入格式?
*/
判断是几位数以及不合法输入的处理;/*如何判断*/
输出;
5.(项目拓展题)在学生成绩管理系统中,使用getchar函数输入用户选择的编号,并显示结果。
输入数字字符1~5,显示“你正使用学生成绩**子系统”,输入6,显示“你已退出系统”,输入其他数字字符,显示“输入有误,请重新输入!
”。
源文件名Exercise4_6.c。
运行结果如下:
三、实验要求
1.复习教材有关内容。
2.完成实验报告。
实验五循环结构程序设计(验证性)
(上机实验4学时)
一、实验目的
1.掌握“当型”和“直到型”循环结构。
2.掌握while语句和do-while语句并区分二者的异同。
3.掌握for语句。
4.掌握循环结构程序设计。
二、实验内容与步骤
1.输入两个正整数m和n,求它们的最大公约数和最小公倍数。
采用两种方法,
辗转相除法和连续整数检测法。
源文件名Exercise5_1.c和Exercise5_2.c,要求:
※程序提示:
(1)辗转相除法的主要算法
/*Exercise5_1.c*/
定义变量;/*变量应该定义成何种类型?
*/
输入;/*输入格式?
*/
求出最大公约数和最小公倍数;
将m,n的值分别存储在两个变量tm,tn中;
若m小于n,则交换m和n的值;/*保证m大于n*/
r=m%n;/*m是被除数,n是除数,r是m除以n的余数*/
while(r)
/*r不为0时,将原来的除数作为新的被除数,原来的余数作为新的除数,并做求余操作得到新的r值*/
{
m=n;
n=r;
r=m%n;
}
n即为最大公约数;
tm*tn/n即为最小公倍数;/*为什么要借助tm,tn?
为何不能直接用m*n/n?
*/
输出;
(2)连续整数检测法的主要算法
/*Exercise5_2.c*/
定义变量;
输入;
求出最大公约数和最小公倍数;
从m和n中的大的数开始往下检测,直到第一个能被两个数整除的数r为止,则r即为两个数的最大公约数;/*如何求最小公倍数?
*/
输出;
2.输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。
源文件名Exercise5_3.c。
※程序提示:
/*Exercise5_3.c*/
定义变量;/*变量应该定义几个,对应何种类型?
*/
输入并统计个数;/*判断输入字符未结束,用(x=getchar())!
='\n'*/
/*采取什么结构?
*/
/*如何判断数字字符?
*/
输出;
3.编程求1到n中能被3或7整除的数之和,参考例5.3。
分别用for循环语句
和while循环语句完成本题。
源文件名Exercise5_4.c和Exercise5_5.c。
4.在正整数中找出被3,5,7除余数分别为1,1,5的最小正整数。
源文件名Exercise5_6.c。
5.(百钱百鸡问题)100元钱买100只鸡。
其中公鸡5元/只,母鸡3元/只,小鸡1元3只,问公鸡,母鸡和小鸡各多少只?
要求用二重循环和三重循环实现。
源文件名Exercise5_7.c和Exercise5_8.c。
※程序提示:
公鸡,母鸡和小鸡最多为多少只?
三种鸡的数量有什么关系?
6.(素质拓展题)1、2、3这3个数字,能组成多少个互不相同且无重复数字的三位正整数?
输出符合条件的所有3位数和个数。
源文件名Exercise5_9.c。
※程序提示:
定义变量i,j,k分别表示百位,十位,个位,则i,j,k应该定义成何种数据类型,取值范围为?
i,j,k互不相同如何表示?
运行结果如下:
7.(素质拓展题)打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。
例如:
153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
源文件名Exercise5_10.c。
※程序提示:
定义变量n,i,j,k分别表示三位数及对应的百位,十位,个位,则i=n/100,j=?
k=?
各位数字立方和等于该数本身如何表示?
运行结果如下:
三、实验要求
1.复习教材有关内容。
2.完成实验报告。
实验六数组程序设计(验证性)
(上机实验5学时)
一、实验目的
1.掌握一维数组和多维数组的定义。
2.掌握对数组的引用规则。
3.理解多维数组的特殊性。
4.掌握字符数组和字符串。
二、实验内容与步骤
1.用选择法对5个整数从小到大排序,5个整数用scanf函数输入,并将排序后的结果采用“%3d”的格式输出。
参考例6.3,源文件名Exercise6_1.c。
.
※程序提示:
定义变量和数组;/*数组长度有什么要求?
*/
输入5个整数放到数组中;/*如何输入?
*/
输出5个整数;
选择排序;
for(i=1;i<5;i++)/*对应数组声明inta[6]的情况*/
{
min=i;/*min是最小数所在位置的下标*/
for(j=i+1;j<=5;j++)
if(a[min]>a[j])min=j;
/*扫描后面的元素,若有更小的数,更新最小数的下标min*/