文档库 最新最全的文档下载
当前位置:文档库 › 测绘程序设计实验报告

测绘程序设计实验报告

测绘程序设计实验报告
测绘程序设计实验报告

测绘程序设计(C版)

实习报告

学号:201420050138

姓名:李阳靖

班级:1420501Z

专业:测绘工程

课程名称:测绘程序设计(C及Matlab)

指导老师:肖根如

2015年12月

目录

前言1

一、实验目的1

二、实验环境2

三、Turbo C 3.0与VC++6.0的熟悉与操作2

四、实验内容梗概3

五、实验具体内容4

实验一算法4

实验二数据类型、运算符和表达式5

实验三控制语句6

实验四函数9

实验五数组11

实验六结构体与共用体12

六、常见错误及分析14

七、程序调试15

八、实验心得与体会17

九、附录:实习程序设计清单21

前言

现代科学飞速发展,世界也不断的变化,人类的生活随着科技的发展也发生着惊天动地的变化。作为新时代的大学生,我们应该不断努力学习科学文化知识,以适应社会的发展要求,以现代化的科学知识为祖国做贡献。而C语言作为一种计算机语言,无疑是我们将来工作不可缺少的一门技能,所以我们应该认真学好C语言。但只是课本上的知识是不够的,我们应该将从课本上学到的理论知识应用到实践中,通过不断的实践,在实践中发现错误解决错误,并不断创新,最后能熟练的运用所学的知识,充分掌握这种工具。C语言知识博大精深,有必要对C语言的专著进行研究学习,多阅读别人的程序代码、多动手实践操作与设计,这样便对程序算法精简改进提供了可能。想学的更深更透彻的话就必须进一步掌握运用C进行程序设计的能力;进一步理解和运用面向过程程序设计的思想和方法;初步掌握开发一个小型实用系统的基本方法;学会调试一个较长程序的基本方法;学会利用互联网查找相关的知识并学习;学海之路何其宽广,有必要让我们孜孜不倦的求索下去。

一、实验目的

C语言程序设计实习是在学习《C语言程序设计》理论知识的基础上进行的实践教学环节,其目的是培养我们具有初步的C语言程序设计、编程、调试和排除C语言程序语法、逻辑错误的能力。

全面熟悉、掌握C语言基本知识,掌握C程序设计中的顺序、分支、循环三种结构及数组、函数和C语言基本图形编程等方法,把编程和实际结合起来,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为以后在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。

在实习过程中,我们要认真复习基本概念,独立编写程序,并上机调试运行,培养自己发现程序中的错误、改正错误以使程序能正确运行的能力。经验丰富的人,当编译时出现“出错信息”时,能很快地判断出错误所在,并改正之。而缺乏经验的人即使在系统给出明确出错提示信息下也往往找不出错误而求救于别人。对于我们来说,不仅要了解和熟悉有关理论和方法,还要求自己动手实现,要求会编写程序并上机调试通过。因此调试程序本身是程序设计课程的一个重要内容和基本要求,应给予充分的重视。调试程序的经验固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来积累,而且有些经验是只能“意会”难以“言传”。

调试程序的能力,是学完《C语言程序设计》之后,我们应当掌握的一项基本功。因此,千万不要在程序通过后就认为完成任务了,而应当在已通过的程序基础上作一些改动(例如修改一些参数、增加程序一些功能、改变输入数据的方法等,甚至于“自设障碍”,即把正确的程序改为有错的,如用scanf函数输入变量时,漏写“&”符号,使数组下标越界,使整数溢出等),观察和分析所出现的情况,并认真、及时总结。这样的学习是灵活主动的学习而不是呆板被动的学习,才会有真正的收获。

因此,我们的实习目的可综合的概括为:

1.熟悉TC20、TC30和VC++6.0的运行环境。

2.了解在TC20、TC30和VC++6.0上如何编辑、编译、连接和运行一个C程序。

3.熟练使用各种C语言的数据结构及类型、运算符与表达式。

4.熟练掌握格式输入与格式输出函数的使用。

5.通过运行简单的C程序,初步了解C源程序的特点,初步掌握查错和排错的技能。

二、实验环境

PC微机

Windows 操作系统

Turbo C 3.0与VC++6.0程序集成环境

三、Turbo C 3.0与VC++6.0的熟悉与操作

(一)Turbo C 3.0

1.在安装Turbo C编译系统基础上,则在DOS命令状态下键入命令tc。进入Turbo C集成环境后,首先在屏幕上显示Turbo C主菜单窗口。在该窗口,有8个菜单条目。每一个菜单的意义如下:

File 处理文件(包括装入、存盘、选择、建立、换名写盘),目录操作(包括列表、改变工作目录),退出系统及调用DOS 。

Edit 建立、编辑源文件。

Run 控制运行程序。如果程序已经编译连接好,且Debug/Source Debugging以及Option/Compiler/Code generation/OBJ Debug Information开关置为On,则可以用此菜单初始化调试阶段。

Compile 编译并生成目标程序与可执行文件。

Project 允许说明程序中包含哪些文件的管理条目。

Options 可以选择集成环境任选项(如存储模式、编译时的任选项、诊断及连接任选项)及定义宏;也可以记录Include Output及Library文件目录,保存编译任选项和从配置文件加载任选。

Debug 检查、改变变量的值,查找函数,程序运行时查看调用栈。选择程序编译时是否在执行行代码中插入调试信息。

Break/Watch 增加、删除、编辑监视表达式,及设置、清除、执行至断点。

2.特别要指出的是,除了Edit项外,每一个菜单又有对应的子菜单。而选择Edit项目后,只是进入编辑器。

为了从主菜单中选择所需要的功能,可以用以下两种方式之一:

(1)按F10键后,可以看到屏幕上部主菜单中有反白显示,此时,利用左、右光标移动键(←与→)选择需要的菜单,然后按回车(Enter)键。

(2)直接按Alt+主菜单条目中的首字母(分别为F,E,R,C,P,O,D,B),此时就会出现相应的子菜单。例如,按Alt+F表示选择文件子菜单(File)。当出现子菜单时,其中某个条目是高亮度的,此时可以利用上、下光标移动键(↑与↓)来移动该高亮度线,从而选择所需要的功能。在菜单调用时,按Esc键后将直接返回到活动窗口。

(二)VC++6.0

1.安装和启动

运行Visual Studio软件中的setup.exe程序,选择安装Visual C++ 6.0,然后按照安装程序的指导完成安装过程。

2.创建工程项目

用Visual C++6.0系统建立C语言应用程序,首先要创建一个工程项目(project),用来存放

C程序的所有信息。创建一个工程项目的操作步骤如下:

进入Visual C++6.0环境后,选择主菜单“文件(File)”中的“新建(New)”选项,在弹出的对话框中单击上方的选项卡“工程(Projects)”,选择“Win32 Console Application”工程类型,在“工程(Project name)”一栏中填写工程名。

3. 新建C源程序文件

选择主菜单“工程(Project)”中的“添加工程(Add to Project) 新建(New)”选项,为工程添加新的C源文件。

4.打开已存在的工程项目,编辑C源程序

进入Visual C++6.0环境后,选择主菜单“打开工作区(Open Workspace)”命令,在“Open Workspace”对话框内找到并选择要打开的工作区文件,单击“确定(OK)”按钮,打开工作区。

5.在工程项目中添加已经存在的C源程序文件

选择主菜单“打开工作区(Open Workspace)”命令,在“Open Workspace”对话框内找到并选择要打开的工作区文件,单击“确定(OK)”按钮打开工作区。

6.编译、连接和运行

(1)编译

选择主菜单“编译(Build)”中的“编译(Compile)”命令,或单击工具条上的图标,系统只编译当前文件而不调用链接器或其它工具。输出(Output)窗口将显示编译过程中检查出的错误或警告信息,在错误信息处单击鼠标右键或双击鼠标左键,可以使输入焦点跳转到引起错误的源代码处大致位置以进行修改。

(2)构建

选择主菜单“编译(Build)”中的“构建(Build)”命令,或单击工具条上的图标,对最后修改过的源文件进行编译和连接。

7.调试程序

在编写较长的程序时,能够一次成功而不含有任何错误决非易事,对于程序中的错误,系统提供了易用且有效的调试手段。调试是一个最基本的技能,不会调试就意味着即使学会了一门语言,却不能编制出任何好的软件。我们在前期进行编写程序时,经常会犯一些语句上的错误,熟练了过后,会犯一些逻辑上的错误,而这些错误往往是不易察觉的。

四、实验内容梗概

(一)算法

算法是编写程序的灵魂,数据是加工的对象,语言是工具。在编译任何程序前,我们必须认真地进行思考和设计数据结构及操作步骤。

(二)数据类型、运算符和表达式

在计算及高级语言中,数据的表现形式有常量和变量。在实习过程中,我们应当掌握数据类型、运算符和表达式,并且能在C语言实现过程中熟练的定义变量以及明确各种运算符之间的计算。

(三)三种基本结构

顺序结构、选择结构、循环结构等三种结构是C语言程序设计的三种基本结构,严格来说,所有的C程序都应由这三种基本结构组成。开始就着重这三种基本结构的应用练习,旨在使我们对于这三种结构有一个更加深刻的理解,能够根据处理问题的需要选择不同的结构进行处理。由于顺序结构在这三种结构中是最基本的,实际上当我们把程序中的选择结构部分和循环结构部分看作一个整体时,那么,整个程序就总是由顺序结构组成的了。

(四)函数

我们如果要用C语言进行大程序设计,一般采用模块化的思想。其基本思想是将一个大的程序按照功能进行分割成一些模块,使每一个模块都成为功能单一、结构清晰、接口简单、容易理解的小程序。C语言是用函数来实现这种模块化功能的。我们用C语言设计程序,任务只有一种,就是编写函数,至少也要编写一个main()函数。根据程序的复杂程度,还可以编写多个子函数。在这一部分我们就通过练习进一步掌握用子函数来进行模块化程序设计的方法,熟悉子函数的调用和执行过程。

(五)数组应用

数组是一种构造数据类型,指的是一组同类型数据组成的序列,运用数组可以高效地处理很多问题。

