程序设计基础实验指导书C++版.docx

上传人:b****1 文档编号:78505 上传时间:2023-04-28 格式:DOCX 页数:48 大小:165.54KB
下载 相关 举报
程序设计基础实验指导书C++版.docx_第1页
第1页 / 共48页
程序设计基础实验指导书C++版.docx_第2页
第2页 / 共48页
程序设计基础实验指导书C++版.docx_第3页
第3页 / 共48页
程序设计基础实验指导书C++版.docx_第4页
第4页 / 共48页
程序设计基础实验指导书C++版.docx_第5页
第5页 / 共48页
程序设计基础实验指导书C++版.docx_第6页
第6页 / 共48页
程序设计基础实验指导书C++版.docx_第7页
第7页 / 共48页
程序设计基础实验指导书C++版.docx_第8页
第8页 / 共48页
程序设计基础实验指导书C++版.docx_第9页
第9页 / 共48页
程序设计基础实验指导书C++版.docx_第10页
第10页 / 共48页
程序设计基础实验指导书C++版.docx_第11页
第11页 / 共48页
程序设计基础实验指导书C++版.docx_第12页
第12页 / 共48页
程序设计基础实验指导书C++版.docx_第13页
第13页 / 共48页
程序设计基础实验指导书C++版.docx_第14页
第14页 / 共48页
程序设计基础实验指导书C++版.docx_第15页
第15页 / 共48页
程序设计基础实验指导书C++版.docx_第16页
第16页 / 共48页
程序设计基础实验指导书C++版.docx_第17页
第17页 / 共48页
程序设计基础实验指导书C++版.docx_第18页
第18页 / 共48页
程序设计基础实验指导书C++版.docx_第19页
第19页 / 共48页
程序设计基础实验指导书C++版.docx_第20页
第20页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

程序设计基础实验指导书C++版.docx

《程序设计基础实验指导书C++版.docx》由会员分享,可在线阅读,更多相关《程序设计基础实验指导书C++版.docx(48页珍藏版)》请在冰点文库上搜索。

程序设计基础实验指导书C++版.docx

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

 

程序设计基础实验指导书

 

广州大学计算机科学与教育软件学院

程序设计基础实验课程组

二0一0年九月

 

实验1简单的C程序设计、数据类型、运算符与表达式

2

实验2顺序结构和选择结构设计程序设计6

实验3循环结构程序设计7

实验4数组与字符串11

实验5函数16

实验6指针21

实验7结构体与共同体24

实验8文件(多文件程序结构)28

实验9程序设计基础应用实验30

 

实验1简单的C程序设计、数据类型、运算符与表达式

一、实验目的及要求

1.了解在集成开发环境下程序的编辑、编译、连接、运行与调试;

2.掌握C语言的基本数据类型、算术运算符、赋值运算符和逗号运算符及表达式;

3.输入并编译C++程序。

二、实验设备与平台

1.实验设备:

计算机;

2.平台:

WindowsXP操作系统,VisualC++6.0。

三、实验内容与步骤

1.启动VisualC++6.0,认识开发环境界面;

图1_1启动VisualC界面

2.建立新文件:

选择File的new项,在窗口new中选C++SourecFile(C++原文件),并输入文件名(扩展名为.cpp由系统给出)和该文件将要保存的位置(即存盘路径,一般自己先建立一个常用文件夹,将拟建立的文件保存在该文件夹),再按OK按钮。

图1_2建立C++原文件

3.输入运行程序代码:

上述步骤后出现编辑版面,这时可以输入所要运行的程序代码。

图1_3输入拟运行程序代码

4.编译(将程序文本转为机器能识别的代码文件):

选Build菜单中的Compile项,若程序出错在编译中系统会给出提示信息,方便用户进行修改。

5.运行:

选Build菜单中的Execute项,运行程序,再根据程序提示输入数据,系统会给出结果。

图1_4程序运行的结果

6.有关说明:

1)运行程序时系统会产生.exe文件,同时执行.exe文件。

2)对VC++的每一菜单项,都有一个相应的图标,可按图标快速执行。

3)程序运行完后,可按File菜单的CloseWorkspace关闭工作区,再退出VC++系统。

