声明:
《零基础学Qt4编程》中的专栏文章是qter_wd007的原创技术文章。
本系列专栏文章可随意转载,但必须保留本段声明和每一篇文章的原始地址。
作者保留版权,未经作者预先书面许可,不得用于任何商业用途。否则相关的法律责任请自付。

实例说明:

本例将编写一个实现直角三角形斜边的程序,在这过程中需要进行开平方运算,通过调用C++标准库自带的函数可以实现该功能。通过学习这个例子,读者可以掌握C++语言中文件包含语句的使用以及如何使用标准类库中提供的函数。这个控制台程序是在Qt Creator中完成的。

我们将给出两个完整的代码,分别使用C库和C++库来实现,我们也会为大家分析两者的不同,请读者细心体会。

文件包含语句的工作原理:

几乎每一个程序的开头都会看到这样的语句,即文件包含指令:

#include “文件名”

或者是:

#include<文件名>

编译器遇到文件包含指令时,把指令所指文件的全部内容包含到应用程序中,替代这条文件包含指令,并作为源程序的一部分。

实例讲解:

1.文件包含指令

#include<文件名>形式指定的文件是由系统提供的标准类库文件。如果安装了Microsoft的Visual Studio,则一般的C++类库文件都放在Microsoft Visual Studio的主目录”VC/Include/”下(Visual Studio 6.0则是在VC98/Include下),Qt 4的类库文件都放在Qt 4的主目录”C:/Qt/4.5.0/include”(以我安装的Qt 4.5.0版,采用默认安装SDK方法为例。读者的实际情况请对应查找验证路径)下。编译器会在默认目录下搜索文件包含指令中指定的文件。

#include “文件名”这种形式一般用于包含用户自己编写的文件。编译程序先在当前目录中查找包含文件,如找不到,再在上面列出的两个缺省目录中查找。建议统一采用这种形式来处理文件包含指令。

2.编写勾三股四弦必五程序

下面举一个使用数学函数的例子来说明这个问题。该程序实现直角三角形斜边求取的功能,其中需要用到开平方的操作。无论是计算机还是人,精确的开平方运算都是一项很困难的工作,C++的数学函数库中提供了开平方操作的函数:

double sqrt(double x);

使用它之前需要在文件的开始处加入文件包含语句:

#include “math.h”

然后就可以在文件的任何位置使用这个函数。printf和scanf函数的声明则包含在标准输入输出类库头文件stdio.h中。

3.操作步骤

按照实例1的步骤创建一个基于控制台的工程gou3gu4xian5。

第1步,创建项目

选择菜单“File->New...”,弹出新建(New)对话框,如图1所示。

图1 创建控制台类型的应用程序

在其中选择【Projects->Qt4 Console Application】,创建一个控制台类型的应用程序,然后点击【OK】按钮,进入下一步设置。

第2步,设置工程名称和路径

如图2所示,首先通过点击【Browse...】按钮来选择工程文件的存放位置,然后再在【Name:】文本框中输入工程的名称,我们这里是gou3gu4xian5。设置完成后,点击【Next】按钮进入下一步设置。

图2 设置应用程序的保存位置和名称

第3步,选择要包含的Qt4模块

如图3所示,在【选择需要包含的模块(Select required modules)】对话框中,通过勾选各个模块前面的复选框来选中它们,我们这里是简单的控制台程序,只需选中默认的【QtCore Module】即可,然后点击【Next】按钮进入下一步设置。

图3 选择需要包含的模块

小贴士:在Qt Creator中如何回到上一步再重新设置

如果对上一步的设置不满意,怎样回到上一步的设置呢?有同学可能回苦恼,Qt Creator的向导式设置页面中并没有提供这样的按钮啊。其实是有的,只不过它并不在我们习惯的右下角,而是在对话框的左上角,有一个左右箭头的图标,当可以回到上一步再进行设置时,它会显示为明亮的蓝色,如图4所示。

图4页面导航按钮

第4步,完成创建

如图5所示,Qt Creator根据前面我们提供的信息,给出了该工程的摘要,我们确认无误后,点击【Finish】按钮,完成工程的创建。

图5 完成工程的创建

这时,Qt Creator会把创建完成的工程展现在我们面前,如图6所示,工程中包含了一个.pro文件和一个main.cpp文件。

图6 创建好的工程浏览

第5步,书写程序代码

我们在Qt Creator的代码编辑器中完成代码的编写。这个程序主要是对main()主函数的修改,在Projects边栏中双击main.cpp,在右边的代码编辑器中输入以下的代码:

