C++入门(1)

1.第一个C++程序

1.1基础程序

cpp 复制代码
#include"iostream"    //头文件
using namespace std;  //使用std的名字空间

int main()    //main函数
{
	cout<<"Hello world"<<endl;   //输出
	return 0;
}

1.2main函数

main函数是程序的入口,C++的程序不管有多少行代码,都是从main函数开始执行的,main函数也被叫做:主函数。main前面的int表示main函数执行结束的时候返回一个整型类型的值,而在main函数的最后写return 0;正好前后呼应。

  • main函数是程序的入口
  • main函数有且仅有一个
  • 一个项目中可以有多个.cpp文件,但是只能有一个main函数。

1.3字符串

在C语言中,使用单括号括起来一个字符,表示字符字面值,比如:'1','a',使用双括号括起来多个字符表示一个字符串,比如"abcdef","hello world",字符串中可以有一个或者多个字符,也可以没有任何字符,""表示空字符串。

在C++的STL中又引用string来表示字符串,但是C语言却不支持。

1.4头文件

在上面代码中,写的#include<iostream>,就是在包含头文件,头文件的名字叫做:iostream。使用#include<>的形式进行包含。iostream文件中的io指的是输入和输出。

在C++程序中要完成输入和输出的操作会涉及到iostream文件中的多个定义,所以就要包含这个头文件。

在代码中cout是输出流对象,就是用来完成数据输出的,就是需要包含头文件。

注:

  1. 在C语言中头文件的扩展名是.h,但是C++中的用法发生了一些变化,对老式C的头文件保留了扩展名.h,但是C++自己的文件没有扩展名。
  2. 有些C的头文件被转换成C++头文件,这些文件名被重命名,去掉了.h扩展名,并在文件名的前面加上前缀的c。

头文件的命名约定:

|---------|------------|----------------|---------------------------|
| 头文件类型 | 约定 | 实例 | 说明 |
| C++旧式风格 | 以.h结尾 | <iostream.h> | C++程序可以使用,一些新的IDE可能不再支持 |
| C旧式风格 | 以.h结尾 | <math.h> | C、C++程序可以使用 |
| C++新式风格 | 没有扩展名 | <iostream> | C++程序可以使用,使用namespace std |
| 转换后的C | 加上前缀,没有扩展名 | <cmath> | C++程序可以使用,可能包含不是C的特性 |

1.5cin和cout初识

cout<<"Hello world"<<endl;这句代码在上面的程序中是最重要的代码,其他所有的代码都是为了编写这句代码。

代码中的cout是标准输出流对象,其实还有标准输入流对象cin

cpp 复制代码
#include<iostream>
using namespace std;

int main()
{
	int num;
	cin>>num;
	cout<<num<<endl;
	return 0;
}
  1. cin和cout是全局的流对象,cin负责输入数据,cout负责输出数据。
  2. endl是C++中一个特殊的操作符,效果是换行和刷新缓冲区,使用时必须包含在iostream头文件。
  3. <<是流插入运算符,和cout配合使用,>>是流提取运算符,和cin配合使用。
  4. 使用C++输入输出更方便,不需要printf和scanf输入输出时那样手动控制格式。

1.6名字空间

using namespace std;这句代码的意思是:使用名字空间std(名字空间也叫命名空间)。

在C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称如果都存在于全局作用域中,可能会导致很多冲突。使用名字空间的目的是对标识符的名称进行隔离,以避免命名冲突或名字污染,namespace关键字的出现就是针对这种问题。

std是C++标准库的名字空间名,C++将标准库的定义实现都放到这个命名空间中,当我们需要使用标准库中的内容时,就需要加上:using namespace std;当有了这句代码的时候,表示名字空间std中信息都是可见和可用的。

1.7注释

C++里主要有两种形式:单行注释//和多行注释/**/

注释本来是对代码进行解释的文字,要放在代码中,但是又无需编译。

**单行注释:**指的是当前行不参与编译和运行

**多行注释:**指的是被包含在内的多行不参与编译和运行

在VS环境中注释和取消注释的快捷键:Ctrl+K+C,Ctrl+K+U

在DevC++中注释和取消注释的快捷键:Ctrl+/

1.8练习

练习1:B2002 Hello,World! - 洛谷 | 计算机科学教育新生态

