《最新C语言程序设计A--实验指导书.doc》由会员分享,可在线阅读,更多相关《最新C语言程序设计A--实验指导书.doc(320页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateC语言程序设计A-实验指导书C语言程序设计A-实验指导书C语言程序设计指导书(电类专业使用)电气与信息工程学院 计算机系 2009-12-24目 录前言3实验一 C语言环境实验4实验二 简单程序设计19实验三 分支结构程序设计24实验四 循环结构程序设计29实验五 函数程序设计34实验六 数组程序设计40实验七 指针程序设计47实验八 结构程序设计52实验九 文件结构
2、程序设计57实验十 综合程序设计61实验十一 综合程序设计64附录1 C语言程序的上机步骤65附录2 程序调试的方法67前 言一、本课程实验教学的地位和作用C语言程序设计课程是一门重要的公共基础课。其主要任务是使学生掌握C语言的基本概念与结构化程序设计方法等方面的知识。实验课是本课程重要的教学环节,通过本课程的学习使学生加深对讲授内容的理解,熟悉所用计算机系统的操作方法,学会上机调试程序基本操作,能够运用C语言程序解决本专业某些实际问题,并养成严谨的科学态度和科学的思维方法,从而提高分析和解决问题的能力,为后续课程的学习和在毕业设计时使用计算机解决实际问题打下良好的基础。二、本课程应讲授的基本
3、实验理论1、掌握所用VC+6.0系统的基本操作方法,学会独立使用该系统;了解在该系统上如何编辑、编译、连接和运行C程序;2、掌握结构化程序设计方法。三、本课程实验教学应达到的能力要求1、掌握赋值语句的使用方法及各种类型数据的输入输出方法;2、掌握实现选择和循环的编程方法,学习调试程序;3、掌握数组的定义、赋值和输入输出方法,掌握字符数组和字符串函数的使用等;4、掌握定义函数及调用函数的方法;5、通过实验进一步掌握指针的概念,学会定义和使用指针变量,能正确使用指向数组的指针变量,能正确使用指向字符串的指针变量;6、掌握结构体类型变量的定义和使用;7、掌握文件以及文件指针的概念,初步学会文件的操作
4、函数。四、本课程实验教学目的与要求学生在实验过程中注意自始至终贯彻课程中所介绍的程序设计风格,养成良好的编程习惯。应独立完成所布置的上机作业,为保证尽量在统一安排的上机时间内编译运行通过程序,在每次实验前应事先预习,按照要求写好预习报告,编写好程序。课后撰写实验报告。1、了解所用的计算机系统(包括编译系统)的性能和使用方法。2、复习和掌握与本实验有关的教学内容。3、准备好上机所需的程序,在上机实验时必须完成预习要求中规定的任务,切忌不编程或抄别人的程序去上机。4、对程序中出现的问题应事先估计,对程序中自己有疑问的地方应先作上记号,以便上机时给予注意。5、准备好调试程序和运行程序所需的数据。6、
5、在实验中,学生根据实验指导中的内容进行验证与总结,然后再去完成实验内容中安排的任务。五、本课程实验教学考核办法实验课成绩占本课程总成绩的20%。对于没有按照预习要求预习的,视本次实验无效。对无故缺实验者,本门课程实验成绩以零分计。实验一 C语言环境实验【实验目的】1、熟悉C语言的集成环境,了解菜单的使用方法。2、通过运行简单的程序,了解C语言程序的结构。【实验性质】验证性【实验要求】1、认真本实验的实验内容,熟悉VC环境使用过程 2、会使用VC编写最简单的程序【预习要求】1、仔细阅读实验内容中关于VC环境使用的步骤2、有条件的话可以在电脑上按照实验内容实际操作3、在预习报告中回答问题【实验内容
6、】(一)、VC环境介绍Visual C+是微软公司开发的,面向Windows 编程的C+语言工具。它不仅支持C+语言的编程,也兼容C 语言的编程。由于VC+被广泛地用于各种编程,使用面很广,本课程采用Visual C+作为开发环境。下面介绍如何在VC+下开发、运行C 语言程序。1、启动VC+VC+是一个庞大的语言集成工具,经安装后将占用几百兆磁盘空间。点击“开始”-“程序”-“Microsoft Visual Studio 6.0”-“Microsoft Visual C+ 6.0”,可启动VC+环境,如下图所示。启动VC+环境启动VC后,屏幕上将显示如下图所示的窗口。VC+启动后界面2、创建
7、工程 在启动VC环境后,需要为C程序创建一个工程,如下图所示,点击“文件”菜单下的“新建”菜单项。新建C工程1新建工程2如上图所示,在“工程”一栏中选择“Win32 Console Application”类型,在“工程”输入框中输入你为工程起的名称,点击“C位置”后面的“”按钮,显示如下界面。选择保存位置在上图中选择需要保存的文件夹的位置,点击“确定”按钮。显示如下界面。选择工程类型在上图中,选择“An empty project”选项,点击“完成”按钮,弹出如下界面。完成工程新建点击“确定”按钮,新建一个空工程。如下图所示。新建工程后界面新建完工程后,点击“文件”菜单。如下图所示。新建C源
8、程序文件1点击“新建”子菜单,弹出如下图的界面,新建C源程序文件。新建C源程序文件2选择“文件”下的“C+ Source File”选项,在“文件”输入框中输入C源程序的文件名(注意需要加.C表示是C源程序文件,假如不指定扩展名.C,VC+会把扩展名定义为.CPP,即C+程序。如果程序没有错误)。点击“确定”按钮。进入编辑C程序界面。3、编写代码如下图所示。VC版面介绍在上图所示的代码区中输入需要编写的C程序代码。如果需要查看已经编写的C程序文件,点击工程区中的“File View”,展开“Source Files”,下面包含的文件即为所创建的C源程序文件,点击可以打开。查看C程序文件输入程序
9、的代码,如下图。编写C程序文件在编写代码时请注意养成一些好习惯:1)行编写一条语句,代码采用锯齿形式,有利于代码的阅读;2)定义名需要做到见名知义;3)编写程序时,请养成给代码注释的好习惯,方便代码阅读;4、编译运行在代码编写完成后,点击“编译”菜单下的“编译”子菜单,将C程序编译成.Obj文件。如下图所示。编译C程序如果编译成功,在信息区中,会出现“0 error(s)”的提示信息,如果编译不成功,则会在在信息区中提示出错信息,如下图所示。编译C程序的错误信息在编译出错后,请仔细根据错误信息,双击某行出错信息,程序窗口中会指示对应出错位置,根据信息窗口的提示分别予以纠正。在编译程序时,请注意
10、“工具栏”上的“保存”按钮,将程序保存,以免造成不必要的损失,如果出现VC环境“死了”的情况(程序点击不动),关闭VC环境出现如下图这时,请按“Ctrl+ALT+Del”键,选择“VC+”点击“结束任务”,将VC强制关闭,重新启动即可,如下图所示。任务管理器点击“编译”菜单下的“构建”子菜单,将.Obj文件连接成.EXE文件。如下图所示。构建C程序构建成功后,点击“编译”菜单下的“执行”子菜单,可以运行程序,如下图。执行C程序当运行C 程序后,VC+将自动弹出数据输入输出窗口,在其中输入数据,完成程序执行,显示结果,如下图所示。按任意键将关闭该窗口。C程序运行界面对于编译连接执行操作,VC+还
11、提供了一组工具按钮,如图下图所示。工具栏上的编译、执行按钮5、关闭程序工作区当一个程序编译连接后,VC+系统自动产生相应的工作区,以完成程序的运行和调试。若想执行第二个程序时,必须关闭前一个程序的工作区,然后通过新的编译连接,产生第二个程序的工作区。否则的话运行的将一直是前一个程序。“文件”菜单提供关闭程序工作区功能,如下图右,执行“关闭工作区”菜单功能,会弹出询问是否保存的对话框,如下图左。如果选择“是”,将同时关闭源程序窗口。关闭工作区6、程序调试调试程序是编写代码的一个非常重要的步骤,当程序编译成功,需要查看程序执行过程以及其变量值的情况,需要启动调试。VC+是一个完全基于Windows
12、 的系统,它的调试过程通过鼠标比较容易进行。(1) 程序执行到中途暂停以便观察阶段性结果:方法一:使程序执行到光标所在的那一行暂停。在需暂停的行上单击鼠标,定位光标;如图A-17 所示,分别点击菜单“编译”“开始调试”“Run to Cursor”,或按【Ctrl】+【F10】,程序将执行到光标所在行会暂停。如果把光标移动到后面的某个位置,再按【Ctrl】+【F10】,程序将从当前的暂停点继续执行到新的光标位置,第二次暂停。程序执行到光标所在行暂停方法二:在需暂停的行上设置断点;在需设置断点的行上单击鼠标,定位光标;按“编译微型条”中最右面的按钮,如图A-18 所示,或按【F9】。调试被设置了
13、断点的行前面会有一个红色圆点标志。与TC 一样,不管是通过光标位置还是断点设置,其所在的程序行必须是程序执行的必经之路,亦即不应该是分支结构中的语句,因为该语句在程序执行中受到条件判断的限制,有可能因条件的不满足而不被执行。这时程序将一直执行到结束或下一个断点为止。(2) 设置需观察的结果变量按照上面的操作,使程序执行到指定位置时暂停,目的是为了查看有关的中间结果。在如图A-19 中,左下角窗口中系统自动显示了有关变量的值,其中value1 和value2 的值分别是3、4,而变量i、sum 的值是不正确的,因为他们还未被赋值。图中左侧的箭头表示当前程序暂停的位置。如果还想增加观察变量,可在图
14、中右下角的“Name”框中填入相应变量名。观察结果变量(3) 单步执行当程序执行到某个位置时发现结果已经不正确了,说明在此之前肯定有错误存在。如果能确定一小段程序可能有错,先按上面步骤暂停在该小段程序的头一行,再输入若干个查看变量,然后单步执行,即一次执行一行语句,逐行检查下来,看看到底是哪一行造成结果出现错误,从而能确定错误的语句并予以纠正。单步执行按“调试条”中“Step Over”按钮或【F8】,如图A-20 所示。如果遇到自定义函数调用,想进入函数进行单步执行,可按“Step Into”按钮 或【F11】。当想结束函数的单步执行,可按“Step Out”按钮或【Shift】+【F11】
15、。对不是函数调用的语句来说,【F11】与【F8】作用相同。但一般对系统函数不要使用【F11】。单步调试(4) 断点的使用使用断点也可以使程序暂停。但一旦设置了断点,不管你是否还需要调试程序,每次执行程序都会在断点上暂停。因此调试结束后应取消所定义的断点。方法是先把光标定位在断点所在行,再按“编译微型条”中最右面的按钮或【F9】,该操作是一个开关,按一次是设置,按二次是取消设置。如果有多个断点想全部取消,可执行“编辑”菜单中的“断点”菜单项,屏幕上会显示“Breakpoints”窗口,如图A-21 所示,窗口下方列出了所有断点,按“Remove All”按钮,将取消所有断点。断点通常用于调试较长
16、的程序,可以避免使用“Run to Cursor”(运行程序到光标处暂停)或【Ctrl】+【F10】功能时,经常要把光标定位到不同的地方。而对于长度为上百行的程序,要寻找某位置并不太方便。如果一个程序设置了多个断点,按一次执行键【Ctrl】+【F5】会暂停在第一个断点,再按一次【Ctrl】+【F5】会继续执行到第二个断点暂停,依次执行下去。取消所有断点(5) 停止调试使用“Debug”菜单的“Stop Debugging”菜单项,或【Shift】+【F5】键可以结束调试,从而回到正常的运行状态。上面只介绍了VC+中主要的功能,对于其他的操作可以自己试验或参考有关VC+手册。(二)、程序练习1、
17、请将下面程序在VC环境中输入,并运行观察结果 1) #includevoid main()printf(我爱学C语言!n);printf(告诉你学好C语言的秘笈:n);printf(编程!编程!再编程!n); 2) #includevoid main()int price,weight,value;price=10;weight=20;value=price*weight;printf(价格为%d,重量为%d货物,价值为%dn,price,weight,value);price=5;weight=8;printf(价格为%d,重量为%d货物,价值为%dn,price,weight,value)
18、;value=price*weight;printf(价格为%d,重量为%d货物,价值为%dn,price,weight,value);3) #includevoid main()float r,s;FILE *fp;r=12.4;s=r*r*3.14;fp=fopen(c:data.txt,w);fprintf(fp,半径为%f的圆,其面积为%f,r,s);printf(计算成功!,具体请看C盘下的data.txt文件);fclose(fp);2、依照1-3中函数的写法,编写一程序,求高为5.4,半径为2.3的圆柱体的体积【实验报告】【思考题】1、使用VC编程时,应先创建的工程是什么类型?2
19、、如何运行一个C程序?实验二 简单程序设计【实验目的】1、掌握scanf、printf函数语句的使用2、掌握算术表达式和赋值表达式的使用3、能够编程实现简单的数据处理【实验性质】 验证性【实验要求】1、认真阅读本次实验的目的,了解本次实验要求掌握的内容2、在上机前,需要预习,在程序改错题旁将程序中存在的错误修改过来,将编程题的代码和流程图写在预习报告中3、在实验时,将实验要求的基本题(程序改错和编程题)根据预习报告中编写的代码,在VC环境中编写出来4、在VC中将编写的程序编译、调试,能正确运行结果,各题目的具体要求请看题目下的要求5、将正确程序上传FTP服务器6、争取完成选作题【实验内容】1、
20、程序改错1) 下面程序需要从键盘输入三个数,计算其平均值在屏幕上显示输出。要求平均值需要保留两位小数。源代码如下,程序中存在错误,请将其改正写在旁边,并注明为什么错误。include stdio.hMain() int x,y,z,float ave; /*定义变量*/ printf(请输入三个数:n);/*输入提示*/ scanf(%d,%d,%d,x,y,z);/*从键盘输入*/ ave=x+y+z/3;/*计算*/ printf(平均值是:ave=%f,AVE);2、编程题1)编写程序,在计算机屏幕上显示如下信息。【要求】 (1)使用printf函数输出字符 2) 设一个正圆台的上底半径
21、r1,下底半径r2,高h。请设计一程序,从键盘输入r1,r2,r3;计算并在显示器上输出该圆台的上底面积s 1,下底面积s 2,圆台的体积V。 【要求】 (1)r1,r2,h用scanf函数输入,且在输入前要有提示; (2)在输出结果时要有文字说明,每个输出值占一行,且小数点后取2位数字。 【思路点拔】 (1)圆面积计算公式为 s=r2。其中r为圆半径。 (2)圆台体积计算公式为 V=3) 鸡兔同笼,已知鸡兔总头数为h,总脚数为f,求鸡兔各有多少只?【要求】 (1)用scanf函数输入h和f,且在输入前要有提示; (2)在输出结果时要有文字说明。【思路点拔】设有x只鸡,有y只兔,则有: 求出x
22、和y的公式:从而可以计算出x和y。3 选作题1)编程求ax2+bx+c=0的解【思路点拔】用求根公式x1,2=(-bb2-4ac)/2a)2)编程求y=sin()+ln(a+x). 要求a和x从键盘输入【思路点拔】使用数学函数计算【预习报告】1 流程图代码2流程图代码3流程图代码【实验报告】【思考题】1、变量在程序中有什么作用,如何从键盘中输入多个变量的值2、用#define定义的常量与变量有什么区别,什么时候应该使用#define定义符号常量3、程序中有哪几种流程结构,具体在程序中用什么体现实验三 分支结构程序设计【实验目的】1、掌握关系表达式和逻辑表达式的使用2、掌握使用if语句实现分支结
23、构程序设计3、了解switch语句【实验性质】 验证性【实验要求】1、认真阅读本次实验的目的,了解本次实验要求掌握的内容2、在上机前,需要预习,在程序改错题旁将程序中存在的错误修改过来,将编程题的代码和流程图写在预习报告中3、在实验时,将实验要求的基本题(程序改错和编程题)根据预习报告中编写的代码,在VC环境中编写出来4、在VC中将编写的程序编译、调试,能正确运行结果,各题目的具体要求请看题目下的要求5、将正确程序上传FTP服务器6、争取完成选作题【实验内容】1、程序改错 1) 下面程序需要从键盘输入一个数,判断其是奇数还是偶数。源代码如下,程序中存在错误,请将其改正写在旁边,并注明为什么错误
24、。#include stdio.hmain() int x; printf(请输入一个数:/n);/*提示输入*/ scanf(%d,&x); if(x=2*n); /*判断*/ printf(x是偶数); printf(x是奇数); 2、编程题1) 编写一程序,从键盘输入三角形的三条边,如果能构成一个三角形判断其是否是等腰三角形(等边三角形是等腰三角形的特例);【要求】(1)用scanf函数输入三角形的三条边a,b,c,且在输入前要有提示;(2)使用if语句判断,对每种情况都需要有提示 2) 在商场购物时,若所购物品的总价值x(由键盘输入)在某一范围时,付款y按对应折扣支付,即 x x100
25、0 y= 0.9x 1000x20000.8x 2000x30000.7x x3000 编写一程序,根据x的值计算y【要求】(1)用scanf函数输入x(x为小数),且在输入前要有提示;(2)使用if-else if-else语句判断,计算y的值(2)使用printf输出y的值,小数点保留2位3)从键盘输入3个数,输出最大值和最小值【要求】(1)用scanf函数输入三个数,且在输入前要有提示;(2)使用嵌套结构出最大值,然后求出最小值,并使用printf输出3 选作题 1)编写一程序,从键盘输入一个不多于4位的正整数,能显示出它是几位数,并按正反两种顺序显示出各位数字。例如,若输入1234,输
26、出为:位数:n=4正序:1234反序:4321【编程点拨】(1)先判断x是否为满足要求n大于9999,小于0时,则不满足要求(2)通过%和/运算分离出各个位上的值,先判断千位是否为零,如果为零,则不可能为四位数,再判断百位上的数是否为零(3)反序输出时,先输出个位,再十位,百位,千位 2)从终端输入两个实数和一个四则运算符(、*、 /),执行相应的运算并输出运算结果。(如输入12+4,结果为48)【编程点拨】(1)先用scanf函数,输入四则运算的两个操作数和运算符,分别保存在不同的变量,注意保存运算符的变量只能是字符型(2)对运算符变量进行判断,根据运算规则,编写相应的表达式求运算结果【预习
27、报告】1 流程图代码2流程图代码3流程图代码【实验报告】【思考题】(1)对于编程题2,如何使用if语句嵌套的方式和switch语句的方式实现(2)对于多分支结构,使用ifelse if 还是使用嵌套结构,需要注意什么?(3)编写分支结构时,条件的编写需要注意什么实验四 循环结构程序设计【实验目的】1、掌握使用for、while和dowhile语句实现循环程序设计2、理解循环条件、循环体3、掌握break、continue语句的使用【实验性质】 验证性【实验要求】1、认真阅读本次实验的目的,了解本次实验要求掌握的内容2、在程序改错题旁,将程序中存在的错误修改过来3、将编程题的代码在预习报告中写出
28、来4、在实验时,将实验要求的基本题(程序改错和编程题)根据预习报告中编写的代码,在VC环境中编写出来5、在VC中将编写的程序编译、调试,能正确运行结果6、将正确程序上传FTP服务器7、争取完成选作题【实验内容】1、程序改错 1) 编写程序,求1!+2!+3!+.+10!的和, 源代码如下,程序中存在错误,请将其改正写在旁边。#include stdio.hmain() int i; long sum,temp;/*定义变量*/ for(i=1,iy)/*如果xy,两个值互换,保证第一个参数为小值*/ x=y;y=x; acd=acd(int m1,int m2);/*调用函数求最大公约数*/
29、amd=(x*y)/acd;/*求最小公倍数*/ printf(最大公约数=%d,最小公倍数=%d,acd,amc);/* 函数功能:使用辗转相除法求两个数的最大公约数 参数m1:两个数中较小者 参数m2:两个数中较大者 返回值:m1和m2的最大公约数 */int acd(int m1,int m2); int r; while (m1=0)/*使用辗转相除法求最大公约数*/ r=m2%m1;m1=r;m2=m1; return r;/*返回最大公约数*/2、编程题 1) 若正整数A的所有因子(包括1但不包括自身,下同)之和为B,而B的因子之和为A,则称A和B为一对亲密数。例如,6的因子之和为
30、1+2+3=6,因此6与6为一对亲密数(即6自身构成一对亲密数);又如,220的因子之和为l+2+4+5+10+11+20+22+44+55+110=284,而284的因子之和为1+2+4+71+142=220,因此,220与284为一对亲密数。 编写程序,求500以内的所有亲密数对。【要求】 (1)编制facsum(n) 函数,返回n的所有因子(包括1但不包括自身)之和。 (2)在main函数中调用facsum(),寻找并输出500以内的所有亲密数对。(3)输出要有文字说明。并且小数在前、大数在后,去掉重复的数对。(4)采用程序改错题的的编码风格对源代码做注释 2) 计算并输出 【要求】 (
31、1)编制一个函数pq(n),返回n!值。 (2)在main函数中,从键盘输入m与n,调用函数pq计算。 (3)在main函数中,输入m与n之前要有提示,并检查输入数据的合理性(mnO),对于不合理的输入,应输出出错信息,不再进行计算。 (4)采用程序改错题的的编码风格对源代码做注释3)使用函数的方法求1000之内的自守数,自守数是指一个数的平方的尾数等于该数自身的自然数。例如:252=625;762=5776;93762=87909376(1)编制一个函数isAutomorphic (n),判断n是否为自守数数,如果是返回1,如果不是返回0。 (2)在main函数中,使用for循环,调用函数i
32、sAutomorphic判断n是否为自守数。(3) 打印的数字占8个字符宽,每行显示5个自守数。(4)采用程序改错题的的编码风格对源代码做注释3 选作题1)已知,编写一程序,从键盘输入x,求s(x)的值(计算后面的20项的和)。 2)用递归方法,计算13+23+33+43+n3的值,n的值由键盘输入。【编程点拨】假设用f(n)表示13+23+33+43+n3,则可用以下公式表示: 1 当n=1时f(n)= n3 +f(n-1) 当n1时根据上述的递归关系式,编写函数f()。【预习报告】1 流程图代码2流程图代码3流程图代码【实验报告】【思考题】1、函数调用时,参数是如何传递的2、如果在函数中有
33、多条return语句,程序执行会如何处理,如果想返回多个值,应该怎么办?3、如果函数在执行时,需要得到上一次该函数调用时变量的值该怎么办,如果函数想使用别的函数中的变量的值该怎么办实验六 数组程序设计【实验目的】1、掌握使用一维数组编程方法2、掌握使用字符数组处理字符串的方法2、了解二维数组【实验性质】 验证性【实验要求】1、认真阅读本次实验的目的,了解本次实验要求掌握的内容2、在程序改错题旁,将程序中存在的错误修改过来3、将编程题的代码在预习报告中写出来4、在实验时,将实验要求的基本题(程序改错和编程题)根据预习报告中编写的代码,在VC环境中编写出来5、在VC中将编写的程序编译、调试,能正确
34、运行结果6、将正确程序上传FTP服务器7、争取完成选作题【实验内容】1、程序改错 1) 下面程序的功能,是从键盘输入一个数组(数组长度为10),查找数组中正数的个数。源代码如下,程序中存在错误,请将其改正写在旁边。#include stdio.hmain() int a(10);/*定义数组*/ int count,i;/* i循环变量 count 正数个数*/ for(i=0;i=10;i+)/*循环输入*/ scanf(%d,ai); count=1; for(i=0;i0)count+; printf(数组中正数有:%d个,count);2、编程题 1) 从键盘输入一个字符串,将其中的大
35、写字母变小写字母,小写字母变大写字母,并输出 。【要求】 (1)用字符数组表示存储字符串(字符串最大为100)。 (2)使用scanf函数逐个输入字符保存在字符数组中 (3)使用printf函数逐个输出字符数组中的字符 2) 输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。【要求】 (1)数组长度定义为10 (2)输出数组时每个元素占8个宽度,每行5个3) 编程序按下列公式计算s的值(其中x1、x2、xn由键盘输入): (其中x0是x1、x2、xn的平均值)【要求】 (1)用数组保存x1、x2、xn的值。 (2)n的值从键盘输入3 选作题 1)求从一个字符串中删除所有指定字符的其余字符串。如字符串为“abcaca”,删除字