大家好,今天屁孩君给大家带来c++入门综合。
文章目录
c++是神马
c++是神马
c++就是一种高级语言,它是由c语言发展而来的,与c并兼容。c语言是1972年由美国贝尔实验室设计而成的。1890年前后,贝尔实验室开始研发c++。c++是一种功能请打的混合型程序设计语言,利用它既可以进行面向过程的结构化程序设计,也可以进行面向对象的程序设计。
发展过程
C++编程语言走到今天已经有将近40年的历史了,那么我们今天就来看看这个发展历程,看我们从一代又一代的C++标准之中能发现什么秘密吧!我们走进C++的世界······
C++的历史可以追溯到1979年,当时Bjarne Stroustrup(译者注:C++之父)正在准备他的博士毕业论文,他有机会使用一种叫做Simula 的语言。顾名思义,Simula语言的主要作用是仿真。Simula 67是Simula语言的一种变种,被公认是首款支持面向对象的语言。Stroustrup发现面向对象的思想对于软件开发非常有用,但是因Simula语言执行效率低,其实用性不强。
不久之后,Stroustrup开始着手“C with Classes”的研发工作,“C with Classes”表明这种新语言是在C基础上研发的,是C语言的超集。C语言以其高可移植性而广受好评,且程序执行速度以及底层函数的性能不受程序移植的影响,Stroustrup要做的就是将面向对象的思想引入C语言。新语言的初始版本除了包括C语言的基本特征之外,还具备类、简单继承、内联机制、函数默认参数以及强类型检查等特性。
Bjarne Stroustrup的第一款“C with classes”编译器叫Cfront,这个名字源自一个叫做Cpre的C编译器。Cfront的机理是把“C with classes”的代码翻译成原生C代码。颇为有趣的一点是Cfront源码大部分是由“C with Classes”编写,这使得Cfront成为了一种自足执行的编译器(可以编译自身源码的编译器)。由于很难整合C++的异常机制,Cfront在1993年退出了历史的舞台,但是它对以后C++编译器以及Unix操作系统的实现都产生了深远的影响。
1983年,“C with Classes”语言更名为C++。C语言中“++”运算子的作用是对一个变量进行递增操作,由此我们多少可以知晓Stroustrup对这种新语言的定位。这个时期,许多重要的特性被加入,其中包括虚函数、函数重载、引用机制(符号为&)、const关键字以及双斜线的单行注释(从BCPL语言引入)。
1985年,Stroustrup的C++参考手册《C++ Programming Language》出版,同年,C++的商业版本问世。由于当时C++并没有正式的语言规范,因此《C++ Programming Language》成了业界的重要参考。1989年,C++再次版本更新,这次更新引入了多重继承、保护成员以及静态成员等语言特性。
1990年,《Annotated C++ Reference Manual》发布,同年,Borland公司的商业版Turbo C++编译器问世。Turbo C++附带了大量函数库,这一举措对C++开发产生了极为深远的影响。虽然Turbo C++上一个稳定的版本发布于2006年,但当前该编译器仍被广泛使用。
1998年,C++标准委员会发布了C++语言的第一个国际标准—ISO/IEC 14882:1998,该标准即为大名鼎鼎的C++98。C++98的提出,《The Annotated C++ Reference Manual》功不可没。同时,1979年开始研发的标准模板库(Standard Template Library,STL)也被纳入了该版标准中。2003年,标准委员会针对98版本中存在的诸多问题进行了修订,修订后发布了C++03。
2005年,C++标准委员会发布了一份技术报告(Technical Report,TR1)详细说明了计划引入C++的新特性。这个新标准被非正式地命名为C++0x,因为其预计会在本世纪第一个十年的某个时间发布。讽刺的是,直到2011年年中该标准才面世,相应的技术文档也随之出炉,一些编译器厂商也开始试验性地支持这些新特性。
2011年中,新的C++标准(C++11)面世。Boost库对该版本影响很大,一些新的模块甚至直接衍生于Boost中相应的模块。一些新的语言特性,包括正则表达式(正则表达式详情)、完备的随机数生成函数库、新的时间相关函数,原子操作支持、标准线程库(2011之前,C和C++语言均缺少对线程的支持)、一种能够和某些语言中foreach语句达到相同效果的新的for语法、auto关键字、新的容器类、更好的union支持、数组初始化列表的支持以及变参模板的支持等等。
2014年8月18日,经过C++标准委员投票,C++14标准获得一致通过。C++14标准是‘ ISO/IEC 14882:2014 Information technology – Programming languages – C++’ 的简称 。在标准正式通过之前,原名C++1y。C++14标准的委员会草案N3690于2013年5月15日发表。草案文档经过一定的文字润色和修正之后,将在年内提交给ISO作为正式的C++标准发布。
C++17 是继 C++14 之后,C++ 编程语言 ISO/IEC 标准的下一次修订的非正式名称。而就在2017-12-5,ISO C++ 委员会正式发布了 C++ 17 标准,官方名称为 ISO/IEC 14882:2017。基于 C++ 11,C++ 17 旨在使 C++ 成为一个不那么臃肿复杂的编程语言,以简化该语言的日常使用,使开发者可以更简单地编写和维护代码。
Dev-c++
Dev-C++是一个Windows环境下C/C++的集成开发环境(IDE),它是一款自由软件,遵守GPL许可协议分发源代码。它集合了MinGW等众多自由软件,并且可以取得最新版本的各种工具支持,而这一切工作都是来自全球的狂热者所做的工作。Dev-C++是NOI、NOIP等比赛的指定工具,缺点是Debug功能弱。由于原开发公司在开发完4.9.9.2后停止开发,所以现在正由其它公司更新开发,但都基于4.9.9.2.Dev-C++ 最新版本:5.11。
头文件
头文件
#include
头文件是c++程序对其他程序的应用,本列中的#include就是让编译器的预处理器把这个输出输出流的标准头文件iostream包含到本程序中,为本程序提供输入或输出时所需要的一些信息。include是预处理命令,是一个“包含指令”,它并不是c++中的一个语句,所以末尾没有语句分隔符“;”,使用是以“#”开头。iostream是输出输出流的标准头文件,因为这类文件都是放在程序单元的开头,所以称为“头文件”。
命名空间
命名空间
using namespace std;
是一句指明程序采用的命名空间的指令,表示使用命名空间std(标准)中的内容。采用命名空间是为了解决多人同时编写大型程序是名字产生冲突的问题。
主函数
主函数
主函数是main,main函数不能重载,也不能调用自己,每个程序必须有main函数,而且只能有一个。
#include<iostream>
using namespace std;
int main()
{
}
main函数是可以调用其他函数的。其它函数呢是是可以自定义的,函数呢有自己编写的,还有编译器里有的。
输出与输入
输出与输入
输出:cout 输入:cin
#include<iostream>
using namespace std;
int main()
{
cout<<"春眠不觉晓,处处闻啼鸟"<<endl;
return 0;
}
在c++中,输出和输入使用“流”的方式实现的,在定义流对象时,系统会开辟一段缓冲区,用来暂存输出输入的数据。
cout语句的格式一般为:
cout<<项目1<<项目2<<…<<项目n;
cout语句的作用是将流插入运算符“<<”右侧的项目内容插入输出流中,c++系统再将输出流的内容输出到系统指定设备(一般为显示器)上。
cout<<“春眠不觉晓,处处闻啼鸟”<<endl;的含义即在屏幕上输出“春眠不觉晓,处处闻啼鸟”然后换行。
cin的格式一般是:
cin>>项目1>>项目2>>…>>项目n;
变量,表达式与赋值语句
变量,表达式与赋值语句
题目为:天安门广场南北长为880米,东西宽为550米,求天安门面积。
下面这个是代码!
#include<iostream>
using namespace std;
int main()
{
int a,b,s;
a=880;
b=500;
s=a*b;
cout<<"天安门广场面积:";
cout<<s<<"平方米"<<endl;
return 0;
}
变量必须先定义后使用。变量a,b,s,它们是整型变量,可一把整数赋值给a,b,s。若把小数这样的非整数赋值给a,b,s,系统会自动取整,截去小数部分。
变量名只能由字母,数字,下划线3中字符组成,且第一个字符不能为数字。变量名是一种标识符。
如果没有按照变量名的要求就会出现这种情况
啊哈哈哈哈哈哈!我们继续!
setw()
题目是:请在屏幕上输出18+870的竖式计算。
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a,b,c;
a=18;
b=870;
c=a+b;
cout<<setw(10)<<a<<endl;
cout<<setw(4)<<'+'<<setw(6)<<b<<endl;
cout<<"-----------"<<endl;
cout<<setw(10)<<c<<endl;
return 0;
}
使用setw操作符前,必须包含头文件iomanip,即#include。头文件iomanip用来声明一些“流操作符”也就是输出操作符,需要按一定个事输出输入时,就需要用到它,比较常用的有设置域宽,是只左右对齐,是指实数的精确度等。
使用setw操作域宽时,默认为左右对齐,setw操作符只对直接跟在后面的输出数据起作用。如果输出数据所需的宽度比设置的域宽小,默认用空格充填;如果输出数据所需的宽度比设置的域宽大,输出数据并不会被截断,系统会输出所有位。例如程序中setw(10)在输出时分配了10个字符的宽度,而变量a的知识18,只有2个字符宽度,则在前面不八个空格。
if语句与else语句
给大家举个栗子吧!
if语句是一个关系表达式,关系表达式的值是一个逻辑值,即“真”或“假”,如果条件成立,其值为真;如果
条件不成立,其值为假。如70>=60的值为真,3%2==0为假。
在c++中,数值非0表示真,也就是数值不等于0,数值0表示假,不过这种只在if语句中存在,比如说下面这段,0既可以是真,也可以是假
#include<iostream>
using namespace std;
int main()
{
int a;
bool flag;
cin>>a;
if(a==8)
{
flag=1;
}
else
{
flag=0;
}
cout<<flag<<endl;
return 0;
}
#include<iostream>
using namespace std;
int main()
{
int a;
cin>>a;
if(a==7)
{
cout<<"yes"<<endl;
}
return 0;
}
先定义一个n,再输入n,如果n等于7,就输出yes,这个代码大家能看懂的呀。那好,我们继续。
我们现在开始讲else,else是个神马东东呢,其实,就是if的反义词,大家猜一下,对了,就是否则。上代码!
#include<iostream>
using namespace std;
int main()
{
int a;
cin>>a;
if(a==7)
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
return 0;
}
还是先定义一个n,再输入n,如果n等于7,就输出yes,否则就输出no,注意这里这个否则是没有判断的,除了前面的一个if里的除外,都要输出no,如果有判断条件呢?上代码!
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int a;
cin>>a;
if(a==7)
{
cout<<"yes"<<endl;
}
else if(a==8)
{
cout<<"no"<<endl;
}
return 0;
}
我现在改成了有判断条件的,输入9,它神马也没有输出,因为除了7和8,它都是神马也不输出。
逻辑变量
逻辑变量:bool
逻辑变量用关键词bool定义,所以又称为布尔变量,其值只有两个,false(假)和true(真),false和true是逻辑变量,又称布尔常量。
来个题吧!
小静家里的灯全是线型开关,拉一下开,再拉一下关,小静觉得很好玩,有一次连拉了五下,这时灯是亮的还是灭的呢!
来吧,给你们个提示,需要用反向操作!
我现在开始公布答案了!
#include<iostream>
using namespace std;
int main()
{
bool a=false;//一开始灯是灭的
a=!a;//反向操作
a=!a;
a=!a;
a=!a;
a=!a;
if(a==true)
{
cout<<"亮"<<endl;
}
if(a==false)
{
cout<<"灭"<<endl;
}
return 0;
}
等我们学了for循环以后,就还有一种方法了!
我先给大家看看吧!
#include<iostream>
using namespace std;
int main()
{
bool a=false;//一开始灯是灭的
for(int i=1;i<=5;i++)//循环五次
{
a=!a;//反向操作
}
if(a==true)
{
cout<<"亮"<<endl;
}
if(a==false)
{
cout<<"灭"<<endl;
}
return 0;
}
for循环呢我定义了一个局部变量i,i从1开始,加到5,刚好5次,每循环一次就会反向操作一次。
逻辑运算符
逻辑运算符:与(&&),或(||),非(!),被称为“与或非三兄弟”。
逻辑与:当表达式进行与(&&)运算时,两个或多个条件中,只有所有的值均为true(对),整个表达式的值才为true;只要有一个条件为false,整个表达式的值就为false。
逻辑或:当表达式进行逻辑或(||)运算时,两个或多个条件中,只要有一个值为true,整个表达式的值就为true;只有所有条件都为false时,表达式的值才为false。
逻辑非:当表达式进行逻辑非(!)运算时,!true的值为false,!false的值为true。
来给大家一个超级简单的题做一下
小明和小静玩报数游戏,若小明报的数是3和5的公倍数,小静就说欧耶欧耶,其它数则不出声。
废话不多说,直接上代码!
#include<iostream>
using namespace std;
int main()
{
int a;
cin>>a;
if(a%3==0&&a%5==0)
{
cout<<"欧耶欧耶"<<endl;
}
return 0;
}
首先定义一个a,输入a,如果a能被3和5整除,就输出欧耶欧耶。
逻辑运算符的优先级
我们先来上一段代码!
#include<iostream>
using namespace std;
int main()
{
bool flag;
int a;
cin>>a;
if((a%4==0&&a%100!=0)||a%4==0)
{
flag=true;
}
else
{
flag=false;
}
if(flag)
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
return 0;
}
大家知道是什么题了吗!
对了,就是闰年的题!
很多刚接触c++的朋友可能会把最后的一个if语句写成:
if(flag==true)
{
cout<<"yes"<<endl;
}
else
{
cout<<"no"<<endl;
}
从语法,逻辑,运行结果的角度看,都没有错,但是flag=true的结果是布尔型,和flag是一样的,直接写“flag”更简洁一些。
当然把表达式写成“flag==1"也是可以的。
我们来学习一下运算符三兄弟的优先级,优先级由高到低为:!>&&>||。
Switch
首先给大家来点小知识,避免等会听的云里雾里的,哈哈,switch:条件选择;开关。case:情况。break:终止。default:默认;系统默认值。
用if语句处理多个分支时需使用if-else-if结构,分支越多,嵌套的if语句层就越多,程序不但庞大而且理解也比较困难。c++提供了一个专门用于处理多分支机、结构的条件选择语句,称为switch语句,又称开关语句。它可以很方便地实现深层嵌套的if-else。
switch语句一般使用如下格式:
switch(表达式)
{
case 常量表达式1:语句1;break;
case 常量表达式2:语句2;break;
…
case 常量表达式n:语句n;break;
default:语句 n+1;break;
}
先计算switch表达式的值,当表达式的值与某个case子句中的常量表达式相匹配时,就执行case子句中的内嵌语句,并顺序执行之后的所有语句,直到遇到break语句为止;若所有的case子句中常量表达式的值都不能与switch表达式的值相匹配,就执行default子句中的内嵌语句。
switch后面括号内的表达式,可以是整型,字符型,布尔型。每一个case表达式的值必须不同,否则就会出现相互矛盾的现象。若各个case和default子句中都有break语句,则他们的出现次序不影响执行结果,因为break的作用就是终止,有了break,他一发现匹配的就会输出然后终止,不用再继续往下走了;case子句中可一包含多个执行的语句,不必用花括号括起来。
接着,来到题给大家做一下,上代码!
#include<iostream>
using namespace std;
int main()
{
int m,n,ans;
cin>>m>>n;
switch(n)
{
case 0: ans=1;break;
case 1: ans=m;break;
case 2: ans=m*m;break;
case 3: ans=m*m*m;break;
case 4: ans=m*m*m*m;break;
default: ans=-1;break;
}
if(ans==-1)cout<<"???"<<endl;
else cout<<ans<<endl;
return 0;
}
如果我输入5和3,它会输出神马呢?
来,我来给大家讲讲,首先它定义了一个m,n,ans,输入m和n,第一种情况是n=0,那ans就等于1,第二种情况是n=1,那ans就等于m,第三种情况是n=2,那ans就等于mm,第四种情况是n=3,那ans就等于mmm,第五种情况是n=4,那ans就等于mmmm,default的作用就是如果
以上五种情况都不匹配的话,ans就等于-1,所以输出的就是125,
for循环
for循环最常用的格式为:
for(循环变量赋初值;循环条件;循环变量增值)
语句;
给大家举个栗子,上代码!
首先定义n和i,把n的初值设为9,for循环里i=1;i<=n;i++;for循环里还有一个输出,
所以会把i输出。
再来看看这代码
他每循环一次就会输出一颗星。
再来给大家讲讲双重循环
双重循环也就是for循环里再套一个for循环,大家一定要记住,双重循环里千万不要用同一个变量,不然容易出错。
大家注意看我用红笔画的那 ,我用了一个q。
大家做一下这道题,上代码!
#include<iostream>
using namespace std;
int main()
{
int i;
for(i=1;i<=5;i++)
cout<<'*';
cout<<i<<endl;
return 0;
}
大家算一下。
我现在来给大家讲一下吧!
先定义一个i,再用一个for循环,循环五次,所以就输出五颗星,最后输出i,换行,所以输出来就是*****6,知道为神马是6吗?因为当i变成五是,它还是满足条件的,所以它还会增加。
再来给大家做一道完善程序
上代码!
这个题目求的是1到100的所有整数。
#include<iostream>
using namespace std;
int main()
{
int i;
for(i=1;______;_____)
cout<<i<<endl;
return 0;
}
好了,我来讲一讲吧,这道题应该挺简单的,for(i=1;i<=100;i++)或者也可以写成for(i=1;i<=100;++i)++i和i++是没有区别的,完全看个人喜好。
还有一个重点,如果for语句里只有一句,那么可以不用花括号括起来,只要缩进后再写就行了。
continue语句
在学习continue语句时,我们需要用一段代码让大家更好地理解!
这是题目:小静和朋友们玩一个游戏,逢7必过,大家围在一起,从一开始报数,但逢7的倍数或是尾数是7,则不去报数,要喊过!
上代码!
#include<iostream>
using namespace std;
int main()
{
for(int i=1;i<=20;i++)
{
if(i%7==0||i%10==7)
{
cout<<"过"<<" ";
}
else
cout<<i<<" ";
}
return 0;
}
但是这似乎有点麻烦!
#include<iostream>
using namespace std;
int main()
{
for(int i=1;i<=20;i++)
{
if(i%7==0||i%10==7)
{
cout<<"过"<<" ";
continue;
}
cout<<i<<" ";
}
return 0;
}
这是用上了continue的语句,continue的作用为提前结束本次循环,不用再往下走了,然后跳到下一次循环里,但不是终止整个循环,只是跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定,如果能被7整除或末尾是7就输出过,并且跳到下一次循环里!
break语句
break语句是提前结束整个循环过程,不在判断执行循环的条件是否成立。continue语句只是结束本次循环,而不是终止整个循环的执行。
while循环
有时候,我们做有些题目时要用到while循环的死循环,为神马不用for循环呢?for循环不能一直运转下去,而while循环是可以一直运行的,之中情况就叫死循环,而有时会不小心出发死循环,那你就凉凉喽!不用怕,只要你仔细就不会错的啦!
先来上段代码!
#include<iostream>
using namespace std;
int main()
{
int n=1;
while(n<10)
{
cout<<n<<endl;
n++;
}
}
这代码就是输出1到10的数。
接下来给大家看一下死循环的代码!大家知道制造死循环需要那几点需求吗,其实只要一点就够了,就是while循环后面的圆括号里的数一定要大于0,
#include<iostream>
using namespace std;
int main()
{
while(1)
{
cout<<"点个关注吧!"<<endl;
}
return 0;
}
大家可以去测试一下这个代码的结果呦!
还可以这样写!
#include<iostream>
using namespace std;
int main()
{
while(100)
{
cout<<"点个关注吧!"<<endl;
}
return 0;
}
结果都是一样的。
多重循环
大家知道多重循环是神马吗?其实双重循环跟普通的循环差不多,只是在单个循环里再嵌套几个循环,其实循环可以随便有几个,只要你不崩溃!
给大家举个栗子!
#include<iostream>
using namespace std;
int main()
{
int n,i,num;
for(i=1;i<=10;i++)
{
for(n=1;n<=i;n++)
{
num=num+n;
}
}
cout<<num<<endl;
return 0;
}
这段代码会输出220。
#include
using namespace std;
int main()
{
int n,i;
for(i=1;i<=10;i++)
{
for(n=1;n<=i;n++)
{
cout<<“点个关注吧!”<<endl ;
}
}
return 0;
}
大家可以去编译器里看一下结果(逃)
再给大家来段代码!
#include<bits/stdc++.h>
using namespace std;
int main()
{
int i,j;
for(i=1;i<=9;i++)
{
for(j=1;j<=i;j++)
cout<<j<<'*'<<i<<'='<<setw(2)<<i*j<<" ";
cout<<endl;
}
return 0;
}
大家看这段是不是很眼熟,对啦,就是乘法表,大家可以好好背一下哦!(逃)
数组
c++提供了数组的功能,来处理有内在联系和相同属性的数据。
定义一维数组的一般形式为:
类型名 数组名[常变量表达式];
如a[10];这就定义了一个数组a,其包含a[0],a[1],a[2],…,a[9] 10个数组元素。
数组名的命名规则和变量名一样,遵循标识符命名规则;在数组定义是用方括号括起来的常变量表达式的值表示元素的个数,即数组长度,下标从0开始,如上例最后一个元素是a[9],而不是a[10];如果在程序中使用了超过范围的元素,那结果就会产生错误,但不会报错,在数组元素访问时,用方括号括起来的表达式表示元素的下标;数组往往与循环语句结合使用。
好了,屁孩君就给大家分享到这里了!我们下次再见!