文档视界 最新最全的文档下载
当前位置:文档视界 › C程序设计谭浩强版实验指导书

C程序设计谭浩强版实验指导书

C程序设计谭浩强版实验指导书
C程序设计谭浩强版实验指导书

C程序设计谭浩强版实验

指导书

The document was prepared on January 2, 2021

《C++程序设计》

实验教学指导书

课程编号:

撰写人:朱世华

审核人:

前言

程序设计是一门实践性很强的课程,通过实验可以巩固和加强课堂教学内容,提高学生实际工作能力和动手能力,并为后续课程和从事实践技术工作奠定重要的基础。因此,学生在进行理论知识学习的同时,必须十分重视实践环节----上机。

上机实验时应该一人一组,独立上机。在上机过程中出现的问题,一般应自己独立处理,学生应在实验前将教师指定的题目编好程序,然后上机输入和调试。

上机前应事先作好准备工作,以提高上机实验的效率,准备工作至少应包括:

(1)复习和掌握与本实验有关的教学内容。

(2)准备好上机所需的程序。

(3)对运行中可能出现的问题应事先做出估计;对程序中有疑问的地方,应做上记号,以便上机时给予注意。

(4)准备好调试和运行时所需的数据。

实验设备与环境:

1、硬件配置

PentiumⅡ以上PC兼容机或品牌机,配有彩色显示器、鼠标、键盘,内存不小于

32MB,硬盘自由空间不少于60MB。推荐配置为内存256MB(或以上),硬盘自由空间1GB 以上。

2、软件配置

操作系统:Windows XP,Windows 2000以上版本

开发环境:Microsoft Visual C++ 2010以上版本。

目录

实验一 Visual C++ 2010的基本用法 (1)

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

实验三三种基本结构的实现1 (7)

实验四三种基本结构的实现2 (9)

实验六指针 (13)

实验七函数 (14)

实验八结构和联合 (17)

实验九类与对象 (20)

实验十综合实验 (23)

实验一 Visual C++ 2010的基本用法

一、实验目的

1.熟悉Visual C++2010集成开发环境的基本命令和功能键。

2.学习完整的C++ 程序开发过程。

3.理解简单的C++ 程序结构。

二、实验内容与步骤

本次实验将学习有关Visual C++ 开发环境的一些知识,并尝试实现一个简单的DOS程序和Windows程序。通过本次实验,可以了解用Visual C++ 开发应用程序的全过程。

1、熟悉Visual C++ 开发环境

我们选择Visual C++那一项就可以了。下图是VS2010打开后的画面,当然可能你的界面跟我的不一样,没关系,那只是设置问题。

菜单栏我们常用的是File,View和Debug菜单下的菜单项。工具栏各项其实在菜单栏都有与它们对应的菜单项,功能是一样的。左侧面板可以放多个视图,我这里放了解决方案浏览器、类视图和资源视图,解决方案浏览器中我们可以看到所有头文件和源文件构成的树,头文件就是.h后缀的文件,源文件就是.cpp后缀的文件,类视图中显示了每个工程的每个类,也是树状结构,在解决方案浏览器或类视图中双击每一项,中间区域都会打开相应的文件或者到类的位置。资源视图中显示了界面工程中使用的一些界面资源。中间区域默认是打开start page,打开一个工程后我们在左侧面板上双击某项时,中间区域会

出现相应的界面。右侧面板上有个Toolbox,是在界面工程中用来往界面资源模板上添加控件的,里面包含了各种控件,直接拖到模板上就行了。底侧还有几个标签,其中一个是output,这是输出视图,用来输出程序运行信息和我们程序中写的一些调试信息,还有一个Find Result视图,用来显示我们搜索任何字母或单词的结果。

File->New->Project项可以创建一个工程,也可以在start page中点击New Project...,然后出现的New Project窗口中有多个工程类型可以选择, Win32 Console Application是Win32控制台程序,MFC Application是MFC应用程序,可以建立以开发界面程序,Win32 Project是Win32程序,Empty Project是空程序,MFC DLL用来建立生成动态链接库的工程,其它的不常用就不介绍了。我们要建立一个没有应用程序界面的只有Dos命令行界面的工程就选Win32 Console Application项,我们学习C++基础知识用这个就可以了。它跟Win32 Project的区别是,它的入口是main函数,而Win32 Project的入口是WinMain函数。

