基于Matlab的AM振幅调制与解调仿真_第1页
基于Matlab的AM振幅调制与解调仿真_第2页
基于Matlab的AM振幅调制与解调仿真_第3页
基于Matlab的AM振幅调制与解调仿真_第4页
基于Matlab的AM振幅调制与解调仿真_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于Matlab的AM振幅调制与解调仿真摘要:本次高频电子电路大作业的设计,我组所选的题目为振幅调制电路(AM)及解调。在本课程设计报告中,首先说明了进行此次课程设计的目的、内容及要求;阐明了标准振幅调制与解调的基本原理以及操作方法,同时也对滤波电路的原理加以说明。接着叙述了利用Matlab软件对振幅调制、解调以及滤波器等所设计编写的程序,并附上了调试后输出的载波信号、调制信号、AM已调信号及滤波前后的解调信号等的波形图和频谱图,另外还附上了滤波器的增益响应和双边带总功率与平均总功率之比。报告的最后,是个人对本次大作业结果的分析、过程反思以及总结。关键词:振幅调制 解调 AM Matlab仿真

2、Abstract:In The high-frequency electronic circuit designing job, our group selected the topic as amplitude modulation circuit (AM) and demodulation. In this course design report, first explains the purpose, content and requirements of the curriculum design; clarify the basic principles and methods o

3、f operation standard amplitude modulation and demodulation, and also to illustrate the principles of the filter circuit. Then describes the use of Matlab and other amplitude modulation, demodulation and filter design program written, along with the carrier signal debugging output modulation signal,

4、AM modulated and demodulated signal waveform signal before and after filtering, etc. map and spectrum, also attached a total power and average power ratio of the total gain response and bilateral band filter. At the end of the report is to analyze the individual results of this large operation, proc

5、ess reflection and summary.Keywords: amplitude modulation, demodulation, Matlab simulation引言:无线通信系统中,信号通过一定的传输介质在发射机和接受机之间进行传送时,信号的原始形式一般不适合传输。因此,为了将信号从发射端传输到接收端,必须转换它们的形式。而把信息加载到信息载体上以便传输的处理过程便是调制。通常称代表信息的信号为调制信号,称信息载体为载波信号,称调制后的频带信号为已调波信号。调制的种类很多,分类方法各不同,按调制信号的形式,可分为模拟调制和数字调制;模拟调制中的正弦波调制又分为振幅调制、频率

6、调制和相位调制。其中的振幅调制是由调制信号去控制载波的振幅,使之按调制信号的规律变化,严格地讲,是使高频振荡的振幅与调制信号成线性关系,其他参数(频率和相位)不变。这是使高频振荡的振幅有消息的调制方式。振幅调制分为三种方式:普通的调幅方式(AM)、抑制载波的双边带调制(DSB)及抑制载波的单边带调制(SSB)方式。解调是与调制相反的过程,即从接收到的已调波信号中恢复原调制信息的过程。与振幅调制、频率调制和相位调制相对应,有振幅解调、频率解调和相位解调,并分别称为检波、鉴频和鉴相。本次课程设计所使用软件Matlab是1984年由美国Mathworks公司推向市场。它是一种科学计算软件,专门以矩阵

7、的形式处理数据。Matlab将高性能的数值计算和可视化集成在一起,并提供了大量的内置函数,从而被广泛的应用于科学计算、控制系统和信息处理等领域的分析、仿真和设计工作。Matlab软件包括五大通用功能,数值计算功能(Nemeric)、符号运算功能(Symbolic)、数据可视化功能(Graphic)、数字图形文字统一处理功能(Notebook)和建模仿真可视化功能(Simulink)。该软件有三大特点,一是功能强大;二是界面友善、语言自然;三是开放性强。Matlab的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故Matlab来解算问题要比用C,Fortran等语言完相同的

8、事情简捷得多,并且math work也吸收了像Maple等软件的优点,使Matlab成为一个强大的数学软件。在新的版本中也加入了对 HYPERLINK /view/10075.htm t _blank C, HYPERLINK /view/36402.htm t _blank Fortran, HYPERLINK /view/824.htm t _blank C+ , HYPERLINK /view/29.htm t _blank Java的支持。可以直接调用,用户也可以将自己编写的实用程序导入到MATLAB函数库中方便自己以后调用,此外许多的Matlab爱好者都编写了一些经典的程序,用户可以

