您的位置:首页 > 编程语言 > C语言/C++

C++primer(第五版) 第一章 学习笔记

2016-09-24 22:39 190 查看
Ⅰ. 算法:交换两个变量的值

(P11 1.4.1节 练习1.11)

方法1.标准算法

int a,b,t;
t=a;
a=b;
b=t;


方法2.算术运算

int a,b;
a=b-a;//或者 a=a+b;
b=b-a;//b=a-b;
a=b+a;//a=a-b;


方法3.位运算

int a,b;
a=a^b;
b=a^b;
a=a^b;//任意一个数与任意一个给定值连续两次异或值不变


方法4.指针地址运算

if(a>b)
{
a=(int*)(b-a);
b=(int*)(b-(int(a)&0x0000ffff));
a=(int*)(b+(int(a)&0x0000ffff));
}
else
{
b=(int*)(a-b);
a=(int*)(a-(int(b)&0x0000ffff));
b=(int*)(a+(int(b)&0x0000ffff));
}


Ⅱ. 文件结束符

1.(P14 从键盘输入文件结束符)

对流结束标志检查的方式有两种:阻塞式和非阻塞式。

①.阻塞式检查方式:只有在回车键按下之后才对此前是否有 Ctrl+Z 组合键按下进行检查。

②.非阻塞式检查方式:按下 Ctrl+D 组合键之后立即响应。

Windows系统中一般采用阻塞式检查 Ctrl+Z。

Unix/Linux系统下一般采用非阻塞式的检查 Ctrl+D。

阻塞式检查方式的特点:

①.只有按下回车之后,才会把数据放入缓冲区,并检测在此之前是否有Ctrl+Z按下。

②.如果输入缓冲区中有可读的数据则不会检测Ctrl+Z(因为有要读的数据,还不能认为到了流的末尾)。

注意:

①.如果Ctrl+Z位于一行的中间,则系统会读取这个无意义的字符,但是后续的字符并不是读取,而是直接丢弃(因为Ctrl+Z产生的不是一个普通的ASCII码值,也就是说它产生的不是一个字符,所以不会跟其它从键盘上输入的字符一样能够存放在输入缓冲区)。

②.输入流结束的条件就是:^Z (Ctrl+Z)之前不能有任何字符输入(回车除外),否则 ^Z 起不到流结束的作用。

因此,结束时需要先按下回车,然后输入Ctrl+Z,最后连续按两次回车。

参考:

cin中Ctrl+Z无法结束的问题

Window对于cin输入流结束的判断

2.(P15 1.4.4 if语句)

书中if语句的程序在VC++6.0中运行时,无法出现书中的演示输出。

输入一行数字后,按下回车,除最后一组同类数字外全部输出,再按下回车,键入Ctrl+Z,两次回车后,最后一组同类数字的结果才会输出。

暂时不知道原因。

Ⅲ. 编程方法

(P20 1.5.1节 练习1.20)

读取一组书籍销售记录,将每条记录打印到标准输出上。

方法1.对象数组

int main()
{
Sales_item item[10];
int i=0;
while(std::cin>>item[i])
i++;
for(int j=0;j<i;j++)
std::cout<<item[j]<<std::endl;
return 0;
}


方法2.对象指针???
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++primer