C++ 程序设计课程
实验指导书
新疆农业大学计算机与信息工程学院
2007年7月
第二版
实验一Visual C++6.0环境介绍
一、实验目的
●熟悉Visual C++6.0环境
●熟悉C++程序结构
●培养合理书写、编辑C++程序的习惯
●掌握C++程序的编辑、编译和运行过程
二、实验前的必要预习
在上第一个实验课之前,请认真回答以下的问题,通过回答这些问题,进一步熟悉C++程序的结构,加深和巩固对理论课内容的理解。
完成以下的配对练习,从右栏中找出对左栏术语的正确解释,并将二者用直线连接,如示例所示:
术语解释
< = 主函数、C++程序开始执行的地方 >> 转义字符 main 头文件的扩展名 ;文件包含预处理命令 .cpp 赋值运算符 # include C++源文件扩展名 .h 输出操作由此操作符表达 \ 输入操作由此操作符表达 << 一个C++语句的结束标示 Visual C++6.0 表示函数没有返回值 void 表示输出一个回车符 三、实验内容 C++程序的编辑、编译和运行任何一个c++程序,都必须先经过编辑和编译的过程,最后生成可执行的代码后才能够运行。 1. 编辑 编辑是将编写好的C++源程序输入到计算机中,生成磁盘文件的过程。 C++程序的编辑可以使用计算机软件所提供的某种编辑器进行编辑。将C++程序的源代码录入到磁盘文件中,磁盘文件的名字要用扩展名.cpp。 2. 编译 C++是以编译方式实现的高级语言。C++程序的实现,必须要使用某种C++语言的编译器对程序进行编译。 编译器的功能是将程序的源代码(.cpp)转换成为机器代码的形式,称为目标代码(.obi);然后,再使目标代码进行连接,生成可执行文件(.exe),等待下一步的执行过程。 详细分析编译过程又可分为三个子过程。 1) 预处理过程 源程序经过编译时,先进行预处理过程,如果源程序中有预处理命令,则先执行这些预 处理命令,执行后再进行下面的编译过程。可见,预处理命令是最先执行的。如果程序中没有预处理命令,就直接进行下面的编译过程。 2) 编译过程 编译过程主要是进行词法分析和语法分析的过程,又称源程序分析。这阶段基本上与机器硬件无关,主要进行的是对程序的语法结构的分析。分析过程中,发现有不符合要求的语法错误,及时报告给用户,显示在屏幕上。在这个过程中还要生成一个符号表。最终 生成目标代码程序,完成编译阶段的任务。 3) 连接过程 这是编译的最后一个过程。编译后的目标代码文件还不能由计算机直接执行。其主要原因是编译器对每个源文件分别进行编译,如果一个程序有多个源文件,编译后这些源文件的目标代码文件还分布在不同的地方,因此需要把它们连接到一块。即使该程序只有一个源文件,这个源文件生成的目标代码文件还需要系统提供的库文件中的一些代码,因此,也需要把它们连接起来。总之,基于上述原因,将用户程序生成的多个目标代码文件和系统提供库文件中某些代码连接在一起还是十分必要的。这种连接工作由编译系统中的连接程序(又称连接器)来完成。连接器将由编译器生成的目标代码文件和库中的某些文件连接处理,生成一个可执行文件,存储这个可执行文件的扩展名为.exe,因此,有人又称它为exe文件。库文件的扩展名为.1ib。 3. 运行 一个C++的源程序经过编译和连接后生成了可执行文件。运行可执行文件的方法很多,一般在编译系统下有运行功能,通过选择菜单项便可实现。 程序被运行后,一般在屏幕上显示出运行结果。用户可以根据运行结果来判断程序是否有算法的错误。一个程序编好后,在生成可执行文件之前需要改正编译和连接时出现的一切致命错和警告错,这样才可能生成无错的可执行文件。在程序中存在警告错时,也会生成可执行文件,但是一般要求改正警告错后再去运行可执行文件。有的警告错会造成结果的错误。 使用V isual C++6.0版本编译系统编辑C++源程序、编译C++程序和运行C++程序以获得结果的过程如下: (1)编辑C++源程序 启动V isualC什6.0编译系统后,出现Visual C++6.0的主窗口,该窗口的菜单栏中有如下9个菜单项: File 实现与文件有关的所有操作,如打开、关闭、打印等。 Edit 实现编辑操作,如复制、剪切、粘贴、查找和移动等。 V iew 修改显示状态,包括工具栏以及像Workspace窗口之类的子窗口等。 Insert 用于在工程中增加文件或组件。 Proiect 用于控制整个工程。 Build 用于编译、连接和调试等。 Tools 用于定制VC抖6.0的工具以及访问其他一些工具。 Window 用于改变窗口大小及焦点状态。Help 使用MSDN库及其他帮助。 编辑c++源程序时,选择File菜单项,出现一个下拉式菜单,再选择该菜单中的New 选项(热键为Ctrl+N),这时又出现一个“New”对话框。该框中有4个选项卡,选择“Files”选项卡,在它的列表框中,选择“C++Source File”(C++源文件)列表项,在屏幕右边的File 文本框中输入文件名,如“abc”,在Location文本框中指定该文件所在的位置,如“e:\vc”,然后单击“OK”按钮出现编辑屏幕。 在编辑屏幕上,可以键入C++的源程序。例如,键入以下名字为abc.cpp的C++源程序。 #include void main(){ cout<< "新的一学期开始了!" < } 该程序由一个main()主函数组成。选择File菜单,在File的下拉式菜单中选择Save菜单,保存到abc.cpp文件中。 (2)编译连接和运行源程序这里分单文件程序和多文件程序两种情况进行讲述; ·单文件程序 单文件程序是指该程序只有一个文件,前面输入的例子程序就是一个单文件程序。选择菜单项Build,出现Build的下拉式菜单,在该下拉式菜单中选择“compileabc.cpp”菜单项,这时系统开始对当前的源程序进行编译,在编译过程中,将所发现的错误显示在屏幕下方的“Build”窗口中。所显示的错误信息中指出该错误所在的行号和该错误的性质。用户可根据这些错误信息进行修改。当你用鼠标双击错误信息行时,该错误信息对应的行将高亮显示,或在该行前面用一个箭头加以指示。在修改时采用全屏幕编辑方式根据提示信息中指出的错误性质进行更改。往往因为一个错误而出现多行错误信息,因此,常常在修改一条错误后,再重新编译,如果有错误,再继续修改,直到没有错误为止。在没有错误时,显示错误信息的窗口内将显示如下信息: abcl.obj—0 error(s),0 warning(s) 编译无错后,自动进行连接,并生成以源文件名为名字的可执行文件(.exe)。 执行可执行文件的方法是选择“Build”菜单项中“Execute abc.exe”选项。这时,运行该可执行文件,并将结果显示在另外一个显示执行文件输出结果的窗口中。执行上述程序的可执行文件后,在屏幕上显示出如下结果。按任意键后,屏幕恢复显示源程序窗口。 ·多文件程序 多文件程序是指该程序由两个(或两个以上)文件组成。下面将以一个具体例子来说明编译连接和运行这种程序的方法。 abcl.cpp文件的内容如下: #include int maxint(int,int); void main() { int a,b,c; a=20;b=30; c=maxint(a;b); cout << a << “和”<< b << “和为:”<< c << endl; } abc2.cpp文件的内容如下: int maxint(int x,int y) { return x+y; } 该程序由两个文件abcl.cpp和abc2.cpp组成,每个文件的编辑方法与前面单文件程序的编辑方法相同。编译这种程序的方法如下: ①在某个指定目录(如e:\vc)下建立好这两个C++的源文件。 ②创建一个新的工程文件(chl),方法是选择菜单栏中的File菜单项,出现一个下拉 式菜单,再选择该菜单中的New选项(热键为Ctrl+N),这时又出现一个“New” 对话框。该框中有4个选项卡,选择“Projects”选项卡,在它的列表框中,选择 “Win32Console Application'’列表项,在屏幕右边的Projectname文本框中输入工 程名,如“chi”,在Location文本框中指定该文件所在的位置,如“e:\vc”,然 后单击“OK”按钮,则创建了chl工程。 ③将程序文件添加到工程中。选择菜单栏中菜单项“Project”,在它的下拉式菜单中 选取“Addtoproject”菜单项,再在它的下拉式菜单中选取“Files'’菜单项,出现 一个“搜寻”对话框,在其中选择文件abcl.cpp,单击“打开”按钮,将该文件添加到chl工程中。采用同样的步骤将abc2.cpp添加到chl工程中。这样就完整地建立了chl工程文件。 ④编译连接工程文件。选取菜单栏中Build菜单项,在该菜单项的下拉式菜单中,再 选择“Buildchl.exe”菜单项。这时便对工程文件中所添加的C++源文件进行编译 和连接。如果发现有错误,将在显示错误信息的窗口中显示出错误信息,根据错误信息行的内容对源程序中出现的错误进行修改,直到没有错误信息为止,这时生成了可执行文件,其名字是工程文件名。 ⑤运行工程文件。经过前面4步后,生成了以工程文件名为名字的可执行文件。执行 该文件的方法是选择菜单栏中“Build”菜单项,在该菜单项的下拉式菜单中选择 “E,(ecutechl.exe”选项。这时执行该文件并将输出结果显示在另一个窗口中。该程序执行后输出。 四、实验练习 1. 模仿练习 编写程序显示字符串“新疆农业大学” 2. 调试练习 以下程序不能够正确编译,找出所有错误并改正,使它能够正确编译,正确执行,显示结果。 1) # include void main(){ int i=125 cout<<”i=”<<125< } 2)正确的输出 3)错误的程序 3. 编程练习 编写程序输出如下图所示图形 实验二数据类型、运算符与表达式 一、实验目的 ●理解C++标识符、关键字、字符集概念 ●掌握C++基本数据类型的定义、不同数据类型之间的转换机制。 ●掌握C++常量的定义和性质。 ●掌握C++变量命名规则,学会变量的定义和使用。 ●了解运算符的使用规则,掌握和使用几种C++运算符和表达式。 二、实验前的必要预习 在上实验课之前,请认真回答以下的问题,通过回答这些问题要求做到: ?进一步熟悉和理解C++标识符、关键字、字符集概念。 ?掌握C++基本数据类型的定义、不同数据类型之间的转换机制。 ?掌握C++常量的定义和性质。 ?掌握C++变量的定义。 ?掌握和使用C++各种运算符和表达式。,加深和巩固对理论课内容的理解。 完成以下的配对练习,从右栏中找出对左栏术语的正确解释,并将二者用直线连接,如示例所示: 术语解释 double 程序运行过程中其值不发生变化的量 % 浮点型 int 字符型 / 加法 * 求余 float 双精度型 char 自加 变量除法 long 整型 ‘\n' 逻辑非 && 自减 ++ 逻辑与 || 换行符 _ _ 乘法 != 长整型 常量逻辑或 + 程序运行过程中其值可以改变的量 三、实验内容 1. 编写一个程序测试整型、字符型数据表示,并输出以验证是否正确。(要求该文件保存在以自己的名字的拼音简写为文件夹名文件夹中。) # include void main(){ int x=010,y=10,z=0x10; /* 整型数据表示*/ char c1='M',c2='\x4d',c3='\115',c4=77,c; /* 字符型数据表示*/ cout<<"x="< < < < < < < cout< cout< cout< } 您分析的表达式结果:。 参考结果: 000000000m 00000000m 0000000m 000000m 00000m 0000m 000m 00m 0m m 2. I/O流的概念 什么是流? C++中把数据之间的传输操作称作流。在C++中,流既可以表示数据从内存传送到某个载体或设备中,即输出流;也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流。在进行I/O操作时,首先打开操作,使流和文件发生联系,建立联系后的文件才允许数据流入或流出,输入或输出结束后,使用关闭操作使文件与流断开联系。 C++的流通过运算符“<<”和“>>”执行输入和输出操作。输出操作是向流中插入一个字符序列,因此,在流操作中,将运算符“<<”称为插入运算符。输出操作是从流中提取一个字符序列,因此,将运算符“>>”称为提取运算符。 (1). cout cout是与标准输出设备连接的预定义输出流,称为汇。C++的插入运算符“<<”向输出流发送字符。实际上,位于插入运算符右侧的字符串被存储在“<<”左侧的流中。例如::cout < cout是数据的目的地,插入运算符“<<”把对象或文字数据(字符串、数字或任何对象)传送到cout。cout一般连接到标准输出设备即显示器(默认设备)。 (2). cin cin是与标准输入设备连接的预定义输入流,称为源。它从输入流中取出数据,数据从输入提取运算符“>>”处流进程序。为了保留输入数据,输入语句要求有目的地址,即指定数据类型的存储单元,例如:int i; cin >> i; 这段代码所进行的操作是:提取运算符“>>”从cin参数中提取一个整型输入数据,并存入一个对象(变量),即为整型数i。cin一般连接到标准输入设备即键盘(默认设备)。 3. C++的输入和输出 例1: # include void main() { cout <<"新学期开学啦!\n"; cout <<"this is a C++ program."; cout <<2; cout <<50*10; } 例2: #include void main(void) { cout<<"Hello!\n"; cout<<"Welcome to c++!\n"; } 例3: # include void main() { cout <<"新学期开学啦!" <<"this is a C++ program." <<2 <<50*10; } 4. 流操纵算子 C++针对流也提供了丰富的用于实现格式化输入输出的流操纵算子。通过这些流操纵算子,可以实现许多格式控制功能,如设置域宽、设置精度、设置和清除格式化标志、设置域填充字符、在输出流中插入空字符、跳过输人流中的空白字符等。流操纵算子的使用非常方便,直接用于流插入运算符之后,即可发生作用,直到遇到新的流操纵算子为止。(1)输出8进制和16进制数 常用控制符是在iostream.h头文件中定义的控制符: 十六进制hex 八进制oct 十进制dec 例1: # include # include void main(){ int a=1001; cout <<"1.dec:"< cout <<"2.hex:"< cout <<"3.oct:"< } (2)设置值的输出宽度 可以用setw(n)控制符设置数值输出宽度。例如设置填充字符setfill控制符可以确定一个非空格的别的字符。 例1: # include # include void main(){ cout< < < < cout< } (3)控制浮点数值显示(精度) 例1: # include # include double a=8.4321445678; cout <<"this is a C++ program"; cout < cout < cout < cout < cout < cout < (4)强制显示小数点和符号 例1: # include # include void main(){ int a=1001; cout <<10.0/5< cout < cout < (5)使用width控制输出宽度 例1: #include void main() { double a[] = {1.23,35.36,653.7,4358.24}; for(int i=0;i<4;i++) { cout.width(10); cout << a[i] < } } 输出结果是: 1.23 35.36 653.7 4358.24 例2: #include void main() { double a[] = {1.23,35.36,653.7,4358.24}; for(int i=0; i<4; i++) { cout.width(10); cout.fill('*'); cout << a[i]<< endl; } } 输出结果如下: ******1.23 *****35.36 *****653.7 ***4358.24 实验四顺序结构 一、实验目的 ●掌握顺序结构 ●进一步学习掌握运算符的使用规则 ●进一步学习掌握变量命名规则,学会变量的定义和使用 ●进一步学习熟悉和理解C++语言中的类型简单数据(整型、实型、字符型)、 运算、表达式 二、实验前的必要预习 在上实验课之前,请认真回答以下的问题,通过回答这些问题,进一步熟悉C++程序的语句,掌握顺序结构程序设计方法,加深和巩固对理论课内容的理解。 完成以下的配对练习,从右栏中找出对左栏术语的正确解释,并将二者用直线连接,如示例所示: 术语解释 t=18; 定义两个整型变量语句2*(x+y); 逻辑表达式语句c=a*b,c--; 条件表达式语句x++; 输入语句z=a<=b?a:b; 赋值语句x>0&&x<10; 变量自加语句 cout<< x; 逗号表达式语句 cin>>y; 输出语句 int x,y; 算术表达式语句 二、实验内容 1.输入并运行下列程序 (1)#include void main() { int x=6, y ; cout<<" x= "< y = ++x ; cout<<"x= "<