#include <QtCore/QCoreApplication>
#include "stdio.h"
#include "math.h"
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
float a = 0.0;
float b = 0.0;
float c = 0.0;
printf(" |///n");
printf(" | // c/n");
printf(" a| ///n");
printf(" |___///n");
printf(" b/n");
printf("请输入直角边边长a:/n");
scanf("%f",&a);
printf("请输入另一条直角边边长b:/n");
scanf("%f",&b);
c = sqrt(a*a + b*b);
printf("斜边边长为:%f /n",c);
//system("pause");
return app.exec();
}

完成编辑后,按下Ctrl+Shift+S键,保存工程后的情形如图7所示。

图7 完成代码编辑后的情形

第6步,编译运行程序

编译(Ctrl+B)运行(Ctrl+R)程序,得到程序运行的结果如图8所示:

图8 程序运行结果

说明:C++标准类库包含了大量的应用函数,程序员必须知道如何查找和利用这些类库资源。这里给出一些常用的类库的头文件,如表1所示。

表1 常用类库函数头文件及其内容

头文件名

包含函数的主要功能

conio.h

文本处理、输入输出函数等

dir.h

目录处理

float.h

定义float、double、long double等类型的属性

iostream.h

输入输出流相关操作

malloc.h

内存操作

math.h

数学函数、相关的宏和类型

stdio.h

标准输入输出函数

stdlib.h

整数运算、字符转换、内存管理等

string.h

字符串处理

time.h

与时间相关的操作

windows.h

windows应用程序所需的数据类型和数据结构定义

下面是我们使用C++习惯来编写的程序代码,main.cpp文件内容如下:

#include <QtCore/QCoreApplication>
//#include "stdio.h"
#include "iostream.h"
#include "math.h"
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
float a = 0.0;
float b = 0.0;
float c = 0.0;
cout << " |///n";
cout << " | // c/n";
cout << " a| ///n";
cout << " |___///n";
cout << " b/n";
cout << "请输入直角边边长a:/n";
cin >> a;
cout<< "请输入另一条直角边边长b:/n";
cin >> b;
c = sqrt(a*a + b*b);
cout << "斜边边长为:/n",c;
//system("pause");
return app.exec();
}

熟悉C语言的读者不难看出,用C++编写的程序和用C编写的程序在程序结构上是基本相同的,都是以main()函数作为程序的入口,两者都是以一对{}把函数中的语句括起来,而且两者都是以分号作为语句的结束标志。但是,两者也有一些不同之处,C++中是以iostream.h文件作为标准输入输出头文件,C中则是以stdio.h作为标准输入输出头文件;C++中采用符号“<<”作为标准输出,而不是通过printf函数来实现。

为了进一步理解文件包含的概念,我们将a、b、c、三个变量的定义放到另一文件中,并用文件包含指令将其加入main.cpp中。选择菜单“File->New”,在弹出的【New】对话框中选择“C++->C++ Header File”,如图9所示。

图9 新建一个C++头文件

在接下来弹出的【Choose the location】对话框中输入文件名"var.h",保存位置选择默认即可,如图10所示。

图10 为新文件命名并确定其位置

将原来main.cpp中的变量声明语句

float a = 0.0;
float b = 0.0;
float c = 0.0;

放入到var.h文件中,将该段语句在main.cpp中删除,并在main.cpp前面加入文件包含指令:

#include "var.h"

再次编译运行程序,可以得到和步骤中相同的运行效果。这里不再赘述,请读者自行完成。

注意:这里为了演示类库包含语句的使用,才选择了将变量定义放在C++头文件中的,但读者要知道,这并不是推荐的做法。

本节重点回顾:

C++语言是一种支持模块化的语言,编译器编译应用程序使用到的模块,这样能大大提高编译效率,生成的应用程序也相对比较小。

模块化最大的好处是源代码的重复利用。Qt 4中包含了可视化程序需要的大部分框架,程序员可以根据需要选择程序的框架结构,而省去了大量重复性的代码编写工作。模块化给程序员开发带来了巨大的方便,程序员可以根据需要编写自己需要的类库文件,在多个程序中可以以包含文件的形式进行调用;程序员也可以将一个大型的程序划分为功能相对独立的多个部分,对各个部分分别进行编写调试,最后再用文件包含指令将所有的文件整合成一个大的程序,由此也产生了工程(Project)的概念。顺带提一句,在光鲜的Qt Creator的后面,Qt 4是在用.pro文件管理工程设置等信息。

事实上,C++语言和C语言两者之间既有紧密的联系,又各有自己的特点。在以后的章节中,我们将会为大家讲解C++的基础知识,这部分内容里面,C++和C语言有很多是一致的。