五、实验具体内容

【实验一】算法

(一)实验目的

1.熟悉和掌握用SmartDraw软件进行流程图的绘制

2.了解流程图的格式

3.明确算法的目的

(二)实验内容

1.用流程图来表示算法

2.检查流程图的语句错误与逻辑错误

(三)实验步骤

我们以水准测量为例

1.我们在进行水准测量前,我们应该确定测量路线以及选取测量方向,然后就将水准仪整平准备测量;

2.在测量过程中,我们要对数据的可靠程度进行判断,所以在判断框中输入“d>5?”,表示判断视距差是否在误差范围之内;

3.当测量站数大于1后,就需要对视距差之和进行判断,如果前几站视距差之和大于限差,则需重测。所以,在后面加上一个判断框,写上“D>10?”;

3.如果满足了两个判断框的条件,则进行下一站的测量;如果不满足其中的一个条件,就需要重新进行数据测量及输入;

4.最后判断是否将整个测区测完,如果没有则继续测量,直至测完为止。测量完成且满足限差要求,就可停止运行计算。

(四)实验总结

1.程序设计反映了利用计算机解决实际问题的全过程,具体要经过以下四个基本步骤:分析问题,确定数学模型或方法;设计算法,画出流程图;选择编程工具,按算法编写程序;调试程序,分析输出结果。

2. 为解决一个问题而采取的方法和步骤,就算法。算法是程序设计的核心。

3.算法具有5个特性:有穷性、确定性、有效性、要有数据输入、要有结果输出。算法的评价标准包括:正确性、可读性、通用性、高效率。算法效率的度量分为时间度量和空间度量。

4.描述算法有多种不同的工具,常用的有:流程图、结构化流程图和伪代码等。实用结构化流程图能帮助培养良好的程序设计风格,提倡用结构化流程图表示算法。

【实验二】数据类型、运算符和表达式

(一)实验目的

1.掌握C语言的数据类型,了解C语言中数据类型的意义,熟悉如何定义整型、字符型和

实型的变量,以及对它们赋值的方法。

2.掌握不同类型的数据之间赋值的规律。

3. 学会用C的有关算术运算符,以及包含这些运算符的表达式,特别是是++和—运算符的

使用。

4. 掌握C语言中使用最多的一种语句——赋值语句的使用方法。

5. 掌握scanf()函数、printf()函数的调用方法,掌握各种类型数据的输入输出的方

法,能正确使用各种格式转换符。

6.掌握字符输入输出函数getchar()、putchar()函数的调用方法。

(二)实验内容

1.用printf函数来输入表达式运行结果。

2.观察实验步骤中表达式的结果。

(三)实验步骤

以方位角的计算为例:

1.在明确该程序算法以及熟知各种数据类型的基础上,先确定三个变量,然后声明它们的数据类型

2.赋予那两个已经声明变量各自的初值

3.根据变量,执行判断语句,判断b是否大于180度

4.根据算法,写出表达式,并根据判断结果运行不同的表达式

5.最后用printf输出计算结果

输入程序:

int main(){

int a12,a23,b;

a12=100,b=50;

if(b<180)

a23=a12+b-180;

else

a23=a12-b+180;

printf("a23=%d\n",a23);

}

运行结果为:

(四)实验总结

1. C语言数据类型有:基本类型(整型、字符型、实型)、构造类型(结构体类型、公用体类型、枚举类型)、指针类型和空类型。整型又分为段整形、基本整型和长整型三种。整型还可以分为有符号型和无符号型。实型分为单精度型和双精度型。。

2. 变量是一个用于存放数值的内存存储区,根据变量的类型不同,该存储区被分配不同字节的内存安源。变量用标识符命名。C程序中用到的任何变量都必须在使用前进行定义。

3. 整形变量可以用十进制、八进制、和十六进制来表示。

4. 转义字符占一个字节,分为以下三类:

(1)控制输出格式的转义字符:\n、\t、\b、\r、\f等。

(2)控制三个特殊符号输出的转义字符:\\、\’、\”

5. C语言的运算符

(1)基本算术运算符:+ - * / %,先乘除、求余,后加减;对于/运算,两个整数相除结果仍为整数;%运算符只对整型数据有效。

(2)逗号运算符的运算规则:从左向右依次运算每一个表达式,逗号表达式的结果就是最后一个表达式的值。

6.++或—可以卸载变量之前,也可以写在变量之后。如果对变量施加了前缀或后缀运算,并参与其他运算,则前缀运算是先改变变量的值再做运算,而后缀运算是先参与运算后改变变量的值。自增和自减运算符的运算对象只能是变量,而不能是表达式或常量。

7.当表达式中含有不同类型的数据时,运算的数据类型默认按隐式类型转换,即从精度低的类型自动转换成精度高的类型,否则会造成精度损失。

8. C语言中没有提供输入输出语句,在其库函数中提供了一组输入输出函数。其中对标准输入输出设备进行格式化输入输出的函数是scanf和printf。

9. 输入函数scanf()的功能是接受键盘输入的数据给变量输出函数printf()的功能是将数据以一定格式显示输出。

(1)输出函数的一般形式为:

printf(“格式控制字符串“,输入项表)

其中格式控制字符串由格式说明符、转义序列和普通字符组成。

而一个格式说明符将引起一个输出参数项的转换与显示。格式说明符是由%引出并以一个类型描述符结束的字符串,中间是一些可选的附加说明项。

(2)输入函数的一般形式为:

Scanf(“格式控制字符串“,输入项表)

其中格式控制字符与printf()函数中的类似,不过一般只含有简单的格式说明符;输入项表至少有一个输入项,且必须是变量的地址(用变量名前加&表示)

Printf()和scanf()都要求格式转换说明符与输入项在个数、顺序、类型上一一对应。

【实验三】控制语句

(一)实验目的

1.熟练掌握if 、if…else、if…elseif语句和switch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和switch语句实现分支选择结构。

2.熟练掌握while语句、do …while语句和for语句格式及使用方法,掌握三种循环控制语句的循环过程以及循环结构的嵌套,利用循环语句实现循环结构。

3.掌握简单、常用的算法,并在编程过程中体验各种算法的编程技巧。进一步学习调试程序,掌握语法错误和逻辑错误的检查方法。

(二)实验内容

1.选择结构程序设计;

2. if语句的使用;

3.使用switch语句实现多分支选择结构;

4.三种循环语句的应用;

5.循环结构的嵌套;

6.break和continue语句的使用。

(三) 实验步骤

以带号计算为例

1.根据所需计算的方法分为三度带和六度带,确定程序的结构

2.定义变量,之后确定其数据类型,用scanf进行输入经度和判断标志

3.我们需要选择计算方式,如果选用三度带进行计算,则将判断标志设为0,如果选用六度带进行计算,则判断标志设为费0的数

4.用if…else…进行选择后,就进行计算

5.计算完毕后,用printf输出结果

输入程序:

int main()

{

int n,m,l;

scanf("%d%d",&l,&m);

if(m==0)

n=(l+3)/6;

else

n=l/3;

printf("该点位于第%d带\n",n);

}

输出结果为:

以素数对的计算为例

1.在明确素数对的定义及算法的基础上,我们先确定变量个数及名称,并且声明它们的数据类型

2.然后确定用for的嵌套结构对素数对进行循环的判断、选择

3.用if结构进行判断,判断的依据是首先这个数必须是素数,即不能被除了1与它本身外的数整除,其次,需要满足的条件是这两个素数必须相差2,所以先寻找“k=(int)sqrt(j)”作为除数,然后执行“if(j%i==0)”进行判断其是否为素数,在执行”if(k2-k1==2)”判断它们是否为素数对,不满足其中的一个判断条件,则执行”break”,跳出循环

4.找出素数对之后,用printf进行输出

程序输入:

for(j=2;j<=lyj;j++){

prime=1;

k=(int)sqrt(j);

for(i=2;i<=k;i++){

if(j%i==0){

prime=0;

break;

}

}

if(prime){

k2=j;

{

printf("%ld %ld is prime pairs\n",k1,k2);

}

k1=k2;

}

}

输出结果为:

(四)实验总结

1. 根据某种条件的成立与否而采用不同的程序段进行处理的程序结构称为选择结构。选择结构又可以分为单分支、双分支和多分支三种情况。一般采用if语句实现单分支、双分支或多分支结构程序

2. 采用嵌套if语句还可以实现较为复杂的多分支结构程序。在嵌套if语句中,一定要弄清楚else与哪个if结合。书写嵌套if语句往往采用缩进的阶梯式写法,目的是便于看清else与if结合的逻辑关系,但折后总写法并不能改变if语句的逻辑关系。

3. 循环结构又称为重复结构,它可以控制某些语句重复执行,重复执行的语句称为循环体,而决定循环是否继续执行的是循环条件。循环结构是程序设计总应用最多的结构形式,在C 语言中,可用while语句、do…while语句和for语句来实现循环结构。

一般情况下,用某种循环语句写的程序段,业内呢个用另外两种循环语句实现。While语句和for语句属于当型循环,即先判断,后执行;而do…while语句属于直到型循环,即先执行,后判断,而无法确定循环次数的问题采用while语句或d o…while语句比较自然。

4. 有时候需要用到多重循环,又称为循环嵌套,即在循环语句的循环体内又包含另一个完整的循环结构。循环嵌套不允许交叉。

5. 为了避免出现无终止的循环,要注意循环结束条件的使用,也就是说在循环执行中,要修改循环变量,还要注意循环的初始条件。分析循环第一次和最后一次执行时的情况有助于写出正确程序。

【实验四】函数

(一)实验目的

1.掌握C函数的定义方法、函数的调用方法、参数说明以及返回值

2.掌握实参与形参的对应关系以及参数之间的“值传递”的方式;

3.掌握函数的嵌套调用及递归调用的设计方法;

4.掌握全局变量和局部变量、动态变量与静态变量的概念和使用方法;

5.在编程过程中加深理解函数调用的程序设计思想。

(二)实验内容

1.多模块的程序设计与调试的方法;

2.函数的定义和调用的方法;

3.用递归方法进行程序设计。

(三) 实验步骤

