第二讲:阅读C++代码
程序版本vc2010express
在学习第二节的时候,我将程序的代码敲进了VC2010,然后运行程序,但是随之出现了一个问题,那就是无论我怎么将数字输入计算机,他始终对于我的千呼万唤没有反应,怎么找也不生成那个想要的max=,min=。个人估计是X从开始赋值起,就始终是个数,于是在生命了X这个变量的语句后,加了一行代码:std::cout<<”x=”<<x<<’\n’,运行结果如下图,x的初始值就是一个数字,但是这个数字并不确定是一个随机生成的数字。次外他总是很大,生成的最小的数字是2xxxxxx。
程序的开始有一个///符号,实际上//便足以表达出注释的意思,作者的意思是这里另有一层深意。
第三至六行,则就是包含各种#include什么的那几行导入了标准库的部分生命和定义,C++和C一样,区分核心语言和标准库。这里需要注意的是标准语言和核心语言的区别,核心语言的很多类型是语言内建的,因此变异器会自动对齐提供支持,而其他类型是内建类型,他们在标准库里声明,需要编译器将其导入,在这里#include<iostream>将标准输入输出的名字()告知编辑器,而#include<istream>获取了输入操作符(>>)的定义,第#include<limits>行引入了名字numeric_limits,第六行#include<ostream>引入了输出操作符(<<).请注意,来自标准库的名字常常以std::也就是standard的缩写开头。
#include用来将各种各样的标准库,比方说输入输出流啊什么从库里导入,因为编译器是死脑筋所以我们需要将所有要导入的东西很精确的写入,写错了他就认不出来了。这里我们将#include<limits>打错打成#include<slimit>,不出所料,报错了~
~好吧,我们接着说,大部分程序员并不喜欢使用<limits>,因为他只使用到了std::numeric_limits的定义。然而每本书都使用了<iostream>,他声明了I/O对象的名字:std::in和std::out,<istream>和<osteam>则分别声明了>>和<<
第八行也就是intmain(),叫做程序的主体,啊,对了有的人说main是以void开始的,实际上这是错误的。如果你依然这样认为可以去看看C++标准的3.6.1节,你说我看了吗?我当然,还没看,不顾我要去看,因为我不信!
现在我们将main,改写成MAIN来试一试,。。。vc区分大小写吗?
记住它吧,vc区分大小写,不要随便写大小写,最好区分开至少使用vc2008和vc6.0是区分大小写的,所以如果你用的是vc2010 express版本吧,就不要随便大小写了~
从第10行到第13行,也就是那个intmin(xxxxx);
int max(xxxxx);
int x;
bool any(faluse)
这里的bool变量赋初始值为faluse,也就是假:变量名后面可以加上括号,括号之中协商变量的初值。名字std::numeric_limits属于C++标准库,用来查询内置算数种类的属性,可以确定一个类的属性。完全可以把想要查询的类型写到limits后面的尖括号里面,比方说
Std::numeric limits<bool>::min()返回的就是bool类型的最小值,这里就是falus了,现在让我们来编译另一段代码:
#include<iostream>
#include<limits>
#include<ostream>
int main()
{
//注意digits是二进制位,也2就是bit
std::cout<<std::numeric_limits<bool>::digits<<'\n';
}
你觉得结果会是什么呢?猜一猜,想一想。你问我啊,我也不知道啊,如果说min’是返回最小值,那么digits是什么?返回位数吗?返回bool变量究竟占多少位?我觉得是占一位吧,你想啊,bool’变量为0的时候就是假,为1就是真,这不意味就够了?来我们试一下
不出所料啊,哈哈哈,就是1啊。哈哈,少年你猜对了吗?,好吧,现在我们还是回到前面的程序去吧
好了,这回我们接着说这一会我们要说语句了,啊,语句是什么啊,就是那一大堆的什么int啊,while啊,这些都是语句~我们一点一点的看:)
那句std::cout<<"x="<<x<<'\n'; 的意思是输出x,std::cout是标准输出的意思,<<是输出连接符,也就是告诉编译器,要将这玩意后面的东西输出去了~,后面不是跟了一个“”的东西吗,他会把“”离得东西原样输出,那么我们看后面又有一个《x的意思是什么呢?
你猜对了吗?就是输出x的意思,x是什么?那不就是前面的变量吗?啊,你又问后面那个/n是什么,唉,悟空,你又淘气了,这种事情为师不做,自己去google吧,不要百度呦亲~
While是一种循环的方式,他后面的()往往里面回添加一个布尔型等式时,会判断这个等式的真假,为真是执行循环,为假是则不运行循环,因此如果你一开始就输入a啊,这样的变量程序会输出,返回的int类型的最大值和最小值,好吧,不要告诉我你忘了numeric_limits是什么意思,否则前面岂不是白说了。
Std::cin>>x 的意思是将输入的值赋值到x里,成功的话循环继续进行,不成功的话则停止循环,现在我们向下看,现在我们来改改程序,将if(x<min)改成if(x),想想看程序会怎么样。
不不不,编译器不会报错的,他为什么要报错,他有你聪明吗?他不知道你这程序是干什么的,更别提说纠出这样的错误了,运行一些看一下结果。
我输入的变量是3 2 1 0,结果是
你看我从新输入了,0 1 2 3
为什么?提示是if(x)对于里面的整型变量x,只有在x=0的情况下认为他是假的,其他情况,比方说x=1,x=2,啊什么的认为if成真了,啊,对了if是判断真假的语句。
好了,这一节马上就要结束了,我们最后看输出,也就是std::out,这个式子在#include<ostream>语句中被声明,ostream中同样有对于输出连接符也就是>>的声明,如果我想输出一个字母,那么我只需要在他两旁加上‘’就可以,就像这样 ‘a’,’b’,’c’,字符串神马的输出就需要加上“”号了,比方说”hello world!”,啊,对了没事干多打hello world,经典字符啊。Ok第一节完了,祝你happy,我去打战地去了~
附录程序代码:
//阅读这段程序,确定此程序的功能
#include<iostream>
#include<istream>
#include<slimit>
#include<ostream>
int main()
{
intmin(std::numeric_limits<int>::max());
intmax(std::numeric_limits<int>::min());
bool any(false);
int x;
std::cout<<"x="<<x<<'\n';
while(std::cin>>x)
{
any=true;
if(x<min)
min=x;
if(x>max)
max=x;
}
if(any)
std::cout<<"min="<<min<<"\nmax ="<<max<<'\n';
//需要注意的是这里的程序如果你不输入一个字母,而只是简单的
//而只是简单输入回车的话,那么程序并不会输出,不知道x生成的时候究竟是多少
//我在这里添加了一句话程序里面本来没有的话,office巅峰缩进真心蛋疼了~!!!
}
#include<iostream>
#include<limits>
#include<ostream>
int main()
{
//注意digits是二进制位,也就是bit
std::cout<<std::numeric_limits<bool>::digits<<'\n';
}