C语言计算机_计算机c语言
C语言计算机由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“计算机c语言”。
计算机程序设计基础
(C语言)实验指导书
信息基础学科
2005
实验总论
一、实验目的上机实验是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。学习C程序设计语言除了课堂讲授以外,必须保证有足够的上机时间。因为学时所限,课程不能安排过多的统一上机实验,所以希望学生有效地利用课程上机实验的机会,尽快掌握用C语言开发程序的能力,为今后的继续学习打下一个良好的基础。为此,我们结合课堂讲授的内容和进度,安排了8次上机实验。课程上机实验的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:
1.加深对课堂讲授内容的理解
课堂上要讲授许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用C语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。学习C语言不能停留在学习它的语法规则,而是利用学到的知识编写C语言程序,解决实际问题。即把C语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握C语言、自己编写的程序是否能够正确地解题。
通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去“掩盖”程序中的错误,而不是尽可能多地发现程序中存在的问题。自己编好程序上机调试运行时,可能有很多你想不到的情况发生,通过解决这些问题,可以逐步提高自己对C语言的理解和程序开发能力。
2.熟悉程序开发环境、学习计算机系统的操作方法
一个C语言程序从编辑、编译、连接到运行,都要在一定的外部操作环境下才能进行。所谓“环境”就是所用的计算机系统硬件、软件条件,只有学会使用这些环境,才能进行程序开发工作。通过上机实验,熟练地掌握C语言开发环境,为以后真正编写计算机程序解决实际问题打下基础。同时,在今后遇到其它开发环境时就会触类旁通,很快掌握新系统的使用。
本书中所采用的C语言开发环境为Borland公司的Turbo C2.0集成开发环境(以下简称TC环境)。
3.学习上机调试程序
完成程序的编写,决不意味着万事大吉。你认为万无一失的程序,实际上机运行时可能不断出现麻烦。常见错误有两种类型,一种是语法错误或设置错误,编译程序会帮助我们检
测出来,如某变量未进行类型定义、语句末尾缺少分号、库函数找不导等,这些属于低级错误,是初学者对语言不熟悉,包括程序录入错误,随着学习的深入,会逐渐克服;另一种是逻辑错误,即程序编译通过,也能够顺利运行,但是运行结果不对。这就需要借助调试来发现问题,改正错误。程序的调试是一个技巧性很强的工作,对于初学者来说,尽快掌握程序调试方法是非常重要的。有时候一个消耗你几个小时时间的小小错误,调试高手一眼就看出错误所在。
经常上机的人见多识广,经验丰富,对出现的错误很快就有基本判断,通过C语言提供的调试手段逐步缩小错误点的范围,最终找到错误点和错误原因。这样的经验和能力只有通过长期上机实践才能取得。向别人学习调试程序的经验当然重要,但更重要的是自己上机实践,分析、总结调试程序的经验和心得。别人告诉你一个经验,当时似乎明白,当出现错误时,由于情况千变万化,这个经验不一定用得上,或者根本没有意识到使用该经验。只有通过自己在调试程序过程中的经历并分析总结出的经验才是自己的。一旦遇到问题,这些经验自然涌上心头。所以调试程序不能指望别人替代,必须自己动手。分析问题,选择算法,编好程序,只能说完成一半工作,另一半工作就是调试程序、运行程序并得到正确结果。掌握程序调试的方法,积累经验是上机实验的一个重要目的。
二、实验要求
上机实验一般经历上机前的准备(编程)、上机调试运行和实验后的总结三个步骤。
1.上机前的准备
根据问题,进行分析,选择适当算法并编写程序,初学者可以参考别人的程序,但一定要读懂,理解,掌握设计思路,变成自己的。上机前一定要仔细检查程序(称为静态检查)直到找不到错误(包括语法和逻辑错误)。分析可能遇到的问题及解决的对策。准备几组测试程序的数据和预期的正确结果,以便发现程序中可能存在的错误。
要求写出预习报告,包括实验目的、实验内容、算法设计(流程图或NS图)、源程序、调试步骤。
上机前没有充分的准备,到上机时临时拼凑一个错误百出的程序,宝贵的上机时间白白浪费了。或者照抄别人的程序,而自己又不理解,一运行通过,结果正确,象一个录入员一样,到头来自己一无所获。
2.上机输入和编辑程序,并调试运行程序
首先调用C语言集成开发环境,输入并编辑事先准备好的源程序;然后调用编译程序对源程序进行编译,查找语法错误,若存在语法错误,重新进入编辑环境,改正后再进行编译,直到通过编译,得到目标程序(扩展名为OBJ)。下一步是调用连接程序,产生可执行程序(扩展名为EXE)。使用预先准备的测试数据运行程序,观察是否得到预期的正确结果。若有问题,则仔细调试,排除各种错误,直到得到正确结果,注意记录。在调试过程中,要充分利用C语言集成开发环境提供的调试手段和工具,例如单步跟踪、设置断点、监视变量值 3的变化等。整个过程应自己独立完成。不要一点小问题就找老师,学会独立思考,勤于分析,通过自己实践得到的经验用起来更加得心应手。
3.整理上机实验结果,写出实验报告
实验结束后,要整理实验结果并认真分析和总结,在预习报告的基础上,给出正确的源程序,添上实验调试记录,加上分析与思考形成完整的实验报告。
三、注意事项
1.作好预习,无预习报告者不准上机。2.程序调试完成后,需经指导教师检查。
3.实验后,按时提交实验报告和软盘,一般在下次上课时提交。
建议实验报告按如下格式书写:
实验*
***** ***** *****
一、实验目的二、实验内容:实验题目与要求。
三、算法说明:NS图或流程图
四、源程序清单
五、调试记录:原始数据、相应的运行结果和必要的说明
六、分析与思考:调试过程及调试中遇到的问题及解决办法;若最终未完成调试,要试着分析原因;调试程序的心得与体会;其他算法的存在与实践;对课程及实验的建议等。
实验一 简单程序的编制和调试
一、实验目的1.熟悉TC环境。
2.熟悉C语言程序的编辑、编译、连接、运行过程。
3.掌握基本输入输出函数的使用。
4.编写顺序结构程序并运行。
二、实验内容
1、尽快熟悉C环境及程序的编辑、编译、连接、运行过程,参看实验步骤1、2、3、42、自己编程输出如下形式: ******************** Welcome to turbo c I am 自己的名字 ********************
3、试下列程序,使之能正确输出3个整数之和及3个整数之积。
#include “stdio.h” main(){ int a,b,c;
printf(“Please enter 3 numbers:”); 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↙
4、行下述程序,分析输出结果。#include “stdio.h” main(){ int a=10; long int b=10; float x=10.0; double y=10.0;
printf(“a = %d, b = %ld, x = %f, y = %lfn”,a,b,x,y);
printf(“a = %ld, b = %d, x = %lf, y = %fn”,a,b,x,y); printf(“x = %f, x = %e, x = %gn”,x,x,x); } 从此题的输出结果认识各种数据类型在内存的存储方式。
5、输入圆半径和圆心角,输出圆的周长、面积
6、输入一个字符,找出它的前驱或后继字符,分别以字符形式和整型格式输出(选作题)
7、综合题初步:菜单编制(提高题)编制如下菜单:
|*******************************| | 小学生算术运算测试系统 | | +-----Add 加法 | |------Sub 减法 | | *----mul 乘法 | | /----div 除法 | | E----exit 退出 | | 请输入你的选择: | |*******************************|
三、实验步骤
1.了解TC环境的组成开机后进入WINDOWS系统的“资源管理器”,找到TC环境所在的文件夹。一般情况下,TC环境都安装在名为“TC”的子目录下,具体存于硬盘的哪个分区可以搜索。查看在TC目录下的以字母TC开头的文件,是否包括了TC.EXE、TCC.EXE、TLINK.EXE、TCCONFIG.TC等文件;查看INCLUDE、LIB两个子目录下的文件,了解这些文件的作用;记下TC.EXE文件、INCLUDE、LIB两个子目录所在的路径,并在TC根目录下建立自己的文件夹。
2.进入、退出和定制TC环境
运行TC目录下的TC.EXE文件,就可进入TC环境。
在WINDOWS环境下运行文件的方法是用鼠标双击要运行的文件名,或在桌面上双击快捷图标;在DOS环境下进入到TC子目录,用命令方式运行TC.EXE程序。进入TC环境后屏幕上显示出TC环境的主画面。
退出TC环境,可在“FILE”菜单下选择“QIUT”菜单项,或用热键,计算机返回到操作系统的控制下。
3.TC环境下的“Options”菜单下可对TC环境进行设置
了解“Directories”的作用,一般不要改变系统的其它设置。检查”INCLUDE”、”LIB””、TC”路径设置,如不正确,请改变,并会改变输出文件的目录,指向你的文件夹。
4.输入第一个程序
在编辑窗口,录入如下C源程序:
#include “stdio.h” main(){ printf(“This is a C Programn”)printf(“I am a studentn”);
} 打开“Compile”菜单,并选择“Compile to object”命令编译该源程序文件,屏幕出现错误提示:
statement miing ;in function main 通过提示,可以知道上面程序第二行的最后漏敲一个分号,改正后,编译通过,说明程序语法正确,然后选择“Compile”菜单的“Link EXE file”命令调用连接程序连接成可执行文件,最后用“Run”菜单的“Run”命令运行程序,用“Run”菜单的“User screen命令”查看运行结果。
按键,程序存入硬盘,文件名自定(如:test1)。在WINDOWS环境下,学会用WINDOWS图标键暂时返回WINDOWS窗口。通过资源管理器观察当前目录下名为test1的几个文件,它们的扩展名分别是什么。
用F8键单步运行程序,用+键观察用户屏幕输出的变化。用“Run”命令可以将编译、连接、运行一次完成。
5.依次录入调试自己的程序,记录调试过程、遇到问题、解决办法
在编辑窗口,录入自己的C源程序,按键存入硬盘。
然后进行编译、连接和运行,按+键观察输出结果。若和预计结果不一致,请修改源程序,再进行编译、连接和运行,直到正确为止,注意学会单步运行调试程序的方法。
将程序源文件和可执行文件存入软盘。
实验二 选择结构程序设计
一、实验目的1.正确使用关系表达式和逻辑表达式表达条件。
2.学习分支语句if和switch的使用方法。
3.进一步熟悉TC集成环境的使用方法,学习TC环境提供的调试工具。
二、实验内容
1. 熟悉IF语句的用法。
键盘输入一个字符(用getchar()函数输入,体会#include语句的作用),求出它的前驱和后继字符,同时将三个字符按顺序在屏幕上显示(用IF语句实现)。2. 输入a、b、c三个整数,求最小值,写出调试过程。
(1)学会要求设置观察变量:按键,屏幕弹出“Add watch”窗口,在窗口中可输入要观察的变量或表达式,此处输入a,重复以上操作并分别输入b、c,在屏幕下方的“meage”窗口显示变量名a、b、c,且变量名的后面有提示,如a的后面是undefined symbol 'a',这是因为程序没有运行,变量没有登记,所以TC环境不知道a是什么。
⑵ 单步执行程序。观察“meage”窗口变量值的变化。和预期的结果是否一致。
⑶ 学会用“RUN”菜单的RESET中止程序的运行。(4)学会用F4将程序运行到光标处。(即连续执行几条语句)
3.在上题的基础上,进行三个数的排序,按从小到大的顺序输出。
通过观察窗口,理解中间变量的作用,进一步理解C的变量在内存中的存储及赋值方式。
4.某托儿所收2岁到6岁的孩子,2岁、3岁孩子进小班(Lower cla);4岁孩子进中班(Middle cla);5岁、6岁孩子进大班(Higher cla)。编写程序(用switch语句或IF语句),输入孩子年龄,输出年龄及进入的班号。
如:输入:3,输出:age:3,enter Lower cla。5.简单计算器。请编写一个程序计算表达式:(选作题)
data1 op data2的值。其中op为运算符+、—、*、/。(例如:用户输入: 3.14*2 程序会显示结果:3.14*2=6.280000)
6.菜单设计。在实验一的基础上,接收用户输入,用SWITCH()语句来控制程序的流向,只简单显示“你选择作加法”等,查阅资料如何实现清屏(提高题)
7.绘图初步。感兴趣的同学可以借助校园网上的资料,查阅图形函数,掌握图形方式的初始化、颜色(前景、背景)设置、画线、画圆、画矩形等常用函数,编程实践。(兴趣题)
实验三 循环结构程序设计
一、实验目的1.学习循环语句for、while和do-while语句的使用方法。
2.学习用循环语句实现各种算法,例如穷举法、迭代法等。
3.进一步熟悉TC集成环境的使用方法
二、实验内容
1.下面程序的功能是计算n!。
main(){ int i,n,s=1;
printf(“Please enter n:”); scanf(“%d”,&n); for(i=1;i
printf(“%d!= %d”,n,s); } 首次运行先输入n=4,输出结果为4!=24,这时正确的。为了检验程序的正确性,再输入n=10,输出为10!=24320,这显然是错误的。为了找到程序的错误,可以通过单步执行来观察变量的变化。在for循环体中增加一条输出语句,把变量s每次的运算结果显示出来。找出错误原因,更正。
2.键盘输入字符,分别统计字符(不分大小写)、数字、空格和其它符号的个数,遇!号结束。
3.用梯形法求sin x在0~180度间的定积分。
4.综合题:小学生算术运算测试系统(提高题)
当选项不为“E”时,反复出题。并在某一个选项时,随机产生100以内的算术题,根据用户输入,判断对错,并统计。按“ESC”时,给出总题数,正确数和得分,退到主菜单。
5.动画。在屏幕左侧显示圆、三角形和矩形,通过用户选择,在右侧画出相应的图形,直到用户按ESC退出。也可自己查阅资料,自己命题(提高题)
三、注意事项
1. 本实验综合性较强,要作好充分的预习和复习 2. 在程序调试中,要事先准备充分的测试用例。
实验四 数组
一、实验目的
1. 掌握数组的定义、赋值和输入输出的方法。2. 掌握字符数组和字符串处理函数的使用
2.学习用数组实现相关的算法(如排序、求最大和最小值、对有序数组的插入等)。
2、熟悉TC集成环境的调试数组的方法。
二、实验内容
1.调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。写出调试过程。
main(){ int i,n,a[10],av; for(i=0;i
printf(“av=%fn”,av); } 上面给出的程序是完全可以运行的,但是运行结果是完全错误的。调试时请注意变量的初值问题、输出格式问题等。请使用前面实验所掌握的调试工具,判断程序中的错误并改正。在程序运行过程中,可以使用+键终止程序的运行,返回到TC环境。
2.编写程序,任意输入10个整数的数列,先将整数按照从大到小的顺序进行排序,然后输入一个整数插入到数列中,使数列保持从大到小的顺序。
3.调试下列程序,使之具有如下功能:任意输入两个字符串(如:“abc 123”和“china”),并存放在a,b两个数组中。然后把较短的字符串放在a数组,较长的字符串放在b数组,并输出。
main(){ char a[10],b[10]; int c,d,k;
scanf(“%s”,&a); scanf(“%s”,&b);
printf(“a=%s,b=%sn”,a,b); c=strlen(a); d=strlen(b);
if(c>d)for(k=0;k
4.设某班最多20人,写一程序录入某门课的成绩,当输入成绩为负时,输入结束,统计90~100,80~89,70~79,60~69及不及格的人数分布,以数字显示,或以图形方式显示。
5.输入4×4的数组,编写程序实现:(选做题)⑴ 求出对角线上各元素的和;
⑵ 求出对角线上行、列下标均为偶数的各元素的积; ⑶ 找出对角线上其值最大的元素和它在数组中的位置。
6.编写程序,输入字符串s1和s2以及插入位置f,在字符串s1•中的指定位置f处插入字符串s2。如:输入“BEIJING”、“123”和位置3,则输出
:“BEI123JING123”。(选做题)
实验五 函数
一、实验目的1.学习C语言中函数的定义和调用方法。
2.掌握通过参数在函数间传递数据的方法。3.学习使用设置断点的方法调试程序。
4.掌握含多个源文件的程序的编译、连接和调试运行的方法 5.学习递归程序设计,掌握递归函数的编写规律。
6.熟悉TC集成环境对包含函数调用的程序的调试方法。
二、实验内容
1.调试下列程序,使之具有如下功能:fun函数是一个判断整数是否为素数的函数,使用该函数求1000以内的素数平均值。写出调试过程。
#include “math.h” main(){ int a=0,k; /* a保存素数之和 */ float av; /* av保存1000以内素数的平均值 */ for(k=2;k
printf(“av=%fn”,av); } fun(int n)/* 判断输入的整数是否为素数 */ { int i,y=0;
for(i=2;i和的区别。
对于一个大型程序,如果仅需要对程序中的某一部分单步执行时,可设置一些断点,用“Run”命令执行程序到断点处,然后再单步执行程序。通过本例说明这样调试程序的方法。在程序被运行前,将屏幕光标移到fun函数的for循环一句处,按+键,该句背景色变为红色;用“Run”命令运行程序,程序执行到此处暂停执行,背景色为淡兰色,再用或单步执行下面的程序;当不需要单步执行时,使用“Run”命令可以连续执行程序,当程序再次执行到断点处又会停下等待用户的指令。将屏幕光标移到已设断点处,再按+键,可以取消断点。
2.编写一个求水仙花数的函数,求3位正整数的全部水仙花数中的次大值。所谓水仙花数是指三位整数的各位上的数字的立方和等于该整数本身。例如:153就是一个水仙花数: 153 = 13 + 53 + 33
3.编写一个函数,对输入的整数k输出它的全部素数因子。例如:当k=126时,素数因子为:2,3,3,7。要求按如下格式输出:126 = 2 * 3 * 3 * 7。
4. 任意输入一个4位自然数,调用函数输出该自然数的各位数字组成的最大数。(选做题)
5.用函数的方法重新规划小学生算术测试系统(提高题)
6.汉诺塔编程(提高题)
实验六 指针
一、实验目的1.掌握指针变量的定义与引用
2.掌握指针与变量、指针与数组的关系
3.掌握用数组指针作为函数参数的方法。
4.熟悉TC集成环境的调试指针程序的方法
二、实验内容
以下均用指针方法编程:
1.调试下列程序,使之具有如下功能:用指针法输入12个数,然后按每行4个数输出。写出调试过程。
main(){ int j,k,a[12],*p; for(j=0;j
} } 调试此程序时将a设置为一个“watch”,数组a所有元素的值在一行显示出来。调试时注意指针变量指向哪个目标变量。
2.调试下列程序,使之具有如下功能:任意输入2个数,调用两个函数分别求:
⑴ 2个数的和,⑵ 2个数交换值。
要求用函数指针调用这两个函数,结果在主函数中输出。
main(){ int a,b,c,(*p)();
scanf(“%d,%d”,&a,&b); p=sum; *p(a,b,c); p=swap; *p(a,b);
printf(“sum=%dn”,c);
printf(“a=%d,b=%dn”,a,b); } sum(int a,int b,int c){ c=a+b;
} swap(int a;int b){ int t;
t=a;a=b;b=t;} 调试程序时注意参数传递的是数值还是地址。
3.输入一个3位数,计算该数各位上的数字之和,如果在[1,12]之内,则输出与和数相对应的月份的英文名称,否则输出***。例如:输入:123 输出:1+2+3=6→ June 输入:139 输出:1+3+9=13→ *** 用指针数组记录各月份英文单词的首地址。
4.任意输入5个字符串,调用函数按从大到小顺序对字符串进行排序,在主函数中输出排序结果。
5.在主函数中任意输入10个数存入一个数组,然后按照从小到大的顺序输出这10个数,要求数组中元素按照输入时的顺序不能改变位置。
6.自己编写一个比较两个字符串s和t大小的函数strcomp(s,t),要求s小于t时返回-1,s等于t•时返回0,s大于t时返回1。在主函数中任意输入4个字符串,利用该函数求最小字符串。(选做题0 7.在主函数中任意输入9个数,调用函数求最大值和最小值,在主函数中按每行3个数的形式输出,其中最大值出现在第一行末尾,最小值出现在第3行的开头。(选做题)
8.请编程读入一个字符串,并检查其是否为回文(即正读和反读都是一样的)。例如: 读入:MADA M I M ADAM.输出:YES
读入:ABCDBA.输出:NO 15
实验七 结构体
一、实验目的1.掌握C语言中结构体类型的定义和结构体变量的定义和引用。
2.掌握用结构指针传递结构数据的方法。
3.熟悉TC集成环境的调试结构程序的方法
二、实验内容
1.设计一个保存学生情况的结构,学生情况包括姓名、学号、年龄。输入5个学生的情况,输出学生的平均年龄和年龄最小的学生的情况。要求输入和输出分别编写独立的输入函数input()和输出函数output()。
2.使用结构数组输入10本书的名称和单价,调用函数按照书名的字母顺序序进行排序,在主函数输出排序结果。
3.建立一个有5个结点的单向链表,每个结点包含姓名、年龄和工资。编写两个函数,一个用于建立链表,另一个用来输出链表。
选做题:
1.在上述第3题的基础上,编写插入结点的函数,在指定位置插入一个新结点。
2.在上述第3题的基础上,编写删除结点的函数,在指定位置删除一个结点。
实验八 文件
一、实验目的1.掌握C语言中文件和文件指针的概念
2.掌握C语言中文件的打开与关闭及各种文件函数的使用方法。
3.熟悉TC集成环境的调试文件程序的方法
二、实验内容
1.编写程序,输入一个文本文件名,输出该文本文件中的每一个字符及其所对应的ASCII码。例如文件的内容是Beijing,则输出:B(66)e(101)i(105)j(106)i(105)n(110)g(103)。
2.编写程序完成如下功能:
⑴ 输入5个学生的信息:学号(6位整数)、姓名(6个字符)、3门课的成绩(3位整数1位小数)。计算每个学生的平均成绩(3位整数2位小数),将所有数据写入文件STU1.DAT; ⑵ 从STU1.DAT文件中读入学生数据,按平均成绩从高到低排序后写入文件STU2.DAT; ⑶ 按照输入学生的学号,在STU2.DAT文件中查找该学生,找到以后输出该学生的所有数据,如果文件中没有输入的学号,给出相应的提示信息.3.用编辑软件建立一个名为“d1.txt”的文本文件存入磁盘,文件中有18个数。从磁盘上读入该文件,并用文件中的前9个数和后9个数分别作为两个3*3矩阵的元素。求这两个矩阵的和,并把结果按每行3个数据写入文本文件“d2.txt”。用DOS命令TYPE显示d2.txt。
选做题:
1.建立两个由有序的整数组成的二进制文件f1和f2,然后将它们合并为一个新的有序文件f3。
2.编写程序,功能是从磁盘上读入一个文本文件,将文件内容显示在屏幕上,每一行的前面显示行号。