以前方交会测量为例

1.明确前房交会测量的原理及算法

2.定义所需的变量,并确定它们的数据类型

3.用scanf输入角度、距离等数据,并且需要进行角度的判断,以保证两角之和要大于30度小于150度

4.满足条件后,就根据计算公式进行计算

5.然后用printf输出结果

6.然后再熟悉函数形式的基础上,将该程序算法的主要部分改为函数形式

7.最后运行、调试,直至输出正确的结果为止

原程序输入:

scanf("%d%d%d%d%d%d",&x1,&y1,&x2,&y2,&a1,&a2);

if((a1+a2)>150 && (a1+a2)<30)

printf("overrun!");

else

xp=(x1*tan(a1*PI/180)+x2*tan(a2*PI/180)+(y2-y1)*tan(a1*PI/180)*tan(a2*PI/180))/(tan(a1* PI/180)+tan(a2*PI/180));

yp=(y1*tan(a1*PI/180)+y2*tan(a2*PI/180)+(x2-x1)*tan(a1*PI/180)*tan(a2*PI/180))/(tan(a1* PI/180)+tan(a2*PI/180));

printf("p=(%d,%d)\n",xp,yp);

}

改为函数形式程序输入为:

double m(double x1, double x2, double x3, double x4,double x5,double x6,double x7,double x8,double x9,double x10)

{double l;

l=(x1*tan(x2*PI/180)+x3*tan(x4*PI/180)+(x5-x6)*tan(x7*PI/180)*tan(x8*PI/180))/(tan(x9*PI/1 80)+tan(x10*PI/180));

return(l);}

main(){

double x1,x2,xp,y1,y2,yp,a1,a2;

scanf("%d%%d%d%d%d",&x1,&y1,&x2,&y2,&a1,&a2);

if((a1+a2)>150||(a1+a2)<30)

printf("overrun!");

else

xp=m(x1,a1,x2,a2,y2,y1,a1,a2,a1,a2);

yp=m(y1,a1,y2,a2,x2,x1,a1,a2,a1,a2);

printf("p=%d\n,%d\n",xp,yp);

}

结果输出为:

以坐标正算为例

1.明确坐标正算的算法

2.声明变量PI(圆周率)以及其他变量,并确定它们的数据类型

3.用scanf输入第一个点的坐标以及两点之间的距离和角度

4.然后进行“x2=x1+d*cos(a*PI/180)y2=y1+d*sin(a*PI/180)”的计算

5.计算完成后用printf输出计算结果

6.然后将程序算法的主要部分“x2=x1+d*cos(a*PI/180)y2=y1+d*sin(a*PI/180)”改为函数的形式

7.最后运行、调试,直至输出正确的结果为止

原程序输入为:

main(){

float x1,y1,d,a;

float x2,y2;

scanf("%f%f%f%f",&x1,&y1,&d,&a);

x2=x1+d*cos(a*PI/180);

y2=y1+d*sin(a*PI/180);

printf("第二个点的坐标是:(%f,%f)\n",x2,y2);

}

改为函数形式程序输入为:

double w(double x,double y,double z)

{double k;

k=x+y*cos(z*PI/180);

return(k);}

main(){

float x1,x2,y1,y2,d,a;

scanf("%f%f%f%f",&x1,&y2,&d,&a);

x2=w(x1,d,a);

y2=w(y2,d,a);

printf("第二个点的坐标是:(%f\n,%f\n)",x2,y2);

}

输出结果为:

(四)实验总结

1. 函数是利用C语言进行结构化程序设计的最基本的概念,C程序是由函数组成的。可以把一个复杂的程序分成多个模块进行设计,而每个模块是一个函数。main()是C程序中最重要的函数,程序运行从函数main()开始,也在函数main()结束。

2. 函数定义的一般形式为:

函数符函数名([形式参数说明]){

声明与定义部分语句部分}

类型符指明函数返回值的类型。如果函数定义是不指明类型,系统隐含指定为int型。形式参数有两个作用:其一表示将从主调函数中接收哪些类型的信息,其二在函数体中形式参数可以被引用。

3. 函数返回值由return语句实现,return语句的格式为: return 表达式;

函数先将表达式的值转换为所定义的类型,然后返回到主调函数中的调用表达式。

4. 函数调用是通过函数调用表达式进行,当函数被调用时,计算机才为形参分配存储空间。在调用函数时,函数之间的参数传递也称为虚实结合。形参从相应的实参得到值,称为传值调用方式。实参与形参在个数、类型上要匹配。

5. 函数调用前应该已经定义或声明。

6.函数的形参及函数内定义的变量称为局部变量,其作用范围在定义它的函数或复合语句内。在函数外部定义的变量称为全局变量,其作用域是从定义或声明处到整个程序结束。

7. 一个函数被调用的过程中可以调用另一个函数,即函数调用允许嵌套。

【实验五】数组

(一)实验目的

1.掌握数组的基本概念,包括:数组的定义、数组的类型、数组的初始化、数组的赋值、数组元素下标的范围、数组元素的正确以及引用数组元素的输入/输出。

2.掌握字符数组与字符串的使用方法。理解字符数组与其它数组的区别、理解字符串及其特点。

3.掌握常用的字符串处理库函数的用法并清楚对字符串的简单处理。

4.掌握与数组相关的算法,包括排序算法和查找算法等。

(二)实验内容

有关数组的程序设计

(三)实验步骤

以坐标反算为例

1.明确坐标反算的算法

2.声明变量PI(圆周率),并用普通程序将其表示出来

3.最后将其改编为函数形式的程序

原程序输入为:

void main(){

float x1,x2,y1,y2,d,a;

scanf("%f%f%f%f",&x1,&y1,&x2,&y2);

a=atan((y2-y1)/(x2-x1))*180/PI;

d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));

printf("a=%f\nd=%f\n",a,d);

}

改为数组形式程序输入为:

void main(){

int i;

float a[4],d,m;

for(i=1;i<5;i++)

scanf("%d",&a[i]);

m=atan((a[4]-a[3])/(a[2]-a[1]));

d=sqrt((a[2]-a[1])*(a[2]-a[1])+(a[3]-a[4])*(a[4]-a[3]));

printf("a=%f\nd=%f\n",m,d);

}

输出结果为:

(四)实验总结

1.数组命名要符合标识符的命名规则。

2.数组名后的括号必须是方括号,不能是圆括号。

3.数组长度必须是正整数,可以是个表达式,但不能有变量,C语言不支持动态数组。

4.数组长度表示数组中元素的个数。

5.数组元素的下标从0开始数,所以最大下标是数组的长度减1。

6.C语言中没有字符串变量,字符串是靠字符数组实现的,所谓字符数组就是元素的数据类型为字符型的数组。

【实验六】结构体与共用体

(一)实验目的

1.理解结构体类型的含义;掌握结构体类型变量的定义方法和使用;结构体类型变量的说明以及初始化方法。

2.理解结构体与数组的区别;掌握结构体类型数组的概念、定义和使用方法。

3.熟悉链表的概念,初步学会对链表进行操作。

4.初步了解共用体的概念与使用。

(二)实验内容

有关结构与共同体的程序设计

(三)实验步骤

以三角高程计算为例

1.明确三角高程计算的算法

2.声明变量,用scanf进行输入,并用普通程序的结构将其算法表示出来

3.将原程序改编为结构体形式

原程序输入为:

main(){

double HAB,HB,S,i,v,a,HA;

scanf("%lf%lf%lf%lf%lf",&S,&i,&v,&a,&HA);

HAB=S*tan(a*PI/180)+i-v ;

HB=HA+S*tan(a*PI/180)+i-v;

printf("HAB=%f\nHA=%f\n",HAB,HB);

}

改为结构体形式程序输入为:

struct X

{double S;

double i;

double v;

double a;

double HA;

}N={100,1,2,45,200};

main(){

double S,i,v,a,HA,HAB,HB;

HAB=S*tan(a*PI/180)+i-v ;

HB=HA+S*tan(a*PI/180)+i-v;

printf("HAB=%d\nHA=%d\n",HAB,HB);

}

输出结果为:

(四)实验总结

1.结构体类型定义

结构体类型的形式为:

struct结构体类型名 { 数据类型成员名1; ...

数据类型成员名n; } ;

2.结构体变量的定义

结构体变量有三种定义形式:

(1)先定义结构体类型,后定义结构体变量。

(2)定义结构体类型的同时定义结构体变量。

(3)不定义结构体类型名,直接定义结构体变量。

3.结构体变量的引用

(1)结构体变量的初始化:许多C版本规定对外部或静态存储类型的结构体变量可以进行初始化,而对局部的结构体变量则不可以,新标准C无此限制,允许在定义时对自动变量初始化。

(2)结构体成员的引用:由于C语言一般不允许对结构体变量的整体引用,所以对结构体的引用只能是对分量的引用,结构体变量中的任一分量可以表示为:结构体变量名.成员名

4.结构体与数组

C语言中数组的成员可以是结构体变量,结构体变量的成员也可以是数组。结构体数组有三种定义形式:

(1)先定义结构体类型,后定义结构体数组。

(2)定义结构体类型的同时定义结构体数组。

(3)不定义结构体类型名,直接定义结构体变量。

六、常见错误及分析

C语言的最大特点是:功能强、使用方便灵活。C编译的程序对语法检查并不象其它高级语言那么严格,这就给编程人员留下“灵活的余地”,但还是由于这个灵活给程序的调试带来了许多不便,尤其对我们这些初学C语言的人来说,经常会出一些连自己都不知道错在哪里的错误。

有时候看着有错的程序,不知该如何改起,通过对C的学习与实践,我积累了一些C编程时常犯的错误:

1.书写标识符时,忽略了大小写字母的区别。

main() {

int a=5;

printf("%d",A); }

编译程序把a和A认为是两个不同的变量名,而显示出错信息。C认为大写字母和小写字母是两个不同的字符。习惯上,符号常量名用大写,变量名用小写表示,以增加可读性。

2.忽略了变量的类型,进行了不合法的运算。

main() {

float a,b;

printf("%d",a%b); }