9、直接进行下载就可以用。Matlab的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用Matlab函数集)扩展了Matlab环境,以解决这些应用领域内特定类型的问题。一、作业题目1.类型:设计性课程作业。2.题目:基于Matlab的振幅调制(AM)与解调。二、作业要求1.掌握振幅调制和解调的原理。2.学会Matlab仿真软件在振幅调制和解调中的应用。3.掌握参数设置方法和性能分析方法。4.通过实验中波形的变换,学会分析实验现象。5.建立较为完善的信号链路模型,能够较好的描述电路的工作过程;6.正确分析输入

10、输出信号的特征,关键步骤有相关图形输出。三、设计原理3.1振幅调制的一般模型振幅是用调制信号去控制高频正弦载波的幅度,使其按调制信号的规律变化的过程。幅度调制器的一般模型如图3.1所示。图3.1振幅调制的一般模型图中,为调制信号,为已调信号,为滤波器的冲激响应,则已调信号的时域和频域一般表达式分别为: (3-1) (3-2)式中,为调制信号的频谱,为载波角频率。由以上表达式可见,对于幅度调制信号,在波形上它的幅度随基带信号规律而变化;在频谱结构上它的频谱完全是基带信号频谱在频域内的简单搬移。由于这种搬移是线性的,因此幅度调制通常又称为线性调制,相应地,幅度调制系统也称为线性调制系统。 在图3.

11、1的一般模型中,适当选择滤波器的特性,便可得到各种幅度调制信号,例如:常规双边带调幅(AM)、抑制载波双边带调幅(DSB-SC)、单边带调制(SSB)和残留边带调制(VSB)信号等。 3.2 标准振幅调制(AM) 3.2.1 AM信号的表达式、频谱及带宽在图3.1中,若假设滤波器为全通网络(1),调制信号叠加直流后再与载波相乘,则输出的信号就是常规双边带调幅(AM)信号。 AM调制器模型如图3.2.1所示。图3.2.1 AM调制器模型AM信号的时域和频域表示式分别为: (3-3) (3-4)式中,为外加的直流分量;可以是确知信号也可以是随机信号,但通常认为其平均值为0,即。 AM信号的典型波形

12、和频谱分别如图3-3(a)、(b)所示,图中假定调制信号的上限频率为。显然,调制信号的带宽为。由图3-3(a)可见,AM信号波形的包络与输入基带信号成正比,故用包络检波的方法很容易恢复原始调制信号。但为了保证包络检波时不发生失真,必须满足 ,否则将出现过调幅现象而带来失真。 AM信号的频谱是由载频分量和上、下两个边带组成(通常称频谱中画斜线的部分为上边带,不画斜线的部分为下边带)。上边带的频谱与原调制信号的频谱结构相同,下边带是上边带的镜像。显然,无论是上边带还是下边带,都含有原调制信号的完整信息。故AM信号是带有载波的双边带信号,它的带宽为基带信号带宽的两倍,即: (3-5)式中,为调制信号

13、的带宽,为调制信号的最高频率。 3.2.2 AM信号的功率分配及调制效率 AM信号在1电阻上的平均功率应等于的均方值。当为确知信号时,的均方值即为其平方的时间平均,即: 因为调制信号不含直流分量,即,且,所以: (3-6)式中,为载波功率;为边带功率,它是调制信号功率的一半。由此可见,常规双边带调幅信号的平均功率包括载波功率和边带功率两部分。只有边带功率分量与调制信号有关,载波功率分量不携带信息,定义调制效率: (3-7) 3.3 AM信号的解调调制过程的逆过程叫做解调。振幅波解调方法可分为包络检波和同步检波两大类。包络检波是指解调器输出电压与输入已调波的包络成正比的检波方法。由于AM信号的包

