1.1 编写一个简单的C++程序

 9a867b7c1a874dd39999a03557ccbb1f.gif


博主介绍:爱打游戏的计算机专业学生

博主主页:夏驰和徐策

所属专栏:夏驰和徐策带你从零开始学C++


4f34e61f4e6742888721e9da7fa7f397.jpeg

1.1.0 这段话告诉我们什么?

这段话解释了一个C++程序中的`main`函数的基本结构和功能。

它告诉我们以下几点:

1. C++程序的入口点是`main`函数,操作系统通过调用`main`函数来运行程序。
2. `main`函数是一个特殊的函数,但其定义与其他函数一样,包括返回类型函数名、形参列表和函数体。
3. 在这个示例中,`main`函数没有任何形参,即形参列表为空。
4. `main`函数的返回类型必须为`int`,表示返回一个整数类型的值。
5. 函数体由花括号括起来,其中只有一条语句,即`return 0;`。这条语句表示函数执行结束,并将整数值0返回给操作系统。
6. 整数值0通常表示程序正常结束,其他非零值可能表示异常情况或错误码。

总之,这段话向我们介绍了`main`函数在C++程序中的作用和定义方式,以及它的返回类型和函数体的基本结构。这是编写C++程序时必须了解和遵循的基本知识。

 

 d7913465a40d42dba314c6e8375c45d5.jpeg

1.1.1 编译、运行程序 

         编写好程序后,我们就需要编译它。如何编译程序依赖于 你使用的操作系统和编译器。
你所使用的特定编译器的相关使用细节,请查阅参考手册或询问经验丰富的同事。
        很多 PC机上的编译器都具备集成开发环境 (Integrated Developed Environment, IDE),将编译器与其他程序创建和分析工具包装在一起。在开发大型程序时,这类集成环境可能是非常有用的工具,但需要一些时间来学习如何高效地使用它们。学习如何使用这类开发环境己经超出了本书的范围。
        大部分编译器,包括集成 DDE 的编译器,都会提供一个命令行界面。除非你已经了解IDE,否则你会觉得借助命令行界面开始学习C++还是很容易的。这种学习方式的好处是,可以先将精力集中于 C4+语言本身(而不是一些开发工具),而且,一旦你掌握了语言,DDE 通常是很容易学习的。
程序源文件命名约定
无论你使用命令行界面或者 DDE,大多数编译器都要求程序源码存储在一个或多个文件中。程序文件通常被称为源文件(source file)。在大多数系统中,源文件的名字以一个后缀为结尾,后级是由一个句点后接一个或多个字符组成的。后缀告诉系统这个文件是一个C++程序。不同编译器使用不同的后级命名约定,最常见的包括.ccw.cxx、.cpp、.cp 及.c。
从命令行运行编译器
如果我们正在使用命令行界面,那么通常是在一个控制台窗口内(例如 UNIX 系统中的外壳程序窗口或者 Windows 系统中的命令提示符窗口)编译程序。假定我们的 main程序保存在文件prog1.cc 中,可以用如下命令来编译它
$ CC progi.cc
其中,CC 是编译器程序的名字,$是系统提示符。编译器生成一个可执行文件。Windows
系统会将这个可执行文件命名为 prog1.exe。 UNIX 系统中的编译器通常将可执行文件
命名为 a.out。
为了在 Windows 系统中运行一个可执行文件,我们需要提供可执行文件的文件名,可

 我的理解:

这段话主要是告诉你在编写好程序之后,你需要将它进行编译才能执行。编译程序的方式会因操作系统和编译器的不同而有所差异。

首先,它提到了集成开发环境(IDE),这是一种将编译器和其他开发工具整合在一起的软件。IDE对于开发大型程序非常有用,但需要花一些时间学习如何使用它们。

然后,它提到了命令行界面和编译器。命令行界面是一种通过命令来与计算机交互的方式,编译器通常提供了命令行界面的支持。使用命令行界面可以更专注于学习C++语言本身,而不是陷入复杂的开发工具中。一旦你熟悉了语言,学习使用集成开发环境也会相对容易。

接着,它解释了程序源文件的命名约定。编译器要求将程序代码存储在一个或多个文件中,这些文件通常被称为源文件。不同的编译器对源文件的命名约定可能有所不同,但常见的后缀有`.cc`、`.cpp`、`.cxx`、`.c`等。

最后,它说明了如何通过命令行界面来运行编译器进行编译。你需要在控制台窗口中输入相应的命令来编译源文件,编译器会生成一个可执行文件。可执行文件在Windows系统中通常以`.exe`为后缀,而在UNIX系统中通常命名为`a.out`。

总之,这段话的目的是给你提供了关于编译程序的一般概念和步骤,同时强调了根据操作系统和编译器的不同可能会有一些细微的差异。

8af6faca35a74a168af164b495009c33.jpeg

