1.4.2 for 语句

for (init-statement; condition; expression)
statement;

step1:初始化

step2:判断条件,为真则执行循体;为假则退出循环

step3:执行表达式,回到step2

例子:for循环从1加到10
#include <iostream>
int main()
{
int sum = ;
// 从 1 加到 10
for (int val = ; val <= ; ++val) //循环头:控制循环体的执行次数
// 初始化语句 循环条件 表达式
sum += val; //循环体
//val 在循环结束后不能使用
std::cout << "Sum of 1 to 10 inclusive is "
<< sum << std::endl;
return ;
}

练习1.12:

-100加到100,sum的终值为0

练习1.13:

使用for循环将50-100的整数相加
#include <iostream>
int main()
{
int sum = ;
for (int val = ; val <= ; val++)
sum += val;
std::cout << "Sum of 50 to 100 inclusive is "
<< sum << std::endl;
return ;
}

使用for循环按递减顺序打印10-0

#include <iostream>
int main()
{
int val = ;
for (int val = ; val >= ; --val)
std::cout << val << " ";
std::cout << std::endl;
return ;
}

使用for循环打印输入的两个整数之间的数

#include <iostream>
int main()
{
int a , b;
std::cin >> a >> b;
if(a <= b){
for (; a <= b; a++)
std::cout << a << " ";
}
else{
for (; a >= b; a--)
std::cout << a << " ";
}
return ;
}

练习1.14

如果明确循环次数,更推荐使用for循环;不明确则推荐使用while循环
while循环的循环控制变量需要提前初始化,且需要在循环体中修改控制变量的值,形式上不如for简洁
功能上等价,可相互转换
 
练习1.15
熟悉语法错误、类型错误、声明错误
1、语法错误代码
 #include <iostream>
int main()
{
// 语法错误 syntax error
std::cout << "Read each file." << std::endl:
std::cout << Update master. << std::endl;
std::cout << "Write new master" std::endl;
return ;
}

报错信息:

prog1_15.cc: In function 'int main()':
prog1_15.cc::: error: found ':' in nested-name-specifier, expected '::'
std::cout << "Read each file." << std::endl:
^
prog1_15.cc::: error: 'std::endl' is not a class, namespace, or enumeration
std::cout << "Read each file." << std::endl:
^
prog1_15.cc::: error: 'Update' was not declared in this scope
std::cout << Update master. << std::endl;
^
prog1_15.cc::: error: expected ';' before 'master'
std::cout << Update master. << std::endl;
^
prog1_15.cc::: error: expected ';' before 'std'
std::cout << "Write new master" std::endl;
^

2、类型错误代码

 #include <iostream>
int main()
{
// 类型错误 type error
int a = "hello";
return ;
}

报错信息

prog1_15.cc: In function 'int main()':
prog1_15.cc::: error: invalid conversion from 'const char*' to 'int' [-fpermissive]
int a = "hello";
^

3、声明错误代码

 #include <iostream>
int main()
{
// 声明错误 declaration error
int v1 = , v2 = ;
std::cin >> v >> v2;
cout << v1 + v2 << std::endl;
return ;
}

报错信息

prog1_15.cc: In function 'int main()':
prog1_15.cc::: error: 'v' was not declared in this scope
std::cin >> v >> v2;
^
prog1_15.cc::: error: 'cout' was not declared in this scope
cout << v1 + v2 << std::endl;
^
prog1_15.cc::: note: suggested alternative:
In file included from prog1_15.cc:::
d:\dev-cpp\mingw64\lib\gcc\x86_64-w64-mingw32\4.8.\include\c++\iostream::: note: 'std::cout'
extern ostream cout; /// Linked to standard output
^

好习惯: 编辑-编译-调试(edit-compile-debug)

1、按照编译器报告的顺序逐个修正错误(原因:单个错误具有传递效应)

2、每修正一个或一小部分明显错误后立即重新编译代码

1.4.3 读取数量不定的输入数据

使用istream对象作为条件时,效果是检测流的状态。

练习1.16:从 cin 读取一组数,输出其和

#include <iostream>
int main()
{
int sum = , value = ;
while (std::cin >> value)
sum += value;
std::cout << "Sum is: " << sum <<std::endl;
return ;
}

windows环境可使用ctrl+z或字母作为结束符,再按回车(因为value为int型,非int型输入导致isteam对象的状态变为无效,使条件为假从而结束循环)

