带你读《C语言程序设计习题解析与上机指导》之二:Visual C++ 2010上机指南

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
简介: 本书首先介绍了计算机程序设计实验的一般方法以及在Visual C++ 2010下编写和调试C语言程序的具体步骤,然后对主教材各章后面的习题以及C语言程序设计课程学习中的疑难问题和常见问题进行了详细的解析,同时还汇总了各章的知识重点。在第三部分,精心设置了9个上机实验,每个实验项目都给出了实验目的和要求,并给出了编程示例和练习题目。读者可以通过由浅入深的实际训练,逐步熟悉编程环境,掌握程序调试方法,理解和掌握程序设计的思想、方法和技巧。

点击查看第一章
点击查看第三章

第2章Visual C++ 2010上机指南

2.1Visual C++ 2010概述

Visual Studio是微软公司推出的目前流行的Windows平台应用程序开发环境。Visual Studio 2010同时带来了 NET Framework 4.0,除了Microsoft SQL Server,它还支持IBM DB2和Oracle数据库。Visual Studio 可以用来创建Windows平台下的Windows应用程序和网络应用程序,也可以用来创建网络服务、智能设备应用程序和Office插件。
Visual C++ 2010 是Visual Studio 2010中的一个模块,是微软公司推出的目前使用极为广泛的基于Windows平台的可视化集成开发环境(IDE)。它包含文本编辑器、资源编辑器、工程编译器、源代码浏览器、集成调试等工具以及一套联机文档。使用Visual C++ 2010,可以完成创建、调试、修改C++应用程序等各种操作。
Visual C++ 2010提供面向对象技术的支持,它能够帮助使用MFC库的用户自动生成一个具有图形界面的应用程序框架。用户只需在该框架的适当部分添加、扩充代码就可以得到一个满意的应用程序。
Visual C++ 2010也作为C语言程序的常用的应用开发环境之一,C语言是C++的子集,C++是对C语言的扩展,包含了C语言的所有内容,Visual C++ 2010只有创建C++文件的选项,没有创建C语言文件的选项。但是这并不影响使用,我们在填写源文件名称时把后缀改为.c即可,编译器会根据源文件的后缀来判断代码的种类。
如果使用Visual C++ 2010编写大型的C语言应用程序,一般采用层次文件结构,如图2-1所示。
image.png
其中.sln类型的文件在Visual C++ 2010中是级别最高的,称为解决方案(solution)文件,一般与具体的应用系统相对应。在Visual C++ 2010中,应用程序是以工程(project,也称为项目)文件的形式存在的,文件的扩展名为.vcxproj。一个解决方案文件中可以包含多个工程文件,由解决方案文件对它们进行统一协调和管理。每个工程文件中包含若干头文件和源文件。头文件(.h)包含的主要是函数、数据类型的说明和符号常量的定义等内容;源文件(.c)为实现文件,该文件包含的主要是函数的实现代码。在程序结构层面,每个工程文件由很多函数组成,但必须且只能有一个主函数main()。

2.2建立C语言应用程序

利用Visual C++ 2010提供的控制台操作方式,可以建立C语言应用程序。Win32控制台程序(Win32 Console Application)是一类Windows程序,它不使用复杂的图形用户界面,程序与用户交互是通过一个标准的正文窗口。下面我们通过编写简单的C语言应用程序,初步介绍Visual C++ 2010的使用。

2.2.1安装和启动

运行Visual Studio 2010 Express软件中的setup.hta程序,选择安装Visual C++ 2010学习版,然后按照安装程序的指导完成安装过程。
安装完成后,在“开始”菜单的“程序”子菜单中有Microsoft Visual Studio 2010项,选择其中的Microsoft Visual C++ 2010 Express即可运行(也可在Windows桌面上建立一个快捷方式,双击即可运行)。
Visual C++ 2010默认安装完成后,为了在执行程序时出现“结果窗口”,需要进行手动设置。详细操作参考2.5节。

2.2.2创建项目

用Visual C++ 2010系统建立C语言应用程序,首先要创建一个项目,用来存放C程序的所有信息。创建一个项目的操作步骤如下:
1)进入Visual C++ 2010环境后,在上方菜单栏中选择“文件 → 新建 → 项目”命令(如图2-2所示),或者按下Ctrl+Shift+N组合键。
image.png
2)屏幕上出现如图2-3所示的“新建项目”对话框后,选择“Win32”模板,选择“Win32控制台应用程序”(如果你安装的是英文版,那么对应的项目类型是“Win32 Console Application”),填写好项目名称,选择好存储位置,单击“确定”按钮。
image.png
3)屏幕上出现如图2-4所示的向导,然后单击“下一步”按钮继续。
image.png
4)屏幕上出现如图2-5所示的Win32应用程序向导2,先取消“预编译头”,再勾选“空项目”,然后单击“完成”按钮就创建了一个新的项目。
image.png

