我们专注攀枝花网站设计 攀枝花网站制作 攀枝花网站建设
成都网站建设公司服务热线:400-028-6601

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

c语言acosh函数,c语言acos是什么意思

用C语言实现三角函数及反三角函数怎么实现

#includestdio.h

成都创新互联是网站建设专家,致力于互联网品牌建设与网络营销,专业领域包括成都做网站、成都网站设计、电商网站制作开发、重庆小程序开发、微信营销、系统平台开发,与其他网站设计及系统开发公司不同,我们的整合解决方案结合了恒基网络品牌建设经验和互联网整合营销的理念,并将策略和执行紧密结合,且不断评估并优化我们的方案,为客户提供全方位的互联网品牌整合方案!

#include math.h

void main()

{

double a,b,c,d;

scanf("%f,%f",b,d);

a=sin(b);/*这是三角函数*/

c=asin(d);/*这是反三角函数*/

printf("sin(b)=%f,asin(d)=%d",a,c);

}

其他三角函数如cos(x)什么的,可以直接用,前提有math.h的头文件

实用软件解析(选择一款实用软件,分析其作用、用法,写一份简明教程。)

数学建模和数学分析是工科类专业学生学习的基础,同时也是工程设计中的首要工作,随着现代系统的大规模发展趋势,所需的数学运算日益复杂,特别是对于矩阵运算的要求逐渐增多,这些工作已经难以以手工完成,因此,随着科学技术的前进以及计算机技术的日益完善,一些便于实现的仿真应用软件逐步在科技领域占了重要的地位。仿真软件不同于编程软件,作为一种分析工具,它们在人机交互式方面有着极大的优越性,人们可以不必对编程所用语言下很大的工夫去学习它,从而可以节省大量的时间用于科学研究,提高了工作进程和效率。

MATLAB软件包最早由美国Mathwork公司于1967年推出,是“Matrix Laboratory”的缩写,早期是为了实现一些矩阵运算;而随着这种软件的逐步发展,它以计算及绘图功能强大的优势逐渐渗入到了各个工程领域,比如数学、物理、力学、信号分析以及数字信号处理等,目前已是深受工程师们喜爱的一种分析工具,目前该软件已经发展到了Matlab7.0版本。Matlab大大降低了对使用者数学基础和计算机语言知识方面的要求,而且编程效率较高,还可以直接在计算机上输出结果和精美的图形。

9.1MATLAB语言概述

9.1.1 Matlab语言的特点

1. 编程效率高

作为一种面向工程的高级语言,Matlab允许用数学形式的语言来编写程序,这种编程语言和其它诸如C、Fortran等语言相比,其语言格式更接近于我们平时的书写习惯,因此,Matlab又被称为纸式算法语言。由于其编写程序简单,因此编程效率高,易学易懂,初学者在几小时之内便可以达到简单操作的程度。

另外在Matlab中还可以调用C和Fortran子程序,而且调用格式非常简单。

2. 采用交互式人机界面,用户使用方便

Matlab语言为解释型操作,人们可以在每条指令之后马上得到该指令执行的结果;同时在执行的过程中如发现指令有错,在屏幕上马上会出现出错提示。该语言提供了丰富的在线帮助功能,想了解指令或操作的格式、功能等,只要在窗口输入‘HELP 指令’,该指令的格式、功能等便能马上在屏幕上显示出来。

3. 语句简单,涵盖丰富

Matlab语言中有丰富库函数功能,这些函数功能和C语言中的函数一样使用方便,而且Matlab的函数调用起来要更方便,更接近于生活语言。这些函数包括常用的数学计算,绘图以及一些扩展工具箱。

4. 具有多个功能强大的应用工具箱

Matlab中包括了一些扩展的函数功能,一般称为工具箱,这些工具箱实际上是一些功能函数集,每一个工具箱适用于各自不同的科学分析领域。现在Matlab中已有系统分析、信号处理、图象处理、DSP等多个工具箱,而且Matlab所包括的工具箱还在不断地被扩展。

5. 方便的计算和绘图功能

Matlab中的很多运算符不仅可以用于数值计算,而且有很多运算符只要增加一个‘’便可以用于矩阵运算,另外在Matlab中还给出了适用于不同领域的特殊函数,使得一些诸如卷积等的复杂运算也可以很方便的得到解决;Matlab的绘图函数十分丰富,用适用于不同坐标系的绘图语句,还可方便地在所绘图形上标注横、纵坐标变量、图形名称等。另外,在调用绘图语句时,只需改变函数变量,就可以绘出不同颜色、不同风格的线或图。