“%”是求余运算,得到a/b的整余数。整型变量a和b可以进行求余运算,而实型变量则不允许进行“求余”运算。

3.将字符常量与字符串常量混淆。

char c; c="a";

在这里就混淆了字符常量与字符串常量,字符常量是由一对单引号括起来的单个字符,字符串常量是一对双引号括起来的字符序列。C规定以“\”作字符串结束标志,它是由系统自动加上的,所以字符串“a”实际上包含两个字符:‘a'和‘\',而把它赋给一个字符变量是不行的。

4.忽略了“=”与“==”的区别。

在许多高级语言中,用“=”符号作为关系运算符“等于”。如在BASIC程序中可以写 if (a=3) then …但C语言中,“=”是赋值运算符,“==”是关系运算符。如: if (a==3) a=b; 前者是进行比较,a是否和3相等,后者表示如果a和3相等,把b值赋给a。由于习惯问题,初学者往往会犯这样的错误。

5.忘记加分号。

分号是C语句中不可缺少的一部分,语句末尾必须有分号。 a=1 b=2

编译时,编译程序在“a=1”后面没发现分号,就把下一行“b=2”也作为上一行语句的一部分,这就会出现语法错误。改错时,有时在被指出有错的一行中未发现错误,就需要看一下上一行是否漏掉了分号。

{ z=x+y; t=z/100;

printf("%f",t); }

对于复合语句来说,最后一个语句中最后的分号不能忽略不写。

以及在包含结构体的程序中,很多时候会忘记花括号后面的那个分号,如果忘记了加分号,程序就不能运行,如:

struct Student

{char name;

}

6.多加分号。

对于一个复合语句,如:

{ z=x+y; t=z/100;

printf("%f",t); };

复合语句的花括号后不应再加分号,否则将会画蛇添足。又如:

if (a%3==0);

i++;

本是如果3整除a,则I加1。但由于if (a%3==0)后多加了分号,则if语句到此结束,程序将执行I++语句,不论3是否整除a,I都将自动加1。再如:

for (i=0;i<5;i++);

{scanf("%d",&x);

printf("%d",x);}

本意是先后输入5个数,每输入一个数后再将它输出。由于for()后多加了一个分号,使循环体变为空语句,此时只能输入一个数并输出它。

7.输入变量时忘记加地址运算符“&”。

int a,b;

scanf("%d%d",a,b);

这是不合法的。Scanf函数的作用是:按照a、b在内存的地址将a、b的值存进去。“&a”指a在内存中的地址。

在表示并列的时候,要同时使用两个“&”,即“&&”否则程序调试过程会出现错误,如:

if(x>2 & x<5)

8.输入数据的方式与要求不符。

scanf("%d%d",&a,&b);

输入时,不能用逗号作两个数据间的分隔符,如下面输入不合法: 3,4

七、程序调试

调试概述

调试是编程过程中不可忽视的问题,对于一个复杂的程序来说,从编写到能够通过编译,只是完成了一小部分而已。然后还要不断的调试、修改、再调试、再修改、…直到将发现的问题都解决,程序能够稳定正确的运行为止。调试在程序设计中的地位是十分重要的。调试是一个最基本的技能,其重要性甚至超过学习一门语言。不会调试程序就意味着即使会一门语言,却不能编制出任何好的软件。

常见的错误类型

(1)语法错误:拼写错,括号不匹配,漏写分号……对于查出的错误(Error)必须排除,否则程序无法运行;而警告(Warning)则应根据情况处理,否则可能产生运算误差等。

(2)逻辑错误:编译无误,有时也有执行结果,但结果不符合题意。例如scanf的参数中漏写地址符,if语句、for语句花括号位置错误等,都会导致此类错误。

(3)运行错误:运行结果错误也可能是由于输入数据错误、类型不匹配等造成的。例如用户没有按照scanf规定的格式输入数据就会造成此类错误。

查错的方法

(1)先进行人工检查,即静态检查。在写好一个程序以后,不要匆匆忙忙上机,而应对纸面上的程序进行人工检查。这一步是十分重要的,它能发现程序设计人员由于疏忽而造成的多数错误。而这一步骤往往容易被人忽视。

为了更有效地进行人工检查,所编的程序应注意力求做到以下几点:

A、应当采用结构化程序方法编程,以增加可读性;

B、并尽可能多加注释,以帮助理解每段程序的作用;

C、在编写复杂的程序时不要将全部语句都写在main函数中,而要多利用函数,用一个函数来实现一个单独的功能。这样既易于阅读也便于调试,便于分别检查和处理。

(2)在人工检查无误后,才可以上机调试。通过上机发现错误称动态检查。在编译时给出语法错误的信息,可以根据提示的信息具体找出程序中出错之处并改正之。应当注意的是有时提示的出错并不是真正出错的行,如果在提示出错的行上找不到错误的话应当到上一行再找。有时提示出错的类型并非绝对准确,由于出错的情况繁多各种错误互有关联,要善于分析,找出真正的错误,而不要只从字面意义上找出错信息,钻牛角尖。

如果系统提示的出错信息多,应当从上到下一一改正。有时显示出一大片出错信息往往使人感到问题严重,无从下手。其实可能只有一二个错误。例如,对使用的变量未定义,编译时就会对所有含该变量的语句发出出错信息;有的是少了“}”或多了“}”有的是书写语句时忘记写“;”或是全角的“;”了,只要加上一个变量定义,或填加“};”就所有错误都消除了。养成写程序习惯,如输入“{”时,中间先不写代码,后面紧接输入”}”,就不会漏了或多了匹配符号。

(3)在改正语法错误后,程序经过连接就得到可执行的目标程序。运行程序,输入程序所需数据,就可得到运行结果。应当对运行结果作分析。看它是否符合要求。有的人看到运行结果就认为没问题了,就不作分析,这是不好的。

有时,数据比较复杂,难以立即判断结果是否正确。可以事先考虑好一批“试验数据”,

输入这些数据可以得出容易判断正确与否的结果。例如,if语句有两个分支,有可能在流程经过其中一个分支时结果正确,而经过其它一个分支时结果不对等。必须考虑周全。

事实上,当程序复杂时很难把所有的可能方案全部都试到,选择典型的情况作试验即可。

(4)运行结果不对,大多属于逻辑错误。对这类错误往往需要仔细检查和分析才能发现。可以采用以下办法:

A 将程序与流程图仔细对照,如果流程图是正确的话,程序写错了,是很容易发现的。例如,复合语句忘记写花括弧,只要一对照流程图就能很快发现。

B 如果实在找不到错误,可以采用“分段检查”的方法。在程序不同的位置设几个printf 函数语句,输出有关变量的值,往下检查。直到找到在哪一段中数据不对为止。这时就已经把错误局限在这一段中了。不断减小“查错区”,就可能发现错误所在。

用printf函数语句测试未能发现所有问题,则可用系统提供的调试工具,跟踪流程并给出相应信息,使用更为方便。

总之,程序调试是一项细致、较为繁琐的工作,需要下功夫,动脑子,善于累积经验。在程序调试过程中往往反映出一个人的学习态度,以前学习C语言时基础不太好,但我也不灰心,多写程序,“掌握调试的方法和技术”,要学会自己找问题,这样慢慢自己就会写出错误较少的实用的程序。

常用快捷键

工欲善其事,必先利其器”,为了加速调试的过程,避免调试的时候鼠标点来点去,这里简要介绍一下调试时常用的快捷键,熟练掌握这些快捷键,可以大大加速调试工作的进度。当然,开始的时候不可能记住全部的快捷键,可以随着自己调试需要用到的功能的增加,逐渐熟悉这些快捷键,尽量使用它们。首先应该熟悉编译、运行、窗口切换相关的操作。然后再逐步熟悉Debug用到的检查、观察、单步跟踪等操作。

VC6.0中常用的快捷键:

八、实验心得与体会

在这个学期里,在老师的带领下进行了《C语言程序设计》学习。在这之前,我们已经对VB这门课程学习了一个学期,对程序设计有了一定的了解,但是也仅仅是停留在了解的范围,对里面的好多东西还是很陌生,更多的在运用起来的时候还是感到很棘手,毕竟,万事开头难。

上机进行实习是学习程序语言设计必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、掌握程序设计方法、提高程序开发能力,这些都必须通过充分的实际上机操作才能完成。学习C程序设计语言除了课堂讲授以外,必须保证有不少于课堂讲授学时的上机时间,所以,老师希望我们能有效地利用课余时间进行上机练习,尽快掌握用C语言开发程序的能力,为今后的继续学习打下一个良好的基础。

C语言是计算机程序设计的重要理论基础,在我们以后的学习和工作中都有着十分重要的地位。要学好这种语言,仅仅学习课本上的知识是不够的,还要经常自己动手,有较强的实践能力。只有多动手,经常编写程序,才能发现我们学习上的漏洞和自己的不足,并在实践中解决这些问题,不断提高自己转化知识的能力。

通过上机实习,我也从中发现了自己不少的问题,这都是只看书上的程序而没有自己亲身上机编写程序而无法得知的,假如我们只因看熟书上的程序就以为自己已经掌握了C语言那就大错特错了。

我主要存在以下的这些缺点:

1、学习耐心与细心不足,如scanf(“%d”,&n);中的“&”有时候会忘了。而在最后输出时又错写成printf(“%d”,&n);从而错误得输出了地址而不是我原来想要的答案。

2、编程思想不够发散,看着题目有时想不出解答的方法,更不用说编写程序来解题了。

3、基本功不够,有些函数的表达不太精通,需要看书来核实,以致耗时较多。

4、知识不够广,有些内容没有学好,不能要用到时及时反映出来,认识程度不够深刻。

5、有时候不够精简,有一点用处不大或者说没有也可以的文字存在。

6、由于我的英语水平较差,调试程序时,错误的地方虽然电脑有显示,但由于是英文,理解上还是存在一点问题。

我认为上机编程的目的,不仅仅是验证教材和讲课的内容、检查自己所编的程序是否正确,上机实验的目的可以概括为如下几个方面:

1、加深对课堂讲授内容的理解