14、络与调制信号成线性关系,因此包络检波只适用于AM波。AM信号的解调是把接收到的已调信号还原为调制信号。图3.3.1 包络检波原理图 下图是二极管峰值包络检波器的原理电路。它是由输入回路、二极管VD和RC低通滤波器组成。 图3.3.2二极管峰值包络检波器(a)原理电路; (b)二极管导通; (c)二极管截止当RC满足条件:包络检波器的输出与输入信号的包络十分相近,即: (3-9)根据对电路的分析,可以知道:检波过程就是信号源通过二极管给电容充电与电容对电阻R放电的交替重复过程;由于RC时常数远大于输入电压载波周期,放电慢,使得二极管负极永远处于正的较高的电位(因为输出电压接近于高频正弦波的峰值,

15、即UoUm);二极管电流iD包含平均分量(此种情况为直流分量)Iav及高频分量。图3.3.3输入为AM信号时检波器的输出波形图包络检波法特点是:解调效率高;解调电路简单,特别是接收端不需要与发送端同频同相位的载波信号,大大降低实现难度。故几乎所有的调幅(AM)式接收机都采用这种电路。3.4 巴特沃斯低通滤波器巴特沃斯滤波器的特点是同频带内的频率响应曲线最为平坦,没有起伏,而在组频带则逐渐下降为零。在振幅的对数对角频率的波特图上,从某一边界见频率开始,振幅随着角频率的增加而逐渐减少,趋向于负无穷大。一阶巴特沃斯滤波器的衰减率为每倍频20分贝,二阶巴特沃斯滤波器的衰减率为每倍频12分贝,三阶的衰减

16、率为每分贝18分贝,如此类推,巴特沃斯滤波器的振幅对角频率单调下降,并且滤波器的结束越高,在组频带振幅衰减速度越快,其他滤波器高阶的振幅对角频率图和低阶数的振幅对角频率有不同的形状。 上述函数的特点是等距离分布在半径为的圆上。因此,极点用下式表示为:的表示式:为了使设计公式和图表统一,将频率归一化。巴特沃斯滤波器采用3dB截止频率归一化,归一化后的系统函数为:令,称为归一化频率,称为归一化复变量,这样巴特沃斯滤波器的归一化低通原型系统函数为:式中,为归一化极点,用下式表示: 四、MATLAB仿真4.1 载波信号4.1.1 仿真程序function = Zaiboxinhao()U1=5; %载

17、波幅值为5f1=3000; %载波频率为3000t=-1:0.00001:1; % t扫描范围为-1到1w1=2*pi*f1; %载波信号角频率u1=U1*cos(w1*t); %载波信号表达式figure(1); %新建一个图形窗口1subplot(2,1,1); %将图形窗口一分为二,并把第一个作 为当前图形窗口plot(t,u1); %绘制载波信号波形xlabel(t);ylabel(u1); %横坐标为t,纵坐标显示为u1title(载波信号波形); %标题为载波信号波形axis(0,0.01,-10,10); %设置显示范围Y1=fft(u1); %对u1进行傅里叶变换subplot

