C++入门
前言:
作为双非院校的一名大一新生,我也是第一次接触到蓝桥杯这个竞赛,也是怀着些忐忑心情写下这篇文章,也是我备战第十六届蓝桥杯C++组的伊始,不论结果怎样,我相信在这个过程我一定能够会成长许多。
一、第一个C++程序分析
1.第一个程序
#include<iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
return 0;
}
2.main函数
main函数是一个程序的入口,C++的程序不管有多少代码,都是从main函数开始执行的,它也被叫做:主函数。main 前面的int 表示main函数执行结束时返回一个整型类型的值,所以在main函数的最后写return 0所以我们也可以总结为以下两点:
1.main函数有且只有一个
2.一个项目中可以有多个.cpp文件,但是只能有一个main函数(程序的入口只有一个)
3.头文件
在C++中的头文件是#include< iostream >
iostream文件中的io指的是输入(给程序输入数据)和输出(程序把数据打印屏幕上)。
所以在C++中的编译器自带了很多的头文件,每种头文件都支持一组特定的工具。
所以我们可以通过资料查询
C++库函数相关头文件:https://zh.cppreference.com/w/cpp/header
如果我们在代码中用了某个头文件的定义,就必须要包含对应的头文件
注意:
1.由于C语言的头文件扩展名为.h,但是在C++中的用法,对一些特殊的C语言的头文件仍保留.h的扩展名。但是C++的头文件没有了扩展名。
*2.在C++的某些C语言的头文件去掉了.h的扩展名,在其原文件名前加上了前缀C(表示来自为C语言)。
4.cin和cout初识
上面代码中cout << "Hello World!" << endl;
这句代码可谓是上面最重要的代码。
代码中cout是标准输出流对象(针对的控制台);cin则是标准输入流对象(针对的是键盘)。
- cin和cout是全局的流对象,cin负责输入数据,cout 负责输出数据
- endl是C++中的一个操作符,用来换行和刷新缓冲区,在使用的同时必须包含在iostream头文件
- <<流插入运算符,与其cout配合使用,>>流提取运算符,与cin配合使用。
- 用C++输入输出更为方便,不需要再像C语言的scanf和printf一样去手动控制格式,C++的输入输出可以自 动识别变量类型。
5.命名空间
using namespace std;
这句代码意思为使用名字空间std;
在C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称如果都存在于全局作用域中,可能会导致很多冲突。使用名字空间的目的是对标识符的名称进行隔离,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题的。
std 是C++标准库的名字空间名,C++将标准库的定义实现都放到这个命名空间中。
using namespace std这种方式命名方式较为简单粗暴,在这个std的空间各种定义都可以去使用,但是我们通常是会去使用部分的
#include<iostream>
int main()
{
std::cout << "Hello world" << std:: endl;//这么做就相当于只需要向std申请使用 cout,endl。
return 0;
}
注意:
这种形式的在正常的软件开发(企业)中经常使用;这么做会避免名字冲突,然而在竞赛中会比较麻烦。
二、数据类型
1.字符型——char
字符就是单引号括号括起来,如’a’,‘b’,'@'等
char //character
unsigned char //无符号字符型
(signed) char //有符号字符型
2.整型 ——int
//短整型
short (int)
(signed) short (int) //有符号的短整型
unsigned short (int) //不带符号的短整型
//整型
int
(signed) int //有符号的整型
unsigned int //不带符号的整型
//长整型
long (int)
(signed) long (int) //有符号的长整型
unsigned long (int) //不带符号的长整型
//更长的整型
long long (int)
(signed) long long (int) //有符号更长的长整型
unsigned long long (int) //不带符号的更长的长整型
signed关键字:表示一个类型有正负号,包含负值。
usigned关键字:表示该类型不带有正负号,只能表示0和正整数。
一般情况,signed关键字省略不写,写了也不算错。
声明为usigned好处可以是使得同样的长度的内存能够表示的最大的整数值增大了一倍。
char类型的到底是signed char还是usigned char,由编译器决定。大部分的编译器上char就是signed char。
所以也就是说char不同于signed char;它就有可能为unsigned或者是signed;这与int不同,int就是等同于
signed int。
3.浮点型
float //单精度浮点型
double //双精度浮点型
long double //更长的双精度浮点型
4.布尔类型——bool
C++中有一种类型为bool类型,它的变量的值为true和false,该种类型的变量专门表示真假;当然C++和C语言一样可以用0表示假,非0表示真。
//代码1;
#include<iostream>
using namespace std;
int main()
{
bool flag = ture;
if (flag)
printf("C++!\n");
return 0;
}
//代码2;
#include<iostream>
using namespace std;
int main()
{
bool flag = 0;
cin >> flag ;//如果输入非零的值,那么flag就表示为真
if (flag)
printf("C++!\n");
return 0;
}
三、数据类型的范围取值
其实每一种类型均有自己的取值范围,所以我们可以根据不同的场景去选择不同的合适的数据类型
可以通过系统查看数据的极限值
climits文件中说明整数类型的取值范围
1 #define SHRT_MIN (-32768) //有符号16位整型的最小值
2 #define SHRT_MAX 32767 //有符号16位整型的最大值
3 #define USHRT MAX 0xffffu //无符号16位整型的最大值
4 #define INT_MIN (-2147483647-1) //有符号整型的最小值
5 #define INT_MAX 2147483647 //有符号整型的最大值
四、变量
1.变量的创建
在C++中,类型是用来创建变量的
把经常变化的值称为变量,不变的值称为常量。
变量的创建语法
data_type name ;//data_type 数据类型
#include<iostream>
using namespace std;
int main()
{
int num;
int age;
double
return 0;
}
变量名不能为关键字,要以字母,下划线开头
变量在创建的时候要给一个初始值,这叫做初始化。
2.变量的分类
全局变量:在大括号外部定义的变量就是全局变量,全局变量的使用的范围更广,在整个工程都可以使用。
局部变量:大括号内部定义的变量就是局部变量,局部变量的使用的范围比较局限,仅在自己的局部范围的内部使用。
注意:局部变量一般需要去进行初始化
#include<iostream>
using namespace std;
int m=100; //全局变量
int main()
{
int m=10; //局部变量
cout << m << endl;
return 0;
}
但是上述代码出现了两者变量名相同的情况,那么此时会优先使用局部变量。若我们想要使用
全局变量的话,那么可以
#include<iostream>
using namespace std;
int m=100;
int main()
{
int m=10;
cout << ::m << endl;
return 0;
}
注意:
如果一个题目既可以使用全局变量,又可以使用局部变量,那怎么选择呢?
如果是在竞赛中:
能使用全局变量,一般会直接是全局变量,这样的好处是:
1.变量不需要初始化,因为默认会初始化为0,这样写会比较快。
2,很多时候,会避免传参,因为全局变量到处都可以使用。所以在竞赛中其实哪种方便就使用哪种,全局变量的使用是会变的很常见。
但是在企业里软件开发的工程实践中一般建议:能使用局部变量的,尽量少使用全局变量。因为企业级的
开发,代码量比较大,全局变量在任意地方都可以使用,这样就变得不可控了.