课堂上要讲授许多关于C语言的语法规则,听起来十分枯燥无味,也不容易记住,死记硬背是不可取的。然而要使用C语言这个工具解决实际问题,又必须掌握它。通过多次上机练习,对于语法知识有了感性的认识,加深对它的理解,在理解的基础上就会自然而然地掌握C语言的语法规定。对于一些内容自己认为在课堂上听懂了,但上机实践中会发现原来理解的偏差,这是由于大部分学生是初次接触程序设计,缺乏程序设计的实践所致。

学习C语言不能停留在学习它的语法规则,而是利用学到的知识编写C语言程序,解决实际问题。即把C语言作为工具,描述解决实际问题的步骤,由计算机帮助我们解题。只有通过上机才能检验自己是否掌握c语言、自己编写的程序是否能够正确地解题。

通过上机实验来验证自己编制的程序是否正确,恐怕是大多数同学在完成老师作业时的心态。但是在程序设计领域里这是一定要克服的传统的、错误的想法。因为在这种思想支配下,可能你会想办法去"掩盖"程序中的错误,而不是尽可能多地发现程序中存在的问题。自

C语言程序设计课程设计题目

1 一元稀疏多项式的运算 问题描述:设有两个带头指针的单链表表示两个一元稀疏多项式A、B,实现两个一元稀疏多项式的处理。 实现要求: ⑴输入并建立多项式; ⑵输出多项式,输出形式为整数序列:n,c1,e1,c2,e2……c n,e n,其中n是多项式的项数,c i,e i分别为第i项的系数和指数。序列按指数降序排列; ⑶多项式A和B相加,建立多项式A+B,输出相加的多项式; ⑷多项式A和B相减,建立多项式A-B,输出相减的多项式; ⑸多项式A和B相乘,建立多项式A×B,输出相乘的多项式; ⑹设计一个菜单,至少具有上述操作要求的基本功能。 测试数据: (1) (2x+5x8-3.1x11)+(7-5x8+11x9) (2) (6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2+7.8x15) (3)(x+x2+x3)+0 (4)(x+x3)-(-x-x-3) 2 成绩排序 假设某年级有4个班,每班有45名同学。本学期有5门课程考试,每门课程成绩是百分制。假定每个同学的成绩记录包含:学号、姓名各门课程的成绩共7项,其中学号是一个10位的字符串,每个学生都有唯一的学号,并且这4个班的成绩分别放在4个数组中,完成以下操作要求: ⑴编写一个成绩生成函数,使用随机数方法,利用随机函数生成学生的各门课程的成绩(每门课程的成绩都是0∽100之间的整数),通过调用该函数生成全部学生的成绩; ⑵编写一个平均成绩计算函数,计算每个同学的平均成绩并保存在成绩数组中; ⑶用冒泡排序法对4个班的成绩按每个同学的平均成绩的以非递增方式

进行班内排序; ⑷用选择排序法对4个班的成绩按每个同学的平均成绩的以非递增方式进行班内排序; ⑸对已按平均成绩排好序的4个班的同学的构造一个所有按平均成绩的以非递增方式排列的新的单链表; ⑹设计一个菜单,至少具有上述操作要求的基本功能。 3 迷宫问题 问题描述:以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 实现要求: ⑴实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。 ⑵编写递归形式的算法,求得迷宫中所有可能的通路; ⑶以方阵形式输出迷宫及其通路。 [测试数据] 迷宫的测试数据如下:左上角(1,1)为入口,右下角(8,9)为出口。 1 2 3 4 5 6 7 8 实现提示:

程序设计基础实验报告

《程序设计基础》 实验报告 专业班级: 姓名: 学号:

实验一 面向过程的简单程序设计 1.实验目的要求 (1) 使用C++语言编写简单的计算机程序,掌握C++程序从编辑、编译到运行的全过程, 初步了解C++程序的特点。 (2) 掌握C++语言的数据类型(包括对各种数据类型变量的定义、初始化、赋值等)、运 算符和表达式的使用。 (3) 掌握赋值语句的使用。 (4) 掌握数据的输入输出方法。 2.实验内容 (1)设计简单程序,分别计算下列表达式,式中变量由键盘输入,输出表达式的值。 <1> d c b a x -++ <2> 11 11+++x x <3> sinX+cosX+tan -1 X <4> e x+y +e x-y <5> log 10(1+21x +) <6> 22b a -+??b a - (其中??a 表示取不大于a 的最大整数)。 <1> #include using namespace std; int main() { float x,a,b,c,d,e; cin>>x>>a>>b>>c>>d; e=x+(a+b)/(c-d); cout< #include #include using namespace std; int main() { double x,y; cin>>x; y=sqrt(1+1/(x+1/(x+1)));

cout< #include #include using namespace std; int main() { double x,y; cin>>x; y=sin(x)+cos(x)+1/tan(x); cout< #include #include using namespace std; int main() { double x,y,z; cin>>x>>y; z=exp(x+y)+exp(x-y); cout< #include #include using namespace std; int main() { double x,y; cin>>x; y=log(1+sqrt(1+x*x)); cout< #include #include using namespace std; int main()

程序设计基础实验指导书

说明 每个实验做完以后,按照实验报告模板格式完成相应的实验报告,存储为word 文档,最终提交的实验文档数量种类和命名原则如下例:(不按要求 者拒收) 目录结构图目录实验 1 内的文件种类和命名原则实验报告成绩将作为平时成绩的一部分计算到期末总成绩中。 实验报告严禁相互抄袭,一经发现抄袭和被抄袭者本次实验按零分计算!

实验1 C 的实验环境和C 语言的数据类型 1. 实验目的 ⑴ 了解在具体的语言环境下如何编辑、编译、连接和运行一个C 程序。 ⑵ 通过运行简单的C 程序,初步了解C 源程序的特点。 ⑶ 掌握C 语言数据类型, 熟悉如何定义一个整型、字符型和实型的变量,以及对它 们赋值的方法。 ⑷ 掌握不同的类型数据之间赋值的规律。 ⑸ 学会使用C 的有关算术运算符,以及包含这些运算符的表达式,特别是自加(+ +)和自减(--)运算符的使用。 2. 实验内容和步骤 检查所用的计算机系统是否已安装了C 编译系统并确定他所在的子目录。 进入所用的集成环境。 熟悉集成环境的界面和有关菜单的使用方法。 输入并运行一个简单的、正确的程序。 3. 实验题目 输入下面的程序 # include "stdio.h" void main() { printf( "This is a c program.\n" ); } 程序无误,其运行的结果为:(请填写) ⑵ 输入并编辑一个有错误的 C 程序。 # include “ stdio.h ” void main() { int a,b,sum a=123; b=456; sum=a+b print( “ suism%d n” ,sum); } 运行后程序出现几处错误,请分别指出,并逐一更改: ⑶ 若k,g 均为int 型变量, 则下列语句的输出为, : # include "stdio.h" void main() { int k, g; k=017; g=111;

程序设计基础课程设计

设计题目:学生成绩管理系统班级:计0902 姓名:付乐颖 学号:20091221067 完成日期:2010.10.15

1. 课程设计目的和要求 随着科学的发展和社会的进步,许多过去有人工处理的繁杂事务开始交付计算机来完成。学生成绩管理系统可以说是一个得力助手,它利用计算机对学生成绩进行统一管理,实现学生成绩信息管理工作流程的系统化、规范化和自动化,提高了广大教师的工作效率。 本程序旨在训练学生的基本编程能力,了解管理信息系统的开发流程,熟悉C语言的文件等的各种基本操作,使学生能对C语言的文件操作有一个更深的理解。为进一步开发出高质量的信息管理系统打下坚实的基础。 2. 课程设计任务内容 学生包含以下信息项:学号、姓名、学院、班级、高数成绩、英语成绩、C语言成绩、总分、平均分。系统的主要功能包括: 1. 创建学生成绩信息文件,根据提示输入学生的各项信息,计算出总分和平均分,然后按学号对学生信息进行排序,并将排序后的学生成绩信息存储到一个二进制文件中。 2. 增加学生信息,在原有学生信息文件的基础上增加新的学生成绩信息,要求:增加后的学生信息仍按学号排序,并继续保存至原文件。 3. 删除学生信息,提示用户输入要进行删除操作的学号,如果在文件中有该信息存在,则将该学号所对应的学生信息删除,否则输出提示信息,并提示用户选择是否继续进行删除操作。 4. 修改学生信息,提示用户输入要进行修改操作的学号,如果在文件中有该息存在,则将提示用户输入该学号对应的要修改的选项,结果保存至原文件,并提示用户选择是否继续进行修改操作。 5. 按不同条件对学生信息进行查询操作,输出满足条件的学生信息。 (1) 按学号查询,输入一个学号,输出对应的学生信息。

网络程序设计实验报告-Winsock编程接口实验

网络程序设计 实验报告 实验名称: Winsock编程接口实验 实验类型:____验证型实验_____ __ 指导教师:______________________ 专业班级:_____________________ 姓名:_______________________ 学号:_____________________ 电子邮件:____________ 实验地点:______ _______ 实验日期2013 年 3 月29 日 实验成绩:__________________________

一、实验目的 ●掌握Winsock的启动和初始化; ●掌握gethostname(),gethostbyname(),GetAdaptersInfo()等信息查询函数的使用。 二、实验设计 由实验内容可以知道: 1、编写程序能同时实现对多个域名的解析。比如在控制台输入:getip https://www.wendangku.net/doc/c73863893.html, https://www.wendangku.net/doc/c73863893.html,,能输出https://www.wendangku.net/doc/c73863893.html,和https://www.wendangku.net/doc/c73863893.html,对应的IP地址列表。 2、编写程序获取并输出本地主机的所有适配器的IP地址,子网掩码,默认网关,MAC 地址。 首先要了解一些基本的知识gethostname(),gethostbyname(),GetAdaptersInfo()等信息查询函数的基本知识gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针。结构的声明与gethostaddr()中一致。 之后要根据内容画出函数流程图

三、实验过程(包含实验结果) 1.在实验过程中调用GetAdaptersInfo()时,出现了undeclared identifier的报错,原因是没有包含其头文件,之后进行一些修改解决了问题. 2.实验结果 3.选择查看本机信息 四、讨论与分析 1.Winsock初始化的作用是什么? 答:使用winsock初始化可加载winsock编程的动态链接库。