2.2.3添加C源程序文件

添加一个C源程序文件的操作步骤如下:
1)选择主菜单“文件”中的“项目→添加新项”命令,或在解决方案资源管理器的“源文件”处右击鼠标,在弹出的菜单中选择“添加 → 新建项”(或者按下Ctrl+Shift+A组合键),如图2-6所示。
image.png
2)选定“C++ 文件(cpp)”项,在“名称”栏中填入新添加的源文件名,如“hello.c”,在“位置”栏中指定文件路径,选择存放在项目文件夹内可以不必输入,单击“添加”按钮,如图2-7所示。
注意:填入C源文件名一定要加上扩展名“.c”,否则系统会为文件添加默认的C++源文件,扩展名自动变成“.cpp”,编译器会根据源文件的后缀来判断代码的种类。
image.png
3)在文件编辑区输入源程序,如图2-8所示。
image.png

2.2.4编译、连接和运行

系统提供了一种快捷的方式,可以一键完成编译、连接、运行,有三种方法:
1)单击“生成”工具栏中的“开始执行(不调试)”图标;
2)单击菜单栏中的“调试”按钮,选择“开始执行(不调试)”命令;
3)按下Ctrl+F5组合键。
系统首先进行编译过程,输出窗口将显示编译过程中检查出的错误或警告信息,在错误信息处双击鼠标左键或单击鼠标右键再选“转到”命令,可以使输入焦点跳转到引起错误的源代码处大致位置以进行修改。如图2-9所示:输出窗口中提示“error C2143: 语法错误 : 缺少‘;’”,同时在程序窗口标注出出错语句的大致位置。在“printf("hello everybody!n")”的后面加一个分号后再编译一次即可。
image.png
如果程序没有语法错误,自动开始连接和运行,此时将会出现一个新的用户窗口,按照程序输入要求正确输入数据后,程序即正确执行,用户窗口显示运行的结果。
程序编译完成后生成的目标文件(.obj)、连接后生成的可执行文件(.exe)存放在当前项目所在文件夹的“Debug”子文件夹中。编译完成后,打开项目目录(d:c language myproject-1Debug)文件夹,会看到经过编译产生的目标文件(Object File)hello.obj、最终生成的可执行文件myproject-1.exe。

2.3编辑C语言应用程序

2.3.1打开项目/解决方案

选择主菜单“文件→打开→项目/解决方案”命令,在“打开项目”对话框中找到并选择要打开的项目/解决方案文件“MyProject-1.sln”,单击“确定”按钮,打开后,在左侧的“解决方案资源管理器”窗口,打开要编辑的C源程序进行编辑和修改,如图2-10所示。
image.png

2.3.2在项目中添加已经存在的文件

首先选中项目名,然后单击鼠标右键,在弹出的快捷菜单中单击“添加 → 现有项”命令,或者单击选择主菜单“项目 → 添加现有项”命令,在“打开项目”对话框中找到已经存在的C源程序文件,单击“添加”按钮完成添加,如图2-11所示。

2.3.3在解决方案中添加新项目

首先在解决方案管理器内选择解决方案名,单击鼠标右键,在弹出的快捷菜单中单击“添加 → 新建项目”命令,在“添加新项目”对话框中选择“Win32控制台应用程序”,选择位置,填写项目名,单击“确定”按钮完成添加,如图2-12所示。
image.png
image.png

2.3.4设置启动项目

如果一个解决方案中有多个项目,只能有一个是当前活动项目,该项目当前正在编译运行,需要设置成为启动项目。方法是在解决方案管理器内选中该项目,单击鼠标右键激活快捷菜单,选择“设为启动项目”命令,如图2-13所示。
image.png

2.4调试程序

在编写较长的程序时,能够一次成功绝非易事。对于程序中的错误,系统提供了易用且有效的调试手段。调试是一个程序员最基本的技能,这里我们介绍一些初级的调试方法。

2.4.1调试程序环境介绍

  1. 进入调试程序环境
    选择“调试”主菜单中提供的调试命令,或者在菜单区空白处单击鼠标右键,在弹出的菜单中选中“调试”项激活调试工具条,选择需要的调试命令,系统将会进入调试程序界面,同时提供多种窗口监视程序运行,如图2-14所示。
  2. 监视窗口
    单击底部的“监视1”按钮,或把光标移动到“监视1”按钮上,下方出现一个观察窗口。