File->Open->Project/Solution可以打开以前建立的工程或者解决方案,一个解决方案中可以包含多个工程,你可以把它理解为多个有关系或者没关系的工程的集合,有时把多个工程放到一个解决方案里调试起来很方便。

在View下的菜单项我们就可以控制它。View->Solution Explorer可以打开或关闭解决方案浏览器视图,View->Class View用来控制类视图的显示,View->Resource View控制资源视图的显示,当然只有界面工程的资源视图中才会有内容。View->Output和View->FindResults等项大家应该也知道它们的含义了吧。

Debug->Start Debugging(快捷键是F5)用来开始调试,Debug-

>Toggle Breadpoint(快捷键是F9)用来设置断点,设置断点后然后开始调试,程序运行到断点时会停下来,我们用鼠标放到断点处的各个变量上时可以看到当时这些变量的值。Debug->Start Without Debugging表示不调试直接运行,也就是到断点处也不会停止运行。Debug->Step Into(快捷键是F11)用来单步执行,遇到子函数就进入并且继续单步执行;Debug->Step Over(快捷键是F10)也是单步执行,但在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完而跳到下一步,也就是把子函数整个作为一步。

工具栏上有个下拉列表框,它包含有Debug、Release和Configuration Manager,选择Debug时为调试模式,生成的可执行程序中包含调试信息,我们可以调试并清楚的看到变量值,选择Release时生成的可执行程序中不含调试信息,在设置断点后看到的变量值可能不准确。

msdn帮助可以点Help->View Help(快捷键是F1),也可以点开始->Microsoft Visual Studio 2010->Microsoft Visual Studio 2010 Documentation打开。

2、控制台应用程序的建立

用Appwizard建立一个控制台应用程序,在显示器上输出“Hello,World!”。

(1)创建项目(project)

首先创建一个项目,用来管理用户的应用程序。创建项目的步骤为:

①启动visual Studio 2010。

②从主菜单中选择菜单项“File”→“New”,打开“New”对话框。

③选择“Projects”标签,从项目列表中单击“Win32 Console

Application”选项。

在“project name”编辑框中键入项目的名字,如“hello”,系统将自动为用户的项目分配一个默认的目录。也可以在“Location”编辑框中重新输入项目存放路径。

单击“OK”按钮继续。

(2)编辑源程序

在项目中添加一个文件:

①从主菜单中选择菜单项“File”→“New”,打开“New”对话框。

②在“New”对话框中选择“File”标签,单击“C++ Source File”选

项,建立源文件(扩展名为.cpp)。选中“Add to Project”复选框。

在右边的“File name”编辑框中为文件指定一个名字,如

“Hello”,系统将自动加上后缀“.cpp”。

这时在编辑窗口将自动打开一个新的空白文件,在文件中输入源程序。

本例中输入以下内容:

#include <>

void main()

{

cout<<〞hello,world!〞<

}

仔细检查输入的内容,确保内容正确。

(3)保存源文件

单击工具栏中的“save”图标,或选择菜单项“File”→“Save”保存源文件。

(4)编译源文件

选择菜单项“Build”→“Compile ”来编译源文件,如果输入的内容没有错误,那么,在屏幕下方的输出窗口将会显示:

error(s),0 warning(s)

如果在编译时得到错误或警告,则表明源文件出现错误,检查源文件,改正错误后再编译,直至无误。

(5)链接程序

选择菜单项“Build”→“Build ”链接程序,如果链接过程中没有错误,则在输出窗口会显示:

error(s),0 warning(s)

如果有错误,应改正,然后重复(4)、(5),直至无误。

(6)运行程序

选择菜单项“Build”→“Execute ”运行程序,将显示一个类似于DOS 的窗口,在窗口中第一行输出“hello,world!”,第二行输出“Press any key to continue”,提示用户按任意键回到开发环境。

3、编写一个简单的C++ 程序

要求:输入圆的半径,计算圆的周长和面积。

步骤:

(1)按照上面的步骤创建一个项目,名字为“Circle”。

(2)在项目中增加一个文件,命名为“”。

(3)在文件中输入源程序如下:

#include<>

const double PI = ; <

else

cout<

}

判断素数的算法,在以前学习循环的时候已经学过了,在这里只是把这个算法用函数的形式表示出来。这里要注意函数的定义声明的方法和格式。

2、分析程序的运行结果

输入下列程序,运行它,分析得到的结果。

#include<>

int n=0;

int func( int x=10 );

void main()