大学程序设计基础实验报告 (2)

**大学程序设计基础实验报告 实验名称:实验三分支结构 实验目的: 1、掌握IF-ELSE语句使用。 2、掌握ELSE-IF语句使用。 3、熟悉SWITCH语句使用。 实验内容: 在本地电脑中新建一个文件夹,用于存放C程序,文件夹的名字要求是“学号姓名-实验序号”,如E:\ 1920115555张三-03。启动C-Free,完成如下各题。 1、编程题:输入参数a,b,c,求一元二次方程ax2+bx+c=0的根(①a、b、c都为0,②a 和b为0,c不为0,③a为0,b不为0,c任意,④a不为0,且a、b、c满足b2-4ac ≥0,⑤a不为0,且a、b、c满足b2-4ac<0)。 2、编程题:输入职工的月薪salary,计算并输出应缴纳的个人所得税tax。tax=rate * (salary –850),rate的计算方式如下: 当salary <= 850,则rate = 0; 当850 < salary <= 1350,则rate = 5%; 当1350 < salary <= 2850,则rate = 10%; 当2850 < salary <= 5850,则rate = 15%; 当salary > 5850,则rate = 20%;。 3、编程题:根据输入的3个边长a、b、c,判断它们是否能构成三角形,若能构成三 角形,则进一步判断此三角形是哪种类型的三角形(等边三角形、等腰三角形、直角三角形和一般三角形。等腰直角算作等腰)。 4、编程题:输入一个形式如“操作数运算符操作数”的表达式,对2个整数进行乘、 除或求余运算。【请分别用if语句和switch语句实现此题功能】 上交作业的方法: 1.将程序代码及注释和运行程序的窗口复制到实验结果下方对应的题号上,并把这 次实验上机操作中遇到的问题及解决方法、心得等填好完成实验报告。 2.保存以上所有按要求已调试通过,并形成.c(或.cpp)和.exe文件到以自己的“学 号姓名-03”命名的文件夹中,并将以自己的“学号姓名”命名的文件夹压缩后上 交到ftp://10.172.250.252:1161中的“作业上传”文件夹下的“报告上交02”文件 夹下的子文件夹“源文件压缩上交”中,同时把以“学号姓名-03”命名的word 文档上交到“报告上交03”文件夹下的另一子文件夹“word文件上交”中。 特别提醒:每次上传的文件名一定要是“学号姓名-实验序号. doc”(如1720115555张

《C程序设计基础》实验指导

《C程序设计基础》实验指导 实验1 C程序的设计环境和运行方法 【实验目的】 1.熟悉所用计算机系统的基本操作方法。 2.学习Turbo C 2.0的使用方法,掌握程序编辑、编译、连接、运行及查看运行结果的方法。 3.掌握C程序的基本结构。 【实验内容】 1.熟悉使用的计算机系统的基本操作,创建自己的工作目录,参照附录中介绍的方法,掌握Turbo C 2.0的启动方法(一种或多种),了解Turbo C 2.0系统的安装路径和结构。2.进入Turbo C 2.0的工作环境,参照附录设置环境,用File/Change dir…设置当前工作目录、用Options/Directories设置系统的安装路径、包含文件路径、标准库文件路径、输出文件路径和源文件路径。 3.熟悉Turbo C 2.0的系统菜单组成及功能。学习使用功能键和快捷键调用菜单项的方法。 掌握文件建立、编辑、修改和保存的方法。落实文件的存储位置是否是你的工作目录,如果不是,回第二步重新设置。了解编译、连接和运行命令在屏幕菜单项的位置和调用方法。 4.输入并运行下面最简单的C程序 ①使用File菜单的New命令创建一个新文件。 ②在编辑区输入下面程序: #include mian() { printf(" Hello World!\n") } ③按功能键F9进行编译和连接,观察屏幕显示的编译信息。如果出现出错信息,信息窗口中将显示错误内容及定位错误时的语句行号,修改错误,再进行编译。 ④如果编译无错,按Ctrl+F9运行程序,按Alt+F5切换到用户屏,观察运行结果。 ⑤改变源程序中双引号内的字符串内容,重新编译和连接,并查看运行结果。 ⑥保存文件,查看你的工作目录下是否有该文件。编译连接的中间文件应该在Output设置的目录中。如果没有设置Output目录,中间文件应该在当前工作目录中。 5.输入并运行下面一个需要在运行时输入数据的程序,程序要求从键盘输入三个浮点数,输出它们的和。 #include mian()

程序设计基础课程设计报告 内容样例

第一章目的与要求 书上有。 第二章需求分析 软件设计的一个重要的环节就是需求分析。本章在对ATM取款机管理系统的应用情况作了全面调查的基础上,确定系统目标,并对系统所需要的基础功能进行分析,从而确定用户的需求。以下是ATM取款机管理系统所需要的需求分析。 ATM管理系统包括六个模块:登录,挂失功能,修改密码,取款功能,转账功能,查询功能。 ①登录: 输入银行卡的账号,密码,验证银行卡的卡号,密码是否正确,之后进入主界面 ②挂失功能: 确认是否对银行卡进行挂失,挂失后账户无法操作 ③修改密码: 用户可自由对其银行卡密码进行修改,修改之后的新密码将会覆盖其原密码 ④取款功能: 用户可自由取得所持银行卡内的存款,所取款数必须在其原有账户余额之内 ⑤转账功能: 用户可将本账户中的存款转入其他账户,转账过程中,需要转入账户的账

号 ⑥查询功能: 用户可查询用户信息,其中包括用户姓名、用户身份证号码、银行卡号以及存款余额 模拟ATM取款机的操作: 首先录入账户信息,格式如下 ㈠、登录功能:输入帐号和密码进行登录,如密码错误提示重新输入密码,如帐号错误提示无此帐户。 ㈡、查询功能:查询账户余额。 ㈢、取款功能:取款,更新余额。 ㈣、挂失功能:挂失后,该账户不能进行任何操作。 ㈤、修改密码:输入原密码和新设置密码。 ㈥、转账功能:输入转账的转出账户以及转账金额,进行转账。

第三章设计分析 3.1、ATM系统管理 3.1.1系统基本功能 首先,确定系统中存在两种用户,一种是ATM,可以进行信息录入和后台管理。另外一种是取款人,取款人主要是进行信息的查询,不能进行信息录入。所以在创建类的时候,先创建一个ATM类,然后创建取款人类,并与ATM 类形成有元,进而继承ATM的所有功能,并添加录入信息的功能。 基本功能: 登录功能---------输入帐号和密码进行登录,如密码错误提示重新输入密码,如帐号错误提示无此帐户。 查询功能---------查询账户余额。 取款功能---------取款,更新余额。 挂失功能---------挂失后,该账户不能进行任何操作。 修改密码---------输入原密码和新设置密码。 转账功能---------输入转账的转出账户以及转账金额,进行转账。、

网络编程实验报告

实验一TCP Socket API程序设计 一、预备知识 1.网络编程基本概念 网络上的计算机间的通讯,实质上是网络中不同主机上的程序之间的通讯。在互联网中使用IP地址来标识不同的主机,在网络协议中使用端口号来标识主机上不同进程,即使用(IP地址,端口号)二元组。 套接字(Socket)用于描述IP地址和端口,是一个通信链的句柄,通信时一个网络程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过与网络接口卡相连的传输介质将这段信息发送到另一台主机的Socket中,以供其他程序使用。 图1-1 TCP通信流程 2.TCP通信流程 TCP程序是面向连接的,程序运行后,服务器一直处于监听状态,客户端与

