CPP Primer 5th 笔记(一)
来源:互联网 发布:网络运营商远程无反应 编辑:程序博客网 时间:2024/05/19 16:03
1-2 初识输入输出
一个流就是一个字符序列,是从IO设备读出或者写入IO设备的。
术语“流”想要表达的是:随着时间的推移,字符是顺序生成或者顺序消耗的。
4个IO对象
1.cin 标准输入
2.cout 标准输出
3.cerr 输出警告或者错误的消息
4.clog 输出程序运行的一般性信息
使用一个IO库的程序
#includeint main(intargc, char** argv) {std::cout<<"Enter twonumbers"<<std::endl;intv1=0,v2=0;std::cin>>v1>>v2;std::cout<<"This sum of "<< v1 <<" and"<< v2 <<" is "<< v1+v2<<std::endl;return0;}
#include指令
向流写入数据
输出运算符<<
"<<"左侧的对象必须是一个ostream的对象右侧是运算是对象要打印的值。
输出运算符的计算结果就是其左侧运算对象。
上面的例子中我们用了两次运算符“<<” 但是对象是一样的 都是std::out
我们可以写成不同的格式:
栗子(一):
(std::cout<<"Enter twonumbers")<<std::endl;
栗子(二):
std::cout<<"Enter twonumbers";
std::cout<<std::endl;
哈哈 上面两个是一样了 就是酱紫\@~@/
解释一下栗子二:
第一条语句输出的书土匪字符串字面值常量(stringliteral),在双引号之间的文本被打印到标准输出。
第二条语句打印endl这是一个被称为操纵符(manipulatoer)的特殊值,效果是结束当前行,保证与设备相关联的缓冲区中的内容被刷到设备中去,并且保证当前程序所有输出都输入到输出流中去,而不是仅仅停留在内存中。
warning:在调试打印语句时候要保证一直在刷新流,不然会导致关于程序崩溃错误位置的判断(因为输出还有可能停留在缓冲区中)。
使用标准库中的名字
还有一个小朋友们关注的问题。。。上课的时候就觉得好奇怪。
为什么在cout和endl之前要“std::”?
这是表示cout和endl是定义在名为std的命名空间(namespace)中的 。
从流中读取数据
对比“<<”而言,“>>”的使用时类似的。都是接受左侧作为运算对象
她从给定的istream读入数据,并存入给定的对象中
继续两个例子:
栗子(一)
(std::cin>>v1)>>v2;
栗子(二)
std::cin>>v1;
std::cin>>v2;
两个当然是一样的!
完成程序
std::cout<<"This sum of "<< v1<<" and "<< v2 <<" is "<< v1+v2<<std::endl;
恩!看到。。。现实是运算的对象都不是相同类型的值,某些运算对象是字符串字面值常量,算术表达式和int型。
课后习题
一、最简单的输出helloworld
#includeint main(intargc, char** argv) {std::cout<<"Hello,World"<<std::endl;return0;}二、将所有的输出操作都放在独立的语句中
#includeint main(intargc, char** argv) {std::cout<<"Enter twonumbers"<<std::endl;intv1=0,v2=0;std::cin>>v1>>v2;std::cout<<"This sum of ";std::cout<< v1 ;std::cout<<" and ";std::cout<< v2 ;std::cout<<" is ";std::cout<< v1+v2;std::cout<<std::endl;return0;}
三、下面的语句是否合法
std::cout<<"This sum of"<< v1 ;
<<" and "<< v2;
<<" is "<< v1+v2 <<std::endl;
输出运算符“<<”左侧没有运算对象
1-3 注释简介
注释的作用:概括算法,确定变量的用途,或者解释晦涩难懂的代码并且修改代码后要及时更改注释。
C++中注释的种类
两种:
(一)单行注释 //恩我就是注释
(二)界定符对注释
注释界定符不能嵌套
这个就不举栗子了。。。
1-4控制流
1-4-1 while语句
++val;
前缀递增运算符++;val的值在当前行就会发生变化(记得在while判断的时候val++和++val会有不同的结果)。等价于val=val+1;
课后作业时间
一、while循环将50-100的数相加
#includeint main(intargc, char** argv) {//intnum=50;intsum=0;inti=50;while(i<=100){sum=sum+i;++i;//num+=1;}std::cout<<sum<<std::endl;return0;}
二、输出10-0之间的整数
#includeint main(intargc, char** argv) {inti=11;while(i>=1){--i;std::cout<<i<<std::endl;}return0;}三、提示用户输入两个整数,打印出这两个整数所指定的范围内的所有整数
#includeint main(intargc, char** argv) {intv1=0,v2=0;inti=0;std::cout<<"Enter two numbers:";std::cin>>v1>>v2;if(v2>v1){i=v2-v1;while(i>=1){--i;v2--;std::cout<<v2<<std::endl;}}if(v2{i=v1-v2;while(i>=1){--i;v2++;std::cout<<v2<<std::endl;}}return0;}
。。。终于无论正负都行了
1-4-2for语句
while 和for语句的差别
在while循环中检测变量在循环体中递增变量的模式使用非常频繁。。。for可以简化这种循环。
for实现 输出两个整数范围内所指定的整数
#includeint main(intargc, char** argv) {intv1=0,v2=0;inti;std::cout<<"Enter two nums:"<<'\n';std::cin>>v1>>v2;if(v2>v1){intj=v2-v1-1;for(i=0;i++v1;std::cout<<v1<<std::endl;}}if(v2intj=v1-v2-1;for(i=0;i--v1;std::cout<<v1<<std::endl;}}return0;}问题。。。。。。程序
#includeint main(intargc, char** argv) {intv1=0,v2=0;inti;std::cout<<"Enter two nums:"<<'\n';std::cin>>v1>>v2;if(v2>v1){for(i=0;i++v1;std::cout<<v1<<std::endl;}}if(v2for(i=0;i--v1;std::cout<<v1<<std::endl;}}return0;}
1-4-3 读取数量不定的输入数据
当我们使用istream对象作为条件时,其效果是检测流的状态。如果流是有效的,即流未遇到错误时,检测成功,当遇到文件结束符(EOF),或者遇到无效输入时候,istream对象的状态会变为无效,那么istream对象会使得条件变假。
1-4-4 if语句
#includeint main(intargc, char** argv) {intcurrVal=0,val=0;//currVal is the number we are counting ;we'll readvalues into val std::cout<<"Enter some numnbers:"<<'\n';if (std::cin>> currVal){int cnt =1;//store the count for the current value we areprocessing while(std::cin>>val){if(val ==currVal)++cnt;else{std::cout<<currVal<<" occurs " <<cnt<<"times "<<std::endl;currVal =val;cnt = 1;//reset the count }}std::cout<< currVal <<" occurs "<< cnt<<" times "<<std::endl;}return0;}写完这个程序。。。只想说一句窝草!!!
1-1
问题:输完程序当时的情况是这样子的:。。。。就在上面1-1 窝草我的两次1000呢?
原来程序没有中断。。。我个傻逼
中断:window ctrl+z 然后enter
linux Ctrl+d
好了!这一章就这样结束了!
1-5类简介
c++最初设计焦点就是能定义使用上像内置类型一样自然的类类型!
#include#include"Sales_item.h"intmain(){Sales_itembook;//read ISBN,number of copies sold,and salesprice std::cin>>book;std::cout<<book<<std::endl;}
运行结果见下面1-2
这里还有一个关于头文件的问题-》#include"Sales_item.h"
该头文件的代码可以从这里获取
http://www.douban.com/note/270656478/
上面的程序中头文件一个用尖括号,一个用双引号,两者不同之处在与,前者是包含来自标准库的头文件,后者是不属于标准库的头文件。还是很简单的\^0^/
Sales_item对象的加法
下面是一个栗子
#include#include"Sales_item.h"int main(){Sales_itemitem1,item2;std::cin>>item1>>item2;std::cout<<item1+item2<<std::endl;return0;}
1-5-2 初识成员函数
将两个Sales_item对象相加的程序首先应该检查两个对象是否具有相同的ISBN,方法如下:
#include#include"Sales_item.h"int main(){Sales_itemitem1,item2;std::cin>>item1>>item2;if(item1.isbn() == item2.isbn()) {std::cout<<item1+item2<<std::endl;}else{std::cerr<< "Data must refer to same ISBN" << std::endl;return-1;}}
摔!
什么是成员函数?
上面的if 检测条件 item1.isbn() == item2.isbn()中调用名为isbn的成员函数。成员函数是定义为类的一部分的函数,有时候也被称之为方法。
我们通常以类对象的名义调用成员函数。-> item1
我们使用点运算符(.)来表达我们需要“名为item1的对象的isbn成员”,点运算符只能用于类类型的对象。其左侧运算对象必须是一个类类型的对象,右侧运算对象必须是该类型的一个成员名,运算对象为右侧对象指定的成员。
当我们运用点运算符来调用一个成员函数时,我们通常是想调用该函数,我通常通过调用运算符(())来调用一个函数。调用运算符是一对圆括号。。。里面放置的是实参列表,也有可能是空。
习题:
编写程序读取多条销售记录,并统计每个ISBN有几条销售记录
#include#include"Sales_item.h"int main(){//Write aprogram that reads several transactions and counts how manytransactions occur each ISBN//Sales_itemitem;Sales_itemitem1,item2;if(std::cin>>item1){int cnt =1;while(std::cin>>item2){if(item2.isbn() == item1.isbn() ){++cnt;} else{std::cout<< item1<<" occurs " << cnt << " times "<<std::endl;item1 =item2;cnt =1;}}std::cout<< item1<<"occurs" << cnt << "times"<<std::endl;}return0;}
1-6 书店程序
我们需要从一个文件中读取销售记录
生成每本书的销售报告:显示出售册数,总销售额和平均售价。
假设每个ISBN书号的所有销售记录在文件中是聚在一起保存的。
我们的程序将每个isbn的数据合并起来,存入total的变量中,我们使用另一个名为trans的变量保存读取的每条销售记录。如果trans和total指向相同的isbn,我们会更新total的值。否则,我们会打印total的值,并将其重置为刚刚读取的数据(trans):
#include#include"Sales_item.h"int main(intargc, char** argv) {Sales_itemtotal;if(std::cin>>total){Sales_itemtrans;while(std::cin>>trans){if(total.isbn()== trans.isbn()){total +=trans;}else{std::cout<<total<<std::endl;total =trans;}}std::cout<<total<<std::endl;}else{std::cout<<" no data " <<std::endl;return-1;} return 0;}
2016-1-21 13:44
- CPP Primer 5th 笔记(一)
- CPP Primer 学习笔记一
- C Primer Plus,5th Edition 复习(一)
- const笔记(学习c++ primer 5th)
- C++ Primer 5th Edition 笔记
- <C++ Primer 5th 学习笔记>1
- 《C++ primer》5th读书笔记(chapter3)
- 《C++ primer》5th读书笔记(chapter3)
- C Primer Plus 5th 翻译 第四章:字符串和格式化输入/输出(一)
- 《C++ Primer 5th edition》学习笔记(1)
- 《C++ Primer (5th Edition)》笔记-Part I . The Basics
- 《C++ Primer (5th Edition)》笔记-Part IV. Advanced Topics
- C++ primer (5th) 随想与学习笔记 8
- C++ primer 5th 第二章阅读笔记
- 【转】<C++ Primer 5th>Template模板笔记
- 《C++ Primer 4th》学习笔记(持续更新)
- cpp学习笔记(一)
- 学习c++,教材选cpp primer 4th。
- office2007每次打开都要配置文件,怎么取消配置
- 2015 年 Ruby 大盘点
- swift数组与字典
- Linux 双物理网卡绑定成一个虚拟网卡
- 网络加密解密原理(三) RSA加密解密及数字签名Java实现
- CPP Primer 5th 笔记(一)
- 日期类
- Java继承和多态===Java继承的概念与实现
- CSS line-height
- Internship-ZOJ2532(网络流求割边)
- iOS开发之AsyncSocket使用教程
- php敏感词过滤
- Android studio 进行网络连接时,出现 HttpResponse reponse =new DefaultHttpClient().execute(request)处有错误
- springmvc导出excel