4)运行完一程序后,若需再打开另一程序,必须先关闭原有程序的工作区,即做3)。

5)运行已有存盘的旧程序,可选File菜单中的open项,再选取执行指定文件夹中的.cpp程序文件即可。

 

实验1_1:

输入并运行以下程序,分析其运行结果。

//sy1_1.cpp

#include

usingnamespacestd;

intmain()

{charc1,c2;

c1=97;c2=98;

cout<

return0;

}

(运行上面程序)

在此基础上

1加上一个cout语句并运行:

cout<

②再将第5行改为:

intc1,c2;

并运行两种输出格式

实验1_2:

输入并运行以下程序,分析其运行结果。

//sy1_2.cpp

#include

usingnamespacestd;

intmain()

{

inti,j,m,n;

i=8;j=10;

m=++i;n=j++;

cout<<"i="<

return0;

}

运行。

分别作以下改动并运行:

将第8行改为:

m=i++;n=--j

将第7行改为:

inti=8,j=10,m=0,n=0

将第8行改为:

m+=i++;n-=--j

分析分别修改以后的变化情况。

实验1_3:

输入并运行以下程序,并回答思考题

//sy1_3.cpp

#include

usingnamespacestd;

intmain()

{unsignedshorta;

shortintb=-1;

a=b;

cout<

return0;

}

思考题:

运行结果是什么?

依据是什么?

因为-1的补码形式为1111111111111111(即全部16个二进制位均为1),将它传送给a,而a是无符号型变量,16个位全1是十进制的65535。

如果b为正值,且在0~32767之间,则赋值后数值不变。

思考问题:

1.输入一个字符,判别它是否为大写字母,如果是,将它转换成小写字母;如果不是,不转换。

然后输出最后得到的字符,上机编写并通过程序。

2.输入3个a,b,c,求出最大数,上机编写并通过程序。

3:

#include“filename”与#include的区别?

实验相关知识

1.程序的编译、连接、运行

在“编译”菜单中,“Compile”命令可对源程序进行编译,编译通过则生成扩展名为.obj的目标文件;“Build”命令可对目标文件连接生成“可执行文件”,此命令也可将源程序进行编译再连接生成“可执行文件”;“Execute”命令可运行“可执行文件”显示结果,此命令也可将源程序进行编译再连接生成“可执行文件”并运行显示结果。

编译或连接时的信息都会显示在输出窗口,若出现错误,则标识出错文件名,发生错误的行号及错误的原因等。

错误信息中的警告信息不妨碍可执行文件的形成,但最好进行修改。

2.程序的调试

在VisualC++6.0环境下集成了调试器,可以利用Build菜单Debug级联菜单中的命令或快捷键来控制调试器中程序的运行情况。

通过设置断点,观察断点的各种信息,单步跟踪有疑问的程序段,进而修改源程序。

DeveloperStudio中的工程可以产生两种可执行代码,分别称为调试版本和发布版本。

调试版本是在开发过程中使用的,用于检测程序中的错误;发布版本是面向用户的。

高度版本体积较大,而且速度通常要比发布版本慢,发布版本不能用调试器进行调试。

实验2顺序结构和选择结构设计程序设计

一、实验目的及要求:

1.学会正确使用逻辑运算符和逻辑表达式;

2.熟练掌握if语句和switch语句;

3.掌握在程序设计中灵活使用顺序结构和选择结构。

二、实验设备与平台

1.实验设备:

计算机;

2.平台:

WindowsXP操作系统,VisualC++6.0。

三、实验内容及步骤:

先画程序流程图,再编写程序,解下列问题,然后上机调试运行程序。

实验2_1:

有一个函数

xx<=0

Y=5x-101<=x<10

10x-20x>=10

用cin函数输入x的值(分别为x<=0,1<=x<=10,x>=10),输出y的值。

说明:

这个题目主要是练习学生对if…eles语句的使用。

实验2_2:

给出一个不多于5位的正整数,要求:

1)求出它是几位数;

2)分别输出每一位数;

3)按逆序输出各位数字,例如原数为5631,应输出为1365。

说明:

这个题目主要是练习学生对if…elsefif嵌套语句,switch…case语句的使用。

