课程编号:B0800030 实验学时:18
实验个数:9 适用专业:信息管理与信息系统
教材及参考书:谭浩强编著.C程序设计(第三版).北京:清华大学出版社,2005
大纲执笔人:章锋 大纲审定人:许伟
一、实验课的性质与任务
C语言程序设计是一门专业基础课程,也是学生必备的基本技能之一。本课程不仅仅是知识的讲述,更重要的是一种基本技能的训练。通过本课程的学习,使学生掌握程序设计的基本概念,了解计算机语言的基本知识;通过例题的讲述与编程实践培养学生掌握程序设计的基本技能。
二、实验课程目的与要求
1.实验目的
通过实验课程的教学对学生进行全面综合训练,一方面达到使学生深化理解和灵活掌握理论课教学内容的目的;另一方面使学生学会如何把书上学到的知识用于解决实际问题,使书上的知识变活,培养软件工作所需要的动手能力。
2.实验要求
教学中首先要求学生对课程进行预习,了解实验内容、目的和要求,列出实验步骤;同时提出实验问题让学生思考,对需要解决的问题设计算法,根据算法写出源程序。上机实验让学生调试并运行程序,记录运行结果并进行分析,最后要求学生按照要求书写实验报告。实验课过程中教师要解决学生的疑难问题,帮助学生分析和处理实验结果。
综合性实验是软件设计的综合训练,包括问题分析,总体结构设计,程序设计基本技能和技巧,以至一整套软件工作规范的训练和科学作风的培养。
三、实验项目及学时分配
四、实验内容安排
实验一C程序的运行环境(2学时)
1、目的与要求
(1)熟悉C语言程序的运行环境,了解所用计算机的软、硬件配置和使用方法。
(2)初步了解运行一个C语言程序的过程。
2、内容与步骤
(1)开机:进入Windows操作系统下、点击tc.exe文件图标;
(2)进Turbo C集成工作环境。(Windows操作系统下DOS环境)
(3)了解Turbo C集成工作环境及其菜单的使用。
(4)了解并掌握Turbo C目录环境的设置。
(5)用文本编辑器建立如下C语言源程序,并以ex1-1.c存盘。
main()
{printf(“I am a student.”);
printf(“I love China.”);}
(6)用TC打开ex1-1.c,试编译、运行,并按Alt+F5查看运行结果。
(7)再在Turbo C集成工作环境下编辑一文件,(习题1.5)编译并运行之。
(8)退出。
实验二 数据类型(2学时)
1、目的与要求
(1)初步了解C语言程序的调试过程和调试方法。
(2)掌握C语言各种基本数据类型的定义方法。
2、内容与步骤
(1) 下面程序企图计算由键盘输入的任意两个整数的平均值:
并将调试通过的源程序以ex2-1.c存盘。
#include<stdio.c>
main()
{int x,y,a;
scanf(“%x,%y”,&x,&y);
a=(x+y)/2;
printf(“The average is:”,a);
}
调试无语法错误后,分别使用下列测试用例对上述程序进行测试:
2,6 1,3
-2,-6 -1,-3
-2,6 -1,3
1,0 1,6
32800,33000 -32800,33000
分析上述哪几组测试用例较好?通过测试,你发现程序有什么错误了吗?若有错误,请指出错误原因。
(2)输入并运行下面的程序
main()
(int a,b;
unsigned c,d;
long e,f;
a=100;b=-100;e=50000;f=32767;
c=a;d=b;
printf(“%d,%d/n”,a,b);
printf(“%u,%u/n”,a,b);
printf(“%u,%u/n”,c,d);
c=a=e;d=b=f;
printf(“%d,%d/n”,a,b);
printf(“%u,%u/n”,c,d);}
请对照程序和运行结果分析:
将一个负整数赋给一个无符号的变量,会得到什么结果。
将一个长整数赋予无符号变量,会得到什么结果(分别考虑大于或等于65535以及小于65535的情况)。
将一个大于32767的长整数赋给整型变量,会得到什么结果。
(3)输入并运行下面程序
main()
{char c1,c2;
c1=’a’;c2=’b’;
printf(“%c,%c”,c1,c2);}
运行此程序
在此基础上增加一个语句:
printf(“%d,%d”,c1,c2);
将第2行改为:
int c1,c2;
再运行之,并观察结果。
再将第3行改为:
c1=a;c2=b;
再运行之,并观察结果。
再将第3行改为:
c1=”a”;c2=”b”;
再运行之,并观察结果
再将第3行改为:
c1=300;c2=400;
再运行之,并观察结果。
3、撰写实验报告
记录实验运行结果,并分析结果。
实验三 简单的C程序设计(2学时)
1、目的与要求
(1)进一步熟悉C语言环境。
(2)明确C语言程序的结构,掌握C语言程序的书写格式。
2、内容与步骤
(1)编写一个C语言程序,测试下列各表达式
i,j i+1,j+1 i++,j++
++i,++j i+++++j
++i+++++j++
要求在各表达式中I和j都分别有相同的初值。在实验中,注意下列问题:
哪些表达式是错误的,为什么?
理解+,+1,++i,i++的意义和优先顺序。
(2)输入并编辑下面的程序
main()
{int a,b;
float c,d;
long e,f;
unsigned int u,v;
char c1,c2;
scan(“%d,%d”,a,b);
scan(“%f,%f”,c,d);
scan(“%ld,%ld”,e,f);
scan(“%o,o%”,u,v);
scan(“%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,v=%o/n”,&u,&v);
printf(“c1=%c,c2=%c/n”,&c1,&c2);
这个程序有语法错误吗?为什么?
调试上述程序无语法错误后,用下面的测试数据,对程序进行测试:
a=123, b=456, c=17.6, d=71837.65, e=70000, f=217506, u=62000, v=58765, c1=’a’, c2=’b’
分析运行结果。特别注意输出c1, c2的值是什么?什么原因?
将输入e和f的语句改为:
scanf(“%d,%d”,&e,&f);
再用上述数据测试并分析结果。
将输入u和v的语句改为:
scanf(“%d,%d”,&u,&v);
再用上述数据测试并分析结果。
将输出e和f的语句改为:
printf(“e=%17d,f=%17d/n”,e,f);
再用上述数据测试并分析结果。
将输出u和v的语句改为:
printf(“u=%u,v=%u/n”,u,v);
或 printf(“u=%d,v=%d/n”,u,v);
再用上述数据测试并分析结果。
请修改程序和改变数据输入的形式,分析各种情况下的输入与输出。
在scan(“%c,%c”,c1,c2);语句之前加一个语句:
getchar();
再调试并分析编译信息。
验证转义字符/n与/r的意义有何不同。
3、撰写实验报告
记录实验运行结果,并分析结果。
实验四 选择结构(2学时)
1、目的与要求
(1)掌握条件与程序流程的关系。
(2)掌握不同数据将使程序的流程覆盖不同的语句、分支和路径。
(3)了解分支结构的嵌套。
2、内容与步骤
(1)有如下程序段:
{…
if(a>1 && b= =0) x=x/a;
if(a= =2 || x>1) x=x+1;}
把上述程序段编成一个完整的程序,以便使上述程序段能在不同的a,b和x值下运行,并且能观察程序流程经过(覆盖)了哪些语句、哪些分支及哪些路径。
实验步骤
记下分别使用下列各组数据运行时的操作流程。
a=1,b=1,x=1;
a=1,b=1,x=2;
a=3,b=0,x=1;
a=2,b=0,x=4;
a=2,b=1,x=1;
a=1,b=0,x=2;
a=2,b=1,x=1;
a=3,b=0,x=2;
要求如下:
用if语句实现分支,自变量x与函数值均采用双精度类型.
自变量x值从键盘输入,且输入前要有提示信息.
数据的输出格式采用以下形式:
x=输入值,f(x)=计算值
记录运行结果;
源程序以ex4-1.C存盘.
(2)编程,将一个百分制成绩转换成等级制成绩.具体要求如下:
百分制与等级制的对应关系如下:
百分制 90—100 80--89 70--79 60--69 <60
等级制 A B C D E
用switch语句实现该功能.
用键盘输入百分制成绩,输入前要有提示信息.
要能判断输入数据的合理性,对于不合理的数据应输出错误信息.
输出结果中应包含百分制成绩和等级.
分别输入成绩-10,99,60,85,70,101,45,运行该程序.记录结果.
源程序以ex4-2.C存盘.
3、撰写实验报告
记录实验运行结果,并分析结果。
实验五 循环控制(2学时)
1、目的与要求
掌握循环的概念。
掌握三种常用的循环语句的格式和功能。
掌握break和 continue 语句的功能。
2、内容与步骤
(1)编写求解不定方程15x+9y+z=30的正整数解。要求如下:
对解按每行3组输出 。
文件以ex5-1.C存盘。
(2)打印九九乘法表。要求如下:
for 循环完成该程序。
打印形状为直角三角形。
文件以ex5-2.C存盘。
(3)猴子吃桃问题。猴子第一天摘下若干个桃子,当天吃一半,又多吃一个;第二天同样如此,到第十天时只吃一个就没了。求第一天共摘了多少个?
编程,得到正确结果后,再修改:改为猴子每天吃一半,再吃二个。结果如何?
3、撰写实验报告
记录实验运行结果,并分析结果。
实验六 数组(2学时)
1、目的与要求
(1)掌握数组的定义、初始化和输入输出方法。
(2)加深对数组的理解,培养解决实际问题的能力。
2、内容与步骤
(1)用一个一维数组存放10个实数,并求出它们的平均数,最大数。
数据用一维数组存放,进行处理。
算出平均值,找出最大数。
数据的输入和输出要有提示信息;源程序以ex6-1
(2)输入三个学生、五门课程的成绩,计算每学生的平均成绩。
按二维数组进行处理,并由键盘按学生的各门成绩逐个输入。
数据输入以矩阵形式存放。数据以二维表格形式输出 ,输出内容有表头(提示信息)、表体(学生序号、单科成绩、个人平均)。
程序以ex6-2.C存盘。
(3)编程:有17个围成一圈(编号为0—16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去。直到最后只剩下一人为止。问此人原来是多少号。记录其结果。源程序以ex6-3.C存盘。
3、撰写实验报告
记录实验运行结果,并分析结果。
实验七 函数(2学时)
1、目的与要求
掌握C语言函数的定义和调用的形式及规则。
掌握实参与形参的对应关系。
掌握函数的嵌套调用和递归调用的设计方法。
掌握各种变量的存储属性及其区别。
2、内容与步骤
(1)编程,求表达式1+2+3+……+n的值,要求如下:
求值过程采用递归算法,并定义成函数sumofn(),供主函数调用。
n的值在主函数中从键盘输入 ,调用sumofn(),并将计算结果输出。
源程序以ex7=1.C存盘。
(2)编程,求100至200之间的素数,用两个函数分别求素数与打印;(打印按每行6个输出。)源程序以ex7-2.C存盘。
(3)分别用与不用全局变量的方法(两个源程序),用两个函数求最大公倍数与最小公约数,在主函数中输入两个整数,两个函数求出的数返回主函数,并在主函数中输出。源程序以ex7-3.C存盘。
3、撰写实验报告
记录实验运行结果,并分析结果。
实验八 编译预处理(2学时)
1、目的与要求
(1)掌握宏定义的方法;
(2)掌握文件包含处理的方法;
2、内容与步骤
(1)计算函数 ,利用宏定义定义二个宏计算x=-2,-2-3,+2,2+3时的函数值。源程序以ex8-1.C存盘。
(2)利用math.h中随机函数rand()产生10个0~100间的随机整数,先输出,再按由小到大排序后输出。源程序以ex8-2.C存盘。
3、撰写实验报告
记录实验运行结果,并分析结果。
实验九 指针(2学时)
1、目的与要求
(1)掌握指针的概念以及定义方法,掌握地址、指针和指针变量之间的区别与联系。
(2)掌握指针变量与数组的关系,掌握如何使用指针来处理与数组相关的问题。
2、内容与步骤
(1)将一个3Х3的矩阵转置。(用指针处理)源程序以ex8-1.C存盘
(2)利用math.h中随机函数rand()产生10个0~100间的随机整数,先输出,再按由小到大排序后输出。(用指针处理)源程序以ex9-2.C存盘。
3、撰写实验报告
记录实验运行结果,并分析结果。
五、考核方式、方法及实验成绩评定方法
C语言程序设计实验课成绩单独按五级记分。凡实验成绩不及格者,该门课程必须重修。学生的实验成绩应以平时考查为主,一般应占总分的70%,其平时成绩又要以实验实际操作的优劣作为主要考核依据。在学期末或课程结束时,为复习和巩固实验教学内容,进一步对学生作补充了解,也可举行一定的实验操作考试,但无论采取何种方式进行考核,都必须按实验课的目的要求,以实际实验工作能力的强弱作为评定成绩的主要依据。因此,最终的集中考试结果只能占总成绩的30%。
2、实验成绩评定方法:
评定各级成绩时,可参考以下标准:
(一)优秀(90分及以上)
能正确理解实验的目的要求,能独立、顺利而正确地完成各项实验操作,会分析和处理实验中遇到的问题,能掌握所学的各项实验技能,能较好地完成实验报告及其它各项实验作业,有一定创造精神和能力。有良好的实验工作作风和习惯。
(二)良好(80分—89.5分)
能理解实验的目的和要求,能认真而正确地完成各项实验操作,能分析和处理实验中遇到的一些问题。能掌握所学实验技能的绝大部分,对难点较大的操作完成有困难。能一般完成实验报告和其它实验作业。有较好的实验习惯和工作作风。
(三)中等(70分—79.5分)
能粗浅理解实验目的要求,能认真努力进行各项实验操作,但技巧较差。能分析和处理实验中一些较容易的问题,掌握实验技能的大部分。有30%掌握得不好。能一般完成各项实验作业和报告。处理问题缺乏条理。工作作风较好。能认真遵守各项规章制度。学习努力。
(四)及格(60分—69.5分)
只能机械地了解实验内容,能一般性地按实验步骤完成实验操作,能完成60%所学的实验技能,有些虽作但不准确。遇到问题常常缺乏解决的办法,在别人启发下能作些简单处理,但效果不理想。能一般完成实验报告,能认真遵守实验室各项规章制度,工作中有小的习惯性毛病(如工作无计划,处理问题缺乏条理)。
(五)不及格(60分以下)
盲目地操作,只掌握50%以下所学实验技能。有些实验虽能做,但一般效果不好,操作不正确。工作忙乱无条理。一般能遵守实验室规章制度,但常有小的错误。实验报告较多的时候有结果,遇到问题时说不明原因,在教师指导下也较难完成各项实验作业。或有些小聪明但不努力,不求上进。
六、主要教材及参考书
教 材:C程序设计题解与上机指导(第三版)(谭浩强主编)
参考书:[1]谭浩强编著.C程序设计(第三版).北京:清华大学出版社,2005.
[2]谭浩强编著.C程序设计题解与上机指导(第三版).北京:清华大学出版社,2005.
七、说明
通过C程序上机实验,加深对讲授内容尤其是一些语法规则和概念的理解;熟悉所用的计算机系统的操作方法,熟悉C语言程序开发环境;学会上机调试程序。C语言程序设计是一门实践性很强的课程,学生应该在上机实验的基础上熟练地掌握程序设计的全过程,即独立编写源程序,独立上机调试,独立运行程序和分析结果。实验内容的安排应该是课后作业和上机实验题的统一。