18、(2,1,2); %将第二个子图形窗口作为当前图形窗口plot(abs(Y1); %绘制Y1的图形xlabel(w);ylabel(Y1); %横坐标为w,纵坐标显示为Y1title(载波信号频谱); %标题为载波信号频谱axis(5800,6200,0,600000); %设置显示范围4.1.2仿真波形图4.1.2载波信号波形及频谱4.2调制信号4.2.1 仿真程序function =Tiaozhixinhao()U2=3; f2=3; t=-1:0.00001:1; %t扫描范围为-1到1w2=2*pi*f2; u2=1.2*U2*cos(w2*t)+U2*cos(2*w2*t)+1.8*

19、U2*cos(3*w2*t); %调制信号表达式figure(2); %新建一个图形窗口2subplot(2,1,1); %将图形窗口一分为二,并把第一个作为当前图形窗口 plot(t,u2); %绘制载波信号波形xlabel(t);ylabel(u2); %横坐标为t,纵坐标显示为u2title(调制信号波形); %标题为调制信号波形axis(0,1,-15,15); %设置显示范围Y2=fft(u2); %对u2进行傅里叶变换subplot(2,1,2); %将第二个子图形窗口作为当前图形窗口plot(abs(Y2); %绘制Y2的图形xlabel(w);ylabel(Y2); %横坐标为

20、w,纵坐标显示为u1title(调制信号频谱); %标题为载波信号频谱axis(0,250,0,2000000); %设置显示范围4.2.2仿真波形图4.2.2调制信号波形及频谱4.3 AM调制4.3.1 仿真程序function =Tiaozhi()t=-1:0.00001:1; %t扫描范围-1到1U1=5; %载波信号幅度U2=3;f1=3000; %载波信号频率f2=3;m=0.1; %调制度为0.1 w1=2*pi*f1; %载波信号角频率w2=2*pi*f2;u2=1.2*U2*cos(w2*t)+U2*cos(2*w2*t)+1.8*U2*cos(3*w2*t); %调制信号u3

21、=U1*(1+m*u2).*cos(w1)*t); %AM已调信号figure(3); %新建一个图形窗口3subplot(2,1,1); %将图形窗口一分为二,并把第一个作为当前图形窗口 plot(t,u3); %绘制已调信号波形xlabel(t);ylabel(u3); %横坐标为t,纵坐标显示为u3title(已调信号波形); %标题为已调信号波形axis(0,1,-15,15); %设置显示范围Y3=fft(u3); %对u3进行傅里叶变换subplot(2,1,2); %将第二个子图形窗口作为当前图形窗口plot(abs(Y3); %绘制Y3的图形xlabel(w);ylabel(Y

22、3); %横坐标为t,纵坐标显示为u3title(已调信号频谱); %标题为已调信号频谱axis(5900,6100,0,600000); %设置显示范围4.3.2仿真波形图4.3.2已调信号波形及频谱4.4 AM波解调(包络检波法)4.4.1 仿真程序function =Jietiao1()%经过AM调制产生已调信号u3env=abs(hilbert(u3); %找出已调信号的包络 u4=18*(env-U1)*m; %去掉直流分量并重新缩放figure(4); %新建一个图形窗口4subplot(2,1,1); %将图形窗口一分为二,并把第一个作为当前图形窗口 plot(t,u4); %绘

23、制解调波形xlabel(t);ylabel(u4); %横坐标为t,纵坐标显示为u4title(AM已调信号的包络检波波形) %标题为AM已调信号的包络检波波形axis(0,1,-15,15); %设置显示范围Y4=fft(u4); %对u4进行傅里叶变换subplot(2,1,2); %将第二个子图形窗口作为当前图形窗口plot(abs(Y4); xlabel(w);ylabel(Y4); title(AM已调信号的包络检波频谱); %标题为AM已调信号的包络检波频谱axis(0,250,0,2000000); %设置显示范围4.4.2仿真波形图4.4.2 AM已调信号的包络检波波形及频谱4

24、.5 AM波解调(同步乘积型检波法)4.5.1 仿真程序function =Jietiao2()%经过AM调制产生已调信号u3u5=u3.*cos(w1*t); %滤波前的解调信号 figure(5); %新建图形窗口5subplot(2,1,1); %将图形窗口一分为二,并把第一个作为当前图形窗口 plot(t,u5); %绘制滤波前的解调信号波形xlabel(t);ylabel(u5); %横坐标为t,纵坐标显示为u5title(滤波前的解调信号波形); %设置标题Y5=fft(u5); %对u5进行傅里叶变换subplot(2,1,2); %将第二个子图形窗口作为当前图形窗口plot(a

25、bs(Y5); %绘制Y5的波形 xlabel(w);ylabel(Y5); title(滤波前的解调信号频谱); axis(187900,188100,0,600000); %低通滤波器f1=100;f2=200; %待滤波信号频率fs=2000; %采样频率m=(0.3*f1)/(fs/2); %定义过度带宽M=round(8/m); %定义窗函数的长度N=M-1; %定义滤波器的阶数b=fir1(N,0.5*f2/(fs/2); %使用fir1函数设计滤波器 %输入的参数分别是滤波器的阶数和截止频率figure(6) %新建图形窗口6h,f=freqz(b,1,512); %滤波器的幅频

26、特性图 %H,W=freqz(B,A,N)当N是一个整数时函数返回N点的频率向量和幅频响应向量plot(f*fs/(2*pi),20*log10(abs(h) %参数分别是频率与幅值xlabel(频率/赫兹);ylabel(增益/分贝);title(滤波器的增益响应);gridu6=filter(b,1,u5); %滤波后的解调信号 figure(7); %新建图形窗口7subplot(2,1,1); %将图形窗口一分为二,并把第一个作为当前图形窗口plot(t,u6); %绘制滤波后的解调信号波形xlabel(t);ylabel(u6); title(滤波后的解调信号波形);Y6=fft(u

27、6); %对u6进行傅里叶变换subplot(2,1,2); %将第二个子图形窗口作为当前图形窗口plot(abs(Y6); %绘制Y6的波形 xlabel(w);ylabel(Y6); title(滤波后的解调信号频谱); axis(0,250,0,600000);4.5.2仿真波形图滤波前的解调信号波形及频谱图滤波器的增益响应图滤波后的解调信号波形及频谱4.6 AM波的功率4.6.1 仿真程序function =Gonglv()m=0:0.01:1; %调制度扫描范围Ucm=5; %载波信号幅值 RL=1000; %负载电阻Pc=1/2*Ucm*Ucm/RL; %负载上消耗的载波功率 Pu

28、=(1/2*m*Ucm).*(1/2*m*Ucm)/(2*RL); %上边频分量所消耗的平均功率Pl=Pu; %下边频分量所消耗的平均功率PAM=Pc+Pu+Pl; %在调制信号的一个周期内,调幅信号的平均总功率e=(Pu+Pl)./PAM; %双边带总功率与平均总功率之比 figure(8); %新建一个图形窗口8plot(m,e); %做出m与e的关系曲线xalbel(调制度m); % 设定横纵坐标显示yxabel(双边带总功率与平均总功率之比); grid on 4.6.2仿真波形图4.6.2双边带总功率与平均总功率之比4.7 调制度m对AM调制的影响4.7.1 仿真程序function

29、 =m_yingxiang()t=-1:0.00001:1; %t扫描范围-1到1U1=4; %载波信号幅度U2=2; %调制信号幅度f1=3000; %载波信号频率f2=3; %调制信号频率m1=0; %调制度为0m2=0.4; %调制度为0.3m3=0.7; %调制度为0.6m4=1; %调制度为1m5=1.3; %调制度为1.3m6=3; %调制度为3u1=U1*(1+m1.*cos(2*pi*f2*t).*cos(2*pi*f1*t); %调制度为0的调制信号u2=U1*(1+m2.*cos(2*pi*f2*t).*cos(2*pi*f1*t); %调制度为0.4的调制信号u3=U1*

30、(1+m3.*cos(2*pi*f2*t).*cos(2*pi*f1*t); %调制度为0.7的调制信号u4=U1*(1+m4.*cos(2*pi*f2*t).*cos(2*pi*f1*t); %调制度为1的调制信号u5=U1*(1+m5.*cos(2*pi*f2*t).*cos(2*pi*f1*t); %调制度为1.3的调制信号u6=U1*(1+m6.*cos(2*pi*f2*t).*cos(2*pi*f1*t); %调制度为3的调制信号figure; %新建一个图形窗口subplot(3,2,1) %将图形窗口1分为6,并把第一个作为当前图形窗口 plot(t,u1); %绘制调制度为0时

31、的波形xlabel(t);ylabel(u1);title(m=0时AM调制信号);axis(0,1,-10,10);grid on;subplot(3,2,2) %将第2个子图形窗口作为当前图形窗口plot(t,u2); %绘制调制度为0.4时的波形xlabel(t);ylabel(u2);title(m=0.4时AM调制信号); grid on;subplot(3,2,3) %将第3个子图形窗口作为当前图形窗口plot(t,u3); %绘制调制度为0.7时的波形xlabel(t);ylabel(u3); title(m=0.7时AM调制信号); grid on;subplot(3,2,4)

32、 %将第4个子图形窗口作为当前图形窗口plot(t,u4); %绘制调制度为1时的波形xlabel(t);ylabel(u4);title(m=1时AM调制信号); grid on;subplot(3,2,5) %将第5个子图形窗口作为当前图形窗口plot(t,u5); %绘制调制度为1.3时的波形xlabel(t);ylabel(u5);title(m=1.3时AM调制信号); grid on;subplot(3,2,6) %将第6个子图形窗口作为当前图形窗口plot(t,u6); %绘制调制度为3时的波形xlabel(t);ylabel(u6);title(m=3时AM调制信号); gri

33、d on;4.7.2仿真波形图4.7.2调制度m对AM调制的影响五、总结本次高频电子电路的大作业,我们所选课题为“基于Matlab的AM振幅调制与解调仿真”。信号调制与解调技术是高频电子电路课程中一个重要的环节,也是实现通信必不可少的一门技术,更是电信专业学生必须掌握的一门技术。在完成课程设计的过程中,使我们进一步加深了对振幅调制和解调的原理的理解。课题在这里是把要处理的信号当做一种特殊的信号,即一种“复杂向量”来看待。也就是说,课题更多的还是体现了数字信号处理技术。在此次课程设计中,我们首先对设计原理进行分析,之后用到了处理数字信号的强有力工具MATLAB,通过MATLAB里几个命令函数的调

34、用,很轻易的在调制信号与载波信号的理论之间搭了一座桥。最终实现了对AM信号实现调制与解调,并通过fft变换,得出了调制信号和解调信号的频谱图;在滤波这一部分,课题主要是从巴特沃斯滤波器入手来设计低通滤波器等入手,实现了预期的滤波效果。此外,在此次高频电子电路课程设计中,通过查阅资料、请教同学等途径,在摸索中不仅完成了教学任务,还对MATLAB这个强大的仿真软件有了一定的认识。在完成了此次课设之后,掌握了自己的基础理论知识,提高了学习能力和基本动手能力,同时掌握了基本的文献检索和材料阅读的方法,提高了我们的基本素质。培养了我们独立思考和解题的能力,树立了对所学知识运用的信心,这些必将在我们今后的

35、学习工作和生活中起到非常大的帮助。总之这次课设使我受益匪浅,让我学到了很多东西。尽管此次课程设计完成的效果并非很好,但是我觉得在设计过程中所学到的东西才是此次经历的最大收获和财富。课程设计不仅是对前面所学知识的一种检验,同时也是对自身能力的一种提高。学习本身就是一个长期积累的过程,在以后的工作和生活中都应该不断学习,努力提高自己的知识和综合素质。六、参考文献王卫东. 高频电子电路M. 北京:电子工业出版社, 2009唐向宏,岳恒立,郑雪峰. Matlab及在电子信息类课程中的应用M.北京:电子工业出版社,2009朱习军,张宾,刘尊年,隋思连.Matlab信号与图像处理中的应用M.北京:电子工业

36、出版社, 2009张琨. MATLAB 2010从入门到精通M.北京:电子工业出版社, 2011王忠礼,段慧达,高玉峰. MATLAB应用技术M.北京:清华大学出版社, 2007 HYPERLINK javascript:gotopage(John%20H.%20Mathews(约翰%20H.%20马修斯),%20Kurtis%20K.%20Fink(柯蒂斯%20K.%20芬克)) John H.Mathews, Kurtis D.Fink著.周璐,陈渝,钱方译.数值方法(MATLAB版)(第四版)M.北京:电子工业出版社,2010张志涌.MATLAB与仿真(2010a)M.北京:北京航空航天

37、大学出版社,2010附录资料:不需要的可以自行删除Pascal/C/C+语句对比(补充版)一、Hello world 先看三种语言的样例:Pascalbegin writeln(Hello world);end.C#include int main() printf(Hello world!n); return 0;C+#include using namespace std;int main()cout Hello world! endl; return 0; 从这三个程序可以看到一些最基本的东西。在Pascal中的begin和end,在C/C+里就是;Pascal主程序没有返回值,而C/C

38、+返回0(好像在C中可以为NULL)。在C/C+中,main函数以前的是头文件,样例中C为stdio.h,C+除了iostream还有第二行的using namespace std,这个是打开命名空间的,NOIP不会考这个,可以不管,只要知道就行了。 此外说明 注释单行用/,段落的话Pascal为,C/C+为/* */。* 常用头文件(模板)#include #include #include #include #include #include using namespace std;int main() system(“pause”);return 0;二、数据类型及定义 这里只列出常用的

39、类型。1、整型PascalC/C+范围shortint-128 127integershort-32768 32767longintInt -2147483648 2147483647int64long long-9223372036854775808 9223372036854775807byte-0 255wordunsigned short0 65535longwordunsigned int0 4294967295qwordunsigned long long0 18446744073709551615 * 当对long long 变量赋值时,后要加LLLong long x=6327

40、844632743269843LL* 如果位移 x2LL* Linux: printf(“%lldn”,x);* Windows: printf(“%I64dn”,x);2、实型PascalC/C+范围realfloat2.9E-39 1.7E38single-1.5E-45 3.4E38doubledouble5.0E-324 1.7E3083、字符即字符串 字符在三种语言中都为char,C里没有字符串,只有用字符数组来代替字符串,Pascal和C+均为string。Pascal中字符串长度有限制,为255,C+则没有。 字符串和字符在Pascal中均用单引号注明,在C/C+中字符用单引号,

41、字符串用双引号。4、布尔类型 Pascal 中为 boolean,C/C+ 为 bool。值均为True 或 False。C/C+中除0外bool都为真。5、定义 常量的定义均为 const,只是在C/C+中必须要注明常量的类型。在C/C+中还可以用宏来定义常量,此时不注明类型。PascalC/C+const a = 60; b = -a + 30; d = ;const int a = 60;const int b = - a + 30;const string d = “”;define MAXN 501 /这个是宏 * 宏定义其实就是直接在程序相应的位置替换: #define rando

42、mize srand(unsigned time(NULL) #define wait for(int w=0;w a;cout a;cout a endl;特别说明C+中cin一个字符的话会自动跳过空格和回车,Pascal和C则会读入空格和回车。在Pascal中writeln(a:n:m) 表示在n个字符宽的输出域上输出a保留m位小数。例如:pascal write(a:6) c/c+ printf(“%6d”,a) Pascal write(a:6:2) c/c+ printf(“%6.2f”,a) C+ 如果用 cout ? (繁琐!) 需要加头文件 #inlude cout setpr

43、ecision(2)a; /作用永久 cout setw(6)a; /作用临时 以下三个进制设定都是永久作用: cout deca; 相当 printf(“%d”,a); /十进制 cout hexa; 相当 printf(“%X”,a); /十六进制 cout octa; 相当 printf(“%o”,a); /八进制例如:cout 12hex12oct1212endl;输出:12c1414 C 的输入输出里面的字符串中%表示变量,%后面的字目表示变量类型。下面是类型表:%hd1个short型整数%d1个int型整数%u1个unsigned int型整数%I64d1个long long型整数

44、%c1个字符%s1个C字符串%f1个float型实数%lf1个double型实数%10.4f输出1个总宽度为10,保留4位小数的实数 文件输入输出:Pascalassign(input, test.in);assign(output, test.out);reset(input);rewrite(output);read(a, b);writeln(a, b);close(input);close(output);CFILE *fin = fopen(“test.in”, “r”);FILE *fout = fopen(“test.out”, “w”);fscanf(fin, “%d%d”,

45、&a, &b);fprintf(fout, “%d%d”, a, b);fclose(fin); fclose(fout);C+#include using namespace std;ifstream fin(“test.in”);ofstream fout(“test.out”);fin a b;fout a b endl;fin.close(); fout.close();因为C+的读入较慢,个人建议C+的话使用C的输入方式。当然也有人用C的读入,C+的输出的,这种方式我们称之为城乡结合。*中国计算机学会竞赛须知发布的C读写程序:(C+ 也能用,cin,cout,scanf,printf

46、 可混用)#include int main() int a,b; freopen(“sum.in”,”r”,stdin);freopen(“sum.out”,”w”,stdout); scanf(“%d%d”,&a,&b); printf(“%dn”,a+b); return 0; 或者:freopen(“sum.in”,”r”,stdin);freopen(“sum.out”,”w”,stdout);ios:sync_with_stdio(false); 取消同步,cin,cout的速度就不慢了! cinab;couta+bendl; return 0;以下扩充c/c+混用是可行的:#in

47、clude #include using namespace std;int main() int a,b,c,d; freopen(sum.in,r,stdin); freopen(sum.out,w,stdout); scanf(%d%d,&a,&b); cincd; printf(%dn,a+b); couta+b+c+dsn).Cwhile(scanf(%s%d,s,&n)!=EOF).四、赋值语句及运算符号 一一对应的关系PascalC/C+赋值运算赋值:=基本运算加+减-乘*除(实数)/ (double)除法取整div(int) / (int)取余mod%比较等于=不等于!=大于大

48、于等于=小于小于等于=逻辑且and&或or|非not!位运算左移(*2)shl且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, 同 if x 0 then x := x else x := -x;五、条件语句1、if C/C+中if 语句的条件必须要用括号括起来,后

49、面不使用then。PascalC/C+if a b then flag := true else flag := false;if (a b) flag = true;else flag = false;2、多种分支 C/C+中为switch,Pascal为case:PascalC/C+case x of 1: inc(x); 2: dec(x); else x := x * x;end;switch (x) case 1: x +; break; case 2: x -; break; default: x *= x; 切记C/C+中一定要写break,后果你可以去掉break,运行看看就知

50、道了。六、循环语句1、forPascalC/C+for 变量名 := 初始值 to(downto) 终止值 dofor (变量名=初始值;条件;改变方式)for i := 5 to 10 do dec(a);/终止值大于初始值用 tofor i := 5 downto 1 do dec(a);/终止值小于于初始值用 downtofor (i = 5; i = 1; i-) a-;/*只要i 满足条件就会一直循环。C/C+中i是实数、指针都可以*/C/C+中for的特殊用法:/变量为实数for (double i = 1; i 符号为间接引用,后面会提到。for (type1 *p = head

51、 - next; p; p = p - next) printf(“%d”, p - k);2、whilePascalC/C+while 条件 dowhile (条件)while i 0 do dec(i);while (i != 0) i-;/也可写作 while (i) i-;/在C/C+中非0即为真。3、repeat-until & do-whilePascalC/C+repeat 语句 until 结束条件;do while (运行条件)repeat int(i) until i 100;do i+; while (i = 100);七、数组 Pascal中数组的下标可以随意定义,而C

52、/C+下标始终为从0开始到(数组大小1)。PascalC/C+定义a : array 1.100 of integer;b :array 1.10,1.10 of int64;int a100;int b1010;含义a 为大小为100的integer数组,合法下标为1到100b 为大小为10*10的int64数组,合法下标为1,1到10,10a 为大小为100的int数组,合法下标为0到99b 为大小为10*10的int数组,合法下标为0,0到9,9;使用inc(a21);b2,2:=b1,1+b1,2+b2,1;a21+;b11=b01+b00+b10; 数组清零PascalC/C+Fil

53、lchar(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开始。字符串处理很多这里不一一列举,只写最常用的几个。

54、PascalC (包含)定义用:char sC+(包含)定义用:string s输入输出Readln(s);Writeln(s);Scanf(“%s”,s);Printf(“%sn”,s);注:不能输入输出c+的字符串Cins;Couts = s 的区别: getline(cin,s)cins一次性整行读入,直至行末尾。只读入一个“单词”,遇空格和行末停止。例如输入;How are you?s=” How are you?”读入整串含空格例如输入;How are you?s=”How”如果三个都读:cins1s2s3*C+ 数字与数值之间的转换:#include #include #inclu

55、de /必须加入using namespace std;int main() string text = 152; int number; stringstream ss;ss number; /string - int coutnumber+100endl; ss string string str = ss.str(); return 0;九、过程和函数1、过程 在C/C+中没有过程,但可以把返回值为“空”的函数理解为过程。PascalC/C+无参过程procedure 过程名;说明部分begin 语句部分 end;/说明部分、begin、end语句部分统称为过程体void 函数名();

56、主体部分; return ;带参过程procedure 过程名(形参表)过程体void 函数名(形参表)过程体 值传和址传:当一个参数是值传时,形参在子过程中相当于一个局部变量,对它的改变不影响实在的参数值。址传则会影响。下例中a为值传,b为址传。初始a = 5,b = 5,运行后a = 5,b = 10;PascalC/C+var a, b:integer;procedure doit(a:integer; var b:integer);begin b := a + b; a := a + b;end;begina := 5;b := 5;doit(a, b);writeln(a, , b)

57、;end.void doit(int a, int &b) HYPERLINK a a认为值参,b认为变量传参 b += a; a += b; return ;int main()int a = 5, b = 5;doit(a, b);cout a b;return 0;* 用若干地址传参可以给调用者传回若干值 Void tryit(int &x,int &y,int &z) 调用时: tryit(a,b,c) ,可以传回 a,b,c的值。* 用数组名(也是地址)传参可以传回整组的数据 Void tryit( int a) 调用时: tryit(x),可以传回整个数组。例如:void tryit(int a) for(int i=0;i=10;i+) ai=i*2; return; int main() int x10; tryit(x); for(int i=0;i=10;i+) coutxiendl; system(pause); return 0;*用指向函数的指针作为参数,可以执行指定的函数。(略)STL 的两个应用:* C+ 快排函数#include Bool com(int a,int b) Return ab;Int main() Int a10=5,7,3,2,6,8,4,3,5,7

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论