C++ PrimerPlus 复习 第二章 进入c++

news2024/11/20 8:24:23

第一章 命令编译链接文件 make文件

文章目录

  • 创建C++程序;
  • C++程序的一般格式;
    • main()函数;
    • 使用cout对象进行输出,使用cin对象进行输入;
      • cout
      • cin
    • #include编译指令;
    • 名称空间
    • 定义和使用简单函数。
    • 在C++程序中加入注释;
    • 何时以及如何使用endl;
    • 声明和使用变量;
    • 赋值语句
  • 问答区
    • 为什么要将iostream文件的内容添加到程序中呢?
    • 为什么变量必须声明?
    • main 的 返回值去哪里了
    • 定义函数时,在什么情况下不必使用关键字return?
    • cout 和 printf() 的区别?

为什么要将iostream文件的内容添加到程序中呢?
为什么变量必须声明?
main 的 返回值去哪里了?
定义函数时,在什么情况下不必使用关键字return?
cout 和 printf() 的区别?

创建C++程序;

C++对大小写敏感
文件扩展名cpp是一种表示C++程序的常用方式,也可使用前面的其他扩展名。

在这里插入图片描述

直接在命令行里面使用该程序的话可能直接一闪而过
因为没有 cin.get();
要么在编译器里运行看运行日志,或者在加上cin.get();来阻塞程序运行;

C++程序的一般格式;

注释,由前缀//标识。
预处理器编译指令#include。
函数头:int main()。
编译指令using namespace。
函数体,用{和}括起。
使用C++的cout工具显示消息的语句。
结束main()函数的return语句。

如何运行看第一章

main()函数;

在这里插入图片描述

第一行int main()叫函数头(function heading),花括号({和})中包括的部分叫函数体。图对main()函数做了说明。函数头对函数与程序其他部分之间的接口进行了总结;函数体是指出函数应做什么的计算机指令。在C++中,每条完整的指令都称为语句。所有的语句都以分号结束,因此在输入示例代码时,请不要省略分号。

如果编译器到达main()函数末尾时没有遇到返回语句,则认为main()函数以如下语句结尾:
return 0;
这条隐含的返回语句只适用于main()函数,而不适用于其他函数。

使用cout对象进行输出,使用cin对象进行输入;

如果程序要使用C++输入或输出工具,请提供这样两行代码:

cout

#include
using namespace std;

也可以是
using std::cout; // make cout available
using std::endl; // make endl available
using std::cin; // make cin available

详细解释在名称空间,先知道可以这么用就好
简单而言就是让这个名称可用,程序才知道你写的cout,endl是什么东西。
using namespace std; 是让std里面的全部名称可用
using std::name; 是让std里面的name可用

注意: 
使用cin和cout进行输入和输出的程序必须包含头文件iostream。

如何显示消息。使用下面的C++语句:

cout << “Come up and C++ me some time.”;
<<符号表示该语句将把这个字符串发送给cout;该符号指出了信息流动的路径。
cout是什么呢?
它是一个预定义的对象,知道如何显示字符串、数字和单个字符等
在这里插入图片描述
iostream文件定义了<<运算符,以便可以像下面这样合并(拼接)输出:
cout << “Now you have " << carrots << " carrots.” << endl;
这样能够将字符串输出和整数输出合并为一条语句。得到的输出与下述代码生成的相似:
cout << "Now you have “;
cout << carrots;
cout << " carrots.”;
cout << endl;

cin

求在程序运行时输入一个值。为实现这项任务,使用了cin,这是与cout对应的用于输入的对象。
与cout一样,cin也是一个智能对象。
它可以将通过键盘输入的一系列字符(即输入)转换为接收信息的变量能够接受的形式。

功能的语句:
cin >> carrots;
从这条语句可知,信息从cin流向carrots。

#include编译指令;

#include <iostream>     // a PREPROCESSOR directive

该编译指令导致预处理器将iostream文件的内容添加到程序中。
这是一种典型的预处理器操作:在源代码被编译之前,替换或添加文本。

在这里插入图片描述

名称空间

名称空间支持是一项C++特性,旨在让您编写大型程序以及将多个厂商现有的代码组合起来的程序时更容易,它还有助于组织程序。
更多的后面有专门的章节

定义和使用简单函数。

全部的函数特性:
有函数头和函数体;
接受一个参数;
返回一个值;
需要一个原型。
在这里插入图片描述
在这里插入图片描述