思考:

如果不使用switch…case语句,完全使用if…elseif来实现,那程序应该怎么改动呢?

实验2_3:

输入四个整数,要求按大小顺序输出。

上机编写并通过程序。

说明:

这个题目主要是练习学生对两个数的交换以及多个数的排序处理。

思考:

程序中需要两个数的比较是多少次,如果有5个数,那比较的次数又是多少次呢?

 

实验3循环结构程序设计

一、实验目的及要求

1.掌握while、for、do…while循环结构的使用方法以及循环条件的使用;

2.能够使用三种循环结构设计程序、分析程序并解决实际问题;

3.掌握三种循环结构的差异和不同,能灵活地实现三种结构间的转换;

4.正确编写具有循环结构的C语言程序。

二、实验设备与平台

1.实验设备:

计算机;

2.平台:

WindowsXP操作系统,VisualC++6.0。

三、实验内容及步骤

1.程序实验验证

(1)求=1+2+···+100之和,上机验证程序运算结果。

方法一(实验3_1):

用while语句编程。

方法二(实验3_2):

用do-while语句,求1到100的和。

方法三(实验3_3):

用for语句编程。

上机编写并通过程序,并分析三种编程方法的特点。

几种循环结构的比较分析:

for语句适合于循环次数是预先知道的,且步长固定;而while和do语句的循环次数则依赖于循环体的动作。

for和while语句是先判断后执行,所以循环体可能一次也不执行;do语句是先执行后判断,所以循环体至少执行一次。

循环体可以是空语句,也是几个语句复合。

三种循环语句可以相互转化,但一般来说,while语句的适应性最广,应首先考虑。

但在特别的问题中,选择for语句和do语句会更自然、更方便。

(2)实验3_4:

编写程序找出3位数中(100—200间)各位数之和能被5整除的所有数,每行按5个数据显示在屏幕上。

编写程序代码并上机验证程序运行结果。

(3)编程求水仙花数。

水仙花数是满足这样条件的3位数:

3位数中各位数的立方和等于该3位数,上机运行程序并验证程序运行结果。

2.程序实验分析

(1)实验3_5:

根据程序代码,分析下列程序所完成功能和相应输出结果,并思考下列问题。

//sy3_5.cpp分析下列程序的运行结果

行号程序代码

1#include

2usingnamespacestd;

3voidmain()

4{

5inti,sum;

6sum=0;

7i=10;

8while(i)

9{sum=sum+i;

10i=i-1;

11}

12cout<<"sum="<

13}

思考问题1:

运行程序,分析程序的运行结果(sum=55),根据程序运行结果,思考程序中第8行的语句while(i)中的表达含义。

思考问题2:

试着将第8行中的语句修改为

while(x!

=0)

再运行修改后的程序,并对运行结果与原程序运行结果进行比较分析。

思考问题3:

试着将第8行中的语句修改为

while(!

x==0)

再运行修改后的程序,并对运行结果与上面两次运行结果进行比较分析。

(2)分析下面程序:

如果用下列语句来实现s=1+2+3+4+5的累加功能,请你分析、运行程序,找出程序中存在的错误并进行修改。

行号程序代码

1#include

2usingnamespacestd;

3voidmain()

4{

5inti,s=0;//累加变量初始化为0

6for(i=1,i<=5,i++);//实现1—5的累加

7s=s+i;

8cout<<“s=”<

9}

问题拓展:

1)如果将原程序修改为用while语句来实现,请分析程序中存在的错误。

行号程序代码

1#include

2usingnamespacestd;

3voidmain()

4{

5inti,s=0;//累加变量初始化为0

6while(i<=5);

7{

8s=s+i;

9}

10cout<<“s=”<

11}

2)如果将原程序修改为用do…while语句来实现,请分析程序中存在的错误。

行号程序代码

1#include

2usingnamespacestd;

3voidmain()

4{

5inti=1,s=0;

6do

7{

8s=s+i;

9i++;

10}while(++i<=100)

11cout<<“s=”<

12}

 

实验4数组与字符串

一、实验目的及要求

1.了解数组与数学矩阵的关系;

2.掌握数组的定义、引用与初始化;

