return0;
}
**如何判断文件结束(EOF)?
C++
while(cin>>s>>n)
{
...
}
C
while(scanf(%s%d",s,&n)!
=EOF)
{
...
}
四、赋值语句及运算符号
一一对应的关系
Pascal
C/C++
赋值运算
赋值
:
=
=
基本运算
加
+
+
减
-
-
乘
*
*
除(实数)
/
/(double)
除法
取整
div
(int)/(int)
取余
mod
%
比较
等于
=
==
不等于
<>
!
=
大于
>
>
大于等于
>=
>=
小于
<
<
小于等于
<=
<=
逻辑
且
and
&&
或
or
||
非
not
!
位运算
左移(*2)
shl
<<
右移(/2)
shr
>>
且
and
&
或
or
|
非
not
~
异或
xor
^
其他
增一
inc(x)
x++
减一
dec(x)
x--
在C/C++中对某个变量自身进行运算可以简写为
变量名运算符号=改变量
如x+=8就表示x=x+8,即inc(x,8)。
在C/C++里还存在一种三目运算
变量名=条件?
值A:
值B
如x=x>0?
x:
-x;//表示若x>0则取x,否则取–x,
同ifx>0thenx:
=xelsex:
=-x;
五、条件语句
1、if
C/C++中if语句的条件必须要用括号括起来,后面不使用then。
Pascal
C/C++
ifa>bthenflag:
=true
elseflag:
=false;
if(a>b)flag=true;
elseflag=false;
2、多种分支
C/C++中为switch,Pascal为case:
Pascal
C/C++
casexof
1:
inc(x);
2:
dec(x);
elsex:
=x*x;
end;
switch(x)
{
case1:
x++;break;
case2:
x--;break;
default:
x*=x;
}
切记C/C++中一定要写break,后果你可以去掉break,运行看看就知道了。
六、循环语句
1、for
Pascal
C/C++
for变量名:
=初始值to(downto)终止值do
for(变量名=初始值;条件;改变方式)
fori:
=5to10dodec(a);
//终止值大于初始值用to
fori:
=5downto1dodec(a);
//终止值小于于初始值用downto
for(i=5;i<=10;i++)a--;
for(i=5;i>=1;i--)a--;
/*只要i满足条件就会一直循环。
C/C++中i是实数、指针都可以*/
C/C++中for的特殊用法:
//变量为实数
for(doublei=1;i<=2;i*=1.01)
k++;
//变量为指针,->符号为间接引用,后面会提到。
for(type1*p=head->next;p;p=p->next)
printf(“%d”,p->k);
2、while
Pascal
C/C++
while条件do
while(条件)
whilei<>0dodec(i);
while(i!
=0)i--;
//也可写作while(i)i--;
//在C/C++中非0即为真。
3、repeat-until&do-while
Pascal
C/C++
repeat语句until结束条件;
do{}while(运行条件)
repeatint(i)untili>100;
do{i++;}while(i<=100);
七、数组
Pascal中数组的下标可以随意定义,而C/C++下标始终为从0开始到(数组大小–1)。
Pascal
C/C++
定义
a:
array[1..100]ofinteger;
b:
array[1..10,1..10]ofint64;
inta[100];
intb[10][10];
含义
a为大小为100的integer数组,合法下标为1到100
b为大小为10*10的int64数组,合法下标为1,1到10,10
a为大小为100的int数组,合法下标为0到99
b为大小为10*10的int数组,合法下标为0,0到9,9;
使用
inc(a[21]);
b[2,2]:
=b[1,1]+b[1,2]+b[2,1];
a[21]++;
b[1][1]=b[0][1]+b[0][0]+b[1][0];
数组清零
Pascal
C/C++
Fillchar(a,sizeof(a),0);
memset(a,0,sizeof(a));
//头文件包含string.h
**如果要填最大:
memset(a,127,sizeof(a))(但达不到INT_MAX)
如果要填最小:
memset(a,128,sizeof(a))(但达不到INT_MIN)
如果填0:
memset(a,0,sizeof(a))
如果填-1:
memset(a,-1,sizeof(a))
八、字符串
C风格的字符串就是字符数组。
C++和Pascal的字符串使用基本相同,只是C++中字符串下标以0开始,Pascal以1开始。
字符串处理很多这里不一一列举,只写最常用的几个。
Pascal
C(包含)
定义用:
chars[]
C++(包含)
定义用:
strings
输入
输
出
Readln(s);
Writeln(s);
Scanf(“%s”,s);
Printf(“%s\n”,s);
注:
不能输入输出c++的字符串
Cin>>s;
Cout<
注:
可以输入输出c的字符串
查找
pos(‘a’,s);//不存在返回0
没有
s.find(‘a’);//不存在返回-1
串
长
len=length(s);
Strlen(s)
len=s.size();或
Len=s.length();
复制
copy(st,pos,num);
st:
=‘abcde’;
s:
=copy(st,3,2);
//s=‘cd’
Strcpy(s1,s2)
全部复制
Strncpy(s1,s2,n)
前n个复制
但没有从第几个开始的!
substr(pos,n)//返回从pos开始的长度为n的子串;
strings1=“abcde”,s2;
s2=s1.substr(2,2);
//s2=“cd”
插入
insert(obj,target,pos);
st:
=‘helloworld’;
st:
=insert(‘‘,st,6);
//st=‘helloworld’
没有
insert(pos,s)//在pos位置处插入字符串s;
strings1=“0123”;
s1.insert(1,“XYZ”);//s1=“0XYZ123”
删除
delete(st,pos,num);
st:
=‘helloworld’;
st:
=delete(st,6,1);
//st=‘helloworld’
没有
erase(pos,n)//从pos位置开始删除n个字符;
strings1="abcdefghi";
s1.erase(5,3);//得到"abcdei"
C++还有以下功能:
用s.replace(2,2,"ttt")可以部分替换
用s.empty()判断是否为空
可访问s[i],位置从0算起
可以s1+s2
可以s1=s2
可以比较s1==s2当然><=>=<=!
=都可以比较。
C++字符串整串读入:
getline(cin,s)和cin>>s的区别:
getline(cin,s)
cin>>s
一次性整行读入,直至行末尾。
只读入一个“单词”,遇空格和行末停止。
例如输入;Howareyou?
s=”Howareyou?
”
读入整串含空格
例如输入;Howareyou?
s=”How”
如果三个都读:
cin>>s1>>s2>>s3
**C++数字与数值之间的转换:
#include
#include
#include//必须加入
usingnamespacestd;
intmain()
{
stringtext="152";
intnumber;
stringstreamss;
ss<ss>>number;//string->int
cout<ss<string
stringstr=ss.str();
return0;
}
九、过程和函数
1、过程
在C/C++中没有过程,但可以把返回值为“空”的函数理解为过程。
Pascal
C/C++
无参过程
procedure过程名;
说明部分
begin语句部分end;
//说明部分、begin、end语句部分统称为过程体
void函数名();
{
主体部分;
return;
}
带参过程
procedure过程名(形参表)
过程体
void函数名(形参表)
过程体
值传和址传:
当一个参数是值传时,形参在子过程中相当于一个局部变量,对它的改变不影响实在的参数值。
址传则会影响。
下例中a为值传,b为址传。
初始a=5,b=5,运行后a=5,b=10;
Pascal
C/C++
vara,b:
integer;
proceduredoit(a:
integer;varb:
integer);
begin
b:
=a+b;
a:
=a+b;
end;
begin
a:
=5;
b:
=5;
doit(a,b);
writeln(a,‘‘,b);
end.
voiddoit(inta,int&b)
{\\a认为值参,b认为变量传参
b+=a;
a+=b;
return;
}
intmain()
{
inta=5,b=5;
doit(a,b);
cout<return0;
}
**用若干地址传参可以给调用者传回若干值
Voidtryit(int&x,int&y,int&z)
调用时:
tryit(a,b,c),可以传回a,b,c的值。
**用数组名(也是地址)传参可以传回整组的数据
Voidtryit(inta[])
调用时:
tryit(x),可以传回整个数组。
例如:
voidtryit(inta[])
{
for(inti=0;i<=10;i++)a[i]=i*2;
return;
}
intmain()
{
intx[10];
tryit(x);
for(inti=0;i<=10;i++)
cout<system("pause");
return0;
}
**用指向函数的指针作为参数,可以执行指定的函数。
(略)
STL的两个应用:
**C++快排函数
#include
Boolcom(inta,intb)
{
Returna>b;
}
Intmain()
{
Inta[10]={5,7,3,2,6,8,4,3,5,7};
Sort(a,a+10,com);//如果升序可以省略com.
For(inti=0;i<10;i++)
Cout<}
**优先队列(以堆排为例)
#include
#include
usingnamespacestd;
pri