服务器通信之前必须首先发起连接请求,由服务器接收请求并在双方之间建立连接后才可以互相通信。 二、实验目的 1.了解Winsock API编程原理; 2.掌握TCP Socket程序的编写; 3.了解C/S模式的特点; 4.学会解决实验中遇到的问题。 三、实验任务 使用Winsock API相关类实现TCP Socket通信程序,并能成功运行。 四、实验环境及工具 1. Windows2000/XP/7 2. Visual C++开发平台 3. Visual Studio2010 五、实验内容和步骤 参照《Visual C++网络编程教程》书中81页,TCP Socket API程序设计。 连接: void CChatClientDlg::OnConnect() { WSADATA wsd; //WSADATA结构 WSAStartup(MAKEWORD(2,2),&wsd); //加载协议,使用Winsock 2.2版 m_client = socket(AF_INET,SOCK_STREAM,0); //创建流式套接字 //服务器地址 sockaddr_in serveraddr; UpdateData(); if(ServerIP.IsBlank()) { AfxMessageBox("请指定服务器IP!"); return; } if(sPort.IsEmpty()) { AfxMessageBox("请指定端口!"); return; }

程序设计基础C实验指导书

《程序设计基础C》实验指导书 上海应用技术学院 2012-2-20

目录 实验一顺序结构程序设计 (1) 实验二分支结构程序设计 (2) 实验三循环结构程序设计一 (3) 实验四(1)循环结构程序设计二 (4) 实验四(2)循环结构程序设计三 (5) 实验五数组 (6) 实验六数组和字符串 (7) 实验七函数 (8) 实验八函数 (9) 实验九指针 (10) 实验十结构体 (11) 实验十一文件 (12) 实验十二综合 (13)

实验一顺序结构程序设计 实验目的: 1.掌握C语言程序结构。 2.掌握变量的定义和使用。 3.掌握输入输出函数的使用。 4.掌握赋值语句的使用。 内容: 1.从键盘输入两个数,计算两个数的和,然后输出。 注意:带下划线的内容表示是从键盘输入的,实际上机时并不显示下划线,其余的内容是程序输出的。 2.从键盘输入一个华氏温度,请转换成摄氏温度后输出。 3.电路图如下所示,从键盘输入5个电阻的电阻值,计算并输出总的电阻值。

实验二 分支结构程序设计 实验目的: 1. 掌握逻辑表达式的使用方法。 2. 掌握if 和switch 语句的使用方法。 3. 掌握一些简单的算法。 内容: 1. 有下列函数,写一段程序,输入x 的值,输出y 的值 x (x<1) y= 2x-1 (1<=x<10) 3x-11 (x>=10) 2. 输入一个不超过 6位的正整数,输出该数的最高位和最低位,如果该数是一位数,则输 出该数。然后再输出该数是几位数。程序需要对输入的数进行合法性检查,对小于0和大于6位的数要有提示。 3. 输入一个 0到100的百分制成绩,转换成五级制A 、B 、C 、 D 和 E 。程序中首先需要 对输入的数进行合法性检查,对小于0和大于100的数要有提示,然后转换部分使用 switch 语句实现。

程序设计基础课程设计

1 矩阵的操作(6人) 设有两个矩阵A=(a ij)m×n,B=(b ij)p×q 实现要求: ⑴编写矩阵输入函数INPUT_MAT,通过该函数完成矩阵的输入并返回保存矩阵的数组和对应矩阵的行数、列数。(不能使用全局变量) ⑵编写矩阵输出函数OUTPUT_MAT,通过该函数完成矩阵的输出。 ⑶求矩阵的转置,矩阵的转置A’=(a ji)n×m,转置前输出原矩阵,转置后输出转置矩阵。 ⑷求矩阵A、B的和。矩阵A和B能够相加的条件是:m=p,n=q;矩阵A和B如果不能相加,请给出提示信息;若能够相加,则求和矩阵C并输出C。 C=A+B=(c ij)m×n,其中c ij=a ij+b ij ⑸求矩阵A、B的积。矩阵A和B能够相乘的条件是:p=n;矩阵A和B 如果不能相乘,请给出提示信息;若能够相乘,则求积矩阵D并输出D。 D=A×B=(d ij)m×q,其中d ij=∑a ik×b kj,k=1,2,……,n ⑹设计一个菜单,具有求矩阵的转置、求矩阵的和、求矩阵的积、退出等基本的功能。在求矩阵的和或求矩阵的积时要求能够先提示输入两个矩阵的,然后再进行相应的操作。

2 数据汇总 (6人) 问题描述: 在数据处理中经常需要对大量数据进行汇总,将相同关键字记录的某些数据项的值叠加起来,生成一个分类汇总表。 假设某超级市场销售有m种商品(假设商品的编号为1,2,3,┅┅,m),有n台前台收款机(假设收款机的编号为1,2,3,┅┅,n)进行收款,以记录的形式提供给计算机,每个记录表示某台收款机的一种商品一次交易的数量和销售额。记录由4个域组成:收款机编号、商品编号、销售数量、销售金额。构造一个结构体类型,每次销售数据以一个结构体变量保存在一个数据文件中。实现要求: ⑴编写实现将数据记录插入到数据文件的最后的函数; ⑵编写以收款机为单位的数据分类处理函数。构造n个单链表,每个链表保存一台收款机的销售记录,这n个单链表的头指针存放在一个指针数组中,通过数组的下标就可以知道是哪台收款机。读取数据文件的记录,将所有的销售记录(数据文件中的全部记录)分解插入到n个单链表; ⑶统计每台收款机的销售总额; ⑷编写以商品为单位的数据分类处理函数。构造m个单链表,每个链表保存一种商品的销售记录,这m个单链表的头指针存放在一个指针数组中,通过数组的下标就可以知道是哪种商品。读取数据文件的记录,将所有的销售记录(数据文件中的全部记录)分解插入到m个单链表; ⑸以商品为单位,统计每种商品的销售总额。 ⑹设计一个菜单,具有插入数据记录、按收款机统计销售总额、按商品统计销售总额、退出系统等最基本的功能。

C语言程序设计基础实验报告6【VIP专享】

实验6 数组 一、实验目的 1、掌握一维数组和二维数组的定义、赋值和输入输出的方法; 2、掌握字符数组和字符串函数的使用; 3、掌握与数组有关的算法(特别是排序算法)。 二、实验内容和步骤 编程序并上机调试运行。 1、以下给定程序MODI1.C的功能是: 求一维数组a中所有元素的平均值, 结果保留两位小数。例如,当一维数组a中的元素为:10, 4, 2, 7, 3, 12, 5, 34, 5, 9时,程序的输出应为:The aver is: 9.10 程序中有两处错误,错误都在提示行:/***********found***********/的下面一行。请改正程序中的错误, 使它能得出正确的结果。 注意:程序中的其它地方请不要随意改动,不得增行或删行,也不得更改程序的结构! #include #include void main() { int a[10]={10,4,2,7,3,12,5,34,5,9}, i; /************found************/ /************found************/ s = a[0]; for ( i=1; i<10; i++) s += a[i]; aver = s / i; printf("The aver is: %.2f\n", aver); } 2、以下给定程序MODI1.C的功能是:求二维数组a中的最小值。 例如,当二维数组a中的元素为: 4 2 34 7 3 12 5 6 5 程序的输出应为:The min is: 2 。 程序中有两处错误,错误都在提示行:/***********found***********/的下面一行。请改正程序中的错误, 使它能得出正确的结果。 注意:程序中的其它地方请不要随意改动,不得增行或删行,也不得更改程序的结构! #include #include void main() { int a[3][3]={4,2,34,7,3,12,5,6,5}, i, j, min; clrscr();

程序设计基础(c语言)实验指导与测试答案

习题集参考答案 测试1 1.BDAAA 6.DBCDB 11.AADDD 16.CDCCC 21.BCDBA 26.AD 28.a+b,a-b,a-b 测试2 1.BBBDC 6.BCABC 11.CDBBA https://www.wendangku.net/doc/c73863893.html,DCB https://www.wendangku.net/doc/c73863893.html,(假设输入12345回车)CBB 26.ACDDC 31.CBC 34. x>=0 x0 m=n/10 36. i==j k!=i&&k!=j 37. i<10 j%3!=0 38. k!=0 k/10 continue 39. 0 z<10 100*x+10*y+z 40. i=1,m=0 m+=i 测试3 1.CDACB 6.CBDBA 11.AACC CAC 16.C 17. 1.0/(i*i) sqrt(6*s) 18. m=n r !=0 return n 19. <=n s fun(k) 测试4 1.*CDBD 6.DCDA CD 11.DCDBD 16.DCCBB 21.BBABD 26.BDDDD 31.ABCCC 36.CDDCB 41.BAABB 46.CABDC 51.题目中strcat(p1,p2)有误,因为p1指向的是字符串常量 52.DC 55.1110 56. &a[i] continue 57. i=strlen(a) ;i>=j ;i-- a[i+1]=a[i] 58. ‘\0’str1[i]-str2[i] 59. j++ ‘\\’j++ ‘\\’j++ ‘\0’ 60. j<3 b[j][i]=a[i][j] i<3 61. b[i][j+1]=a[i][j] i=0 i<2 printf(“\n”) 62. i=j+1 found=1 63. strlen(t) t[k]==c 64. BD 65. float a[10],x i<10 i<9 j<9-i a[j]>a[j+1] a[j]=a[j+1] i<10 i%5==0 66. ADD 67. DA 测试5 1.BCBAD 6.DBDDA 11.DDCCB

《测量程序设计课程设计》指导书-2015

测量数据处理程序设计指导书 设计名称:测量数据处理程序设计 计划周数:2周 适用对象:测绘工程专业本科 先修课程:测量学,测量平差基础,大地控制测量,测量程序设计 一、设计目的 测量数据处理程序设计是学生在系统学习完大地控制测量学、测量平差基础、测量程序设计等相关课程之后,为了系统理解控制网平差的整体过程及综合运用科学工具而安排的。通过课程设计主要达到以下几个目的:掌握控制网平差课程设计具体内容、方法和步骤;通过理论联系实际,进一步巩固已学到的专业理论知识,并加深对理论的认识;培养学生对编写代码,上机调试和编写说明书等基本技能;锻炼学生阅读各类编程参考书籍及加以编程运用的能力。 二、设计内容及日程 在VB、 VC软件或matlab科学计算软件的平台上,选择的具体课程设计题目,进行程序设计与实现,共计10个工作日,工作程序如下: 三、设计的组织: 1.设计领导 (1)指导教师:由教研室指派教师、实验员兼任。

职责:全面组织设计大纲的实施,完成分管工作及相关技术指导。 (2)设计队长:学生班长兼任。 职责:协助教师做好本班学生的人员组织工作。 (3)设计组长:每组一人。 职责:组织执行下达的设计任务,安排组内各成员的工作分工。 2.设计分组 学生实习作业组由3~4人组成(含组长一人)。 四、设计内容 在VB、VC或MATLAB 软件平台上,按选择的设计题目进行相关程序开发 1、闭合导线简易平差、附合导线简易平差支导线计算 2、闭合水准网计算、附合水准网简易平差 3、地形图编号(新、旧两种方法) 4、误差椭圆的参数的计算与绘制误差椭圆 5、水准网严密平差 6、高斯正反算计算 7、高斯投影换带计算 8、七参数大地坐标转换(WGS84-bj54坐标转换、WGS84-CGCS2000坐标转换) 9、四参数坐标转换(西安80-bj54坐标转换、CGCS2000-bj54坐标转换、CGCS2000-西安80坐 标转换(平面) 10、大地高转换为正常高的计算 11、工程投影变形超限的处理 12、遥感图像数据处理 13、曲线(曲面)拟合 14、摄影测量空间后方交会 15、****管理信息系统设计与开发 五、上交成果 1) 小组利用vb、vc或matlab编写的软件包一个及测试数据一份 2)小组关于所开发程序设计说明书一份 3) 个人课程设计的心得一份 4)小组答辩PPT一份

C++面向对象程序设计课程设计报告

. 课程设计 课程名称C++面向对象程序设计题目名称公司人员管理系统 专业班级13级计算机科学与技术一班学生林涛、甑德胜、梁增辉 吴志伟、齐、江靖 学号51302011015、51302011016、51302011001 51302011037、51302011006、51302011009指导教师郭有强 二○一四年六月二十日