9.1.2 Matlab命令的结构

MATLAB语言的典型结构为:

MATLAB语言=窗口命令+M文件

Matlab的命令窗口就是其工作空间,也是Matlab运行的屏幕环境,在这种环境下输入的Matlab语句,称为“窗口命令”。所谓窗口命令,就是在上述环境下输入的Matlab语句并直接执行它们完成相应的运算、绘图等。

但对于复杂功能,Matlab利用了M文件。Matlab的程序可以向下兼容。

M文件由一系列Matlab语句组成,在Matlab的编辑窗口完成输入。它既可以是一系列窗口命令,又可以是由各种控制语句和说明语句构成的函数。

9.1.3 Matlab的库函数

库函数是系统根据需要编制好了,提供用户使用的函数,用户使用它们时,只要写出函数名,调整函数参量,无须再编写该函数的程序。

各种不同版本的Matlab都提供了一批库函数,但其提供的库函数的数目不同,函数名和函数功能也不完全一样。

常用的库函数包括一些基本数学函数、字符与字符串函数、输入输出函数等

除了基本库函数外,不同版本的Matlab还增加了不同的有专门功能的功能库函数,也称为工具箱,例如信号处理工具箱、控制系统工具箱等。

9.1.4 Matlab命令的执行

一般常用的有两个窗口,“命令窗口”和“调试窗口”,用户可以在“调试窗口”中输入自己编制的程序以及对程序进行修改和调试。程序输入后应该进行存盘操作,文件名按规定选择,开头必须为字母,长度不能超过19个字符,文件名前19个字符相同的文件按同一文件处理;在“命令窗口”中用户可以执行Matlab命令或将用户编制的文件以命令形式在界面上运行。

执行M文件的方法有两个,一是直接在调试窗口中利用功能菜单的调试命令完成。;二是将在“调试窗口”中存好的M文件的文件名在“命令窗口”中输入后按回车即可

9.1.5 数据的输入和结果输出

Matlab的文件格式为固定格式,由于其数据输入极为简单,因而对少量的数据输入,不需要花费很多的时间。

Matlab的结果输出有数据输出(包括表达式)和图形输出两种,数据结果会直接输出到命令窗口中,图形则在专门的图形窗口中显示。

9.1.6 环境参数

操作系统中的PATH是很常见的,MATLABPATH也是Matlab中很重要的环境参数,设置好适当的MATLABPATH以后,Matlab可以方便地调用任何地方的M文件和运行可执行文件。

如果在Matlab中输入一个名字,例如abc,则Matlab会按以下顺序做

1. 看abc是否为工作空间中的变量

2. 检查abc是否是一个内部变量

3. 在当前目录中寻找abc.MEX或abc.M文件,假若两个文件同时存在,则abc.MEX优先考虑。

4. 根据环境参数MATLABPATH指定的搜索路径来寻找包含abc.MEX或abc.M的目录

MATLABPATH已经在Matlab进行安装时自动设置好,它包括了除Matlab的工作目录(MATLAB/BIN)之外的所有其他Matlab的子目录。

用户也可以增加或修改MATLABPATH的内容来增加或修改搜索路径,以便建立一些特殊的、专用的文件库,修改MATLABPATH可以用Matlab的PATH命令,但是这种修改不能被保存下来,在退出Matlab后就自动取消,要保持的MATLABPATH设置可以通过编辑的启动控制文件—MATLABC.M来实现。

9.1.7 命令与文件的编辑和建立

1. 命令行的编辑

鼠标和键盘上的箭头等可以帮助修改输入的错误命令和重新显示前面输入过的命令行。例如准备输入:

y=square(pi*x);

而误将square拼写成了squae,MATLAB将返回出错信息:

???Undefined function or variable squae

其中???是出错信息的提示符,说明输入有MATLAB不能识别的命令。此时只须按上下箭头,刚才输入的命令即可重新显示在屏幕上。这时利用鼠标或键盘,将光标置于e的位置,再输入字符r即可。回车后,屏幕将给出命令执行的结果。先前输入的命令存放在内存中。由于内存缓冲区的大小有限,只能容纳最后输入的一定量的命令行,因而可重新调用的也是后面输入的一定数据的命令行。下表9-1是一些编辑键及其功能:

表9-1 MATLAB的编辑键及功能

命令行编辑和重新调出键

↑ 重新调出前一命令行

↓ 重新调出后一命令行

← 光标左移一个字符