系统支持查看程序运行到当前指令语句时变量、表达式和内存的值。所有这些观察都必须在中断的情况下进行。
在该窗口中输入变量或者表达式,就可以观察变量或者表达式的值。注意:表达式不能有副作用,例如“++”和“--”运算符绝对禁止用于表达式中,因为这两个运算符将修改变量的值,导致程序的逻辑被破坏。
还可以在调试状态下单击鼠标右键,选择“快速监视”命令,弹出一个对话框,来观看变量和计算表达式的值。
image.png

  1. “局部变量”窗口
    单击底部的“局部变量”按钮,或把光标移动到“局部变量”按钮上,下方出现一个观察窗口,显示当前窗口所有可见的变量的值,特别是当前指令语句涉及的变量值,以红色显示。
  2. 自动窗口
    单击底部的“自动窗口”按钮,或把光标移动到“局部变量”按钮上,下方出现一个观察窗口,显示所有当前执行的上下文中可见的变量的值,特别是当前指令语句涉及的变量值,以红色显示。

2.4.2单步执行

系统提供了多种单步执行调试程序的方法:可以通过单击调试工具条上的按钮或按快捷键的方式选择多种单步执行命令。表2-1中列出了常用的调试命令。
1)单步跟踪进入子函数(逐语句,F11),每按一次F11快捷键或单击调试工具条上的按钮,程序执行一条无法再进行分解的程序行,如果涉及子函数,进入子函数内部。
2)单步跟踪跳过子函数(逐过程,F10),每按一次F10快捷键或单击调试工具条上的按钮,程序执行一行;监视窗口可以显示变量名及其当前值,在单步执行的过程中,可以在监视窗口中加入所需观察的变量,辅助进行监视,以便随时了解变量当前的情况,如果涉及子函数,不进入子函数内部。
image.png
3)单步跟踪跳出子函数(跳出,Shift+F11),按Shift+F11组合键或单击调试工具条上的按钮后,程序运行至当前函数的末尾,然后从当前子函数跳到上一级主调函数。
4)悬停鼠标查看表达式值。观看变量的值的最简单方法,是把光标移动到变量上,停留一会儿就可以看到变量的值。

2.4.3设置断点调试程序

对于较大规模程序的跟踪,断点是最常用的技巧。断点是调试器设置的一个代码位置,当程序运行到断点时,程序中断执行,回到调试器。调试时只有设置了断点并使程序回到调试器,才能对程序进行在线调试。如图2-15所示。
image.png

  1. 设置断点的方法
    可以通过下述方法设置一个断点:首先把光标移动到需要设置断点的代码行上,然后按F9快捷键,断点处所在的程序行的左侧会出现一个红色圆点;把光标移动到需要设置断点的代码行的左边框上然后单击鼠标左键,断点处所在的程序行的左侧也会出现一个红色圆点;用右键菜单的“插入断点”命令。如图2-15和表2-1所示。

系统提供了多种类型的断点:
条件断点:可以为断点设置一个条件,这样的断点称为条件断点。对于新加的断点,可以单击“条件”按钮,为断点设置一个表达式。当这个表达式的值发生改变时,程序就被中断。
数据断点:数据断点只能在“断点”对话框中设置。在编辑框中输入一个表达式,当这个表达式的值发生变化时,到达数据断点。一般情况下,这个表达式应该由运算符和全局变量构成。

  1. 程序运行到断点
    选择主菜单“调试”中的“启动调试”或按F10快捷键,程序执行到第一个断点处后将暂停执行,该断点处所在的程序行的左侧红色圆点上会添加一个黄色箭头,此时,用户可方便地进行变量观察。继续执行该命令,程序运行到下一个相邻的断点。如图2-15所示。
  2. 取消断点
    只需在代码处再次按F9键,或者把光标移动到需要取消断点的代码行的左边框上然后单击鼠标左键,或者打开“断点”对话框后按照界面提示去掉断点。
  3. 结束程序调试,返回程序编辑环境
    选择主菜单“调试”中的“停止调试”命令,或者单击调试工具条上的按钮,或者按Shift+F5组合键,都可结束程序调试,返回程序编辑环境。

2.5修改用户界面设置

Visual C++ 2010默认安装完成后,为了在执行程序时出现结果窗口,需要进行如下设置:
单击菜单栏上的“视图”命令,在下拉菜单中选择“工具栏”命令,在级联菜单中选择“生成”选项。如图2-16所示。
此时将在工具栏中出现“生成”工具栏,可拖动该工具栏上的移动条改变其位置。如图2-17所示。
用鼠标指向“生成”工具栏右下角的箭头图标,出现“生成”工具栏选项的提示。单击该箭头图标,出现“添加或移除按钮”项,在级联菜单中选择“自定义”选项。如图2-18所示。
image.png
image.png
image.png
出现“自定义”对话框,在“命令”选项卡中单击“添加命令”按钮。出现“添加命令”对话框。如图2-19所示。
选择“开始执行(不调试)”命令,单击“确定”按钮,在“生成”工具栏中会出现“开始执行(不调试)”命令按钮。
在运行程序时,单击该按钮,程序执行后会出现结果窗口。
image.png