cpp 复制代码
#include"iostream"
using namespace std;

int main()
{
	cout<<"Hello,World!"<<endl;
	return 0;
}

练习2:1003-小飞机_牛客竞赛语法入门班顺序结构习题

cpp 复制代码
#include<iostream>
using namespace std;

int main()
{
	cout<<"     **     "<<endl;
	cout<<"     **     "<<endl;
	cout<<"************"<<endl;
	cout<<"************"<<endl;
	cout<<"    *  *    "<<endl;
	cout<<"    *  *    "<<endl;
	return 0;
}

练习3:B2003 输出第二个整数 - 洛谷 | 计算机科学教育新生态

cpp 复制代码
#include<iostream>
using namespace std;

int main()
{
	int n1,n2;
	cin>>n1>>n2;
	cout<<n2<<endl;
	return 0;
}

练习4:B2005 字符三角形 - 洛谷 | 计算机科学教育新生态

cpp 复制代码
#include<iostream>
using namespace std;

int main()
{
	char c=0;
	cin>>c;
	cout<<"  "<<c<<endl;
	cout<<" "<<c<<c<<c<<endl;
	cout<<c<<c<<c<<c<<c<<endl;
	return 0;
}

2.数据类型

C++中提供了丰富的数据类型来描述生活中的各种数据。所谓"类型",就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据。

2.1字符型

cpp 复制代码
1. char     //character的缩写

键盘上能够敲出各种字符,而这些符号都被称为字符,字符是用单引号括起来的。

ASCII编码:

我们在上面这个表中要记住几组特殊数据:

  • 字符A~Z的ASCII码值从65~90
  • 字符a~z是ASCII码值从97~122
  • 对应大小写字符的ASCII码值的差值是32
  • 数字字符0~9的ASCII码值从48~57
  • 换行\n的ASCII值是10
  • ASCII码值从0~31这32个字符是不可打印字符,无法打印在屏幕上观察
cpp 复制代码
#include"iostream"
using namespace std;

int main()
{
	char c1='a';
	cout<<c1<<endl;
	char c2=97;
	cout<<c2<<endl;
	return 0;
}

2.2整型

整形类型是对所有整数的抽象,为了能对整数形成统一的类型标识,就有整型;

cpp 复制代码
1.  short [int]   //短整型
2.  int    //整型
3.  long [int]    //⻓整型
4.  long long [int]   //更⻓的整型

2.3浮点型

浮点型式对所有小数的抽象,为了能对实数进行统一的类型标识,就有了浮点型。

浮点型有三种:

cpp 复制代码
1. float   //单精度浮点型
2. double  //双精度浮点型
3. long double  //更长的双精度浮点型

在C++中小数的书写形式:

cpp 复制代码
1.  3.14;       //编译器会默认识别为double类型
2.  3.14f;      //编译器会默认识别为float类型
3.  1e5;        //这种写法是科学计数法的形式,意思是1.0*10^5
4.  1e5+10;     //1*100000+10 == 100010
5.  1.23e5+10;    //1.23*100000+10 = 123010

2.4布尔类型

C++有一种类型叫:bool,布尔类型的变量的值可以是true或false,这种类型类型的变量专门用来表示真或假的。当然,在C++中,0表示假,非0表示真。

cpp 复制代码
1.  bool
cpp 复制代码
#include"iostream"
using namespace std;

int main()
{
	bool flag=true;
	if(flag)
	{
		printf("I like C++");
	}
	return 0;
}

2.5signed与unsigned

signed和unsigned关键字修饰字符型和整型类型的。

signed关键字,表示一个类型带有正负号,包含负值。

unsigned关键字,表示该类型不带有正负号,只能表示零和正整数。

cpp 复制代码
//字符型
char
signed char   //有符号的字符类型
unsigned char   //⽆符号的字符类型

//短整型
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]   //⽆符号的

对于int类型,默认是带有正负号的,也就是说int等同于signed int。

变量声明为unsigned的好处是,同样长度的内存能够表示的最大整数值,增大了一倍。

下面定义的是Dev-C++环境中,climits中相关定义,其实如果仔细看climits中也是包含的limits.h。

cpp 复制代码
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. char类型到底是signed char还是unsigned char,由编译器决定。
  2. 所以char不等同于signed char,还有可能是unsigned char。