→ 光标右移一个字符

ctrl+← 光标左移一个字

ctrl+→ 光标右移一个字

Home 光标移到行首

End 光标移到行尾

Delete 删除光标所在位置的字符

Backspace 删除光标所在位置左边的一个字符

若在提示符下输入一些字符,则↑键将重新调出以这些字符为开头的命令行。

这里没有插入和改写的转换操作,因为光标所在处总是执行插入的功能。

如果使用鼠标,会使这些操作更为方便。把鼠标放到光标移到位置,并定位即完成光标移动。利用鼠标,还可以方便地完成字符串的选择、复制和删除。

2. 文件的编辑与建立

一般我们常用的建立M文件的途径是利用Matlab提供的M文件窗口。

①建立新的M文件

图9-1 Matlab命令窗口

选择Matlab命令窗口中的菜单File—New—M-File菜单,如图9-1所示,即可出现文件调试窗口,如图9-2所示,在此窗口中将用户程序输入,

图9-2Matlab调试窗口

退出该窗口时应存盘,文件名的命名按前所述,其扩展名必须为.M。

②编辑已有的文件

选择Matlab命令窗口中的菜单File—Open命令,出现文件选择窗口,选择所需文件即可。

9.2 MATLAB的基本语法

9.2.1基础知识

1. 语句和变量

Matlab语句的通常形式为:

变量=表达式

简单的形式为:表达式

表达式由操作符或其他字符,函数和变量名组成,表达式的结果为一个矩阵,显示在屏幕上,同时输送到一个变量中并存放于工作空间中以备调用。如果变量名和“=”省略,则ans变量将自动建立,例如输入:1900/81

得到输出结果:

ans=

23.4568

如果在语句的末尾是分号“;”,则说明除了这一条命令外还有下一条命令等待输入,Matlab这时将不给出中间运行结果,当所有命令输入完毕后,直接打回车键,则Matlab将给出最终的运行结果。

如果一条表达式很长。一行放不下则键入“…”后回车,即可在下一行继续输入。注意“…”前要有空格。

变量和函数名由字母或字母加数字组成,但最多不能超过19个字符,否则只有前19个字符被接受。

Matlab的变量区分字母大小写,函数名则必须用小写字母,否则会被系统认为是未定义函数,也可以用casesen命令使Matlab不区分大小写。

2. 数和算术表达式

惯用的十进制符号和小数点、负号等,在Matlab中可以同样使用。表示10的幂次要用符号e或E。

在计算中使用IEEE算法精确度是eps,且数值允许在10-308-10308间16位长的十进制数。

Matlab的算术运算符如下表9-2所示:

表9-2 Matlab的算术运算符

+ 加

- 减

* 乘

/ 右除

\ 左除

^ 幂

对于矩阵来说,这里左除和右除表示两种不同的除数矩阵和被除数矩阵的关系。对于标量,两种除法运算的结果相同。

3. 输出格式

任何Matlab语句的执行结果都可以在屏幕上显示,同时赋值给指定变量时赋值给ans,数字显示格式可由format命令来控制。format只影响结果的显示,不影响其计算与存储。Matlab总是以双精度执行所有的运算。

1. Help命令

Help命令很有用,它为Matlab绝大多数命令提供了联机帮助信息。

Help除了可以以菜单形式提供帮助外,还可以在命令窗口输入“Help”命令来取得信息。

输入help lsim将得到特征函数lsim的信息。如图9-3所示:

图9-3 help命令的使用