以忽略其扩展名.exe:
$ progi
在一些系统中,即使文件就在当前目录或文什火中,你也必须显式指出文件的位置。在此情况下,我们可以键入
§.1proal
“.〞后跟一个反斜线指出该文件在当前目录中。
为了在UNx 系统中运行一个可执行文什,我们需要使用全文什名,包括文件护展名:
§ a.out
如更需要指定文件位置,需要用一个么。后跟一个斜线水指出可执行文件位于当的目承中。
$ .la.out
访问 main 的返回值的方法依赖于 系统。在UNI 和 Windows 系统中,执行完一个程序后,都可以通过echo 命令获得其返回值。
在UNIX 系统中,通过如下命令获得状态:
§ echo S?
在 Windows 系统中查看状态可键入:
$ echo SERRORLEVELS
运行 GNU 或微软编译器
在不同操作和编译器系统中,运行 C++编译器的命令也各不相同。最常用的编译器是GNU 编译器和微软 Visual Studio 编译器。默认情况下,运行 GNU 编译器的命令是g+t:
$ ¢++=0pr091 prog1.c¢
此处,$是系统提示符。一。 prog1 是编译器参数,指定了可执行文件的文件名。在不同的操作系统中,此命令生成一个名为 progI 或 progI.exe 的可执行文件。在UNIX
系统中,可执行文件没有后级;在贝indows 系统中,后级为.exe。如果省略 了-o prog1
参数,在UNX 系统中编译器会生成一个名为a.out 的可执行文件,在 Windovs 系统中则会生成一个名为arexe 的可执行文件(注意:根据使用的 GNU 编译器的版本,你可能需要指定-std-ct+0x 参数来打开对 Ct+11的支持)。
运行微软 Visual Studio 2010 编译器的命令为cl:
C:lusers \me \ Programs> cl /EHsc progl.cpp
此处,C:NUsers \me \Programs>是系统提示符,\Users (me\Programs 是当前目录名(即当前文件夹)。命令c1调用编译器,/日Hs∞ 是编译器选项,用来打开标准异常处理。微软编译器会自动生成一个可执行文件,其名宇与第一个源文件名对应。可执行文件的文件名与源文件名相同,后级为.exe。在此例中,可执行文件的文件名为
progl. exe.
编译器通常都包含一些选项,能对有问题的程序结构发出警告。打开这些选项通常是一个好习惯。我们习惯在 GNU 编译器中使用-Wal1 选项,在微软编译器中则使用/N4。
更详细的信息请查阅你使用的编译器的参考手册。 

我的理解:

这段话主要是关于在不同系统和编译器下运行C++编译器的命令和一些注意事项。

首先,它提到了在某些系统中,即使文件在当前目录或路径中,你也需要显式指定文件的位置。例如,使用`progi`命令来执行可执行文件。如果需要指定文件位置,可以使用文件名前面加上路径,如`.\/a.out`表示可执行文件位于当前目录中。

接着,它提到了如何获取程序的返回值。在UNIX系统和Windows系统中,可以通过不同的命令来获取返回值。在UNIX系统中,使用`echo $?`命令获取状态值,在Windows系统中使用`echo %ERRORLEVEL%`命令获取状态值。

然后,它介绍了运行GNU编译器和微软Visual Studio编译器的命令。使用GNU编译器的命令通常是`g++`,而使用Visual Studio编译器的命令通常是`cl`。通过这些命令编译源文件会生成一个可执行文件,文件名通常与第一个源文件名相同,并且在UNIX系统中没有后缀,在Windows系统中后缀为`.exe`。

对于GNU编译器,它提到了一些常用的选项,如`-Wall`用于打开警告信息,以及可能需要指定`-std=c++11`参数来启用对C++11的支持。对于微软编译器,它提到了使用`/EHsc`选项来打开标准异常处理,并且生成的可执行文件的文件名与第一个源文件名相同。

最后,它建议查阅使用的编译器的参考手册以获取更详细的信息,并提到了在编译器中开启一些选项来检查有问题的程序结构是一个好习惯。

总之,这段话提供了一些关于在不同系统和编译器下编译和运行C++程序的命令和注意事项。

 

aca68ad38acf42d79cd47f2d22d84bf1.jpeg 课后练习:

1.1节练习

练习 1.1:查阅你使用的编译器的文档,确定它所使用的文件命名约定。编译并运行第 2页的main 程序。

练习 1.2:改写程序,让它返回-1。返回值-1通常被当作程序错误的标识。重新编译并运行你的程序,观察你的系统如何处理 main 返回的错误标识。

 我的理解:

这两题的作用

这两个练习有以下作用:

练习 1.1:
- 通过查阅所使用的编译器的文档,了解编译器所使用的文件命名约定。不同的编译器可能有不同的约定,这将帮助您更好地理解编译器的工作方式。
- 编译并运行第2页的main程序,实际操作一遍编译和运行过程,加深对编译器的使用和程序执行的理解。

练习 1.2:
- 修改程序,让它返回-1作为错误标识。这是一种常见的做法,用于标识程序执行过程中出现的错误。
- 观察您的系统如何处理main返回的错误标识。不同的系统可能有不同的处理方式,例如返回给操作系统的退出码或在命令行界面中显示错误信息。这有助于了解程序执行的错误处理机制。

这两个练习旨在提供实际的编程练习和对编译器工作原理的更深入理解。通过实际编译和运行程序,您可以获得关于编译器、文件命名约定以及程序执行错误处理的实际经验,并加深对这些概念的理解和掌握。这对于学习和实践编程是非常有益的。

cf2089894c60487ebc78f0860651bdec.png

 

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: 我可以为您提供一个示例代码: #include <stdio.h> #define PI 3.1415926 // 卡尔曼滤波算法 void KalmanFilter(double* X, double* P, double* K, double* Y, double R, double Q, double A, double B, double H) { *X = (*A) * (*X) + (*B) * (*Y); *P = (*A) * (*P) * (*A) + (*Q); *K = (*P) * (*H) / ((*H) * (*P) * (*H) + (*R)); *X = (*X) + (*K) * (*Y - (*H) * (*X)); *P = (*P) - (*K) * (*H) * (*P); } int main() { double X, P, K; double R = 0.1, Q = 0.001, A = 1, B = 0, H = 1; double Y; // 初始化状态 X = 0; P = 1; // 测量值 Y = 1.1; // 计算 KalmanFilter(&X, &P, &K, &Y, R, Q, A, B, H); printf("X=%f \n", X); printf("P=%f \n", P); printf("K=%f \n", K); return 0; } ### 回答2: 卡尔曼滤波是一种用于估计系统状态的线性滤波算法,广泛应用于航天、导航、机器人等领域。下面是一个C语言实现的简单卡尔曼滤波算法程序示例: ```c #include <stdio.h> #define Q 0.01 // 系统过程噪声协方差 #define R 0.1 // 测量噪声协方差 float kalman_filter(float z, float *x, float *P) { // 预测步骤 float x_hat = *x; // 状态预测值 float P_hat = *P + Q; // 状态协方差预测值 // 更新步骤 float K = P_hat / (P_hat + R); // 卡尔曼增益 *x = x_hat + K * (z - x_hat); // 更新状态估计值 *P = (1 - K) * P_hat; // 更新状态协方差估计值 return *x; } int main() { float z[] = {1.2, 2.1, 3.4, 4.3}; // 测量值 float x = 0; // 初始状态估计值 float P = 1; // 初始状态协方差估计值 int n = sizeof(z) / sizeof(float); for (int i = 0; i < n; ++i) { float filtered_value = kalman_filter(z[i], &x, &P); printf("测量值:%f ;滤波值:%f\n", z[i], filtered_value); } return 0; } ``` 这个程序中,首先定义了系统过程噪声协方差Q和测量噪声协方差R。在`kalman_filter`函数中,根据卡尔曼滤波算法的预测和更新步骤,计算状态预测值`x_hat`和状态协方差预测值`P_hat`,然后根据测量值`z`更新状态估计值`x`和状态协方差估计值`P`,最后返回状态估计值作为滤波值。在`main`函数中,我们可以定义一组测量值序列`z`,并通过循环调用`kalman_filter`函数来获得滤波值。最后,将测量值和滤波值打印出来。 ### 回答3: 卡尔曼滤波算法是一种常用于估计系统状态的方法,它可以通过利用过去的测量数据和系统动态模型来优化当前状态的估计。以下是一个简单的C语言卡尔曼滤波算法程序的示例: ```c #include <stdio.h> // 卡尔曼滤波函数 float kalmanFilter(float measurement) { // 初始化状态变量 float x_hat = 0; float P = 1; float Q = 0.01; float R = 0.1; // 预测步骤 float x_hat_minus = x_hat; float P_minus = P + Q; // 更新步骤 float K = P_minus / (P_minus + R); x_hat = x_hat_minus + K * (measurement - x_hat_minus); P = (1 - K) * P_minus; return x_hat; } int main() { // 测量数据示例 float measurement = 10.0; // 调用卡尔曼滤波函数进行状态估计 float estimated_state = kalmanFilter(measurement); // 输出估计结果 printf("Estimated State: %.2f\n", estimated_state); return 0; } ``` 该程序实现了一个简单的一维卡尔曼滤波器。在`kalmanFilter`函数中,测量值作为输入,函数返回一个估计的状态值。在主函数中,我们传递了一个测量值,并输出了估计的状态值。 需要注意的是,该示例程序的参数Q、R和初始状态值可以根据具体应用进行调整。另外,该程序仅实现了简单的一维情况,对于多维情况需要对状态变量和矩阵进行相应的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏驰和徐策

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值