2.6数据类型长度

2.6.1sizeof操作符

sizeof是一个关键字,也是操作符,专门是用来计算特定数据类型的长度的,单位是字节。

sizeof操作符的操作数可以是类型,也可以是变量名或者表达式,sizeof的操作数如果不是类型,是表达式的时候,可以省略掉后面的括号。

cpp 复制代码
1  sizeof(类型)
2  sizeof 表达式

sizeof的计算结果是size_t类型的,size_t指的是无符号整数。

cpp 复制代码
#include"iostream"
using namespace std;

int main()
{
	int a = 10;
	cout << sizeof(a) << endl;
	cout << sizeof a << endl;
	
	cout << sizeof(int) << endl;
	return 0;
}

2.6.2各数据类型的长度

cpp 复制代码
#include"iostream"
using namespace std;

int main()
{
	cout << sizeof(char) << endl;
	cout << sizeof(bool) << endl;
	cout << sizeof(short) << endl;
	cout << sizeof(int) << endl;
	cout << sizeof(long) << endl;
	cout << sizeof(long long) << endl;
	cout << sizeof(float) << endl;
	cout << sizeof(double) << endl;
	cout << sizeof(long double) << endl;
	return 0;
}

我们对于上面申请的内存空间可以这样理解:

2.7typedef

在C++中有一个关键字是和类型有关的,是用来给类型重命名的。当有一个类型比较复杂的时候,可以简化类型。

cpp 复制代码
1  typedef 旧类型名 新类型名;

比如:

cpp 复制代码
typedef unsigned int uint; 
typedef long long ll;
typedef unsigned long long ull;

上面这些代码就是将本身复杂的名字给简单化,从而在使用的时候更加的方便。

cpp 复制代码
1  uint num1 = 0;  //等价于 unsigned int num1 = 0;
2  ll num2 = 0;    //等价于 long long num2 = 0;
3  ull num3 = 0;   //等价于 unsigned long long num3 = 0;

2.8练习

练习1:牛牛学说话之-整数

cpp 复制代码
#include"iostream"
using namespace std;

int main()
{
	int a;
	cin >> a;
	cout << a << endl;
	return 0;
}

练习2:B2018 打印字符 - 洛谷 | 计算机科学教育新生态

cpp 复制代码
#include"iostream"
using namespace std;

int main()
{
	int n = 0;
	cin >> n;
	char c = n;
	cout << c << endl;
	return 0;
}

练习3:倒序

cpp 复制代码
#include"iostream"
using namespace std;

int main()
{
	int n1=0,n2=0,n3=0;
	cin >> n1 >> n2 >> n3;
	cout << n3 << " " << n2 << " " << n1 << endl;
	return 0;
}

练习4:信息学奥赛一本通(C++版)在线评测系统

cpp 复制代码
#include"iostream"
using namespace std;

int main()
{
	int n = 0;
	short s = 0;
	cout << sizeof(n) << " " << sizeof(s) << endl;
	return 0;
}
相关推荐
人才程序员42 分钟前
【C++拓展】vs2022使用SQlite3
c语言·开发语言·数据库·c++·qt·ui·sqlite
不能只会打代码1 小时前
蓝桥杯例题一
算法·蓝桥杯
OKkankan1 小时前
实现二叉树_堆
c语言·数据结构·c++·算法
Ciderw2 小时前
MySQL为什么使用B+树?B+树和B树的区别
c++·后端·b树·mysql·面试·golang·b+树
yerennuo2 小时前
windows第七章 MFC类CWinApp介绍
c++·windows·mfc
Ronin-Lotus2 小时前
上位机知识篇---ROS2命令行命令&静态链接库&动态链接库
学习·程序人生·机器人·bash
ExRoc3 小时前
蓝桥杯真题 - 填充 - 题解
c++·算法·蓝桥杯
利刃大大3 小时前
【二叉树的深搜】二叉树剪枝
c++·算法·dfs·剪枝
贾贾20233 小时前
主站集中式和分布式的配电自动化系统区别在哪里?各适用于什么场所?一文详解
运维·分布式·考研·自动化·生活·能源·制造
肖田变强不变秃4 小时前
C++实现有限元计算 矩阵装配Assembly类
开发语言·c++·矩阵·有限元·ansys