【Code】浅谈Pascal转C++

引入

中国计算机学会于2016年11月1日发布了《CCF关于NOI系列赛事程序设计语言变更的公告》,内容如下:

根据国际信息学奥林匹克竞赛(IOI)的相关决议并考虑到我国目前程序设计语言的具体情况,CCF决定:

1.2020年开始,除NOIP以外的NOI系列其他赛事(包括冬令营、CTSC、APIO、NOI)将不再支持Pascal语言和C语言;

2.从2022年开始,NOIP竞赛也将不再支持Pascal语言。即从NOIP2022开始,NOI系列的所有赛事将全部取消Pascal语言。

在无新增程序设计语言的情况下,NOI系列赛事自NOIP2022开始将仅支持C++语言。
此通知。

中国计算机学会

2016年11月1日

所以很多Pascal选手开始转C++。

准备和比较

1.C++更复杂,更难学,但是功能更强大。

2.你学过Pascal以后,学C++比较简单。(C转C++更加简单)

3.C++版本之间的差异很大,很容易编译错误。
建议大家使用Dev-cpp 5.6.1 ,是gcc/g++ 4.8.1 。
最接近比赛的版本。
比赛的版本是4.8.4(比赛的版本详情)。

千万不要使用Dev-cpp 5.9.x 或 5.11.x(很多大佬因此爆零)。

4.C++代码的后缀名 .cpp
cpp=C Plus Plus=C++

简单的转换

1.C++都是由一个个函数组成的。

2.C++ 大括号 { 和 } 代替 begin 和 end 。

3.函数和变量的类型是写在前面的,int就是longint类型。

4.每句话结尾都是分号,如果遇到某些括号(大括号、函数的参数表里面的小括号等)的时候,分号省略。

5.主程序最后一句是

return 0;

最好加上,有一定的好处。

头文件

一般建议初学者使用C++万能头文件

#include <bits/stdc++.h>

C++万能头文件几乎包含了所有头文件。

输入输出

输入语句

输入语句 cin>>变量1>>变量2>>变量3;

输出语句

cout<<变量1<<变量2<<...; 
cout<<"hello world" << endl;
//endl是换行

cin和cout在<iostream>头文件中,还需要标准命名空间using namespace std;

场宽:

cout<<setw(5)<<a;

保留几位小数:

cout<<fixed<<setprecision(3)<<a;

函数在<iomanip>头文件中。

其他输入输出语句有scanf()printf()等,一般不建议初学者学习,等到熟练了必须掌握

a+b代码:

#include <bits/stdc++.h>
using namespace std;

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

注释

注释
在 C++ 代码中,注释有两种写法:

1 行内注释
以 // 开头,行内位于其后的内容全部为注释。

//这里添加注释

2 注释块
以 /* 开头, */ 结尾,中间的内容全部为注释,可以跨行。

/*
这里添加注释1
这里添加注释2
*/

注释对程序运行没有影响,可以用来解释程序的意思。

在工程开发中,注释可以便于日后维护、他人阅读。

在 OI 中,很少有人写许多注释,但注释可以便于在写代码的时候理清思路,或者便于日后复习。而且,如果要写题解、教程的话,适量的注释可以便于读者阅读,理解代码的意图。

变量

变量的类型

整数:
int (longint/int32)
long long (int64)
unsigned int (dword)
unsigned long long (qword)

小数:
float (real)
double (double)

字符:
char (char)

布尔类型:
bool (boolean)

字符串:
string (string)

无类型
void (?)

变量的定义

int a,b;
char ch='c';
double f;
int a[100];
char mat[50][50];

数组:
int a[100];
//表示定义了a[0]-a[99] 都是int类型
二维数组 int a[100][100];
//定义了a[0][0]-a[99][99]

初始化:

int a[5]={1,2,3,4,5}; 

全局变量和局部变量

在函数里面的都是局部变量,在函数外面的是全局变量。
函数包括主函数main()。

作用域