3.理解二维数组数据的存储顺序;

4.理解并掌握冒泡排序法、选择排序法;

5.掌握字符数组与字符串的定义、引用;

6.了解字符串处理函数的用法。

二、实验设备与平台

1.实验设备:

计算机;

2.平台:

WindowsXP操作系统,VisualC++6.0。

三、实验内容及步骤

1.排序算法

排序算法有很多种,如冒泡排序、选择排序等。

1)冒泡排序法:

相邻元素比较大小并发生交换,使最大值(最小值)“浮出”到数组尽头:

a0a1a2a3

现以N元数组a[0]–a[N-1]由小到大排序为例,其算法执行步骤如下:

第1步:

找到a[0]–a[N-1]中的最大值元素浮动到a[N-1];

第2步:

找到a[0]–a[N-2]中的最大值元素浮动到a[N-2];

第3步:

找到a[0]–a[N-3]中的最大值元素浮动到a[N-3];

…………

第i步:

找到a[0]–a[N-i]中的最大值元素浮动到a[N-i];

…………

第N-1步:

找到a[0]–a[1]中的最大值元素浮动到a[1],且算法停止。

2)选择排序法:

仍以N元数组a[0]–a[N-1]由小到大排序为例,其算法执行步骤如下:

第1步:

找到a[0]–a[N-1]中的最小值元素与a[0]交换;

第2步:

找到a[1]–a[N-1]中的最小值元素与a[1]交换;

第3步:

找到a[2]–a[N-1]中的最小值元素与a[2]交换;

…………

第i步:

找到a[i]–a[N-1]中的最小值元素与a[i]交换;

…………

第N-1步:

找到a[N-2]–a[N-1]中的最小值元素与a[N-2],且算法停止。

注意:

比较冒泡排序法与选择排序法的差异。

2.实验4_1:

用选择法排序程序(升序程序)

//用选择法排序程序(升序排序)

#include

usingnamespacestd;

#defineM10

voidmain()

{

inta[M],i,j,min,temp;

printf("请输入排序数据:

\n");

for(i=0;i

cin>>a[i];

printf("排序前数列:

\n");

for(i=0;i

{

cout<

}

for(i=0;i

{

min=i;

for(j=i+1;j

if(a[j]

min=j;

temp=a[i];

a[i]=a[min];

a[min]=temp;

}

printf("\n排序后的数列:

\n");

for(i=0;i

{

cout<

}

cout<

}

程序调试要求:

1)运行程序,任意输入10个整数,察看并分析程序执行结果;

2)运行程序,输入多于10个的整数,察看并分析程序执行结果;

3)运行程序,输入一组升序排列的有序整数,察看并分析程序执行结果;

4)运行程序,输入一组降序排列的有序整数,察看并分析程序执行结果。

3.实验4_2:

有序数列的数据插入问题

编程分析,这个问题包括3个关键步骤:

1)确定要插入数据的位置。

这步操作使用的方法有很多种,如可以使用折半查找比较的方法,也可以使用顺序比较的方法;2)将自插入位置开始后的所有数据都向后移动一个位置,以便空出要插入数据的位置。

若插入数据位置在原有所有数据之后,该步骤可省略,若插入数据位置在第一个数据之前,所有数据依次后移一个位置;3)将要插入的数据存储在该空位置上。

参考程序:

//在升序排序的数组中插入数据程序,sy4_2.cpp

#include

usingnamespacestd;

#defineM10

voidmain()

{

inta[M+1]={10,20,30,40,50,60,70,80,90,99};

inti,n,p;

cout<<"原始数列数据为:

"<

for(i=0;i

{

cout<

}

cout<

"<

cin>>n;

a[M]=n;

for(i=0;i<=M;i++)//确定要插入的位置p

if(n<=a[i])

{

p=i;

break;

}

for(i=M-1;i>=p;i--)//元素后移

a[i+1]=a[i];

a[p]=n;//插入数据

cout<

"<

for(i=0;i

{

cout<

}

cout<

}

程序调试要求:

1)运行程序,输入一个比所有原始数据都小的数,察看并分析程序执行结果;

2)运行程序,输入一个比所有原始数据都大的数,察看并分析程序执行结果;

3)运行程序,输入一个介于原始数据最小数和最大数之间的整数,察看并分析程序执行结果;

4)运行程序,输入原始数据中最小的数,察看并分析程序执行结果;