{

int a, b;

a=5;

b=func(a);

cout<<”\nlocal a=”<

<<”global n=”<

a++;

b=func(a);

cout<<”\nlocal a=”<

<<”global n=”<

func();

}

int func( int x )

{

int a=1;

static int b=10;

a++;

b++;

x++;

n++;

cout<<”\nlocal a=”<

<<”parameter x=”<

return a+b;

}

运行该程序,得到执行结果。分析得到的结果,说明为什么得到这样的结果。

3、递归函数与非递归函数。

编写一个函数,求从n个不同的数中取r个数的所有选择的个数。其个数值为:

n!

=

C r

n

r!*(n-r)!

其中:n!=n*(n-1)*(n-2)* (1)

要求:

(1)分别用递归和非递归两种方式完成程序设计;

(2)主程序中设计一个循环,不断从输入接收n和r的值,计算结果并输出,当用户输入0 0时,程序结束;

(3)能检查输入数据的合法性,要求n>=1并且n>=r;

(4)注意整数能存放的数据范围有限,如何解决

提示:

(1)可以用double数据类型来存放函数的计算结果。

(2)递归结束条件:

如果r=0,则C(n,r)=1;

如果r=1, 则C(n,r)=n。

测试数据:

输入:5 3

输出:10

输入:10 20

输出:Iput Invalid1

输入:50 3

输出:1.#IND

输入:0 0

Iput Invalid1

程序结束

思考问题:

(1)对各种数据类型的字长是否有了新的认识

(2)递归函数的书写要点是什么

(3)递归和非递归函数各有哪些好处

1、求两个整数的最大公约数和最小公倍数,用一个函数求最大公约数,用另一

个函数求最小公倍数。

(提示:可以用下面的方法求:

一、利用辗除法或其它方法求得最大公约数;

二、最小公倍数等于两数之积除以最大公约数。)

要求:

两个整数在主函数中输入,并传送给函数1,求出的最大公约数返回主函数,然后再和两个整数一起作为实参传递给函数2,以求出最小公倍数,再返回到主函数输出最大公约数和最小公倍数。

实验八结构和联合

一、实验目的

1、掌握结构体类型变量的定义和使用。

2、掌握结构数组的概念和使用。

3、掌握链表的概念,初步学会对链表进行操作。

4、掌握联合体的概念与应用。

二、试验内容与步骤

1、输入和运行以下程序。

#include<>

union data

{

short int s[2];

float a;

int b;

char c[4];

}u;

void main()

{

cin>>[0]>>[1];

cout<<"s[0]="<<[0]<<" s[1]="<<[1]<

<<"a="<<<<" b="<<<

<<"c[0]="<<[0]<<" c[1]="<<[1]<

<<"c[2]="<<[2]<<" c[3]="<<[3]<

}

输入两个整数10000、20000给[0]和[1],分析运行结果。

然后将cin语句改为: cin>>;输入60000给b,分析运行结果。

2、打印学生成绩单,内容包括学号、姓名、三门课(数学MT、英语EN、计算

机COMPU)的成绩。计算每个学生三门课程的总分SUM和平均分AVER。若三门课成绩都在90分以上者,输出“Y”;否则输出“N”,并打印学生成绩单,格式如下:

NUM NAME MT EN COMP SUM AVER >=90

9501 Liufan 95 98

Y

9502 Zhanghua 95 82 N 9503 Liming 68 89 85 242

N

输入以下程序并调试运行。

#include <>

struct student

{

int num;

char name[15];

float score[3];

float sum;

float aver;

char ch;

};

void main()

{

student stu[3];

int i,j;

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

{

cin>> stu[i].num;

cin>> stu[i].name;

for ( j=0; j<3; j++ )

cin>> stu[i].score[j];

}

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

{

stu[i].sum=0;

stu[i].ch='Y';

for ( j=0; j<3; j++ )

{

stu[i].sum +=stu[i].score[j];

if (stu[i].score[j]<90)

stu[i].ch='N';

}

stu[i].aver=stu[i].sum/3;

}

cout<<"NUM NAME MT EN COMP SUM

AVER >=90"<

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

{

cout<

setw(8)<

<

<

<< setw(5)<

}

}

3、设计一个单向链表。从标准输入读取若干整数,建立链表,每次读入的数放

入链表结尾。当用户输入0时,结束链表的建立工作。然后从前往后依次输出链表结点中的内容。

相关文档