作用域是变量可以发挥作用的代码块。
变量分为全局变量和局部变量,意义已经在上面讲解。
全局变量的作用域是整个文件,全局变量一旦声明,在整个程序中都是可用的。
C++可以在任何地方定义变量,变量的作用域只有它的下面。

常量

常量是固定值,在程序执行期间不会改变。
常量的值在定义后不能被修改。声明时加一个 const 关键字即可。

int const N=105;

const int N=105;

赋值语句

a=b; ( a:=b )

i++ 或 ++i ( inc(i) )

i+=a ( inc(i,a) )

i-- 或 i-- ( dec(i) )

i-=a ( inc(i,a) )

if条件判断语句

格式1:

if (条件) 语句;
if (条件) {
	语句1
	语句2
	......
}

格式2:

if (条件) 语句1;
	else 语句2;
if (条件)  {
	......
} else {
	......
}

布尔运算符:

and&&
or||
not!

比较运算符:

>    大于
>=   大于等于
<    小于
<=   小于等于 
==   等于
!=   不等于

循环语句

for循环

格式:

for (初始操作; 循环的条件; 变化) {
	语句1;
	语句2;
}

步骤:

Created with Raphaël 2.2.0 初始操作 判断循环条件是否成立? 语句1 语句2 结束 yes no

举例:
求1+2+……+100

int s=0;
for(int i=1; i<=100; i++) s+=i;

while循环

while:

while(条件) {
	语句1;
	语句2;
}

do while :

do {
	语句1;
	语句2;
} while(条件)

函数

数学函数(自带函数)

abs() 整数的绝对值
fabs() 小数的绝对值
ceil() 上取整
floor() 下取整

均在<cmath><math.h>头文件中。

排序函数

对a[1]到a[n]进行从小到大排序

sort(a+1,a+n+1); 	

a+1就是a[1]的内存地址,结尾必须多1。

如果a[0]-a[n-1]排序:

sort(a,a+n); 

sort()是快速排序,在<algorithm>头文件中。

自定义函数

初学者一般建议写在main函数的上面。

类型 函数名(参数表) {
   ...
   return 答案;
}

举例:

int plus(int a,int b) {
	int ans;
	ans=a+b;
	return ans;
}

无类型函数:

void 函数名(参数表) { //void就是空,无类型=
   .....
   不需要return
}

关于字符,ASCII码的问题

ASCII码表:https://blog.csdn.net/Ljnoit/article/details/102649314

int a; 
char x='A'; 
a=x; //a就是65了
x=66; //x就是'B'

c++可以强制转换:

(类型)变量
cout<<(int)x<<endl; 

字符串

字符数组

一个一维的字符数组,可以看成是一个字符串
比如: char s[105];

读入一个字符串 cin>>s;

注意: cin读入的时候是从一个可见字符读到另一个可见字符

空格和回车不读

如果用 gets(s) 读入一整行

输出字符

cout<<s; 
puts(s); //他会换行

字符是单引号 字符串是双引号

字符串有结尾符
如果s读入的是abc
那么s[0]=‘a’
s[1]=‘b’
s[2]=‘c’
s[3]=’\0’;

'\0’表示空字符(不是空格)

1.求长度 strlen

int x=strlen(s); 
//只计算从s[0]到\0有几个字母

2.赋值

strcpy(s1,s2);
//把s2 赋值给s1

3.连接运算

strcat(s1,s2);
//把s2接到s1的后面

4.比较大小

strcmp(s1,s2) 

返回值是大于0,说明字典序s1>s2
等于0 ,说明s1=s2
结果小于0 ,说明字典序s1<s2

其他函数都自己写。

string类型

(一般不用的,因为太慢)

杂项

C++中 0就是假,非零就是真。

恭喜您转型升级成功!

深谈Pascal转C++:https://blog.csdn.net/Ljnoit/article/details/104960875

发布了106 篇原创文章 · 获赞 156 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/Ljnoit/article/details/104943652