《高级语言实验指导书.doc》由会员分享,可在线阅读,更多相关《高级语言实验指导书.doc(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、高级语言程序设计实验指导书(适用新媒体、电子信息学院各专业本科)浙江传媒学院新媒体学院实验一 C语言上机入门实验名称: C语言上机入门实验目的:1、熟悉C语言程序的运行环境和操作界面。2、初步了解运行一个C语言程序的基本步骤和操作流程。3、通过运行简单的C程序,初步了解C源程序的语法结构和特点。实验学时:2学时教学过程:一、实验原理及分析:熟悉在Visual C+中运行一个C语言程序的操作界面及一般流程,运行C语言程序的一般步骤包括编辑、编译、构件和运行。二、实验内容:1、开机,进入Visual C+系统,调用C语言编辑程序。2、熟悉一些C语言常用命令的使用。#includemain()pri
2、ntf(“This is a C program.”)printf(“I am a student.”)3、自定义一个工程名和文件名,输入以下源程序:4、编译该文件,观察编译时的信息,注意程序是否出错,若是,请重新编辑,直到无编译错误为止,注意得到的目标文件名是什么?5、构件并运行目标文件。6、参考第一章例子编辑一个新文件,程序为:从键盘输入两个整数,输出两整数之和,编译并运行。7、参考第一章例子编辑一个新文件,编写计算梯形面积的程序,从键盘输入梯形的上底、下底和高三个整数,编译并运行。8、退出。三、注意事项:1、在Visual C+系统中要进入C语言源程序的编辑界面步骤较多,应注意建立正确的
3、工程名和文件名。2、应为源程序建立一个合适的目录。3、了解C语言程序的基本语法结构,比如源程序必须包含#include命令;括号成对使用;每条语句以分号结束等等。实验二 数据类型、运算类型和表达式实验名称:数据类型、运算类型和表达式实验目的:1、掌握C语言的数据类型,熟悉如何定义一个整型、实型和字符型变量,以及对它们赋值的方法,了解以上数据类型在输入输出时所使用的格式控制符。2、学会使用C语言的有关算术运算符,以及包含这些运算符的表达式,特别注意理解自增运算符(+)和自减运算符(-)的含义及使用方法。3、进一步熟悉C语言程序的编辑、编译、连接和运行的全过程。实验学时:2学时教学过程:一、实验原
4、理及分析:C语言的数据类型可分为基本类型、构造类型、指针类型和空类型,不同数据类型之间可进行转换,包括自动转换和强制转换;C运算符从功能上可分为算术、赋值、逻辑和关系等运算符,从运算符需要运算对象的数量上可分为单目、双目和三目运算符。通过本实验理解数据类型中的基本类型:整型、实型和字符型的定义和赋值方法以及相关运算符的使用。二、实验内容:#includemain()char c1,c2;c1=97;c2=98;printf(“%c%c”,c1,c2);1、输入以下源程序,编译并运行。在此基础上1) 加一条printf(“%d,%d”,c1,c2)语句,编译并运行;2) 将第三行改为int c1
5、,c2;, 编译并运行;3) 将第四行改为c1=300;c2=400;, 编译、运行并分析运行结果;#includemain()char c1=a,c2=b,c3=c,c4=101,c5=116;printf(a%cb%ctc%ctabcn,c1,c2,c3);printf(tb%c %c,c4,c5);2、输入并运行以下程序,记录运行结果。#includemain()int i,j,m,n;i=8;j=10;m=+i;n=j+;printf(%d, %d, %d, %d,i,j,m,n);3、输入并运行以下程序,记录各运行结果。将程序作以下改动,编译并运行:#includemain()int
6、 i,j;i=8;j=10;printf(%d, %d,i+,j+);1) 将第五行改为m=i+;n=+i;2) 程序改为3) 在2)的基础上,将printf语句改为printf(%d, %d, + i,+j);#includemain()int i,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);4) 程序改为三、注意事项:1、基本数据类型数据在输出时由格式控制符控制,应注意输出列表与格式控制符一一对应。 2、C语言中的自增运算符“+”和自减运算符“-”可以写在变量之前也可写在变量之后,分别构成前缀运
7、算与后缀运算,注意它们的区别。3、赋值语句的作用是令一个变量的值为它右边表达式的运算结果,使用赋值语句时应注意以下几个问题:(1) 形如a=a+1;这种赋值运算是把a原来的值加1后,再把它的值赋给a,如果从数学角度上理解这类式子为“a等于a+1”,则是令人费解的;(2) 注意复合赋值运算符+=、-=、*=、/=、%=等的用法;(3) 注意连续赋值。实验三 顺序结构的程序设计实验名称:顺序结构的程序设计实验目的:1、熟悉顺序结构的程序设计。2、掌握C语言程序的编辑、编译、连接和运行的全过程。3、掌握输入输出控制和基本赋值语句的使用。实验学时:2学时教学过程:一、实验原理及分析:顺序结构的程序设计
8、是最简单的程序设计,常量、变量、运算符和表达式是构成程序的基本成分,除此以外,程序还应包括数据描述(由声明部分实现)和数据操作(由语句来实现),数据描述主要定义数据结构(用数据类型表示)和数据初值,数据操作的任务是对已提供的数据进行加工;另外,C语言中没有专门的输入输出语句,所有的输入输出都是由标准函数库中的输入输出函数来实现。二、实验内容:1、设圆半径r=1.5,圆柱高h=3,求圆周长、圆面积、圆柱体积,编写程序,上机运行。要求用输入函数scanf输入数据,用输出函数printf输出计算结果,输入输出时要有文字说明,保留两位小数。2、要将“china”译成密码,密码规律是:用原来的字母后面第
9、4个字母代替原来的字母。例如,字母“A”后面第4个字母是“E”,用“E”代替“A”。因此“china”应译为“glmre”。请编一程序,用赋初值的方法使c1、c2、c3、c4、c5五个变量的值分别为c、h、i、n、a,经过运算,使c1、c2、c3、c4、c5分别变为g、l、m、r、e。编写程序并上机运行输出3、编写程序,用getchar函数读入两个字符给c1,c2,然后分别用putchar函数和printf函数输出这两个字符,比较两者的区别。4、调试下列程序,使能正确输出3个整数之和及3个整数之积。#includemain()int a,b,c;printf(Please enter 3 nu
10、mbers:);scanf(%d,%d,%d,&a,&b,&c);ab=a+b;ac=a*c;printf(a+b+c=%dn,a+b+c);printf(a*b*c=%dn,a+c*b);输入:40,50,60三、注意事项:输入输出函数printf()与scanf()中格式说明形式的具体含义。转义字符与输出格式说明符的区别,转义字符无法用单个字符表示,而需用两个字符来表达,如“n”、“t”、“”等,输出格式说明符是一种表明输出格式的符号,它通知计算机将输出项中的输出内容按照“%”后面说明的格式打印。实验四 选择结构的程序设计实验名称:选择结构的程序设计实验目的:1、 了解C语言表示逻辑量的方
11、法(以1代表“真”,0代表“假”);2、 学会正确使用逻辑运算符和逻辑表达式;3、 熟练掌握if语句和switch语句;4、 进一步掌握选择结构的程序设计。实验学时:2学时教学过程:一、实验原理及分析:略二、实验内容:1、输入并运行下面的程序。#includemain()int x;scanf(Please input an integer:%dn);if(x=0)if(x=0)printf(x=0,执行第二个if语句n);elseprintf(x0,执行else语句n);分别输入0、小于0和大于0的数,各得到什么结果,分析 else与哪个if匹配?2、输入并运行下面的程序。#includem
12、ain()int x;scanf(%d,&x);switch(x)case 1:printf(Hin);case 2:printf(bye-byen);case 3:printf(nown);default:printf(thenn);(1) 分别给x赋值1、2、3、4,结果是什么?(2) 把default放于case 2之前,重复(1);(3) 在case 2之前加上break语句,重复(1);(4) 在前三种情形后都加上break语句,重复(1);3、有一函数,用scanf函数输入x的值(x分别为=10),求y的值,用if语句编程并给出你所使用的测试用例。 x (x1) y= 2x-1 (
13、1=x=10)4、设计并运行一个判断输入的年份是否为闰年的程序。5、编写一个程序,模拟查询手机费用。输入数字1-4,分别查询通话费、短信费、漫游费和其他费用(可用符号常量表示)。三、注意事项:1、在ifelse语句中,else总是与在前面离它最近的if语句配对,即使我们改变书写格式,让else与其它的if对齐也无济于事,因为书写格式不能影响程序本身的逻辑关系;2、对于switchcase语句,应注意:1) switch后面的表达式可以为任何类型;2) 当表达式的值与某一个case后面的常量表达式相等时,就执行此case后面的语句,否则执行default后的语句;3) 每一个case的常量表达式
14、值必须互不相同,否则会互相矛盾;4) 各个case和default的出现次序不影响执行结果;5) 每个case语句后加与不加break语句,会出现截然不同的结果,应好好体会。实验五 循环控制实验名称:循环控制实验目的:1、熟练掌握循环结构的概念。2、掌握用while、do-while和for语句实现循环的方法。3、掌握循环嵌套程序设计。实验学时:2学时教学过程:一、实验原理及分析:循环结构是结构化程序设计的三种基本结构之一,在许多问题中需要用到循环控制,可分为当型循环和直到型循环两种。当型循环的特点是:当指定的条件成立时,就执行循环体,否则不执行。直到型循环的特点是:执行循环体直到指定的条件成
15、立,就不再执行循环。二、实验内容:1、输入两个正整数,求它们的最大公约数和最小公倍数。(提示:求最大公约数和最小公倍数的方法(以12和8为例):1) 辗转相除法:两数相除,若不能整除,则以除数作为被除数,余数作为除数,继续相除,直到余数为0时,当前除数就是最大公约数。而原来两个数的积除以最大公约数的商就是最小公倍数。 12 8 12%8 的余数为4 8%4 的余数为0 则 4 为最大公约数,12*8/4为最小公倍数。2) 相减法:两个数中的大数减小数,其差与减数再进行大数减小数,直到差与减数相等为止,此时的差或减数就是最大公约数。而原来两个数的积除以最大公约数的商就是最小公倍数。 12 8 1
16、2-8=4 8-4=4 则 4 为最大公约数,12*8/4为最小公倍数。1、 输入一行字符,分别统计出其中的英文字母、空格、数字和其它字符的个数。2、 编程输出200以内所有能被7整除的数。3、 从键盘输入一个整数,统计该数的位数。例如,输入12345,输出5,输入0,输出1。4、 搬运砖块:已知男人一人搬3块,女人一人搬2块,小孩两人搬一块,问用45人正好搬45块砖,有多少种搬法?5、 猴子吃桃子问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第十天早上想再吃时,发现只剩一个桃子
17、了。求第一天摘下的桃子数。从以上题目中任选四题,编写程序并上机运行。三、注意事项:1、while()语句和do-while()语句的使用灵活,括号中的表达式可以是混合表达式,也有简略的写法,它们均允许无限循环,且循环体都可以是空语句。2、对于while语句,因为是先判断后执行,因此若条件一开始就不成立,则循环体的内容一次也不执行,而do-while语句由于是先执行循环体后判断条件是否成立,所以它至少执行一次循环。3、三种循环语句有区别,但它们之间可以进行等价变换。4、一个循环体内又包含另一个完整的循环结构,成为循环的嵌套,内嵌的循环中还可以嵌套循环,形成循环的多层嵌套,三种循环可以互相嵌套。实
18、验六 数组实验名称:数组实验目的:1、掌握一维数组的定义、赋值和输入输出的方法。2、掌握二维数组的定义、赋值和输入输出的方法。3、掌握字符数组和字符串函数的使用。4、掌握与数组有关的排序算法和实际应用。实验学时:2学时教学过程:一、实验原理及分析:数组是程序设计中最常用的数据结构之一,由固定数量的同类元素组成,可分为整数数组、实数数组、字符数组及以后将要介绍的指针数组、结构数组等;数组的类型说明由类型说明符、数组名和数组长度(下标)三部分组成;对数组的赋值可以用数组初始化赋值和赋值语句赋值,对数值数组不能用赋值语句整体赋值、输入或输出,必须用循环语句逐个对数组元素进行操作。二、实验内容:1、定
19、义三个数组:int a5、int b32、char c10,分别用初始化的方法和scanf语句对三个数组赋值并输出各数组元素;1)若程序中再加一条语句,输出a6、b6,分析结果;2)若对C数组赋初值,其值分别为Y、o、u、 、a、r、e、 、w、e、l、c、o、m、e、!,用printf(%s,c+8)输出字符串,分析结果。2、用scanf函数输入10个整数,用选择法对其进行排序输出。3、一维数组应用:已知某课程的平时、实习、测验和期末成绩,其中平时、实习、测验和期末成绩分别占10%、20%、20%、50%,求该课程的总评成绩。从键盘上循环输入某课程的平时、实习、测验和期末成绩,计算结果并在屏
20、幕上显示输出,按空格键继续,按其它键终止。 4、二维数组应用处理表格数据,用C语言编制一个程序,填写下表中所缺栏目并以适当格式显示在屏幕上。 分厂 产值月份一分厂二分厂三分厂合计1200300400220010020033002001004500500800合计三、注意事项:1、用初始化的方法给数组赋值,只能给元素逐个赋值,不能整体赋值,例如:给数组a5的元素全部赋值为5,可以写成int a5=5,5,5,5,5,不能写成 int a5=5。对数组初始化时,若某个数组元素的值为0,则可省略不写,但,不能省略。2、定义数组时,数组的下标必须是常数或常数表达式,不能是变量,企图让数组的下标富于变化
21、,渴望在程序运行时动态地确定下标的大小是不合法的,如下面就是一个错误的定义:main()int n;scanf(%d,&n);int an;.3、数组的下标都从0开始,但实际应用中为了与日常表示习惯相一致,可以使a00处于空闲,以方便处理。4、对有累加操作的数组元素应先把它清零,以免影响累加结果。实验七 函数实验名称:函数实验目的:1、掌握函数的定义和调用方法。2、掌握函数实参与形参的对应关系,深刻体会函数参数传递过程中的“单向值传递”。3、掌握函数的嵌套调用和递归调用的方法。4、掌握局部变量、全局变量、静态变量和动态变量的概念和使用方法。实验学时:2学时教学过程:一、实验原理及分析:根据函数
22、定义的不同,可分为C编译系统提供的库函数和用户自定义;根据主调函数和被调函数有无数据传递,可分为有参函数和无参函数;根据函数的作用范围,可分为内部函数和外部函数。函数的参数分为形参和实参,形参出现在函数定义中,实参出现在函数调用中,发生函数调用时,实参的值被单向传递给形参。变量的作用域是指变量在程序中的有效范围,分为局部变量和全局变量,变量的存储类型是指变量在内存中的存储方式,分为静态变量和外部变量。二、实验内容:1、给出以下程序的框架。 file1.cpp#include#includefile2.cppmain()extern a(),b(),c(),d(),e(),f();a();b()
23、;c();d();e();f();a()int x=1;int y=2;b()static int w=3;c() file2.cpp#included()extern int y;e()f()int v=4;file 3.cpp该程序分为三个源文件,定义了四个变量,请在af各个函数中分别增加一条printf语句,把在其范围之内所有有效变量的值打印出来。若把file3.cpp中的语句extern int y;去掉,结果如何?为什么?2、求方程ax2+bx+c=0的根,用三个函数分别求当b2-4ac大于0、等于0和小于0时的根并输出结果,要求从主函数输入a、b、c的值。3、输入整数n,求表达式2
24、0+(20+21)+( 20+21+22) +( 20+21+2n)的值。要求,程序中求2n 的功能部分必须在函数中完成,函数名使用expt。4、调试下列程序,使之具有如下功能:fun函数是一个判断整数是否为素数的函数,使用该函数求1000以内的素数平均值。写出调试过程。#include math.hmain( )int a=0,k; /* a保存素数之和 */float av; /* av保存1000以内素数的平均值 */for(k=2;k=1000;k+)if(fun(k) /* 判断k是否为素数 */a+=k;av=a/1000;printf(av=%fn,av);fun(int n)
25、/* 判断输入的整数是否为素数 */int i,y=0;for(i=2;in;i+)if(n%i=0) y=1;else y=0;return y;三、注意事项:1、C语言程序是由一个或多个函数模块组成,每个函数都具有相对独立的单一功能,但其中有且只有一个函数称为主函数,程序的执行总是从主函数开始。2、在C语言中,所有函数都是并列的,不允许在一个函数的函数体内再定义另外一个函数。3、在函数外部定义的变量,可由所有的函数进行共同访问,从程序的开始至程序的结束,它都将持续存在于相同的场所,即作用域和寿命都是全局的;4、在函数内部通过附加static和auto来进行说明的静态变量和自动变量,只在其被
26、说明的函数中才能进行访问,但前者的寿命是全局的,后者则是局部性的。实验八 指针实验名称:指针实验目的:1、掌握指针变量的定义和使用。2、掌握指针与变量、指针与数组、指针与字符串的关系。3、掌握用指针作为函数参数的方法。实验学时:2学时教学过程:一、实验原理及分析:指针是C语言中一个重要的组成部分,使用指针编程便于表示各种数据结构,可以实现动态的存储分配,并可使主调函数和被调函数之间共享变量或数据结构,便于实现双向数据通讯;指针的运算包括:取地址运算、取内容运算、赋值运算、加减运算和关系运算。二、实验内容:1、编写程序,在主函数中输入a、b、c三个变量的值,通过调用函数完成由大到小的排序,并在m
27、ain函数中顺序输出a、b、c的值。swap(int *p1,int *p2)int *p;p=p1;p1=p2;p2=p;main()int a,b;int *pt1,*pt2;scanf(%d,%d,&a,&b);pt1=&a;pt2=&b;if(ab)swap(pt1,pt2);printf(%d,%dn,*pt2,*pt1);2、上机运行以下程序。程序能否使指针变量pt1指向a和b中的大者,pt2指向小者?若不能,请修改。3、将数组a中的n个元素按相反顺序存放,用指针实现。4、编一个程序,自动把099以内的整数转换成英文表示的形式 ,例如输入6,输出six,输入13,输出thirtee
28、n,输入28,输出twenty eight。(提示:可用三个字符串数组建立一张对照表,把从099之间的数用英文表示时需要用到的单词按一定关系收在表中,例如char *num0_10=Zero,One,Two,Three.;char *num11_19=Eleven,Twelve,Thirteen.;char *num20_90=Twenty,Thirty,Forty.;编程时,在010之内的数直接查找字符串数组num0_10,在1119之内的数直接查找字符串数组num11_19,对于2099之内的数,可以查字符串数组num20_90得到其第一个单词,再查num0_10得到第二个单词。)三、注意
29、事项:1、使用指针变量作函数参数时不能企图改变指针参数的初始值。2、注意与指针有关的几种说明的实质区别和意义,如int *p与int (*p)、int *p()与int (*p)()在本质上的不同。实验九 结构体和共用体实验名称:结构体和共用体实验目的:1、掌握结构体类型变量的定义和使用。2、掌握结构体类型数组的概念和使用。3、初步了解共用体的概念和使用。实验学时:2学时教学过程:一、实验原理及分析:结构和联合是两种构造型数据,是用户定义新数据类型的重要手段,它们都由成员组成,成员可以具有不同的数据类型;在结构中,各成员占有自己的内存空间,它们是同时存在的,结构变量的长度等于所有成员长度之和;
30、在联合中,所有成员不能同时占用内存空间,其长度等于最长的成员长度。二、实验内容:1、有5个学生,每个学生的数据包括学号、姓名、三门课的成绩,从键盘输入5个学生数据,在屏幕上输出这些信息。2、在上题基础上,要求输出三门课总平均成绩,以及总评成绩最高的学生的数据(包括学号、姓名、三门课的成绩、平均成绩)。3、使用结构数组输入10本书的名称和单价,调用函数按照书名的字母顺序进行排序,在主函数输出排序结果。三、注意事项:1、结构类型的定义格式,分号不能遗漏。2、注意结构、结构变量、结构的定义、结构变量的说明四个概念的意义及其联系。3、系统给出的数据类型定义与用户自定义的数据类型本质上具有相等的地位,都
31、是类型标识符,一旦给出了某个数据结构定义,则说明为该种结构的变量具有与它相同的数据成员。4、一个结构指针变量虽然可以访问结构变量或结构数组元素,但它不能指向一个成员,也即不允许取一个成员的地址赋给它,因此,形如P=&stu1.sex是错误的,而只能是P=&stu0或P=stu。实验十 综合实验实验名称:综合实验实验目的:1、掌握文件以及缓冲文件系统、文件指针的概念。2、学会使用文件打开、关闭,读、写等文件操作函数。3、学会用缓冲文件系统对文件进行简单的操作。4、使用已学的知识编写综合性程序。实验学时:2学时教学过程:一、实验原理及分析:文件是程序设计中一个重要的概念,一般指存储在外部介质上的数
32、据集合。程序运行时需要读写磁盘文件,在C语言中没有输入输出语句,对磁盘文件的读写利用标准的输入输出库函数实现。二、实验内容:1、计算2的平方根、3的平方根、.、10的的平方根之和,要求计算结果具有小数点后10位有效位数,并以格式%.10fn写入文件design1.dat中。2、计算数列1,-1/3!,1/5!,-1/7!,1/9!,.的和至某项的绝对值小于1e-5时为止(该项不累加),将求和的结果以格式%.6f写入文件design2.dat中。3、文件f1.txt中有若干个实数,计算它们的平均值并将结果存入f2.txt中,(先用“记事本”输入若干个实数,各数之间用空格分隔并保存为文件f1.tx
33、t)。4、编写程序完成如下功能: 输入5个学生的信息:学号(6位整数)、姓名(6个字符)、3门课的成绩(3位整数1位小数)。计算每个学生的平均成绩(3位整数2位小数),将所有数据写入文件STU1.DAT; 从STU1.DAT文件中读入学生数据,按平均成绩从高到低排序后写入文件STU2.DAT;三、注意事项:1、文件在进行读写操作前首先要打开,使用完毕后要关闭。所谓打开文件,实际上是建立文件的各种有关信息并使文件指针指向该文件,以便进行其他操作。关闭文件则断开指针与文件之间的联系,禁止再对该文件进行操作;2、C语言中文件的输入输出操作都通过标准库函数进行,提供了字符、字符串、数据块和格式化等多种函数形式对文件进行操作:1) 字符读写函数:fgetc和fputc2) 字符串读写函数:fgets和fputs3) 数据块读写函数:fread和fwrite4) 格式化读写函数: fscanf和fprintf应注意它们的区别和使用方法。
限制150内