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;
}
步骤:
举例:
求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