零基础学Qt 4编程实例之三:勾三股四弦必五—文件包含语句与标准库的使用相关推荐

  1. 零基础学Java语言---编程题

    零基础学Java语言-编程题 注意:没有上机实际测过,代码仅供参考 1.温度转换 写一个将华氏温度转换成摄氏温度的程序,转换的公式是: °F = (9/5)*°C + 32 其中C表示摄氏温度,F表示 ...

  2. 不要说零基础学不好UG编程,看完你就有方向了

    零基础怎么学UG编程,看完你就懂了 不要说零基础学不好UG编程,看完你就有方向了 众所周知UG编程师是一份工资待遇很不错的工作,而且还特别轻松 怎么样才能成为UG编程师呢? 打个比方,以前有很多人都在 ...

  3. 【零基础学Java】—Java 日期时间(三十二)

    [零基础学Java]-Java 日期时间(三十二) DateFormat 是日期/时间格式化子类的抽象类,它以语言无关的方式格式化和分析日期或时间. 日期/时间格式化子类(如SimpleDateFor ...

  4. 【零基础学Java】—Java 日期时间(三十一)

    [零基础学Java]-Java 日期时间(三十一) java.util.Date:表示日期和时间的类 类Date表示特定的瞬间,精确到毫秒 毫秒:千分之一秒,1000毫秒=1秒 特定的时间:一个时间点 ...

  5. 【零基础学Java】—Java运行机制(三)

    [零基础学Java]-Java运行机制(三)

  6. 零基础学Java的10个方法

    2019独角兽企业重金招聘Python工程师标准>>> 版权声明:本文为北京尚学堂原创文章,未经允许不得转载.​ 零基础学Java只要方法得当,依然有机会学习好Java编程. 但作为 ...

  7. Python和C语言哪个难?零基础学哪个好?

    Python和C语言哪个难?零基础学哪个好?Python上手简单有交互性强的开发环境,还有众多的第三方库,学习起来会比C/C++容易的多.C过于底层强在内存操作,功能实现起来却十分复杂并不适合新手作为 ...

  8. proteus仿真micropython_【雕爷学编程】MicroPython动手做(04)——零基础学MaixPy之尝试运行...

    1.hello micropython #MicroPython动手做(04)--零基础学MaixPy之基本示例 #程序之一:hellomicropython #MicroPython动手做(04)- ...

  9. 0基础学python看什么书-零基础学python编程需要看什么书?

    原标题:零基础学python编程需要看什么书? 随着互联网迅速发展,python也呈现出水涨船高的态势.近年来,python在编程语言中一直名列前茅.编程初学者纷纷选择Python作为第一语言.Pyt ...

最新文章

  1. 从零开始写个编译器吧 - 单词化简述(Tokenization)
  2. 什么是一个人真正的魅力?
  3. 【重置版】Android studio高效开发的秘密
  4. php mysql 插入多条数据_雷林鹏分享:PHP MySQL 插入多条数据
  5. BizTalk开发系列(九) MAP的连接方法
  6. centos6.8 环境一键安装包 nginx配置thinkphp5
  7. HTMLCSSJavaScript个人入门自学笔记
  8. [vijos1982][NOIP2015]子串
  9. Facebook广告与Google广告有什么不同?
  10. gitlab 安装_安装Gitlab-注意端口
  11. Solr6 快速入门教程
  12. 爬虫:Python爬虫学习笔记之网页解析基础——爬取360导航栏目
  13. 打造AS酷炫dimens适配插件
  14. Spring Cloud (6)config 客户端配置 与GitHub通信
  15. Smarty自学笔记
  16. this在什么时候为undefined
  17. python 描边,吊打Pyecharts,这个新Python绘图库也可以这么漂亮!
  18. Python turtle库的应用实例——画大白(情人节表白神器)
  19. 网页flv视频播放代码
  20. NeatUpload 网络上传大文件的web.config配置问题

热门文章

  1. 5 分钟,带你了解MVP(最低可行性产品)
  2. ubuntu18.04百度网盘登不上
  3. 计算机组成课设怎么做,计算机组成原理课设1
  4. 如何使用COleDateTime类获取昨天(前几天)的日期
  5. uni-app学习笔记4
  6. Spring Cloud教程 第七弹 spring cloud openfeign
  7. 在kindle阅读PDF的较好的解决方法
  8. 计算机自带24种音乐,十分钟教你搞懂24个大小调,学音乐必存
  9. 一键虚拟机关机/重启---远离重复---Shell小脚本
  10. 【文献2014】固体火箭发动机中的流固耦合仿真