1.4.4 if 语句

if (condition)
statement;
else
statement;

例子:统计输入中每个连续值出现几次

#include <iostream>
int main()
{
int currVal = , val = ;
if (std::cin >> currVal){
int cnt = ;
while(std::cin >> val){
if (val == currVal)
cnt++;
else{ // 否则,打印前一个值个数
std::cout << currVal << " occurs "
<< cnt << " times" << std::endl;
currVal = val; // 记住新值
cnt = ; // 重置计数器
}
}//while
std::cout << currVal << " occurs "
<< cnt << " times" << std::endl;
}
return ;
}
 关键概念:C++的程序的缩进和格式
C++在很大程度上是格式自由的:花括号的放置、缩进、注释、换行通常不影响程序的语义。
原则:保证可读性、易理解性、一致性,且一旦选择风格,要坚持使用。
 
1.5 类简介
关键概念:类定义了行为
类定义了类对象可执行的所有动作。
 
练习1.20:读取书籍销售记录,打印
#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item book;
while(std::cin>>book)
std::cout << book << std::endl;
return ;
}

练习1.21:读取两个同样ISBN的记录,打印和

#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item book1, book2;
std::cin >> book1 >> book2;
if (book1.isbn() == book2.isbn())
std::cout << book1 + book2 <<std::endl;
else
std::cout << "Data must refer to same ISBN" << std::endl;
return ;
}

练习1.22:读取多个具有相同ISBN的销售记录,输出所有记录的和。

#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item item1, item_sum;
if(std::cin >> item_sum){
while(std::cin >> item1){
if (item1.isbn() == item_sum.isbn())
item_sum += item1;
else{
std::cout << "Data must refer to same ISBN" << std::endl;
break;
}
}
std::cout << item_sum << std::endl;
return ;
}
else{
std::cout << "No data" << std::endl;
return -;
}
}

成员函数(member function):有时也被称为方法(method)

调用方式:类类型的对象.成员名()             点运算符.   调用运算符(),括号内放实参列表,可为空

练习1.23-1.24:读取多条销售记录,统计每个ISBN有几条销售记录(每个ISBN的记录聚在一起)

#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item item0, item;
if(std::cin >> item0){
int cnt = ;
while(std::cin >> item){
if(item.isbn() == item0.isbn())
cnt++;
else{
std::cout << item0.isbn() << " has " << cnt << " items."
<< std::endl;
item0 = item;
cnt = ;
}
}
std::cout << item0.isbn() << " has " << cnt << " items."
<< std::endl;
}
else
{
std::cout << "No data." << std::endl;
return -;
}
return ;
}

书店程序:读取销售记录,生成每本书的销售报告,显示售出册数、总销售额和平均售价(每个ISBN书号中所有销售记录在文件中聚在一起保存)

#include <iostream>
#include "Sales_item.h"
int main()
{
Sales_item total;
// 读入第一条交易记录,并确保有数据可以处理
if(std::cin >> total){
Sales_item trans;
// 读入并处理剩余交易记录
while(std::cin >> trans){
if(trans.isbn() == total.isbn()) // 如果仍在处理相同的书
total += trans; // 更新总销售额
else{
// 打印前一本书的结果
std::cout << total << std::endl;
total = trans; // 重置
}
}
std::cout << total << std::endl; // 打印最后一本书的结果
}
else
{
std::cerr << "No data?!" << std::endl;
return -;
}
return ;
}

术语

 
 
 
 
 
 