函数有原型,定义,声明
函数原型:声明函数的返回类型、函数接受的参数数量和类型。
在这里插入图片描述

函数格式
首先,有一个函数头;然后是花括号中的函数体。可以把函数的格式统一为如下的情形:

type functionname(argumentlist)
{
 statements
}

在这里插入图片描述

在C++程序中加入注释;

C++注释以双斜杠(//)打头

C++也能够识别C注释,C注释包括在符号//之间:

#include <iostream> /* a C-style comment */

何时以及如何使用endl;

声明和使用变量;

一条声明语句(注意其中的分号):

int carrots;
这条语句提供了两项信息:需要的内存以及该内存单元的名称。
还可以发现潜在的错误问题

赋值语句

carrots = 25;
符号=叫作赋值运算符。C++(和C)有一项不寻常的特性——可以连续使用赋值运算符。
例如,下面的代码是合法的:

int steinway;
int baldwin;
int yamaha;
yamaha = baldwin = steinway = 88;

问答区

为什么要将iostream文件的内容添加到程序中呢?

答案:
涉及程序与外部世界之间的通信。
iostream中的io指的是输入(进入程序的信息)和输出(从程序中发送出去的信息)。
C++的输入/输出方案涉及iostream文件中的多个定义。
为了使用cout来显示消息,有 i/o 的程序需要这些定义。
#include编译指令导致iostream文件的内容随源代码文件的内容一起被发送给编译器。
实际上,iostream文件的内容将取代程序中的代码行#include <iostream>。
原始文件没有被修改,而是将源代码文件和iostream组合成一个复合文件,编译的下一阶段将使用该文件。

为什么变量必须声明?

简单来说就是为了 发现潜在的错误问题
没有声明的变量会报错,就防止了下面的错误

有些语言(最典型的是BASIC,Python等等)在使用新名称时创建新的变量,而不用显式地进行声明。
这看上去对用户比较友好,事实上从短期上说确实如此。

如果错误地拼写了变量名,将在不知情的情况下创建一个新的变量。在BASIC或Python中,程序员可能编写如下语句:
CastleDark = 34

CastleDank = CastleDark + MoreGhosts

PRINT CastleDark
由于CastleDank是拼写错误(将r拼成了n),因此所作的修改实际上并没有修改CastleDark。
这种错误很难发现,因为它没有违反BASIC和Python中的任何规则。
然而,在C++中,将声明CastleDark,但不会声明被错误拼写的CastleDank,因此对应的C++代码将违反“使用变量前必须声明它”的规则,因此编译器将捕获这种错误,发现潜在的问题。

main 的 返回值去哪里了

main()返回一个int值,而程序员要求它返回整数0。但可能会产生疑问,将这个值返回到哪里了呢?毕竟,程序中没有哪个地方可以看出对main()的调用

答案:
可以将计算机操作系统(如UNIX或Windows)看作调用程序。
因此,main()的返回值并不是返回给程序的其他部分,而是返回给操作系统。很多操作系统都可以使用程序的返回值。
例如,UNIX外壳脚本和Windows命令行批处理文件都被设计成运行程序,并测试它们的返回值(通常叫作退出值)。
通常的约定是,退出值为0则意味着程序运行成功,为非零则意味着存在问题。
因此,如果C++程序无法打开文件,可以将它设计为返回一个非零值。
然后,便可以设计一个外壳脚本或批处理文件来运行该程序,如果该程序发出指示失败的消息,则采取其他措施。

定义函数时,在什么情况下不必使用关键字return?

当函数的返回类型为void时,不用在函数中使用return。
然而,如果不提供返回值,则可以使用它:
return;

cout 和 printf() 的区别?

语言和库:
cout 是C++中的标准输出流,属于C++的标准库(iostream)的一部分。
printf() 是C语言中的标准输出函数,属于C标准库的一部分。

语法:
cout 使用运算符重载,通过 << 操作符将数据插入输出流中。例如:cout << “Hello, World!” << endl;
printf() 使用格式字符串,通过占位符将数据格式化并插入到字符串中。例如:printf(“Hello, %s!\n”, “World”);

类型安全:
cout 提供了类型安全,它在编译时检查数据类型,并根据需要执行转换。
printf() 不提供类型安全,程序员需要确保格式字符串和参数的类型匹配,否则可能会导致未定义行为或错误。

可读性:
cout 提供了更自然的C++语法,易于阅读和理解,特别是对于非程序员来说。
printf() 使用格式字符串,较难阅读,特别是对于复杂的格式化要求。

扩展性:
cout 可以通过创建自定义的输出流类来扩展,并支持自定义类型的输出。
printf() 不太容易扩展,因为它是一个函数而不是一个类。

国际化和本地化:
cout 更容易实现国际化和本地化,因为它可以通过C++的本地化支持进行扩展。
printf() 在处理多语言和本地化方面可能更复杂。

总之,选择使用cout还是printf()取决于您的编程环境和个人偏好。在C++中,通常推荐使用cout,因为它提供了更现代、类型安全和易于使用的输出方式。在C中,printf()是标准的输出函数,但请谨慎处理格式化字符串以避免安全问题。
如果已经习惯了C语言和printf(),可能觉得cout看起来很奇怪。程序员甚至可能固执地坚持使用printf()。但与使用所有转换说明的printf()相比,cout的外观一点也不奇怪。更重要的是,cout还有明显的优点。它能够识别类型的功能表明,其设计更灵活、更好用。另外,它是可扩展的(extensible)。也就是说,可以重新定义<<运算符,使cout能够识别和显示所开发的新数据类型。如果喜欢printf()提供的细致的控制功能,可以使用更高级的cout来获得相同的效果(参见第17章)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1011056.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nginx配置指南:如何定位、解读与优化Linux上的Nginx设置

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f405;&#x1f43e;猫头虎建议程序员必备技术栈一览表&#x1f4d6;&#xff1a; &#x1f6e0;️ 全栈技术 Full Stack: &#x1f4da…

Harmony系统更改手机IP

在当今的互联网环境中&#xff0c;我们经常需要更改手机的IP地址来绕过限制或保护我们的隐私。虽然在一些操作系统上更改IP地址相对较容易&#xff0c;但在Harmony系统上&#xff0c;这可能会有些困难。因此&#xff0c;本文将分享一种在Harmony系统上免费更改手机IP地址的方法…

linux 下实现一个进度条

倒计时 理解 printf 打印的内容是被放在输出缓冲区的 fflush(stdout) 刷新 输出缓冲区&#xff1b;\n 也是一种刷新的策略我们称之为行刷新 理解一下回车换行 首先&#xff1a;回车是回车 换行是换行 回车是回到这一行的开头 换行是换到下一行 所以我们平时使用的 Enter 键 …

一线大厂Redis高并发缓存架构实战与性能优化

多级缓存架构 缓存设计 缓存穿透 缓存穿透是指查询一个根本不存在的数据&#xff0c; 缓存层和存储层都不会命中&#xff0c; 通常出于容错的考虑&#xff0c; 如果从存储层查不到数据则不写入缓存层。 缓存穿透将导致不存在的数据每次请求都要到存储层去查询&#xff0c; 失…

二叉树的概念及存储结构

目录 1.树的概念 1.1树的相关概念 1.2树的表示与应用 2.二叉树的概念及结构 2.1二叉树的概念 2.1.1特殊的二叉树 2.2.2二叉树的性质 2.2二叉树的结构 2.2.1顺序存储 2.2.2链式存储 这是一篇纯理论的博客,会对数据结构中的二叉树进行详细的讲解,让你对树的能有个清晰的…

智能语音机器人竞品调研

一、腾讯云-智能客服机器人 链接地址&#xff1a;智能客服机器人_在线智能客服_智能客服解决方案 - 腾讯云 二、阿里云-智能语音机器人 链接地址&#xff1a;智能对话机器人-阿里云帮助中心 链接地址&#xff1a;智能外呼机器人的业务架构_智能外呼机器人-阿里云帮助中心 三、火…

word文档怎么转换成pdf?几个实用文档转换方法

word文档怎么转换成pdf&#xff1f;PDF文档可以保护文档的格式和布局。如果你将Word文档发送给他人&#xff0c;他人可能会使用不同版本的Word软件打开文档&#xff0c;导致格式和布局发生变化。但是&#xff0c;如果你将Word文档转换为PDF文档&#xff0c;无论对方使用什么软件…

Android Studio的笔记--Android API的方法和位置

Android API 官网API中文API源码位置 官网API Package Index 可以修改查看对应的API等级的方法 中文API Android 包索引 源码位置 在工程的位置如下 \frameworks\base\core\java\android\ 与君共勉&#xff01;

聚观早报 | iPhone 15系列正式发布;月饼专利申请超10000项

【聚观365】9月14日消息 iPhone 15系列正式发布 月饼专利申请超10000项 “五个女博士”自建研究院 2023中国民营企业研发十强公布 华为和小米达成全球专利交叉许可协议 iPhone 15系列正式发布 2023年苹果秋季新品发布会如期而至。发布会上&#xff0c;苹果发布了iPhone 1…

visual studio code导入自定义模块(pycharm中能够运行的文件,vs code报错:未找到指定模块)

一、先看下目录结构 二、在main.py中导入Utils中的模块&#xff0c;直接导入即可 from Utils.custom_event_parse import CustomEventParse三、在custom_event_parse.py中导入execl_base.py中的模块 导入模块&#xff1a; from Utils.execl_base import ExeclBase以上这种导…

微信小程序线上加载使用iconfont问题

1.在微信小程序根目录下创建style文件夹&#xff0c;里面再创建iconfont文件夹&#xff0c;用于放置iconfont图标文件和iconfont样式文件 2.给iconfont.wxss写样式&#xff08;也可以下载iconfont代码&#xff0c;拷贝iconfont.css里的代码复制进去&#xff09; font-face {fo…

深度学习-全连接神经网络-训练过程-模型正则与超参数调优- [北邮鲁鹏]

目录标题 神经网络中的超参数学习率超参数优化方法网格搜索法随机搜索法 超参数搜索策略粗搜索精搜索 超参数的标尺空间 神经网络中的超参数 超参数 网络结构&#xff1a;隐层神经元个数&#xff0c;网络层数&#xff0c;非线性单元选择等优化相关&#xff1a;学习率、dorpou…

【绝㊙️】三年开发内功心得

经典嵌套if-else问题 这个也是老生常谈问题了&#xff0c;不管哪里都能看到。 那如何解决 方法一&#xff08;重要&#xff09;&#xff1a; 如果逻辑分支过多&#xff0c; 即使你不解决嵌套if-slse&#xff0c;至少也要把每个 if的{}里的逻辑抽到一个独立的方法或者工具类…

NDK (ndk)报错 Unity requires NDK r19 (64-bit)(19.0.05232133)

一、介绍 在 Android 添加 NDK ndk 的时候&#xff0c;出现 Unity requires NDK r19 (64-bit)(19.0.05232133)。 二、环境 1、Unity 2020.3.48f1c1 2、Android NDK 配置 三、报错信息 NDK (ndk)报错 Unity requires NDK r19 (64-bit)(19.0.05232133) 四、解决方法 1、下…

GDB之解决ptrace反调试手段(八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

【Redis】Redis 通用命令、键的过期策略、渐进式遍历

文章目录 一、基础命令SET 和 GET 二、全局命令KEYSEXISTSDELEXPIRE 和 TTL经典面试题&#xff1a;Redis 中 key 的过期策略是怎么实现的TYPE 三、渐进式遍历 Redis 有许多种数据结构&#xff0c;但是这些数据结构的 key 的类型都是字符串类型的&#xff08;所以说&#xff0c;…

链表oj题 链表与LinkedList 栈的概念 队列的概念 树和二叉树

第 1 题&#xff08;编程题&#xff09; 题目名称&#xff1a; 求环的入口点 题目内容&#xff1a; 求环的入口点https://leetcode-cn.com/problems/linked-list-cycle-ii/description/ 第 2 题&#xff08;编程题&#xff09; 题目名称&#xff1a; 判断链表带环 题目…

利用python工具提取多个word中的图片和表格

1. 前言 由于工作因素&#xff0c;经常要对多个文档内容进行查重&#xff0c;文字类可以借助查重工具辅助&#xff0c;但图片和表格只能依靠鼠标滚轮还有笔者的打工眼。久而久之&#xff0c;眼睛废了&#xff0c;肩颈也吃不消了&#xff08;-.-&#xff09;。于是乎&#xff0…

指引型树型组件的封装

最近&#xff0c;由于业务的需要&#xff0c;需要做一个指向形树型组件。在寻找各种文章后&#xff0c;终于有了思路。&#x1f912;&#x1f912;&#x1f912; 树型组件的思路主要是递归。谈到递归&#xff0c;我们首先要有递归的出口。递归的出口就是没有孩子节点了。这个时…

微博情绪分类

引自&#xff1a;https://blog.csdn.net/no1xiaoqianqian/article/details/130593783 友好借鉴&#xff0c;总体抄袭。 所需要的文件如下&#xff1a;https://download.csdn.net/download/m0_37567738/88340795 import os import torch import torch.nn as nn import numpy a…