转C++并不难,语法一天就可以搞定,最多两天。至于stl就需要后面多做题,多积累了
先说说Pascal和C++的一些基本语法相同和不同之处
1.基本结构
program test;//这一句可以不要
begin
{主程序}
end.
#include<cstdio>//输入输出头文件
int main()
{
/*主程序*/
return 0;
}
2.声明变量语句(每个变量Pascal 和 C++ 相对应)
var
a:longint;//32位整数 -2^31 ~ 2^31-
b:int64;//64位整数 -2^63 ~ 2^63-1
bb:qword;//64位无符号型整数 0 ~ 2^64-1
c:double;//实型
cc:extended;//实型(精度更高)
arr:array[0..99] of longint;//一个0~99的longint数组arr
h:boolean;
ch:char;//一个字符 ch
s:string;//一个字符串 s
int a;
long long b;
unsigned long long bb;
double c;
double cc;
int a[100];//C++是左闭右开,声明[100]表示0~100-1的大小
bool h;
char ch;
char s[MAX_LEN];//这个是C的数组,MAX_LEN是字符串的长度。还有一个string后面介绍
自己的一些感受:Pascal的变量声明必须在每个函数最前面,如果变量多了的话就很容易混淆,所以起一个好的变量名就尤为重要了,而C++的变量就可以任意声明了,也就是说在程序写到一半的时候,有一个变量没声明,你不必跑到最前面去声明,直接就地声明就ok,这样就显得很灵活了
3.输入输出及其格式
假设a=1,b=2,先输出a 整除以 b,再输出 a/2,最后输出a/b,后两个保留两位小数 都控制10个字符宽度 (假设变量已声明)
a:=1; b:=2;
write(a div b:10);
write(a/2:10:2);
write(a/b:10:2);
a=1;b=2;
printf("%10d\n",a/b);
printf("%10.2lf",a/2.0);//注意是2.0
printf("%10.2lf",(double)a/b);//必须先将其中一个转化为double
//C++还有一种输入输出流,某些情况下方便些,但是很慢!几乎不推荐。要包含头文件iostream,并且控制格式很麻烦(反正我不会。。。)
cout<<a/b;
cout<<a/2.0;
cout<<(double)a/b;
//上面这段代码是没有控制格式的
//上面代码也可以写成一句 cout<<a/b<<a/2.0<<(double)a/b; 当然输出时没有空格分开的
//要想有空格分开,就写成 cout<<a/b<<' '<<a/2.0<<' '<<(double)a/b;
C++的浮点数是很危险同样也是很方便的。
%d 输出int。要控制格式就按照%ad来写,就表示控制a个字符宽度,如%10d表示控制10个字符宽度;还有%0ad,如%010d,仍然表示控制10个字符宽度,但不是用空格隔开,而是补0,有兴趣的可以试试(这个在高精度压位的时候很好输出)
%lld 和 %I64d 输出(unsigned) long long。由于根据情况不同,这两种是不能乱用的(乱用后果很严重!),所以推荐用输入输出流的cout输出(难得排上用场),读入也是一样,推荐cin
%lf 输出double 。格式%a.blf,表示控制a个字符宽度,小数点后保留b位,中间用小数点隔开
如果上面格式错了的话,样例输出如果是错的还好说,至少自己知道错了,但是可能答案也是对的,然后一交,你就只有呵呵了。。。
4.函数与过程
procedure work;//定义一个work过程
begin
end;
procedure work2(a:longint);//定义一个work2过程,带了一个longint参数a
begin
end;
function calc:longint;//定义了一个calc函数,返回longint
begin
exit(???);//最后要返回一个值
end;
function calc2(a:longint):longint;//定义了一个calc2函数,返回longint,带了一个参数a
begin
exit(???);//最后要返回一个值
end;
/*先说一下,用Pascal的都知道上面work和work2虽然一个没有带参,一个带参,但是也是不能同名的,但是C++可以,只要所带参数不一样,就算不重名!*/
void work()//C++就算没有参数,也要带一个空括号
{
}
void work(int a)
{
}
int calc()
{
return ???;
}
int calc(int a)
{
return ???;
}
如果前面觉得C++麻烦,现在还觉得吗?代码简洁了很多
5.ASCII的一些转换
给定一个字符ch,输出它后面第两个的字符,和ASCII值,用回车隔开
writeln(chr(ord(ch)+2));
writeln(ord(ch)+2);
printf("%c\n%d\n",ch+2,ch+2);//'\n'是回车
两个都是ch+2,怎么输出不一样?
对,一个是%c,一个是%d,C++中ASCII码和字符是相通的,只需要控制格式即可
6.bool 类型和 if 条件
判断一个数 x (longint) 是否等于0,等于0就让 flag (bool) 赋值为false,否则为true,然后在判断flag是否为true,是就输出"true",否则输出"false"
if(x=0) then flag:=false
else flag:=true;
if(flag) then//这里可以直接应用flag的布尔值
writeln('true');
else writeln('false');
if(!x) flag=false; else flag=true;//条件语句也可以写成if(x==0)注意是两个等号,错了的话会死的很惨!!!
if(flag) printf("true"); else printf("false");
C++是可以直接引用任何值来当做bool值,非0为true,0为false
Pascal | C++ |
and | && |
or | || |
not | ! |
7.操作符
Pascal | C++ | |
---|---|---|
加 | + | + |
减 | - | - |
乘 | * | * |
整数除法 | div | / |
实数除法 | / | / |
取余 | mod | % |
大于 | > | > |
大于等于 | >= | >= |
小于 | < | < |
小于等于 | <= | <= |
等于 | = | == |
不等于 | <> | != |
逻辑非 | not | ! |
逻辑与 | and | && |
逻辑或 | or | || |
右移 | shr | >> |
左移 | shl | << |
位运算与 | and | & |
位运算或 | or | | |
8.循环语句
①打印出1~100的整数,空格隔开(给出完整程序)
program test;
var
i:longint;
begin
for i:=1 to 100 do
write(i,' ');
end.
#include<cstdio>
int main()
{
for(int i=1;i<=100;i++)
printf("%d ",i);
return 0;
}
②打印出1.0,1.1,1.2,1.3,...,9.7,9.8,9.9,10.0,空格隔开(给出完整程序)
program test;
var
i:double;
begin
i:=1.0;
while(i<=10.0) do
begin
write(i:0:1,' ');
i:=i+0.1;
end;
end.
#include<cstdio>
int main()
{
for(double i=1.0;i<=10.0;i+=0.1) printf("%.1lf ",i);
return 0;
}
大家已经发现了,Pascal只能用longint做循环变量,而C++什么都可以。换句话说,C++中的for语句里面什么都可以装!
一般格式 for( 赋初值 ; 继续循环的条件 ; 每完成一次循环要做的事 )
并且由于C++的语句中可以装很多东西,所以有时会出现空语句,即没有后面的语句直接一个分号,就像for(.....) ;
有人会问这个什么都不执行又有什么用呢?当然有用了,比如一直读整数x,读完为止,就可以写成
while(scanf("%d",&x));
如果现在觉得这个很荒谬,可以不管,以后会有用到的时候,再来看看
刚才说了for语句,Pascal还有while语句和repeat语句
while 条件 do//条件为真就执行
begin
end;
repeat
until 条件;//条件为真就退出循环
while(条件)//条件为真就执行
{
}
do{
}while(条件);//条件为真就执行
9.问号表达式
前面说了 if 语句,其实C++还有一种问号表达式,很方便的。
问号表达式格式 bool表达式?表达式1:表达式2 这句话先执行bool表达式,为真就执行表达式1,否则执行表达式2
仍然是这个:判断一个数 x (longint) 是否等于0,等于0就让 flag (bool) 赋值为false,否则为true,然后在判断flag是否为true,是就输出"true",否则输出"false"
flag= (!x)?false:true;
printf("%s",flag?"true":"false");
好了,如果前面都掌握了,那么C++的基本语法也就差不多了,不过还必须去看看C++头文件那篇文章,因为那关系了你能不能编译成功!
至于那些C++的函数等等就可以自己学了,只要入门就很好掌握了。