C++primer第一章(部分)的更多相关文章

  1. C++primer第一章

    第一章 : 开始 1.1 编写一个简单的C++程序 要点:每个函数有且只能拥有一个main函数,且main的默认返回是一个int类型. 函数定义:返回类型,函数名,形参列表,函数体 1.1.1编译 运 ...

  2. C++Primer 第一章

    /* 1.main函数的标准写法就只有两种,一种是带命令行的,一种是不带命令行的.其返回类型必须是int. 2.如果main函数最后没有return语句,则编译器会自动加上一句 return 0; * ...

  3. <<C++ Primer>> 第一章 开始 术语表

    术语表 第 1 章 开始 参数(实参, argument): 向函数传递值    赋值(assignment): 抹去一个对象当前值一个新值取代之    缓冲区(buffer): 一个存储区域, 用于 ...

  4. C++ Primer 笔记 第一章

    C++ Primer 学习笔记 第一章 快速入门 1.1 main函数 系统通过调用main函数来执行程序,并通过main函数的返回值确定程序是否成功执行完毕.通常返回0值表明程序成功执行完毕: ma ...

  5. 《C++Primer》第五版习题答案--第一章【学习笔记】

    C++Primer第五版习题解答---第一章 ps:答案是个人在学习过程中书写,可能存在错漏之处,仅作参考. 作者:cosefy Date: 2022/1/7 第一章:开始 练习1.3 #includ ...

  6. C++ Primer Plus 第一章 预备知识

    C++ Primer Plus 第一章 预备知识 知识点梳理 本章主要讲述了C++的由来,讨论了面向过程语言与面向对象语言的区别,介绍了ANSI/ISO制定的C++标准,阐述了在Windows.Mac ...

  7. C++PRIMER第五版练习题答案第一章

    C++PRIMER第五版练习题答案第一章 应该有很多小伙伴和我一样,闲来无事买了本C++的书自己啃,课后的练习题做的很揪心,这里我分享下我写的答案,希望能帮助到你,提供源码,就不跑了哈,毕竟现在是第一 ...

  8. C++ primer的第一章的主要内容

    第一章主要是把C++的主要的部分简单的介绍了一下,让读者对C++开始有一个简单的了解.看完第一章的收获就是知道如何去读入不确定数目的输入,主要是形式是:whlie(cin>>s){},利用 ...

  9. 第一章 C++ primer Plus

    第一章 1.4程序创建的技巧 大体如下: 1.使用文本编辑器编写程序,并将其保存到文件中,这个文件就是程序的源代码. 2.编译源代码.这意味着运行一个程序,将源代码翻译为主机使用的内部语言——机器语言 ...

随机推荐

  1. 测试计划的编写6要素(5W1H)

    Why --为什么要进行这些测试 WHat--测试哪些内容 When--测试不同阶段的起止时间 WHere--相应文档,缺陷的存放位置,测试环境 Who--项目有关人员组成 How--如何去做,使用哪 ...

  2. 将lvm逻辑卷分出一部分

    今天公司磁盘报警,查看磁盘发现挂载的/aa空间还很多,而/ee 空间不足,现将/aa上的lvm分出一部分空间.加到/ee上 注:首先要 df  -T  -h 开一下磁盘格式如果是xfs格式的lvm  ...

  3. Spark读HBase写MySQL

    1 Spark读HBase Spark读HBase黑名单数据,过滤出当日新增userid,并与mysql黑名单表内userid去重后,写入mysql. def main(args: Array[Str ...

  4. ppt图片在word中不能正常显示,只显示为矩形框的解决方法

    word中插入的其他图片是好的,但是从ppt复制粘贴过来的图片只显示个框. 解决方法:以下红框中内容去选中.

  5. Linux安装配置rabbitmq

    Step1:安装erlang 1)下载erlang wget http://www.rabbitmq.com/releases/erlang/erlang-19.0.4-1.el7.centos.x8 ...

  6. Python多线程的运行及time.sleep()的应用

    已知小明和其弟弟小白每月都需要生活费,二人同时从同一个账户中取钱,两人每人每月需要1000元,账户中现有余额3200元,如果卡内余额大于2000元,则父母不会存入,如果卡内余额小于2000元,则父母当 ...

  7. 图解HTTP阅读笔记(1)-网络基础TCP/IP

    1.TCP/IP协议族 TCP/IP这个概念对大家来说很熟悉,之前我的了解它只是一个协议.今天阅读才知道TCP/IP实际上是一个协议族,其中HTTP协议属于该协议族的一个子集.图1是TCP/IP协议族 ...

  8. JavaScript权威指南--数组Array

    什么是数组 数组是值的有序集合.每一个值叫做元素,每一个元素在数组中有一个位置,用数字表示,称为索引.js数组是无类型的.动态的,也可能是稀疏的.每个数组都有length属性.数组最大能容纳42949 ...

  9. HTTPS协议学习

    http的缺点:(其他一些未加密的协议中也存在) 通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,因此有可能遭遇伪装 无法证明报文的完整性,所以有可能已遭篡改 TCP/IP是可能被窃听的 ...

  10. fillder抓包工具详解

    https://www.cnblogs.com/yyhh/p/5140852.html