目录 一、引言 (2) 二、课程设计报告 (4) 1、问题描述 (4) 2、系统总体方案 (4) 3、设计思路和主要步骤 (5) 4、各功能模块和流程图 (5) (1)各功能模块 (5) (2)流程图 (6) 三、系统测试 (9) 四、心得体会 (15) 五、参考文献 (17) 附:程序设计代码 (18)

一、引言 1985年,管理信息系统的创始人,高登?戴维斯给出的管理信息系统的定义是:“它是一个利用计算机硬件和软件,手工作业,分析、计划、控制和决策模型,以及数据库的用户一机器系统。它能提供信息,支持企业或组织的运行、管理和决策。”这个定义说明了管理信息系统的组成要素:计算机硬件、软件、数据库、模型库和用户。 随着我国社会的不断进步,人们对管理信息系统越来越重视,再加之管理信息系统在管理方面所产生的巨大影响,也使得人们越来越关注管理信息系统的发展趋势。由于管理信息系统的发展受到以上各种变革因素的制约,传统的管理信息系统必然向现代管理信息系统发展,在这个发展过程中,管理信息系统的发展将会呈现出以下趋势: 管理信息系统将会越来越注重以人为本。管理科学的发展有科学管理理论、行为管理理论和现代管理理论三个发展阶段,正在向着越来越人性化的方向发展,即以人为本。基于管理学的这一研究视角,管理信息系统也将向着更加人性化的方向发展。在今后的管理信息系统中将会越来越注重人的因素,以人为出发点和中心,围绕着激发和调动人的主动性、积极性、创造性展开的,以实现人与社会共同发展的一系列管理活动。而且这种人性化还会贯穿于管理信息系统的开发设计与研究中,具体表现为今后的管理信息系统将具有更加友好的人机界面,易于人们操作,也会考虑到不同用户的不同需求,更加个性化。 管理信息系统向智能化方向发展。随着人工智能技术的发展,数据仓库、数据挖掘技术在管理信息系统中的应用,管理信息系统必将向着智能化方向发展,如产生了很多的决策支持系统、专家系统等等。智能化的管理信息系统具有思维模拟活动,它具有很高的自学习、自组织和进化性,并具有知识创新功能,可以解决非结构化事务,在决策中处于主导地位,是人的向导,在体系上将是大规模分布式计算模式,以基于网络神经元构件的智能网为主。 管理信息系统向集成化方向发展。随着当前系统集成技术的提高,集成技术和方法也逐步地运用到管理信息系统中。由于管理信息系统将包含多个子系统,因此将这些功能集合在一起以便更好地发挥它的作用,这就是集成化的管理信息系统。集成化的管理信息系统将管理信息系统的各个子系统有机地结合起来,达到互通信息、共享数据资源的目的,其支撑技术是数据库和计算机网络。集成管

算法程序设计实验报告

程序设计》课程设计 姓名:王 学号:20100034 班级:软件工程00 班 指导教师:王会青 成绩: 2010年 6 月 实验一.构造可以使n 个城市连接的最小生成树 专业:__软件工程___ 班级:__软件姓名:_王___ 学号:_20100034 完成日期:_2010/6/26 ________ 一、【问题描述】给定一个地区的n 个城市间的距离网,用Prim 算法或Kruskal 算法建立最小生成树,并计算得到的最小生成树的代价。 1 城市间的道路网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的定义,若两个城市之间不存在道

路,则将相应边的权值设为自己定义的无穷大值。 2 显示出城市间道路网的邻接矩阵。 3 最小生成树中包括的边及其权值,并显示得到的最小生成树的总代价。 4 输入城市数、道路数→输入城市名→输入道路信息→执行Kruskal 算法→执行Prim 算法→输出最小生成树 二、【问题分析】 1. 抽象数据类型结构体数组的定义: #ifnd ef ADJACENCYMATRIXED// 防止该头文件被重复引用 #define ADJACENCYMATRIXED // 而引起的数据重复定义 #define INFINITY 32767 // 最大值∞ #define MAX_VERTEX_NUM 20 // 最大顶点个数 typedef int VRType; // 权值,即边的值 typedef char InfoType; // 附加信息的类型,后面使用时会定义成一个指针 typedef char VertexType[MAX_VERTEX_NUM]; // 顶点类型 typedef enum {DG=1, DN, UDG, UDN} GraphKind; //{ 有向图,有向网,无向图,无向网} typedef struct ArcCell { VRType adj; //VRType 是顶点关系类型。对无权图,用1 或0 表示相邻否;对带权图,则为权值类型。 InfoType*info; // 该弧关系信息的指针

C++程序设计实验报告5

《程序设计基础》 实验报告 学号:2016211990 姓名:王贯东 班级:16-计算机科学与技术-1班

学院:计算机与信息学院 实验五指针 1.实验目的要求 (1)掌握指针的概念,学会定义和使用指针变量。 (2)学会使用数组指针和指向数组的指针变量。 (3)学会使用字符串指针和指向字符串的指针变量。 (4)了解指向指针的指针的概念以及其使用方法。 (5)掌握指针、引用、数组做函数参数的传递机制。 (6)*学会使用指向函数的指针变量。 2.实验设备 Visual C++ 6.0 3.实验内容 (1)阅读下面程序,写出其运行结果。

<1> #include sub ( int x , int y , int *z ) { *z = y – x ; } void main( ) { int a,b,c; sub( 10 , 5 , &a ) ; sub( 7, a, &b ) ; sub( a, b, &c ) ; cout << a <<‘,’<< b <<‘,’<< c << endl ; } 解:输出-5,-12,-7 <2> #include #include void main()

{ int stre ( char[ ] ) ; char str [ 10 ] , *p = str ; gets ( p ) ; cout << stre ( p ) << endl ; } int stre ( char str[ ] ) { int num = 0 ; while( * ( str + num ) != ’\0’ ) num ++ ; return ( num ) ; } 解:题目库函数少了 。该正后,输入1234,输出4 (2)编写程序实现下列问题的求解。 (1)输入三个整数,按由小到大的顺序输出,然后将程序改为:输入三个字符串,按由小到大的顺序输出。 #include using namespace std; int turn (int *p1,int *p2)

java程序设计基础(第3版)实验指导答案 第四章

实验16 public class shiyan16 { public static void main(String[] args) { int i; int []a; a=new int[10]; for(i=0;i<=a.length-1;i++) System.out.print("a["+i+"]="+a[i]+" "); System.out.print("\n"); for(i=a.length-1;i>=0;i--) { a[i]=i; System.out.print("a["+i+"]="+a[i]+" "); } } } //定义一个长度为10的整形数组,输出元素的内容,再对数组元素进行赋值 实验17 import java.util.*; public class shiyan17 { public static void main(String[] args) { int i,max,min; int []a=new int[5]; Scanner reader=new Scanner(System.in); System.out.println("从键盘输入5个整数"); for(i=0;i<5;i++) a[i]=reader.nextInt(); max=a[0]; min=a[0]; for(i=1;i<5;i++) { if(a[i]>max) max=a[i]; if(a[i]

《C语言程序设计》课程设计

《C语言程序设计》课程设计 刘力斌 一、意义和目的 C语言是光信息科学与技术专业的重要专业基础课。在很多后续课程中,都要使用到C语言。 学生通过对C语言的学习,已经具备了使用C语言编写简单的应用程序的能力。为了加强程序设计基础,开设课程设计课,使学生对C语言有更全面的理解,进一步提高运用C语言编程解决实际问题的能力,同时,为后续课程的学习夯实基础。 课程设计目的: 提高用程序设计解决实际问题的能力。 通过提出算法、指定输入输出来设计一个解决方案。 用C语言合理地开发两个简洁有效的程序代码来实现该设计。 测试程序是否工作且满足设计指标并评价其效率。 二、目标 完成本课程设计的学生应能在以下几方面证明你们的能力: A、分析问题。各种简单的与计算机有关的案例中所需要的输出结果,把大问题分解成小问题,使用自顶向下或类似设计方法给出模块化或计划。 B、提出算法执行特定任务。模块表示为算法,使用自顶向下或伪代码等设计手段将模块细化成更详细的成分,清楚地表明顺序、选择和重复等到控制结构。 C、把一个算法变为用C语言编写的结构化程序。 D、用合适的测试方法检查程序是否符合最初的要求,为不合适数据设计错误陷阱,并提供错误信息来帮助用户。 E、写出清晰的用户文档,确保用户或者通过遵循程序中的指示或者使用程序设计者编写的文档能成功地运行程序。 F、写出技术文档,对程序中主要标示符的含义或作用加以说明,并提供一个完整的程序流程图。 G、调试程序、测试数据过程成功。

三、要求 参加本课程设计的学生,应当认真完成本课程设计的全部过程。并以最终课程设计成果来证明其独立完成各种实际任务的能力。从而,反映出理解和运用本课程知识的水平和能力。 完成课程设计应提交如下文档: ①程序的总体设计和算法分析。 ②技术文档 ③用户文档 ④源程序代码清单。 ⑤测试数据和测试过程记录。 ⑥遇到的问题及解决方法分析。 四、选题 每人一个题,具体题目可以参考附录。 第一题:链表操作题(包括建立、插入、删除、打印等)(参考教材); 第二题:文件操作,具体题目最好是自拟。 如果选题确实有困难的同学,可参考后面参考题目来完成本课程设计(成绩要影响)。 五、评价 评价是检测学生理解问题和解决问题能力的一个重要手段,教师将根据学生提交的一套文件中,严格检查以下各项任务完成情况: 1、课程设计文档是否齐全。 2、程序的用户文档 如果在程序执行期间有足够的指导信息显示在屏幕上显示,这些用户文档可以是很简要的,也许只限于解释如何装入并运行程序。 3、问题或任务的陈述(描述问题,而且问题是合理原始的、应当包括输 入、输出及其预期范围。)是否正确。 4、问题的解决方案采取由顶向下设计的形式,在适当的地方使用伪代 码,把整个解决方案划分成若干模块。 5、程序完成后的代码应当加以注解。最少应清楚指出每一个模块。 6、用于检查程序的测试数据,或者对一个控制程序给出测试的例程。测 试应考虑探索通过程序的几条路径,在合适的地方选择打印输出来。 7、程序的技术文档

相关文档
相关文档 最新文档