输入help [ 将显示如何使用方括号输入矩阵。

9.2.2向量

1. 产生向量

在Matlab中“:”是一个重要的字符,如产生一个1-5单位增量的行向量:在命令窗口中输入

x=1:5

回车后得到结果:

x=

1 2 3 4 5

也可以产生一个单位增量小于1的行向量,方法是把增量放在起始和结尾量的中间,如:

t=0:0.2:1

在命令窗口中输入后回车将得到以下结果:

t =

0 0.2000 0.4000 0.6000 0.8000 1.0000

“:”也可以用来产生简易的表格。为了产生纵向表格形式,首先可形成行向量,而后转置得到,即可与另一列向量合成两列的一个矩阵,如:

在MATLAB命令窗口中输入如下语句:

t=(0:0.1:1)’;

y1=exp(-t);

[t y1]

命令窗口中将会显示结果如下:

ans =

0 1.0000

0.1000 0.9048

0.2000 0.8187

0.3000 0.7408

0.4000 0.6703

0.5000 0.6065

0.6000 0.5488

0.7000 0.4966

0.8000 0.4493

0.9000 0.4066

1.0 0.3679

由结果可以看到,简单的命令语句便可以生成一个十一行两列的矩阵。

2. 下标

单个的矩阵元素可在括号中用下标来表达。例如已知:

A=

1 2 3

4 5 6

7 8 9

其中元素A(3,3)=9,A(1,2)=2等。如用语句A(3,2)=A(1,1)+A(2,1),则产生的新矩阵为:

A=

1 2 3

4 5 6

7 5 9

下标也可以是一个向量。例如若x和v是向量,则x(v)也是一个向量;[x(v(1)) x(v(2))…x(v(n))]。对于矩阵来说,向量下标可以将矩阵中邻近或不邻近元素构成一新的子矩阵,假设A是一个10*10的矩阵,则A(1:5,3)指A中由前五行对应第三列元素组成的5*1子矩阵。

又如A(1:5,7:10)是前5行对应最后四列组成的5*4子矩阵。使用“:”代替下标,可以表示所有的行或列。如:A(:,3)代表第三列元素组成的字矩阵,A(1:5,:)代表由前5行所有元素组成的子矩阵。对于子矩阵的赋值语句,“:”有更明显的优越性。如A(:,[3,5,10])=B(:,1:3)表示将矩阵的前三列,赋值给矩阵的第三、五、十列。

9.2.3数组运算

数组和矩阵是两个完全不同的概念,虽然在Matlab中它们在形式上有很多的一致性,但它们实际上遵循着不同的运算规则。Matlab数组运算符由矩阵运算符前面加一个“.”来表示,如“.*”“./”等。

9.2.4 数学函数

一组基本函数作用在一个数组上,如

A=[1 2 3;4 5 6]

B=fix(pi* A)

C=cos(pi*B)

运算将按函数分别作用于数组的每一个元素进行,其结果为:

A =

1 2 3

4 5 6

B =

3 6 9

12 15 18

C =

-1 1 -1

1 -1 1

表9-3是Matlab所提供的数学函数主要有:

表9-3 Matlab的主要数学函数

三角函数

sin 正弦

cos 余弦

tan 正切

asin 反正弦

acos 反余弦

atan 反正切

atan2 第四象限的反正切

sinh 双曲正弦

cosh 双曲余弦

tanh 双曲正切

asinh 反双曲正弦

acosh 反双曲余弦

atanh 反双曲正切

另外还有一些以此为基础的基本数学函数如表9-4所示。

表9-4 Matlab的基本数学函数

基本数学函数

abs 绝对值或复数模

angle 相角

sqrt 开平方

real 实部

imag 虚部

conj 复数共轭

round 四舍五入到最近的整数

fix 朝零方向取整

floor 朝负无穷方向取整

ceil 朝正无穷方向取整

sign 正负符号函数

rem 除后余数

exp 以e为底的指数

log 自然对数

log10 以10为底的对数

以及一些特殊的数学函数如表9-5:

表9-5 Matlab的特殊函数

特殊函数

bassel 贝塞尔函数

gamma 完整和非完整的γ函数

rat 有理逼近

ert 误差函数

invert 逆误差函数

ellipk 第一类完整椭圆积分

ellipj 雅可比椭圆函数

以及在此基础上扩充的特殊数学函数。

9.3 绘图

在Matlab中把数据绘成图形的命令有多种。以下表9-6列出了这些命令:

表9-6 Matlab的主要绘图命令

绘图命令

plot 线性X—Y坐标图

loglog 双对数坐标图

semilogx X轴对数半对数坐标图

semilogy Y轴对数半对数坐标图

polar 极坐标图

mesh 三维消隐图

contour 等高线图

bar 条形图

stairs 阶梯图

除了可以在屏幕上显示图形外,还可以对屏幕上已有的图形加注释、题头或坐标网格。主要命令如表9-7所示:

表9-7 Matlab的主要图形注解函数命令

图形加注

title 标题头

xlabel X轴标注

ylabel Y轴标注

text 任意定位的标注

gtext 鼠标定位标注

grid 网格

关于坐标轴尺寸的选择和图形处理等控制命令如下表9-8所示:

表9-8 Matlab的主要图形控制命令

图形控制命令

axis 人工选择坐标轴尺寸

clr 清图形窗口

ginput 利用鼠标的十字准线输入

hold 保持图形

shg 显示图形窗口

subplot 将图形窗口分成N块子窗

还有很多此类命令,在以后的学习中大家可以逐步掌握。

9.3.1X—Y绘图

plot命令绘制坐标图,loglog命令绘制全对数坐标图,semilogx和semilogy命令绘制半对数坐标图,polar命令绘制极坐标图。具体命令的格式及使用方法可以利用help在线帮助详细了解。

1. 基本形式

如果y是一个向量,那么绘制一个y元素和y元素排列序号之间关系的线性坐标图。例如要画y元素的序号1,2,3,4,5,6,7和对应的y元素值分别为0,0.48,0.84,1,0.91,0.6,0.14的图形,则输入命令:

y=[0 0.48 0.84 1 0.91 0.6 0.14];

plot(y)

则结果如下图9-4所示:

图9-4 曲线波形图

图中坐标轴是软件自动给出的,也可任意对图形加注,当输入以下命令:

title(’my first plot’); % 输入题头

xlabel(’x’); % 输入x轴标注

ylabel(‘y’); % 输入y轴标注

grid % 加网格

则图形显示如下图9-5所示:(注意x和y应是同样长度的向量)

图9-5 选定坐标的波形图

9.3.3图线形式和颜色

1. 形式

如果不使用缺省条件,可以选择不同的线条或点形式作图,对应符号及效果如表9-9所示:

表9-9 绘图曲线格式及命令

线方式

点方式

实线 -

虚线 ……

冒号线 :

点划线 –▪–▪

点 .

加号 +

星 *

小圆 ○

x形式 x

2. 颜色

命令及效果如表9-10所示:

表9-10 图形颜色命令

颜色

黄 y

洋红 m

青 c

红 r

绿 g

蓝 b

白 w

黑 k

9.4 MATLAB 使用简介

首先在PC机上安装Matlab,不同版本的Matlab需要不同的系统支持;当机器上装载了Matlab软件包后,用户就可以使用了。

下面以一个具体的小例子简要介绍如何使用Matlab软件包来实现一些计算及绘图功能。使用中我们采用了Matlab6.5版本。

工程中经常会遇到曲线拟合的问题,当实验测定了发生事件的一组数据后,根据数据拟合出一条曲线,从而对事件发生的将来做出预测或在后续的系统分析中进行理论研究。在这里我们不关心曲线拟合的具体算法,只是来熟悉一下Matlab的各个窗口及命令。

实际中,一般的电信号以时间作为自变量,测定数据时可以以等时间间隔为测量依据,假设我们现在有这样的一组数据:[1,2],[1.5,3],[2,4],[2.5,3.5],[3,5],[3.5,4],[4,6],[4.5,6.6],[5,7.2],[5.5,8],要求以这组数据拟合出一条曲线。

进入MATLAB后,我们首先看到的是它的主界面——命令窗口,如图9-6所示

图9-6 Matlab命令窗口

在命令窗口中我们可以直接输入如下命令:

t=[1:0.5:5.5]; %定义自变量范围

y=[2,3,3.5,3.8,5,4.9,6,6.6,7.2,8]; %定义函数值

qx1=polyfit(t,y,1) %对数据做一次拟合

qx2=polyfit(t,y,5) %对数据做五次拟合

t1=1:0.05:5.5; %确定作图横坐标范围

y1=polyval(qx1,t1); %形成曲线数学模型

y2=polyval(qx2,t1);

plot(t,y,'*',t1,y1,':',t1,y2) %作图

即可得到这些命令的执行结果,它以图形的形式给出,如图9-7所示,从图中可以看到,兰色的‘*’是数据点,绿色的虚线是一次拟合曲线,而红色的实线则是三次拟合曲线。

图9-7 曲线拟合图

我们可以多次反复进行不同次数的曲线拟合,最终可以得到一条和数据点最接近的曲线。这样的反复工作在Matlab中很容易就可以实现,只要改变命令中的‘polyfit’函数的参数就可以得到。

由于我们不是主要对软件做详细的介绍,所以在后面内容中有一些命令并没有做很细致的描述,大家可以充分利用Matlab的在线帮助功能对这些命令做一些深入的认识,例如,在学习过程中我们若不了解‘polyval’函数的作用,就可以在Matlab的命令窗口中输入

helppolyval

然后回车,便可看到如下窗口图9-8,从而可以很方便地了解和熟悉该函数的作用和调用格式

图9-8 Matlab帮助窗口

从窗口信息中我们可以知道,‘polyval’函数的功能是构建数据的多项式数学模型。在图9-6中我们可以看到有如下的输出信息,它即我们所构造的两个多项式的系数矩阵

qx1 =

1.2776 0.8479

qx2 =

0.0160 -0.2798 1.8717 -5.8876 9.7583 -3.4642

通过调用函数‘polyval’我们即可得到两个多项式所表示的曲线方程:

值得注意的是,如果需要编写复杂一些或经常需要进行参数改动的程序,则最好在Matlab的调试窗口中进行编程,然后形成M-文件,过程如下:

1. 从命令窗口进入调试窗口

2. 在调试窗口中输入以上语句

3. 调试程序,获得所需要的信息

调试程序有两种方法,一是在调试窗口中直接进行,如图9-9所示,在调试窗口中选择命令菜单Debug—Run命令,即可得到调试结果;二是在调试窗口完成程序的编制后存盘(例如文件名为qx.m),推出调试窗口,返回到命令窗口中,在命令窗口中键入qx然后回车,也可以马上得到调试结果。

图9-9 调试窗口中的程序调试

9.5 交互式人机界面介绍

利用编程的方法可以方便地实现一些分析的仿真,但是这种仿真设计的方法还是需要掌握一定的编程语言,怎样脱离开编程而实现更简捷的EDA设计是所有EDA设计软件发展的一个思路,在MATLAB软件包中还提供有一些交互式的图形用户界面,用户可以直观地利用鼠标直接在屏幕上控制图形就可以完成一些设计和分析任务。

在MATLAB数字信号处理工具箱中,用户便可以利用这种图形形式的人机界面在窗口中利用鼠标而完成信号的输入、观察和测量;对信号进行频谱分析,了解信号的频率特征以及实现数字滤波器的设计等。在这里,用户不必去了解MATLAB中众多的函数功能及语法规则就可以完成大部分的信号及系统的分析工作。

下面简要介绍这种界面的基本组成。

在MATLAB命令窗口中,键入‘sptool’命令,一个sptool窗口便会马上弹出,如图9-10所示。第一次打开是,窗口的名称是一个未定义的sptool窗(untitled)。用户在使用后可以对窗口进行命名,从而可以在下次使用时进行打开调用。

图9-10 SPTOOL窗口

在sptool窗口中,用户可以可视化地实现信号分析及处理的全部工作。窗口有信号(SIGNALS)、滤波器(FILTER)和频谱(SPECTRA)三个栏目,它们分别记录了用户所用过的信号、滤波器和频谱。

Sptool窗口的主要命令菜单有文件(FILE)和编辑(EDIT)两个:

1. File菜单

l Open session 打开已经存在的扩展名为.spt的SPTool窗口;

l Import 鼠标选择该项后会弹出一个对话框,用户根据提示可以从磁盘或MATLAB工作空间向SPTool窗口输入信号、滤波器或频谱,它们文件名的后缀必须是 .MAT文件形式;

l Export 向MATLAB工作空间或磁盘输出信号、滤波器或频谱的结构参数

l Save Session ,Save Session As 将所命名的SPTool窗口以扩展名为 .spt的MAT文件存放

l Perferences 设置信号处理交互式用户界面工具的性能

l Close 关闭SPTool窗口

在弹出的SPTool窗口下方还有四种命令:

Signals 栏下的View命令用来激活信号浏览窗

Filter 栏下有四个命令按钮

l View命令用来激活滤波器浏览窗

l New Design命令用来激活滤波器设计窗,从而可以设计新的滤波器

l Edit Design命令用来激活滤波器设计窗口并对所设计的滤波器进行编辑,可以任意选择滤波器的某些参数

l Apply命令用来实现新设计的应用

Spectra 栏下有三条命令:

l View 用来激活频谱观察窗口,观察所选择的信号频率特性

l Create 命令用来激活频谱观察窗,产生所选定信号的频谱

l Update 用于更新已选定信号频谱

2. Edit菜单

l Duplicate 用于复制所选定的参量

l Name 用于对所选定的参量命名

l Clear 清除所选定的参量

l Sampling Frequency 给选定的信号或滤波器设置采样频率

3. Window菜单用于显示当前所激活的窗口名称

4. Help菜单提供在线帮助

我们可以在SPTool窗的Signals栏下输入所要观测的信号,在Filter栏下进行数字滤波的设计,而在Spectra栏中对选定信号进行频谱分析,有兴趣的可以自己进一步深入学习。

谁帮忙用switch编写一个简单的计算器,实现两个整型数的四则运算 。c语言

我都替你写好了,不只是两个数,几个数都行。

支持的数学函数一大堆,pi, e, torad, sin, cos, tan, sinh, cosh, tanh,arcsin, arccos, arctan, arcsinh, arccosh, arctanh,sqrt, abs, lg, ln, exp, gamma, rand, round, int, ceil, floor"方便你计算答案。

会编译吧,我就不帮你编译了。

#include   stdio.h

#include  stdlib.h

#include  string.h

#include  unistd.h

#include    math.h

#define STACK_SIZE 4096

static const char* KEY_WORDS[]= {"e", "pi", "sqrt", "lg", "ln", "sin", "cos", "tan", "arcsin", "arccos", "arctan", "torad", "abs", "round", "floor", "ceil", "exp", "sinh", "cosh", "tanh", "arcsinh", "arccosh", "arctanh", "int", "gamma", "rand", NULL};

char   STACK1[STACK_SIZE]= {0};

char   STACK2[STACK_SIZE]= {0};

double STACK3[STACK_SIZE]= {0};

long long fact(long long n)

{

return (n2) ?1 :n*(fact(n-1));

}

double RevPolishCore(const char* expression)

{

char   *op=(char*)expression, *S1=STACK1, *S2=STACK2, **key, *cp, *kp;

double *S3=STACK3, di, ni;

int    brackets=0;

STACK3[0]=0;

while(*op!='\0')

{

switch(*op)

{

case ' ' :

case '\t':

case '\r':

case '\n':

op++;

continue;

case '(':

brackets++;

*(++S1)=*op;

if(*(op+1)=='-' || *(op+1)=='+')

{

*(S2++)='0', *(S2++)=' ';

}

break;

case ')':

if(brackets ==0)

{

fputs("The brackets or ')' are not need", stderr);

exit(1);

}

brackets--;

while(*S1!='(')

{

*(S2++)=*(S1--);

}

S1--;

break;

case '+':

case '-':

while(S1!=STACK1  *S1!='(')

{

*(S2++)=*(S1--);

}

*(++S1)=*op;

break;

case '':

case '|':

case '^':

while('A'=(*S1)  (*S1)='Z')

{

*(S2++)=*(S1--);

}

*(++S1)=*op;

break;

case '!':

*(S2++)=*op;

break;

case '%':

case '*':

case '/':

while(('A'=(*S1)  (*S1)='Z') ||*S1=='%' ||*S1=='*' ||*S1=='/' ||*S1=='^')

{

*(S2++)=*(S1--);

}

*(++S1)=*op;

break;

default :

if('a'=*op  *op='z')

{

key=(char**)KEY_WORDS;

while(*key !=NULL)

{

cp=op, kp=*key;

while((*cp==*kp || *cp+32==*kp)  *kp!='\0')

{

cp++, kp++;

}

if(!('a'=*cp  *cp='z')   (*kp=='\0'))

{

op=cp;

break;

}

key++;

}

if(*key !=0)

{

*(S2++)='.';

*(S2++)=' ';

while('A'=(*S1)  (*S1)='Z')

{

*(S2++)=*(S1--);

}

*(++S1)=key-(char**)KEY_WORDS+65;

continue;

}

else

{

fputs("Unrecognized math function\n", stderr);

exit(1);

}

}

else if(('0'=*op  *op='9') || (*op=='.'))

{

while(('0'=*op  *op='9') || (*op=='.'))

{

*(S2++)=*(op++);

}

if('a'=*op  *op='z')

{

fputs("Missing required operator\n", stderr);

exit(1);

}

op--;

*(S2++)=' ';

}

else

{

fputs("Unrecognized operator\n", stderr);

exit(1);

}

break;

}

op++;

}

if(brackets !=0)

{

fputs("The brackets '(' are not closed", stderr);

exit(1);

}

while(S1 !=STACK1)

{

*(S2++)=*(S1--);

}

*S2=' ';

op=STACK2;

while(*op!=' ')

{

switch(*op)

{

case 'A':

*S3=2.7182818284590452;

break;

case 'B':

*S3=3.1415926535897932;

break;

case 'C':

if(*S3 0)

{

fputs("Negative numbers have no square root\n", stderr);

exit(1);

}

*(S3-1)=sqrt(*S3);

S3--;

break;

case 'D':

if(*S3 0)

{

fputs("Negative numbers are not logarithmic\n", stderr);

exit(1);

}

*(S3-1)=log10(*S3);

S3--;

break;

case 'E':

if(*S3 0)

{

fputs("Negative numbers have no natural logarithms\n", stderr);

exit(1);

}

*(S3-1)=log(*S3);

S3--;

break;

case 'F':

*(S3-1)=sin(*S3);

S3--;

break;

case 'G':

*(S3-1)=cos(*S3);

S3--;

break;

case 'H':

if(*S3==3.1415926535897932/2)

{

fputs("The pi/2 has no tangent\n", stderr);

exit(1);

}

*(S3-1)=tan(*S3);

S3--;

break;

case 'I':

*(S3-1)=asin(*S3);

S3--;

break;

case 'J':

*(S3-1)=acos(*S3);

S3--;

break;

case 'K':

*(S3-1)=atan(*S3);

S3--;

break;

case 'L':

*(S3-1)=(*S3)*3.1415926535897932/180.0;

S3--;

break;

case 'M':

*(S3-1)=fabs(*S3);

S3--;

break;

case 'N':

*(S3-1)=round(*S3);

S3--;

break;

case 'O':

*(S3-1)=floor(*S3);

S3--;

break;

case 'P':

*(S3-1)=ceil(*S3);

S3--;

break;

case 'Q':

*(S3-1)=exp(*S3);

S3--;

break;

case 'R':

*(S3-1)=sinh(*S3);

S3--;

break;

case 'S':

*(S3-1)=cosh(*S3);

S3--;

break;

case 'T':

*(S3-1)=tanh(*S3);

S3--;

break;

case 'U':

*(S3-1)=asinh(*S3);

S3--;

break;

case 'V':

*(S3-1)=acosh(*S3);

S3--;

break;

case 'W':

*(S3-1)=atanh(*S3);

S3--;

break;

case 'X':

*(S3-1)=(int)(*S3);

S3--;

break;

case 'Y':

if(*S3 0)

{

fputs("Negative numbers have no factorial", stderr);

exit(1);

}

*(S3-1)=tgamma(*S3);

S3--;

break;

case 'Z':

if(*S3 0)

{

fputs("A negative number can not be used as a random upper bound", stderr);

exit(1);

}

else if(*S3 2)

{

*(S3-1)=rand() % 8192 /8192.0;

}

else

{

*(S3-1)=rand() % (int)(*S3);

}

S3--;

break;

case '+':

*(S3-1)+=*S3;

S3--;

break;

case '-':

*(S3-1)-=*S3;

S3--;

break;

case '*':

*(S3-1)*=*S3;

S3--;

break;

case '%':

case '/':

if(*S3 !=0)

{

if(*op=='%')

{

*(S3-1)=(int)*(S3-1) % (int)*S3;

}

else

{

*(S3-1)/=*S3;

}

}

else

{

fputs("Divisor is zero error\n", stderr);

exit(1);

}

S3--;

break;

case '|':

*(S3-1) =(int)(*(S3-1)) | (int)(*S3);

S3--;

break;

case '':

*(S3-1) =(int)(*(S3-1))  (int)(*S3);

S3--;

break;

case '^':

if(*(S3-1)==0  *S30)

{

fputs("Function pow's divisor is zero error\n", stderr);

exit(1);

}

*(S3-1)=pow(*(S3-1), *S3);

S3--;

break;

case '!':

if(*S3 0)

{

fputs("Negative numbers have no factorial\n", stderr);

exit(1);

}

*S3=fact((long long)(*S3));

break;

default :

di=0, ni=1;

while('0'=*op  *op='9')

{

di=10*di+(*op)-'0';

op++;

}

if(*op=='.')

{

op++;

while('0'=*op  *op='9')

{

di=10*di+(*op)-'0';

op++, ni*=10;

}

}

*(++S3)=di/ni;

break;

}

op++;

}

if (isinf(*S3)||isnan(*S3))

{

fputs("Overflow or illegal operation is calculated", stderr);

exit(1);

}

return *S3;

}

int main()

{

char inPut[4096];

scanf("%s", inPut);

float result = RevPolishCore(inPut);

printf("%.12f", result);

return 0;

}

C语言atan

math.hcos,sin,tan,cosh,sinh,tanh:余弦、正弦、正切、双曲余弦、双曲正弦、双曲正切函数,参数x为弧度。有对应的f和l版本(C99中增加)。acos,asin,atan,atan2,acosh,asinh,atanh:反三角函数,有对应的f和l版本,除acos,asin,atan,atan2外都是C99中增加的。


新闻标题:c语言acosh函数,c语言acos是什么意思
本文路径:http://mswzjz.cn/article/hojgcd.html

其他资讯