2.6有关联机帮助

Visual C++ 2010提供了详细的帮助信息,用户通过选择“帮助”菜单下的“帮助目录”命令就可以进入帮助系统。在源文件编辑器中把光标定位在一个需要查询的单词处,然后按F1键也可以进入Visual C++ 2010的帮助系统。
此外,在编程的过程中,将光标移至函数名的上面,系统会自动提供该函数的原型说明。

相关文章
|
2天前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
1月前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
144 77
|
2天前
|
安全 编译器 C语言
【C++篇】深度解析类与对象(中)
在上一篇博客中,我们学习了C++类与对象的基础内容。这一次,我们将深入探讨C++类的关键特性,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载、以及取地址运算符的重载。这些内容是理解面向对象编程的关键,也帮助我们更好地掌握C++内存管理的细节和编码的高级技巧。
|
2天前
|
存储 程序员 C语言
【C++篇】深度解析类与对象(上)
在C++中,类和对象是面向对象编程的基础组成部分。通过类,程序员可以对现实世界的实体进行模拟和抽象。类的基本概念包括成员变量、成员函数、访问控制等。本篇博客将介绍C++类与对象的基础知识,为后续学习打下良好的基础。
|
1月前
|
存储 C语言
【C语言程序设计——函数】递归求斐波那契数列的前n项(头歌实践教学平台习题)【合集】
本关任务是编写递归函数求斐波那契数列的前n项。主要内容包括: 1. **递归的概念**:递归是一种函数直接或间接调用自身的编程技巧,通过“俄罗斯套娃”的方式解决问题。 2. **边界条件的确定**:边界条件是递归停止的条件,确保递归不会无限进行。例如,计算阶乘时,当n为0或1时返回1。 3. **循环控制与跳转语句**:介绍`for`、`while`循环及`break`、`continue`语句的使用方法。 编程要求是在右侧编辑器Begin--End之间补充代码,测试输入分别为3和5,预期输出为斐波那契数列的前几项。通关代码已给出,需确保正确实现递归逻辑并处理好边界条件,以避免栈溢出或结果
66 16
|
1月前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
70 19
|
1月前
|
算法 C语言
【C语言程序设计——循环程序设计】求解最大公约数(头歌实践教学平台习题)【合集】
采用欧几里得算法(EuclideanAlgorithm)求解两个正整数的最大公约数。的最大公约数,然后检查最大公约数是否大于1。如果是,就返回1,表示。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。作为新的参数传递进去。这个递归过程会不断进行,直到。有除1以外的公约数;变为0,此时就找到了最大公约数。开始你的任务吧,祝你成功!是否为0,如果是,那么。就是最大公约数,直接返回。
80 18
|
1月前
|
Serverless C语言
【C语言程序设计——循环程序设计】利用循环求数值 x 的平方根(头歌实践教学平台习题)【合集】
根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码,求解出数值x的平方根;运用迭代公式,编写一个循环程序,求解出数值x的平方根。注意:不能直接用平方根公式/函数求解本题!开始你的任务吧,祝你成功!​ 相关知识 求平方根的迭代公式 绝对值函数fabs() 循环语句 一、求平方根的迭代公式 1.原理 在C语言中,求一个数的平方根可以使用牛顿迭代法。对于方程(为要求平方根的数),设是的第n次近似值,牛顿迭代公式为。 其基本思想是从一个初始近似值开始,通过不断迭代这个公式,使得越来越接近。
59 18
|
1月前
|
存储 人工智能 算法
【C++数据结构——图】最短路径(头歌教学实验平台习题) 【合集】
任务描述 本关任务:编写一个程序,利用Dijkstra算法,实现带权有向图的最短路径。 相关知识 为了完成本关任务,你需要掌握:Dijkst本关任务:编写一个程序,利用Dijkstra算法,实现带权有向图的最短路径。为了完成本关任务,你需要掌握:Dijkstra算法。带权有向图:该图对应的二维数组如下所示:Dijkstra算法:Dijkstra算法是指给定一个带权有向图G与源点v,求从v到G中其他顶点的最短路径。Dijkstra算法的具体步骤如下:(1)初始时,S只包含源点,即S={v},v的距离为0。
63 15
|
1月前
|
C语言
【C语言程序设计——循环程序设计】统计海军鸣放礼炮声数量(头歌实践教学平台习题)【合集】
有A、B、C三艘军舰同时开始鸣放礼炮各21响。已知A舰每隔5秒1次,B舰每隔6秒放1次,C舰每隔7秒放1次。编程计算观众总共听到几次礼炮声。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。开始你的任务吧,祝你成功!
57 13

热门文章

最新文章

推荐镜像

更多