C语言程序设计实习指导及报告.docx
《C语言程序设计实习指导及报告.docx》由会员分享,可在线阅读,更多相关《C语言程序设计实习指导及报告.docx(36页珍藏版)》请在冰点文库上搜索。
![C语言程序设计实习指导及报告.docx](https://file1.bingdoc.com/fileroot1/2023-5/6/f8099b3c-b025-44c1-9ea2-f7f34532fee6/f8099b3c-b025-44c1-9ea2-f7f34532fee61.gif)
C语言程序设计实习指导及报告
C语言程序设计实习指导
C语言课组编写
西北农林科技大学信息工程学院
2010年2月
前言
程序设计是实践性很强的课程,实习的目的是为了巩固所学知识,培养、提高实际动手能力和严肃认真的科学工作态度,而程序设计是创造性的劳动,因此需要编程人员全身心地投入,充分发挥主观能动性,认真做好每一次实习。
每道题没有唯一解,只要掌握了基本的方法和技巧,加上自己创造性的工作,就一定能够编写出各种各样的好程序。
任何程序最终都必须在计算机上运行,以检验程序的正确与否。
因此在学习程序设计中,一定要重视上机实践环节,通过上机加深理解C语言的有关概念,巩固理论知识,另一方面培养调试程序的能力与技巧。
为了加强基础知识和语言主干结构的学习,深刻理解和掌握教材内容,减少实习时的盲目性,特编写本实习指导书。
为方便内容组织,每个实习由实习目的、实习内容及讲解、注意事项等几部分组成。
下面对每次实习提几点具体要求:
(1)实习前应进行充分的准备,做到心中有数。
要弄懂教材中的相关知识和例题,深刻理解教材中涉及到的知识点及程序设计方法,根据实习要求,对题目进行分析,选择适当的算法、事先编写好程序。
上机前一定要仔细检查程序(称为静态调试),直到找不出错误(包括语法错误和逻辑错误)为止。
分析可能遇到的问题及解决的办法。
准备几组测试程序的数据、写出预期的结果,以便发现程序中可能存在的错误。
(2)在实习中,应该对编写好的程序使用预先准备好的测试数据运行程序,观察是否能得到预期的结果(称为动态调试)。
对于实习中出现的问题进行仔细的分析,找出解决办法,调试程序排除各种错误,直到得到正确结果。
对运行结果要做好记录,为写实习报告做好准备。
调试过程中,要充分利用系统提供的各种调试手段和工具,例如:
单步跟踪、设置断点、观察变量值等。
对出现的错误要善于思考,勤于分析,尽量自己动手解决问题,逐渐提高自主分析问题和解决问题的能力。
(3)实习结束后,要整理实习结果,并应根据问题、解决办法和运行结果,对本次实习及时进行认真分析和总结,撰写出实习报告并提交到电子作业管理系统。
以这种方式提交实习报告书还处于尝试阶段,限于作者水平,其中疏漏在所难免,敬请各位老师和同学批评指正。
联系地址:
Email:
hl@或Email:
cy@。
作者
2010年2月
目录
实习一C语言概述-1-
实习二顺序结构-9-
实习三选择结构错误!
未定义书签。
实习四循环结构程序设计-15-
实习五数组-17-
实习六指针-23-
实习七函数调用-26-
实习八结构体、联合体及位运算-29-
实习九文件操作-31-
实习一C语言编程环境及简单程序设计
一、实习目的
⒈熟悉C语言集成开发环境的使用方法,学会独立使用该系统;
⒉通过编写简单的程序,掌握C语言源程序的编辑、编译、连接、调试和运行过程;
⒊通过编写、运行简单的C语言源程序,学习程序编写方法,了解C源程序的特点;
⒋理解C语言数据的类型、取值范围、定义和使用方法;
⒌掌握各种运算符、表达式的基本概念、使用方法,以及各种运算符的优先级及结合方向;
⒍掌握各种类型数据的输入/输出方法,能正确使用各种格式转换符和控制符。
二、实习要求
⒈实习前认真复习第1、2章内容,尤其是P17的1.4C程序的开发步骤;
⒉对实习内容中给定的题目上机前先进行程序的编写和数据的准备;
⒊学会使用上机环境;
⒋上机编辑、调试、运行程序,保存最终程序到自己的文件夹中。
注意:
当本次作业全部完成后,提交到信息学院作业管理系统中任课教师的名下。
三、VisualC++6.0运行环境介绍
VisualC++6.0是运行于Windows环境下的交互式可视化集成开发环境,有中、英文两种版本,使用方法相同,即可在该环境中编辑程序、也可编译连接运行程序,此处仅介绍中文环境下的使用方法。
⒈安装
使用前必须先在所使用的机器上安装VisualC++6.0运行环境系统。
该系统软件放在一张光盘上,只要根据提示便可以轻松安装,此处不做详细介绍。
实习机房机器上已安装,可供使用。
⒉启动
①一般安装后便在桌面上创建了快捷方式图标。
首次启动VisualC++6.0,只要双击此图标即可;
②也可通过开始菜单→所有程序→MicrosoftVisualStudio6.0→MicrosoftVisualC++6.0启动VisualC++6.0;
③直接双击C语言源程序,即名为.c或.cpp的文件,也可启动VisualC++6.0并显示程序。
⒊运行环境介绍
VisualC++6.0启动后,界面如图1所示。
可见VC(VisualC++6.0的简称)的主界面由标题栏、菜单栏、工具栏、编辑窗口、信息提示窗口、工作区窗口及其切换按钮等组成。
⑴标题栏用于显示应用程序名和当前打开的文件名,在上图中为exam1-1.c创天中文VC++。
若文件名后带有“*”号,表示修改后的内容尚未存盘,提示用户及时保存更新的内容。
⑵菜单栏列出了VC提供的各种命令,用法与Word相同。
其中:
文件用来对文件和项目进行管埋,如创建新文件和项目、打开己有的文件和项目、保存文件和项目;关闭文件和项目等。
其中打开、保存、关闭工作区是一个新的概念,因为VC中为源程序建立了一个工作区,当再次新建一个C程序时,必须要关闭上一个程序已打开的工作区,否则会出错。
编辑对文件进行各种编辑操作,如剪切、粘贴、插入、删除、复制、全部选择、查找、定位等。
查看用于改变窗口和工具栏的显示方式,如建立类向导、全屏幕显示、工作区、输出、激活调试时所用的各个窗口、属性等。
插入创建、添加项目和资源,如新建类、插入新的资源、插入新的ATL对象等。
工程设置与工程相关的源文件、库函数,如添加工程、设置活动工程、来源控制、插入工程到工作区等。
编译对应用程序进行编译、连接和执行,如编译、构件、重建全部、批构件、开始调试等。
工具选择或制定开发环境中的一些实用工具,以激活各个调试窗口,改变各个窗口的显示模式等。
窗口对窗口进行各种设置。
帮助显示各种帮助信息。
⑶工具栏
提供常用工具,方便编辑、保存、编译运行程序。
分为以下三个部分。
①常用工具栏
新
建
文
件
打
开
文
件
保
存
当
前
文
件
保
存
所
有
打
开
的
文
件
剪切选定内容
复
制
选
定
内
容
粘
贴
复
制
内
容
撤
销
上
次
操
作
恢
复
被
撤
销
的
操
作
打
开
关
闭
工
作
区
窗
口
打
开
关
闭
信
息
提
示
窗
口
文
件
窗
口
操
作
在指
定的
多个
文件
中查
找字
符串
指定要查找的字符串,按Enter键进行查找
在当
前文
件中
查找
指定
的字
符串
②编译运行工具栏
编译
编译及连接
中断编译连接
运行
调试运行
设置取消断点
③WizardBar工具栏
包含一些快速使用ClassWizard的工具,此处从略。
⑷工作区窗口
用目录树的方式显示工程文件的组织结构形式。
与Windows的资源管理器类似,可以通过点击“+”或“-”号,来展开或折叠下级结构。
通过点击切换工作区按钮,可改变显示方式。
①ClassView标签用于显示当前打开的项目所包含的类、函数和变量定义等信息。
②FileView标签用于显示当前打开的项目所包含的各种文件信息,包括:
源文件、头文件、资源文件等。
⑸编辑窗口
为用户提供的编辑源文件的区域,用法与Word完全相同,此处不再赘述。
⑹信息提示窗口
用于显示编译、连接、运行时,系统产生的各种提示信息,包括当前状态信息、各种错误信息、警告信息等;调试信息和查找的结果也在此处显示。
阅读这些信息可帮助用户查找错误。
⑺状态栏
用于显示当前操作的状态、注释、光标所的行和列的在位置。
⒋编辑、编译、连接和运行程序
此工作当VC启动完成,在主界面中即可开始进行。
⑴直接建立源文件
①选菜单“文件”→“新建”,弹出图2所示界面;
②选“文件”标签→“C++SourceFile”;
③在文件框中输入要建立的文件的名字,如图2中的exam1-1.c;
④在目录框中选择所建文件存放的位置,如图中的D:
\2009-2010-2\C。
该目录必须已存在,否则会有提示信息;
⑤单击“确定”按钮,在弹出的图1所示界面的编辑窗口中,即可进行源文件的编辑。
⑵打开已存在的C源程序文件
①选菜单“文件”→“打开”,或单击快捷按钮,弹出图3所示打开文件界面;
②用与在Windows中相同的方法,打开自己选定的文件到图1所示的VC环境中,然后进行编辑、修改;
③当编辑、修改完毕后,就可以原名保存或另存为其它名字的文件了。
⑶保存/另存文件
①输入或修改完毕,单击菜单“文件”→“保存”,或单击快捷按钮,即可以前面确定的位置、文件名或原文件名保存文件;
②若想改变文件名或文件的存放位置,则应选文件→另存为,根据提示另保存文件。
⑷编译、连接C程序
①编译
进行编译的方法有三种:
方法一:
按Ctrl+F7组合键
方法二:
单击工具栏的按钮
方法三:
选择菜单“编译”→
执行编译后,信息提示窗口中显示出编译的结果信息,指出源程序中是否存在语法错误,如图4所示。
如:
*.obj-×error(s),×warning(s)
其中:
“*.obj”是所产生的目标文件名,“*”代表具体的文件名,如图4中的exam1-1;
“×error(s)”指明发现的致命语法错误,“×”是错误具体个数。
若无错误即为0;
“×warning(s)”对可能的潜在性错误发出警告,“×”是具体个数。
若无即为0。
如果有错误,还会在该窗口中逐一显示出具体的错误类型及位置,只要双击某错误行,便可直接指向编辑窗口中错误所在行,以方便查看和改正错误。
然后再编译。
直到源程序中没有任何语法错误,即error型错误,表示编译成功,已正确生成目标文件,即.obj文件,接着就可以进行连接了。
建议:
对有多个错误的情况,要分析错误提示,根据前后语句找出出错原因,再进行修改,且最好从第一个错误开始修改,因为前面的错误可能会连带后面也出错;最好每改正一个错误,就编译一次,这样能够有效地消除连带错误。
②连接
目标文件生成后,就要把目标程序与系统中的库函数连接起来,生成可执行文件,即.exe文件。
进行连接的方法也有三种:
方法一:
按F7键
方法二:
单击工具栏的按钮
方法三:
选择菜单“编译”→
与编译类似,连接的结果也会在信息提示窗口中显示,如图5所示。
若有错误提示,必须改正后重新再进行编译、连接,直到生成没有错误的可执行文件。
错误多一般是因为函数名不正确,或包含命令不对,如头文件的位置不正确等。
③编译+连接
编译和连接操作也可一次完成。
如果尚未进行编译就直接选择执行连接,系统将会先进行编译,若成功后再自动进行连接。
⑸运行
运行可执行文件的方法也有三种:
方法一:
按Ctrl+F5组合键
方法二:
单击工具栏的按钮
方法三:
选择菜单“编译”→
若程序能够正常运行,系统会在VC界面上弹出一个命令行方式的用户窗口,如果需要的话用户可以通过这个窗口给程序输入数据,而程序运行的结果也是显示在这个界面上的。
如对图1中所示的程序,运行的结果如图6所示。
其中的“Pressanykeytocontinue”是系统提示信息,只要根据该提示按任意键,便可返回编辑界面。
⑹关闭程序工作区
当一个程序调试、运行完毕后,必须先关闭当前程序的工作区,才可进行下一个程序的工作,否则可能会出现意想不到的错误。
关闭工作区可选菜单“文件”→“关闭工作区”来实现。
⑺退出VC系统环境
可选菜单“文件”→“退出”,其它退出方法与Windows其它应用程序相同。
四、实习内容
⒈创建文件夹
在自己实习机器的C上盘以自己的姓名创建一个文件夹,以便将实习内容保存在自己的文件夹中,你建立的文件夹名为:
。
⒉学习VC++6.0集成开发环境的使用方法,掌握建立、打开、保存、运行一个C源程序的操作方法,注意完成以下内容
⑴输入教材P3【例1-1】的源代码后,以文件名exam1-1.c保存。
⑵通过资源管理器查看你自己的文件夹,此时其中有1个文件。
⑶编译源代码(快捷键为CTRL+F7)后,通过资源管理器查看你的文件夹,发现除源程序文件外,多了3个文件和1个文件夹,多出的文件夹名为:
Debug。
⑷连接程序(快捷键为F7),结束后查看新增加的文件夹中在第(3)步的基础上又多出了3个文件。
其中最重要的是结果文件,其扩展名为EXE。
⑸选菜单“文件”→“关闭工作区”命令结束当程序,为新建下一个C源程序做准备。
⒊实习中的有关约定
为便于管理,本实习中特作以下有关约定。
⑴电子实习报告的命名
凡提交的电子实习报告,均以姓名+实习号命名。
如张三同学提交实习一的电子实习报告,则命名为:
张三1,依此类推实习五的即为:
张三5
⑵提交作业题的命名
①例题验证以exam+章号+题号命名。
如第一章的例1,则写为:
exam1-1.c
②作业题以zy+章号+题号命名。
如对P18第一章的作业程序设计题1中的第2题,则写为:
zy1-2.c
③作业题一题多解则以zy+章号+题号+序号命名。
如第一章的P18的程序设计题1中的第2题的第2种解法,则写为:
zy1-2-2.c
④附加题则以fj+章号+题号命名。
如第一章的第1个附加题,则写为:
fj1-1.c
⑤附加题一题有多解则以fj+章号+题号+序号命名。
如第一章的第1个附加题的第2种解法,则写为:
fj1-1-2.c
⒋按要求完成P18程序设计题1中的第2、第5题
⑴对第2题的提示
该题要求在屏幕上输出“HappyNewYear!
”,仿照教材P3【例1-1】即可完成。
⑵对第5题的分析
①该题要求从键盘输入任意两个数。
由教材可知,在C程序中数据要存在变量中,以后才可以多次使用。
又因未限定数据类型,为扩大适用范围,此处定义两个实型变量a和b来接受从键盘输入的数据,可用语句:
floata,b;
②要求保存计算的和、差、积、商,可设定四个变量来存放。
为扩大适用范围此处定义四个实型变量h、c、j和s来保存计算的结果,可用语句:
doubleh,c,j,s;
③接受从键盘输入的实型数据,可用语句:
scanf("%f%f",&a,&b);
④计算可用四个赋值语句完成:
h=a+b;c=a-b;j=a*b;s=a/b;
⑤最后结果的输出可用输出语句:
printf("和=%f,差=%f,积=%f,商=%f\n",h,c,j,s);
其实,本题可以参考P11代码1-5(b)来完成。
⒌按要求完成P52程序设计题2中的第1、第3、第4题
⑴对第1题的分析
①根据题意需要定义存放梯形上底、下底、高和面积的实型变量为:
floatsd,xd,h,area;
②求梯形面积的公式为:
面积=(上底+下底)×高/2,即area=(sd+xd)*h/2;
③为使程序具有通用性,可先从键盘输入上底、下底和高的值,然后再计算面积;
④计算出的面积值一定要输出,才能看到计算结果。
⑵对第3题的分析
①输入任意一个字符,需定义一个字符变量:
charc;
②在C语言中,字符型变量的值即可用字符形式也可以整数形式输出。
当以字符形式输出时输出的是原字符,而以整数形式输出时输出的就是该字符的ASCII码值了。
所以使用的输出语句可为:
printf("字符为:
%c,ASCII码值为:
%d\n",c,c);输出字符也可用putchar(c);
⑶对第4题的分析
①仔细阅读教材P36的2.4.8节的内容;
②可通过逐个输出sizeof函数的值完成该题。
如:
printf("整型占%d字节\n",sizeof(int));
五、注意事项
1.上机实习前一定要认真阅读教材相关内容,结合实习步骤整理出实习涉及的内容。
从本次实习开始大家应该明白,上机实习的目的有两个,其一是加深对知识点的理解;其二是验证自己学习过程中的一些疑问。
对于教材中的内容、例题,如果已经理解的可以跳过,对于有疑问的才需要上机调试验证。
2.对程序的可靠性要进行多方面的测试,有时要和别的程序对比运行结果,甚至要用手算。
3.C语言程序编写及上机调试步骤:
⑴先根据题意决定算法,并用笔在纸上画出程序流程图;
⑵根据流程图编写源程序代码,经人工检查无误后才能上机。
对自己有疑问的地方,应事先作好标记,以便上机时给予注意。
初学时切忌不编程序或抄袭别人的程序,应养成良好的习惯和严谨的科学作风;
⑶准备好测试数据,写出预期结果(必要时应准备多组测试数据);
⑷将源程序代码输入计算机;
⑸再次检查程序有无错误(包括语法错误和逻辑错误);
⑹运行和调试。
进行编译和连接,仔细分析编译信息,如有错误应找出原因并记录,然后改正、再进行编译和连接……,直到输出结果正确为止。
对出现的问题应仔细分析,一般应尽量独立处理,尤其是对“出错信息”,应学会自己分析判断,不要轻易问他人,这是学会调试程序的良方;
⑺程序调试过程中,应记录出现的各种状况、解决的方法,为撰写实习报告作好准备。
程序运行通过后,应将结果与事先的预期结果进行对比分析;
⑻对于教材上的例题输入运行后,自己可以再修改、调试,例如:
故意改成错的,然后分析其编译和运行情况;
⑼将每次实习的所有内容调试好后,仅保留扩展名为“.c”和“.exe”的文件,将其它文件全部删除,经压缩后保存在自己的邮箱中或提交给老师。
实习二分支结构程序设计
一、
实习目的
1.掌握C语言的六种关系运算符和三种逻辑运算符的使用方法;
2.了解C语言表示逻辑量的方法(以“0”代表“假”,以1或非“0”代表“真”);
3.深刻理解选择结构,熟练掌握和应用if语句的三种基本形式和嵌套形式;
4.掌握switch语句的规则、功能与特点,能准确构造表达式;
5.通过上机,理解选择结构程序中常见的语法及逻辑错误,掌握基本的程序调试技术。
二、程序调试方法介绍
程序编译、连接通过,即可执行,这说明程序无语法错误,但不能确定程序执行的结果是否正确。
若程序执行结果与要求不符,则说明程序存在算法上的问题,这类错误称为逻辑错误。
逻辑错误的判断、定位、修改,往往要比通过编译检查语法错误困难得多,不仅依赖于程序设计者对算法的理解以及编程的经验,还需借助于必要的手段,这一点对于初学者显得尤为重要。
C语言的环境都或多或少地提供了必要的调试工具,在此简单介绍几种常用的调试方法和手段。
⒈添加输出语句
输出语句的作用是输出程序的最终结果,对于中间的执行结果是不必输出的,但是在程序的调试过程中,输出一些中间结果对于错误的判断是十分有益的。
因此可以在程序执行的中间增加一些输出语句,以检测程序执行过程中的问题,这也是调试的重要手段。
下面通过例题,说明其基本使用方法。
[例1-1]求1-5的累加和,即S=1+2+3+4+5。
若程序代码如下:
#include
voidmain(void)
{inti,s;
for(i=1;i<=5;i++)/*循环取五个数*/
{
s=s+i;/*五个数累加*/
}
printf("1+2+3+4+5=%d\n",s);/*输出累加结果*/
}
在VC++6.0环境下,输入源程序,编译连接无语法错误,经执行后其结果如图7所示。
从图7可以看出,虽然程序没有语法错误,但执行结果明显是错误的,5个正数的累加和绝对不可能为负数。
问题出在哪里?
为了定位错误,可以在循环的累加过程中加入输出语句,输出每次累加前变量s的值,则可将代码改为:
#include
voidmain(void)
{inti,s;
for(i=1;i<=5;i++)/*循环取五个数*/
{printf("s=%d\n",s);/*输出每次累加前变量s的值*/
s=s+i;/*五个数累加*/
}
printf("1+2+3+4+5=%d\n",s);/*输出累加结果*/
}
执行结果如图8所示。
可见,在循环中s的值按i的变化递增,即累加是正确的。
但第一次没有累加之前s的值就是-858993460而不是0,这就意味着产生错误的原因是在循环之前,没有为s赋初值0。
因此,将s=0;语句加在for循环前,然后注释或删除掉增加的输出语句后的程序如下。
再次编译、执行程序,结果如图9所示,正确无误。
#include
voidmain(void)
{inti,s;
s=0;/*为s赋初值*/
for(i=1;i<=5;i++)/*循环取五个数*/
{
s=s+i;/*五个数累加*/
}
printf("1+2+3+4+5=%d\n",s);/*输出累加结果*/
}
建议:
①在程序代码的适当位置增加输出语旬,可以暴露程序存在的问题。
②分支中必须设计多组测试数据,对临界值以及每一种分支的情况进行测试,以发现漏洞。
③循环中必须设计多组测试数据,对循环的边界状态进行测试,以发现漏洞。
⒉单步执行
单步执行是编程环境常备的一种调试工具,它是指每执行一条语句后即暂时停止,以方便用户观察程序的执行情况,然后再启动执行下一条语旬,如此一步一步地执行程序。
这样可以观察程序中每条语句的执行过程和执行结果,便于在调试中发现问题。
下面通过例题,说明VC++6.0下单步执行的基本使用方法。
[例1-2]求级数。
若程序代码如下:
#include
voidmain(void)
{floats;
inti;
s=0;/*为s赋初值*/
for(i=1;i<=5;i++)/*循环取五个数*/
{
s=s+1/i;/*五个数累加*/
}
printf("1+1/2+1/3+1/4+1/5=%7.2f\n",s);/*输出累加结果*/
}
编译连接无语法错误,经执行其结果如图10所示,输出结果为1.00,显然是错误的。
由于s有初值、i在每次循环中也能取得正确的值,可计算结果却有误,原因可能是累加的过程产生了错误。
下面通过单步执行功能观察执行中的具体情况。
⑴进入单步执行状态
按F11(选菜单“编译”→“开始调试”→“StepInto”)或按F10键如图11所示,进入单步执行状态,如图12所示。
其中Debug菜单提供了三种调试方式,含义及说明见表1。
表1单步执行时的快捷按钮、快捷键及单步方式,退出方法
单步执行方式
快捷按钮
快捷键
执行方式含义
StepInto
F11
将进入调用的函数中单步执