5)运行程序,输入原始数据中最大的数,察看并分析程序执行结果;

6)运行程序,输入原始数据中间的任何一个数,察看并分析程序执行结果。

4.实验4_3:

不用字符串处理函数将两个字符串连接,即将字符串b连接到字符串a的后面,变成字符串c。

思考:

如果将字符串S2连接到字符串S1的后面,且不需要第三个字符串变量作中间过度,如何实现?

编程实现并测试。

 

实验5函数

一、实验目的及要求

主要叙述本节对应要掌握的主要概念和要解决的主要问题。

1.掌握函数的定义方法,及函数调用的形式;

2.掌握函数实参与形参的对应关系,“值传递”与“地址传递”的方式与区别;

3.掌握函数的应用方法,熟悉函数的嵌套调用和递归调用的设计方法;

4.了解全局变量、局部变量、动态变量及静态变量的概念和使用方法;

5.综合应用顺序结构、选择结构和循环结构的设计方法设计函数程序。

二、实验设备与平台

1.实验设备:

计算机;

2.平台:

WindowsXP操作系统,VisualC++6.0。

三、实验内容及步骤

1.分析下面程序,给出运行结果。

本题要求理解和掌握函数的定义和调用

//实验5_1:

sy5_1.cpp

#include

usingnamespacestd;

intf(inti)

{i=i*i-1;

return(i);

}

voidmain()

{

inti;

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

cout<

}

程序运行结果:

2.下面程序为选择排序,要求按如下步骤完成本题实验,理解和掌握函数参数的传递,理解函数的嵌套调用。

//实验5_2:

sy5_2.cpp

#include

usingnamespacestd;

#defineN10

intmax(intx[],intn)

{

inti,j;

j=0;

for(i=1;i

if(x[i]>x[j])j=i;

returnj;

}

voidsel_sort(intx[],intn)

{

inti,j;

for(i=n;i>1;i--)

{j=max(x,i);inttemp=x[j];x[j]=x[i-1];x[i-1]=temp;}

}

voidmain()

{

inta[N],i;

for(i=0;i

cin>>a[i];

sel_sort(a,N);

for(i=0;i

cout<

cout<

}

1)阅读程序,理解选择排序的思想

2)上机编辑,调试程序

3)用两组数据,给出程序运行结果,

4)用单步执行,观察程序执行的流程

5)画出流程图描述程序的实现

6)问题:

什么是函数的嵌套调用?

3.函数的递归调用

题目:

采用递归方式实现二分查找

{问题分析}二分查找算法可以描述为:

对于一个已经从小到大排序的数据序列,用给定数据key与查找区间中央位置的数据比较,如果相等则表明查找成功;否则,如果key比中央位置的数据小,则在前半个区间用同样的方法继续查找;否则在后半个区间用同样的方法继续查找。

因此,这是一个递归的过程,当查找区间的长度为0时,说明查找不成功。

要求完成本题的填空并上机调试通过,理解递归调用的执行过程

//实验5_3:

sy5_3.cpp

#include

usingnamespacestd;

#defineNUM10

intsearch(intvalue[],intkey,intlow,inthigh);

voidmain()

{

intvalue[NUM],result,key;

inti;

cout<<"请输入十个从大到小的有序数列:

"<

for(i=0;i

cin>>value[i];/*输入从大到小的有序数列*/

cout<<"请输入其中一个元素值:

"<

cin>>key;/*输入待查找的数值*/

result=search(value,key,0,NUM-1);/*调用二分查找函数进行查找*/

if(result!

=-1)

cout<<"第"<

"<

else

cout<<"不能找到"<

}

intsearch(

(1))

{intmid;

if(low>high)return-1;/*查找区间为空*/

mid=(

(2))/*求中间位置*/

if(value[mid]==key)((3))/*得到查找的数据位置*/

if(key

elsereturn((4));

}

4.全局变量与局部变量及变量的存储类型

1)全局变量与局部变量

题目

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2