文档库 最新最全的文档下载
当前位置:文档库 › 第8章View函数及Solver函数

第8章View函数及Solver函数

第8章View函数及Solver函数
第8章View函数及Solver函数

第8章ADAMS/View函数及ADAMS/Solver函数

本章主要介绍ADAMS/View提供的各类函数,以及ADAMS/Solver支持的各类函数,并通过实例介绍一些重要函数的具体用法。通过本章的学习可以深入了解和具体掌握函数的基本使用方法,利用这些函数能够定义更为复杂的结构、更为灵活地应用ADAMS软件进行精确高效的建模与仿真。

8.1 ADAMS/View函数及ADAMS/Solver函数的类型及建立

ADAMS/View函数包括设计函数与运行函数两种类型,函数的建立对应有表达式模式和运行模式两种。表达式模式下在设计过程中对设计函数求值,而运行模式下会在仿真过程中对运行函数进行计算更新。ADAMS/Solver函数支持ADAMS/View运行模式下的函数,在仿真过程中采用ADAMS/Solver解算时对这些函数进行计算更新。

8.1.1 建立表达式模式下的函数

在进行建立表达式、产生和修改需要计算的度量及建立设计函数等操作时,会采用表达式模式。

在建立表达式时,首先在接受表达式的文本框处右击,然后选择“Parameterize”再选择“Expression Euilder”,进入建立设计函数表达式对话框。在该对话框中输入表达式,然后单击“OK”完成操作。

在产生和修改需要计算的度量时,首先在“Build”菜单中选择“Measure”,然后指向“Computed”,再选择“New”或“Modified”确定是新建还是修改,进入产生和修改需要计算的度量对话框。在该对话框中输入表达式,然后单击“OK”完成操作。

在建立设计函数时,首先在“Build”菜单中选择“Function”,然后选择“New”或“Modified”确定是新建还是修改,进入产生和修改设计函数对话框。在该对话框中输入表达式,然后单击“OK”完成操作。

8.1.2 建立运行模式下的函数

在进行建立运行函数、产生和修改函数型的度量等操作时,会采用运行模式。

在建立运行函数时,首先在接受表达式的文本框处右击,然后选择“Function Euilder”,进入建立运行函数表达式对话框。在该对话框中输入表达式,然后单击“OK”完成操作。

在产生和修改函数型的度量时,首先在“Build”菜单中选择“Measure”,然后指向“Function”,再选择“New”或“Modified”确定是新建还是修改,进入产生和修改函数型的度量对话框。在该对话框中输入表达式,然后单击“OK”完成操作。

机械系统动力学分析及ADAMS应用

8.2 ADAMS/View设计函数

ADAMS/Vie w设计函数在设计过程中模型定义时有效,而不需到仿真过程中仿真分析时再进行计算更新。设计函数可用来将模型参数化以便进行优化和灵敏度分析。

设计函数包括系统提供的函数和用户自定义函数,这里仅对系统提供的函数做扼要介绍。

8.2.1 数学函数

数学函数适用于对标量和矩阵进行数学计算,如果输入变量为标量其返回值就是标量,如果输入变量为矩阵其返回值就是矩阵。ADAMS/View中系统提供的数学函数大致分类介绍如下。

(1)基本数学函数

ABS(x) 数字表达式x的绝对值

DIM(x1,x2) x1>x2时x1与x2之间的差值,x1

EXP(x) 数字表达式x的指数值

LOG(x) 数字表达式x的自然对数值

LOG10(x) 数字表达式x的以10为底的对数值

MAG(x,y,z) 向量[x,y,z]求模

MOD(x1,x2) 数字表达式x1对另一个数字表达式x2取余数

RAND(x) 返回0到1之间的随机数

SIGN(x1,x2) 符号函数,当x2>0时返回ABS(x),当x2<0时返回-ABS(x)

SQRT(x) 数字表达式x的平方根值

(2)三角函数

SIN(x) 数字表达式x的正弦值

SINH(x) 数字表达式x的双曲正弦值

COS(x) 数字表达式x的余弦值

COSH(x) 数字表达式x的双曲余弦值

TAN(x) 数字表达式x的正切值

TANH(x) 数字表达式x的双曲正切值

ASIN(x) 数字表达式x的反正弦值

ACOS(x) 数字表达式x的反余弦值

ATAN(x) 数字表达式x的反正切值

ATAN2(x1,x2) 两个数字表达式x1,x2的四象限反正切值

(3)取整函数

INT(x) 数字表达式x取整

AINT(x) 数字表达式x向绝对值小的方向取整

ANINT(x) 数字表达式x向绝对值大的方向取整

第8章ADAMS/View函数及ADAMS/Solver函数

CEIL(x) 数字表达式x向正无穷的方向取整

FLOOR(x) 数字表达式x向负无穷的方向取整

NINT(x) 最接近数字表达式x的整数值

RTOI(x) 返回数字表达式x的整数部分

8.2.2 位置/方向函数

位置/方向函数用于根据不同输入变量计算有关位置或方向的参数。ADAMS/View中系统提供的位置/方向函数分类介绍如下。

(1)位置函数

LOC_ALONG_LINE 返回两点连线上与第一点距离为指定值的点

LOC_CYLINDRICAL 将圆柱坐标系下坐标值转化为笛卡儿坐标系下坐标值

LOC_FRAME_MIRROR 返回指定点关于指定坐标系下平面的对称点

LOC_GLOBAL 返回参考坐标系下的点在全局坐标系下的坐标值

LOC_INLINE 将一个参考坐标系下的坐标值转化为另一参考坐标系下的坐标值并归一化LOC_LOC 将一个参考坐标系下的坐标值转化为另一参考坐标系下的坐标值LOC_LOCAL 返回全局坐标系下的点在参考坐标系下的坐标值

LOC_MIRROR 返回指定点关于指定坐标系下平面的对称点

LOC_ON_AXIS 沿轴线方向平移

LOC_ON_LINE 返回两点连线上与第一点距离为指定值的点

LOC_PERPENDICULAR返回平面法线上距离指定点单位长度的点

LOC_PLANE_MIRROR 返回特定点关于指定平面的对称点

LOC_RELATIVE_TO 返回特定点在指定坐标系下的坐标值

LOC_SPHERICAL 将球面坐标转化为笛卡儿坐标

LOC_X_AXIS 坐标系x轴在全局坐标中的单位矢量

LOC_Y_AXIS 坐标系y轴在全局坐标中的单位矢量

LOC_Z_AXIS 坐标系z轴在全局坐标中的单位矢量

(2)方向函数

ORI_ALIGN_AXIS 将坐标系按指定方式旋转至与指定方向对齐所需旋转的角度ORI_ALONG_AXIS_EUL将坐标系按指定方式旋转至与全局坐标系一个轴方向对齐所

需旋转的角度

ORI_ALL_AXES 将坐标系旋转至由平面上的点定义的特定方向(第一轴与指定

平面上两点连线平行,第二轴与指定平面平行)时所需旋转的

角度

ORI_ALONG_AXIS 将坐标系旋转至其一轴线沿指定轴线方向时所需旋转的角度ORI_FRAME_MIRROR 返回坐标系旋转镜像到指定坐标系下所需旋转的角度

ORI_GLOBAL 返回参考坐标系在全局坐标系下的角度值

ORI_IN_PLANE 将坐标系旋转至特定方向(与指定两点连线平行、与指定平面

机械系统动力学分析及ADAMS应用

平行时所需旋转的角度

ORI_LOCAL 返回全局坐标系在参考坐标系下的角度值

ORI_MIRROR 返回坐标系旋转镜像到指定坐标系下所需旋转的角度

ORI_ONE_AXIS 将坐标系旋转至其一轴线沿两点连线方向时所需旋转的角度ORI_ORI 将一个参考坐标系转化为另一参考坐标系所需旋转的角度

ORI_PLANE_MIRRO R 返回坐标系旋转生成关于某平面的镜像所需旋转的角度

ORI_RELATIVE_TO 返回全局坐标系下角度值相对指定坐标系的旋转角度

8.2.3 建模函数

运动学建模函数返回marker点或构件之间位移的度量。这些函数有些与运行函数重名,但只是计算设计函数在前后关系中的瞬时值,只在模型定义时起作用,而不在仿真分析的时间步中起作用。

(1)距离函数

DM 返回两点之间的距离

DX 返回在指定参考坐标系中两点间的X坐标值之差

DY 返回在指定参考坐标系中两点间的Y坐标值之差

DZ 返回在指定参考坐标系中两点间的Z坐标值之差

(2)角度函数

AX 返回在指定参考坐标系中两点间关于X轴的角度差

AY 返回在指定参考坐标系中两点间关于Y轴的角度差

AZ 返回在指定参考坐标系中两点间关于Z轴的角度差

(3)按313顺序的旋转角度

PSI 按照313旋转顺序,返回指定坐标系相对于参考坐标系的第一旋转角度

THETA 按照313旋转顺序,返回指定坐标系相对于参考坐标系的第二旋转角度

PHI 按照313旋转系列,返回指定坐标系相对于参考坐标系的第三旋转角度

(4)按照321顺序的旋转角度

YAW 按照321旋转顺序,返回指定坐标系相对于参考坐标系的第一旋转角度

PITCH 按照321旋转顺序,返回指定坐标系相对于参考坐标系的第二旋转角度的相反数

ROLL 按照321旋转顺序,返回指定坐标系相对于参考坐标系的第三旋转角度8.2.4 矩阵/数组函数

矩阵/数组函数可很方便地完成针对矩阵/数组的操作。

(1)矩阵/数组的基本操作函数

ALIGN 将数组转换到从特定值开始

ALLM 返回矩阵元素的逻辑值

ANGLES 将方向余弦矩阵转换为指定旋转顺序下的角度矩阵

第8章ADAMS/View函数及ADAMS/Solver函数

ANYM 返回矩阵元素的逻辑和

APPEND 将一个矩阵中的行添加到另一矩阵

CENTER 返回数列最大、最小值的中间值

CLIP 返回矩阵的一个子阵

COLS 返回矩阵列数

COMPRESS 压缩数组、删除其中的空值元素(零,空字符及空格) CONVERT ANGLES 将313旋转顺序转化为用户自定义的旋转顺序CROSS 返回两矩阵的向量积

DET 返回方阵M的行列式值

DIFF 返回给定数据组的逼近值

DIFFERENTIATE 曲线微分

DMAT 返回对角线方阵

DOT 返回两矩阵的内积

ELEMENT 判断元素是否属于指定数组

EXCLUDE 删除数组中某元素

FIRST 返回数组的第一个元素

FIRST_N 返回数组的前N个元素

INCLUDE 向数组中添加元素

INTEGR 返回数据积分的逼近值

INTERATE 拟合样条曲线后再积分

INVERSE 方阵求逆

LAST 返回矩阵最后一个元素

LAST_N 返回矩阵最后N个元素

MAX 返回矩阵元素的最大值

MAXI 返回矩阵元素最大值的位置索引

MEAN 返回矩阵元素的平均值

MIN 返回矩阵元素的最小值

MINI 返回矩阵元素最小值的位置索引

NORM2 返回矩阵元素平方和的平方根

NORMALIZE 矩阵归一化处理

RECTANGULAR 返回矩阵所有元素的值

RESAMPLE 按照指定内插算法对曲线重新采样

RESHAPE 按指定行数列数提取矩阵元素生成新矩阵

RMS 计算矩阵元素的均方根值

ROWS 返回矩阵行数

SERIES 按指定初值、增量和数组长度生成数组

SERIES2 按指定初值、终值和增量数生成数组

SHAPE 返回矩阵行数、列数

机械系统动力学分析及ADAMS应用

SIM_TIME 返回仿真时间

SORT 依据一定顺序对数组元素排序

SORT_BY 依据一定的排列位置索引对数组元素排序

SORT_INDEX 依据一定顺序的数组元素排列位置索引

SSQ 返回矩阵元素平方和

STACK 合并相同列数的矩阵成一个新矩阵

STEP 生成阶跃曲线

SUM 矩阵元素求和

TILDE 数组的TILDE函数

TMAT 符合指定方向顺序的变换矩阵

TRANSPOSE 求矩阵转置

UNIQUE 删除矩阵中的重复元素

VAL 返回数组中与指定值最接近的元素

VALAT 返回数组中与另一数组指定位置对应处的元素VALI 返回数组中与指定数值最接近元素的位置索引(2)样条插值

AKIMA_SOLINE 使用Akima迭代插值法生成内插样条曲线

CSPLINE 生成3次内插样条曲线

CUBIC_SPLINE 生成3阶内插多项式曲线

DETREND 返回最小二乘拟合曲线与输入数据的差值

HERMITE_SPLINE 使用荷尔米特插值法生成内插样条曲线

LINEAR_SPLINE 线性插值生成内插样条曲线

NOTAKNOT_SPLINE 生成3次光顺连续插值样条曲线

SPLINE 生成插值样条曲线

(3)频域分析

FFTMAG 返回快速傅立叶变换后的幅值

FFTPHASE 返回快速傅立叶变换后的相位

FILTER 返回按指定格式滤波处理后的数据

FREQUENCY 返回快速傅立叶变换频率数

HAMMING 采用HAMMING窗处理数据

HANNING 采用HANNING窗处理数据

WELCH 采用WELCH窗处理数据

PSD 计算功率谱密度

8.2.5字符串函数

字符串函数允许对字符串进行操作。

STATUS_PRINT 将文本字符串返回到状态栏

第8章ADAMS/View函数及ADAMS/Solver函数

STR_CASE 将字符串按指定方式进行大小写变换

STR_CHR 返回ASCII码为指定值的字符

STR_COMPARE 返回两字符在字母表上的位置差

STR_DATE 按一定格式输出当前时间和日期

STR_DELETE 从字符串中一定位置开始删除指定个数的字符

STR_FIND 返回字符串在另一字符串中的位置索引

STR_FIND_COUNT 返回字符串在另一字符串中出现的次数

STR_FIND_N 返回字符串在另一字符串中重复出现指定次数时的位置索引STR_INSERT 将字符串插入到另一字符串的指定位置

STR_IS_SPACE 判断字符串是否为空

STR_LENGTH 返回字符串长度

STR_MATCH 判断字符串中所有字符是否均可以在另一字符串中找到

STR_PRINT 将字符串写入aview.log文件

STR_REMOVE_WHITESPACE删除字符串中所有的头尾空格

STR_SPLIT 从字符串中出现指定字符处切断字符串

STR_SPRINTF 按C语言规则定义的格式得到字符串

STR_SUBSTR 在字符串中从指定位置开始截取指定长度的子字符串

STR_TIMESTAMP 以缺省格式输出当前时间及日期

STR_XLATE 将字符串中所有子串用指定子串代替

8.2.6 数据库函数

数据库函数可方便用户访问数据库。

DB_CHANGED 标记数据库元素是否被修改

DN_CHILDREN 查询对象中符合指定类型的子对象

DB_COUNT 查询对象中给定域数值的个数

DB_DEFAULT 查询指定类型的缺省对象

DB_DELETE_DEPENDENTS 返回与指定对象具有相关性的对象数组

DB_DEPENDENTS 返回与指定对象具有相关性且属于指定类型的所有对象

DB_EXIT 判断指定字符串表示的对象是否存在

DB_FIELD_FILTER 将对象按指定方式过滤

DB_FIELD_TYPE 返回在指定对象域中数据类型的字符串

DB_FILTER_NAME 名称满足指定过滤参数的对象字符串

DB_FILTER_TYPE 数据类型满足指定过滤参数的对象字符串

DB_IMMEDIATE_CHILDREN 返回属于指定对象子层的所有对象数组

DB_OBJECT_COUNT 返回名称与指定值相同的对象的个数

DB_OF_CLASS 判断对象是否属于指定类别

机械系统动力学分析及ADAMS应用

8.2.7 GUI函数组

GUI函数组可用来进行图形用户界面的操作。

ALERT 返回自定义标题的警告对话框

FILE_ALERT 返回自定义文件名的警告对话框

SELECT_FIELD 返回按指定对象类型确定的域

SELECT_FILE 返回符合指定格式选项的文件名

SELECT_MULTI_TEXT 返回多个选定字符串

SELECT_OBJECT 返回一个按指定路径、名称和类型确定的对象

SELECT_OBJECTS 返回所有按指定路径、名称和类型确定的对象

SELECT_TEXT 返回单个选定字符串

SELECT_TYPE 返回指定类型对象的列表

TABLE _COLUMN_SELECTED_CELLS返回选定的某单元在表格给定列中所在行的位置

TABLE_GET_CELLS 返回在表格指定行列范围内满足指定条件的内容

TABLE_GET_DIMENSION 返回指定表格的行数或列数

8.2.8 系统函数组

系统函数组提供针对系统的操作。

CHDIR 判断是否成功转换到指定目录

EXECUTE_VIEW_COMMAND 判断是否成功执行ADAMS/View

FILE_EXISTS 判断是否存在指定文件

FILE_TEMP_NAME 返回一个临时文件名

GETCWD 返回当前工作路径

GETENV 返回表示环境变量值的字符串

MKDIR 判断是否成功创建自定义路径

PUTENV 判断是否成功设置环境变量

REMOVE_FILE 判断是否成功删除指定文件

RENAME_FILE 判断是否成功更改文件名

SYS_INFO 返回系统信息

UNIQUE_FILE_NAME 返回文件名

8.3 ADAMS/View运行函数及ADAMS/Solver函数

ADAMS/View运行函数能够表明定义系统行为的仿真状态间的数学关系。在ADAMS/ View中将这些运行函数与其他不同元素一同创建各种系统变量,这些函数大多数都以施加力和产生运动为目的。之后在仿真中进行解算时,ADAMS/ Solver会用到这些变量函数并进行计算更新,在仿真过程中这些系统状态会发生改变,如随时间的改变而改变、随零件

第8章ADAMS/View函数及ADAMS/Solver函数

的移动而改变、施加的力以不同方式改变等。

8.3.1 位移函数

(1)线位移函数

DX 返回位移矢量在坐标系X轴方向的分量

DY 返回位移矢量在坐标系Y轴方向的分量

DZ 返回位移矢量在坐标系Z轴方向的分量

DM 返回位移距离

(2)角位移函数

AX 返回一指定标架绕另一标架X轴旋转的角度

AY 返回一指定标架绕另一标架Y轴旋转的角度

AZ 返回一指定标架绕另一标架Z轴旋转的角度

(3)按313顺序的角位移

PSI 按照313旋转顺序,返回指定坐标系相对于参考坐标系的第一旋转角度

THETA 按照313旋转顺序,返回指定坐标系相对于参考坐标系的第二旋转角度

PHI 按照313旋转系列,返回指定坐标系相对于参考坐标系的第三旋转角度

(4)按照321顺序的角位移

YAW 按照321旋转顺序,返回指定坐标系相对于参考坐标系的第一旋转角度

PITCH 按照321旋转顺序,返回指定坐标系相对于参考坐标系的第二旋转角度的相反数

ROLL 按照321旋转顺序,返回指定坐标系相对于参考坐标系的第三旋转角度8.3.2 速度函数

(1)线速度函数

VX 返回两标架相对于指定坐标系的速度矢量差在X轴的分量

VY 返回两标架相对于指定坐标系的速度矢量差在Y轴的分量

VZ 返回两标架相对于指定坐标系的速度矢量差在Z轴的分量

VM 返回两标架相对于指定坐标系的速度矢量差的幅值

VR 返回两标架的径向相对速度

(2)角速度函数

WX 返回两标架的角速度矢量差在X轴的分量

WY 返回两标架的角速度矢量差在Y轴的分量

WZ 返回两标架的角速度矢量差在Z轴的分量

WM 返回两标架的角速度矢量差的幅值

8.3.3 加速度函数

(1)线加速度函数

机械系统动力学分析及ADAMS应用

ACCX 返回两标架相对于指定坐标系的加速度矢量差在X轴的分量

ACCY 返回两标架相对于指定坐标系的加速度矢量差在Y轴的分量

ACCZ 返回两标架相对于指定坐标系的加速度矢量差在Z轴的分量

ACCM 返回两标架相对于指定坐标系的加速度矢量差的幅值

(2)角加速度函数

WDTX 返回两标架的角加速度矢量差在轴的分量

WDTY 返回两标架的角加速度矢量差在Y轴的分量

WDTZ 返回两标架的角加速度矢量差在Z轴的分量

WDTM 返回两标架的角加速度矢量差的幅值

8.3.4 接触函数

IMPACT 生成单侧碰撞力

BISTOP 生成双侧碰撞力

8.3.5 样条差值函数

CUBSPL 标准三次样条函数插值

CURVE B样条拟合或用户定义拟合

AKISPL 根据Akima拟合方式得到的插值

8.3.6 约束力函数

JOINT 返回运动副上的连接力或力矩

MOTION 返回由于运动约束而产生的力或力矩

PTCV 返回点线接触运动副上的力或力矩

CVCV 返回线线接触运动副上的力或力矩

JPRIM 返回基本约束引起的力或力矩

SFORCE 返回单个作用力施加在一个或一对构件上引起的力或力矩

VFORCE 返回3个方向组合力施加在一个或一对构件上引起的力或力矩

VTORQ 返回3个方向组合力矩施加在一个或一对构件上而引起的力或力矩GFORCE 返回6个方向组合力(力矩)施加在一个或一对构件上而引起的力或力矩

NFORCE 返回一个由多点作用力施加在一个或一对构件上而引起的力或力矩BEAM 返回由梁连接施加在一个或一对构件上的力或力矩

BUSH 返回由衬套连接施加在一个或一对构件上而引起的力或力矩

FIELD 返回一个由场力施加在一个或一对构件上而引起的力或力矩

SPDP 返回一个由弹簧阻尼力施加在一个或一对构件上而引起的力或力矩

第8章ADAMS/View函数及ADAMS/Solver函数

8.3.7 合力函数

FX 返回两标架间作用的合力在X轴上的分量

FY 返回两标架间作用的合力在Y轴上的分量

FZ 返回两标架间作用的合力在Z轴上的分量

FM 返回两标架间作用的合力

TX 返回两标架间作用的合力矩在X轴上的分量

TY 返回两标架间作用的合力矩在Y轴上的分量

TZ 返回两标架间作用的合力矩在Z轴上的分量

TM 返回两标架间作用的合力矩

8.3.8 数学函数

CHEBY 计算切比雪夫多项式

FORCOS 计算傅立叶余弦级数

FORSIN 计算傅立叶正弦级数

HAVSIN 定义半正矢阶跃函数

INVPSD 依据功率谱密度生成时域信号

MAX 计算最大值

MIN 计算最小值

POLY 计算标准多项式

SHF 计算简谐函数

STEP 3次多项式逼近阶跃函数

STEP5 5次多项式逼近阶跃函数

SWEEP 返回按指定格式生成的变频正弦函数

还有其他一些常用数学计算的数学函数与ADAMS/View设计函数中的数学函数相同。

8.3.9 数据单元

VARVAL 返回状态变量的当前值

ARYVAL 返回数组中指定元素的值

DIF 返回微分方程所定义变量的积分值

DIF1 返回微分方程所定义变量的值

PINVAL 返回输入信号中指定元素的运行值

POUVAL 返回输出信号中指定元素的运行值

8.4 函数应用实例

ADAMS/View函数和ADAMS/Solver函数功能强大、使用灵活,是应用ADAMS进

机械系统动力学分析及ADAMS应用

行工程分析时的强大工具。下面结合一个多体动力学模型振动分析的例子,具体介绍ADAMS/View函数和ADAMS/Solver函数的使用方法。这里仍采用上一章介绍的振动分析模型,模型描述参见7.6.1节,模型结构如图7-9所示,该模型可以视为汽车振动系统的一个简化模型,可用于研究汽车的平顺性。

8.4.1 定义不同形式的驱动约束

应用函数可以定义不同形式的驱动约束。在上述模型中,所定义的驱动约束激励相当于路面不平度激励。根据实际路面不平度激励的形式,可以有多种不同的形式。采用ADAMS/View函数和ADAMS/Solver函数可以对驱动约束进行定义、解算等。

(1)驱动约束中函数的建立

建立好的动力学模型中已经含有驱动约束,但驱动约束的数值可能不是我们所需要的,如缺省的驱动约束一般定义为一个常数与时间的乘积。因此,需要将驱动约束建立成特定的运行函数形式,以便更为真实地反映实际的激励情况。

首先在ADAMS/View的屏幕上右击驱动约束,会出现关于右击鼠标区域附近许多对象的浮动菜单,包括附近的其他构件、标架、约束及力等。这时需从中选择需要进行修改的驱动约束,然后在这个驱动约束名字后面的浮动菜单中选择“Modify”,进入驱动约束修改对话框。在对话框中有一项“Function(time)”是描述该驱动约束的函数,其后面的文本框就是输入运行函数表达式的地方。在接受表达式的文本框处右击,出现下拉式菜单后在其中选择“Function Builder”;或者在接受表达式的文本框后面单击“…”按钮,都可以进入建立运行函数表达式对话框。在该对话框中输入表达式,然后单击“OK”完成操作。

上面建立驱动约束的过程中,需要在对话框中输入表达式来定义驱动约束的具体形式,这个表达式需要用一个函数来定义。采用不同的函数可以定义不同的驱动约束形式(2)阶跃函数、脉冲函数等形式的驱动约束

阶跃函数是一般数学计算中常用的函数,也是振动分析中的一类典型输入,因为具有特定的频率响应特性而广为采用。阶跃函数的形式为:STEP (x, Begin At, Initial Function Value, End At, Final Function Value)。

其中x为自变量,当x小于Begin At值时,因变量的值为初始值Initial Function Value;当x大于End At值时,因变量的值为终止值Final Function Value;当x在初始值和终止值之间时,因变量依据一定规律光滑过渡,避免出现数值过渡突变、微分值不连续。

在前述实例中,所用的阶跃函数形式为:STEP (time, 0.1, 0.0, 0.2, 1.0)*5.0。则通过计算生成阶跃函数,阶跃函数直接作用在构件5上,造成构件5的垂直方向位移为阶跃函数的形式,如图8-1所示。

第8章ADAMS/View函数及ADAMS/Solver函数

图8-1 实例所用的阶跃函数

脉冲函数也是一般数学计算中常用的函数,是振动分析中的一类典型输入,因为具有特定的频率响应特性而广为采用。脉冲函数可由阶跃函数构造而成,以保证其良好的连续性、光顺性。

在前述实例中,所用的脉冲函数定义为:STEP (time, 0.1, 0.0, 0.2, 1.0)*STEP (time, 0.2, 1.0, 0.3, 0.0)*5.0。则通过计算生成脉冲函数,脉冲函数直接作用在构件5上,造成构件5的垂直方向位移为脉冲函数的形式,如图8-2所示。

图8-2 实例所用的脉冲函数

采用类似的方法,还可以生成sin等三角函数形式的驱动约束。

(3)样条函数形式的驱动约束

在实际应用中有时需要采用来自实际测试的数据作为输入,这时需要将这些输入数据定义为样条函数,然后定义样条函数形式的驱动约束。

首先需要将测试数据输入到ADSMS/View中,在ADSMS/View的“File”菜单中选择“Import…”,然后在出现的“File Import”对话框中将“File Type”选为Test Data(*.*)。这时对话框随之而变为相应的测试数据输入形式,在“File Type”下面复选框上选中“Create Spline”,然后在“File to Read”文本框中键入(或用单击右键后从“Brouse…”菜单中选择)所需读入的数据文件的文件名,该文件中数据为两列,分别为时间值和测试数据值。注意还要在“Independent Colume Index”文本框中键入数字“1”,表示所输入的数据第一

机械系统动力学分析及ADAMS应用

列就是自变量(时间)。最后按下“OK”按钮,则测试数据就已经以样条的形式输入到ADSMS/View中了。

观察由输入测试数据生成的样条,可以从ADSMS/View的“Build”菜单中选择“Data Element”再选“Spline”-“Modify”,然后从弹出的“Data Navigator”对话框中选择新产生的样条的名称(如果前面没有输入过样条,这里就是缺省的样条名称和编号“SPLINE_1”),就可进入“Modify Spline …”对话框。在该对话框中可以检查和修改用来生成样条的输入测试数据点的数值,还可以将测试数据点和样条绘成曲线进行观察。

然后需要将驱动约束定义为由输入测试数据生成的样条,在驱动约束定义中采用样条函数。样条函数有几种不同形式,其中较常用的AKISPL样条形式为:

AKISPL (First Independent Variable, Second Independent Variable, Spline Name, Derivative Order)

其中前两个参数为自变量,一般以时间为第一个自变量、第二个自变量设为0。Spline Name是所需调用的样条的名字,Derivative Order是样条的阶数,选择0时返回样条曲线坐标值。

在前述实例中,所用的样条函数定义为:AKISPL(time , 0 , SPLINE_1, 0)。通过计算生成样条函数,样条函数直接作用在构件5上,造成构件5的垂直方向位移为符合测试数据的形式,如图8-3所示。

图8-3 实例所用的样条函数

8.4.2定义和调用系统状态变量

应用函数可以定义和调用系统状态变量。在设计过程中,有时需要将系统中某个元素在仿真过程中的数值引入定义另一个元素,这时需要将元素的可变数值定义为系统的一个状态变量;而在定义另一个元素时采用状态变量函数来调用前面定义的状态变量。这个状态变量函数及所定义的元素会在仿真计算过程中随时计算更新,以保证满足仿真计算的功能需求。

在前述实例中,在一般汽车结构中为降低驾驶室(构件2)振动幅度,可以采用在悬架上加装主动控制机构的方法,就是在车架(构件3)和车桥(构件4)之间增加一个主动力发生装置。而这个主动力的大小是和车架(构件3)和车桥(构件4)之间的相对位移、速度和加速度有关的。为此,可以将前面的相对位移、速度和加速度定义成系统的状

第8章ADAMS/View函数及ADAMS/Solver函数

态变量,而通过变量函数将主动力定义为状态变量的函数,由此实现悬架的主动控制。

(1)系统状态变量的定义

定义系统状态变量,首先需要在“Build”菜单中选中“System Element”,然后选“State Variable”-“New”,这时会弹出参数系统状态变量对话框,在对话框中“Difinition”文本框后选择“Run-time expression”。这种形式的对话框中有一项“F(time,…)”是描述该状态变量的函数,其后面的文本框就是输入运行函数表达式的地方。在接受表达式的文本框处右击,出现下拉式菜单后在其中选择“Function Builder”;或者在接受表达式的文本框后面单击“…”按钮,都可以进入建立运行函数表达式对话框。在该对话框中输入表达式,然后单击“OK”完成操作。

上面建立系统状态变量的过程中,需要在对话框中输入表达式来定义状态变量的具体形式,这个表达式需要用一个函数来定义。具体采用何种函数视状态变量的功能而定,如前述实例中为完成主动控制,需要将车架(构件3)和车桥(构件4)之间的相对位移、速度和加速度定义成系统的状态变量。

定义相对位移、速度和加速度的函数参见8.3.1、8.3.2、8.3.3部分。如需定义两个标架间在y方向的相对位移,所用的相对位移函数定义为:

DY( To_Marker , From_Marker , Along_Marker )

其中From_Marker和To_Marker是两个标架的名称,而Along_Marker则是说明函数沿哪个参考坐标系的y轴方向测量相对位移。

在前述实例中,如需定义构件3质心和构件4质心之间的相对位移,所用的相对位移函数定义为:DY( PART_3.cm, PART_4.cm, PART_4.cm)。其他函数采用相似的方法定义(2)系统状态变量的调用与主动控制力的定义

定义了系统状态变量后,需采用特定的变量函数进行调用。变量函数的具体形式为:VARVAL (id)

其中id为所调用的系统状态变量的编号。在前述实例中,将系统状态变量V ARIABLE_1,V ARIABLE_2定义为构件3质心和构件4质心之间的相对位移、速度、加速度,则在调用这三个状态变量时采用V ARV AL (1) 、V ARV AL (2) 、VARV AL (3)的形式。

要在构件3和构件4之间作用一个主动控制力,可以采用图标、命令行和命令导航器三种不同的形式。采用这三种形式生成一个SFORCE后,可以右击这个SFORCE弹出“Modify Force”对话框,然后在对话框上对这个力进行修改。在对话框中“Define Using”文本框后选择“Function”,指定采用函数的形式定义这个力的大小。这种形式的对话框中有一项“Function”是描述该力的大小的函数,其后面的文本框就是输入运行函数表达式的地方。在接受表达式的文本框处右击,出现下拉式菜单后在其中选择“Function Builder”;或者在接受表达式的文本框后面单击“…”按钮,都可以进入建立运行函数表达式对话框。在该对话框中输入表达式,然后单击“OK”完成操作。

在前述实例中,如需定义主动控制力为构件3和构件4之间的相对位移、速度的函数,在这里调用系统状态变量的形式为:V ARV AL(1)*(-10.0)+V ARV AL(2)*(-0.0) +V ARV AL(2)*(- 0.1)。

采用了这样的主动力控制后,构件2的加速度如图8.4-4中虚线所示,原始的加速度

机械系统动力学分析及ADAMS应用

如图8.4-4中实线所示。由图上可知加入主动控制力后构件加速度降低、系统振动特性得到显著改善。

图8-4 不采用主动力控制与采用主动力控制时构件加速度的比较

(3)系统状态变量的其他应用

系统状态变量用途较广泛。当采用ADAMS/Control模块时,需要将输入、输出变量定义为状态变量,然后将输入、输出变量发送到MATLAB/Simulink中进行控制策略的分析与研究。

8.4.3 度量或请求的定义和调用

应用函数还可以定义和调用系统中的度量。在仿真过程结束后,一般是采用ADAMS/ PostProcessor观察基本对象的动画或曲线图,包括各构件的位移速度、加速度及各种力元等。但有时这样的简单结果尚不足以反映系统的特性,这时需要采用各种函数自定义一些更为复杂的度量或请求,以便更直观地反映系统的特性。

在前述实例中,除关心各构件的绝对位移、速度、加速度外,有时还关心两个构件间的相对位移、速度、加速度,这时就需要采用函数构造用户自定义的度量或请求。

(1)函数型度量的定义

需要定义函数型度量时,首先在“Build”菜单中选择“Measure”,然后指向“Function”说明所选中的是函数型度量,再选择“New”或“Modified”确定是新建还是修改,进入产生和修改函数型度量的对话框。在该对话框中就可以输入所需的函数表达式,从而定义函数型度量的具体形式。采用函数表达式定义度量的具体形式,最后单击“OK”完成操作。

(2)函数型请求的定义

需要定义函数型请求时,首先在“Build”菜单中选择“Measure”,然后指向“Request”,再选择“New”或“Modified”确定是新建还是修改,进入产生请求的对话框。在该对话框中需选择请求的形式,如果选择“Define Using Function Expression”,则所选择的形式就是函数型请求。通常这样的请求中可以定义8个分量(一般定义6个分量),每个分量用函数表达式的方式表达。

在上述对话框中,8个分量后面的文本框就是输入运行函数表达式的地方,可以输入

第8章ADAMS/View函数及ADAMS/Solver函数

所需的函数表达式,从而定义函数型请求的具体形式。在接受表达式的文本框处右击,出现下拉式菜单后在其中选择“Function Builder”;或者在接受表达式的文本框后面单击“…”按钮,都可以进入建立运行函数表达式对话框。在该对话框中输入表达式,然后单击“OK”完成操作。

c语言 第8章 函数习题

第8章函数习题 A卷 1. 单项选择题 (1)C 语言总是从函数开始执行。 A A. main B. 处于最前的 C.处于最后的 D. 随机选一个 (2)函数在定义时,省略函数类型说明符,则该函数值的类型为。A A. int B. float C. long D. double (2)以下函数,真正地没有返回值。 B A. int a(){int a=2;return (a);} B. void b(){printf("c");} C. int a(){int a=2;return a;} D. 以上都是 (3)在C 语言中,有关函数的说法,以下正确的是。A A. 函数可嵌套定义,也可嵌套调用 B. 函数可嵌套定义,但不可嵌套调用 C. 函数不可嵌套定义,但可嵌套调用 D. 函数不可嵌套定义,也不可嵌套调用 (4)以下函数调用语句中,含有实参的个数为。C fun((2,3),(4,5+6,7)); A. 1 B. 2 C. 5 D. 6 (5)函数调用可以在。D A. 函数表达式中 B. 函数语句中 C. 函数参数中 D. 以上都是 (6)被调函数返回给主调函数的值称为。C A. 形参 B. 实参 C. 返回值 D. 参数 (7) ,可以不进行函数类型说明。D A. 被调函数的返回值是整型或字符型时 B. 被调函数的定义在主调函数定义之前时 C. 在所有函数定义前,已在函数外预先说明了被调函数类型 D. 以上都是 (8)被调函数通过语句,将值返回给主调函数。D A. if B. for C. while D. return (9)被调函数调用结束后,返回到。D A.主调函数中该被调函数调用语句处 B.主函数中该被调函数调用语句处

c语言第八章函数上机作业

第八章 通过本章实验作业应达目标 1. 掌握定义和调用函数的方法 2.掌握函数嵌套调用的方法 3.掌握通过“值传递”调用函数的方法 4.理解变量作用域和存在期的概念,掌握全局变量和局部变量,动态变量和静态变量的定义、说明和使用方法 本章上交作业 程序8_1.c、8_2.c、8_4.c、8_5.c上传至211.64.135.121/casp。 实验一判断素数的函数 【实验目的】 掌握用函数实现判断素数的方法。 【实验内容】 编写一个函数int prime(int a),判断参数是否为素数。函数有一个形参a,当a 为素数时,返回1,反之,返回0。以8_1.c命名本程序并上交。 函数声明如下: int prime( int a ); 主函数如下: #include #include void main ( ) { int a, b; printf("please input a number:\n"); scanf("%d", &a); b = prime( a ); if ( b = =1 ) printf("the number is a prime number."); else printf("the number is not a prime number."); } int prime( int a ) { …… }

实验二求最大公约数与最小公倍数 【实验目的】 熟练函数的嵌套调用。 【实验内容】 编写两个函数,分别求两个正整数的最大公约数和最小公倍数,结果作为函数返回值返回。在main函数中实现输入与输出。以8_2.c命名本程序并上交。 主函数如下: #include void main( ) { int gongyueshu( int a, int b ); int gongbeishu( int a, int b ); int a, b, c, d; printf("please input two integer numbers:"); scanf("%d%d", &a, &b); c=gongyueshu(a, b); d=gongbeishu(a. b); printf("gongyueshu is %d\n gongbeishu is %d",c,d); } int gongyueshu( int a, int b ) { ……} int gongbeishu( int a, int b ) { …… } 【实验提示】 可以在最小公倍数中嵌套调用最大公约数函数。最小公倍数=a*b/最大公约数 实验三求数组逆序的函数 【实验目的】 熟练掌握操作数组的方法及数组名作函数参数的使用方法。 【实验内容】 从键盘输入int型数组a[ 20 ]的20 个元素值,编写一个函数实现对数组元素数据的逆序放置。即第1个元素与第20个元素互换,第2个元素与第19个元素互换,……,第10个元素与第11个元素互换。请完善下述程序并以8_3.c命名本程序。 #include void main( ) { void nixu( int a[ ], int n ); /* 逆序函数声明 */

C语言第8章习题及答案

第八章 用一个数组存放图书信息,每本书是一个结构,包括下列几项信息:书名、作者、出版年月、借出否,试写出描述这些信息的说明,并编写一个程序,读入若干本书的信息,然后打印出以上信息。#include <> typedef struct { char Name[20]; char Author[20]; int Date_Year; int Date_Month; int loaned; } BOOK; #define N 10 void main() { BOOK books[N]; int i; for (i=0;i

} for (i=0;i #include <> typedef struct { char s[20]; int count; } WORD; #define N 100 WORD words[N]={0}; int word_count=0; int IsSeparator(char c) { if ( 'A'<=c && c<='Z' || 'a'<=c && c<='z' || '0'<=c && c<='9' || '_'==c || '-'==c)

C语言程序设计教案 第八章 函数

第八章函数课题:第八章函数§1~§4 教学目的:1、掌握函数定义的一般形式 2、掌握函数调用的一般形式 教学重点:教学难点:函数定义、调用的一般形式形式参数和实际参数 步骤一复习引导 一个C语言源程序可由一个主函数和若干个辅助函数组成。 由主函数调用其他函数,其他函数也可以互相调用。 步骤二讲授新课 §8.1 概述 例8.1 main( ) { printstar( ); print_message( ); printstar( ); } printstar( ) { printf( “ ********** \n”); } print_message( ) { printf(“How do you do ! \n”); } 说明: ?1、一个源程序文件由一个或多个函数组成。一个源程序文件是一个编译单位。 ?2、一个C程序由一个或多个源程序文件组成。这样可以分别编写、分别编译,提高调度效率。 ?3、C程序的执行从main 函数开始,在main函数中结束整个程序的运行。 ?4、所有函数都是平行的,即函数不能嵌套定义,函数可以互相调用,但不能调用main 函数。 ?5、从用户使用的角度看,函数有两种:标准函数(库函数)和用户自己定义的函数 ?6、从函数的形式看,函数分为两类:无参函数和有参函数 §8.2 函数定义的一般形式 (一)无参函数的定义形式 类型标识符函数名( ) { 函数体(包括声明部分和执行部分) } 例:printstar( ) { printf( “ ********** \n”); } (二)有参函数定义的一般形式 类型标识符函数名(形式参数表) { 函数体(包括声明部分和执行部分) }

C语言第八章函数部分复习题

函数复习题 一.选择题 1.以下正确的函数定义形式是:() a) double fun(int x,int y) b) double fun(int x;int y) c) double fun(int x,int y); d) double fun(int x,y); 2.以下正确的函数形式是:() a) double fun(int x,int y) { z=x+y; return z; } b) fun(int x,y) { int z; return z; } c) fun(x,y) { int x,y; double z; z=x+y; return z; } d) double fun(int x,int y) { double z; z=x+y; return z; } 3. 以下正确的说法是:() a) 实参和与其对应的形参各占用独立的存储单元 b) 实参和与其对应的形参共占用一个存储单元 c) 只有当实参和与其对应的形参同名时才共占用存储单元 d) 形参是虚拟的,不占用存储单元 4. 以下程序有语法性错误,有关错误原因的正确说法是:()

main() { int G=5,k; void prt_char(); …… k=prt_char(G); …… } a) 语句void prt_char();有错,它是函数调用语句,不能用void 说明 b) 变量名不能使用大写字母 c) 函数说明和函数调用语句之间有矛盾 d) 函数名不能使用下划线 5. 已有以下数组定义和f函数调用语句,则在f函数的说明中,对形参数组array的错误定义方式是:() a) f(int array[][6]) b) f(int array[3][]) c) f(int array[][4]) d) f(int array[2][5]) 6. 在一个C源程序文件中,若要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是:() a) extern b) register c) auto d) static 7. 若使用一维数组名作函数实参,则以下正确的说法是:()

c语言第8章函数

第8章函数 1.以下程序的输出结果是( ) A、6 9 9 B、6 6 9 C、6 15 15 D、6 6 15 int d=1; fun(int p) { static int d=5; d+=p; printf("%d ",d); return(d); } main( ) { int a=3;printf("%d \n",fun(a+fun(d)));} 答案:C 注解:函数fun调用两次,第一次调用的实参是全局变量d的值1,在函数调用执行过程中,输出的是局部静态变量d;第二次调用的实参是第一次调用的返回值和变量a的和,输出的仍是局部静态变量d的值。注意静态变量的定义和初始化是在第一次使用时进行的,在以后的使用过程中,保留上一次的值,不再初始化。2.若有以下调用语句,则不正确的fun函数的首部是() A、void fun(int m,int x[]) B、void fun(int s,int h[41]) C、void fun(int p,int *s) D、void fun(int n,int a) main( ) { … int a[50],n; … fun(n,&a[9]); … } 答案:D 注解:从主函数中fun函数的调用格式可以看出,fun函数的两个形参的类型,第一个形参是整型变量,第二个形参是变量的地址,则必须是数组名或者是指针。 3.有如下函数调用语句 func(rec1,rec2+rec3,(rec4,rec5)); 该函数调用语句中,含有的实参个数是() A、3 B、4 C、5 D、有语法错 答案:A 注解:该函数调用语句中,含有的实参分别是rec1,rec2+rec3表达式计算后的值和(rec4,rec5)逗号表达式计算后值。 4.有如下程序 int runc(int a,int b) { return(a+b);} main( ) { int x=2,y=5,z=8,r; r=func(func(x,y),z); printf("%d\n",r);

C语言课后习题答案第八章

作业八:函数程序设计答案 (一)选择题(30分) 1.以下正确的函数定义形式是A__。 A)double fun(int x,int y) B)double fun(int x;int y) C)double fun(int x,int y); D)double fun(int x,y); 2.以下正确的函数形式是D__。 A)double fun(int x,int y) { z=x+y; return z; } B)fun(int x,y) { int z; return z; } C)fun(x,y) { int x,y; double z; z=x+y; return z; } D)double fun(int x,int y) { double z; z=x+y; return z; }(重要) 3.以下正确的说法是A__。 在C语言中A)实参和与其对应的形参各占用独立的存储单元 B)实参和与其对应的形参共占用一个存储单元 C)只有当实参和与其对应的形参同名时才共占用存储单元 D)形参是虚拟的,不占用存储单元 4.若调用一个函数,且此函数中没有return语句,则正确的说法是D__。 该函数A)没有返回值 B)返回若干个系统默认值 C)能返回一个用户所希望的函数值 D)返回一个不确定的值(重要) 5.以下不正确的说法是B__。 C语言规定A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以为任意类型 D)形参应与其对应的实参类型一致 6.C语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是B__。 A)地址传递 B)单向值传递 C)由实参传给形参,再由形参传回给实参 D)由用户指定传递方式 7.以下程序有语法性错误,有关错误原因的正确说法是C__。 main() { int G=5,k; void Prt_char(); ……

C语言——第八章函数

定义无参函数: 类型标识符函数名() {声明+语句} 定义有参数的函数: 类型标识符函数名(形式参数列表) {声明+语句} 不带返回值的函数类型为空类型,即void类型。该函数中不应出现return语句。 若需要返回值,则在语句部分加入return(表达式); 语句。return的数据类型必须与函数类型标识符相同。 return后面的括号可以不要,直接使用return 表达式的方式。 return语句代表着函数结束,return后的语句不再执行。 如果在定义函数时,未指明函数类型,则默认为int型,故函数标识符可省略,但一般建议写出。 定义函数时所用的参数叫做形参,在未调用函数时,不为其分配内存单元,当函数被调用时,为形参分配内存单元,在调用结束时释放。在函数调用时,所输入的参数叫做实参。实参形参的类型必须相同或者赋值相容。函数调用中,实参的值不会发生变化。即函数调用处理的是与实参值相同的形参。 不同系统在接受实参时,对实参的处理顺序不一样,有的自右向左,有的自左向右。如: i=2;f(i,++i); 自右向左为f(3,3); 自左向右为f(2,3); 应尽量避免这种容易产生混乱的引用方法。 程序所要调用的函数必须是已经存在的库函数或者已经定义的用户函数。若用户函数的定义的位置在调用它的函数的定义位置前,则无需声明,若用户函数的定义的位置在调用它的函数的后面,则需要进行声明。声明方式和定义变量相类似,如:int a(); 声明函数时,形参的参数名可以省略。编译系统只检查参数个数及参数类型。 另外,若被调用函数为整型或已在文件的开头进行了申明,则可以在main函数内不进行声明。 C语言中的函数定义不能进行嵌套定义,即一个函数内部定义另一个函数,但可以进行嵌套调用。注意:是函数的定义内部不能有其他函数的定义,但可以在函数的定义内部调用另一个函数的定义。 在调用一个函数过程中又出现间接或直接调用该函数本身,称为函数递归调用。 直接调用即:f1调用f1;间接调用即f1调用f2,f2再调用f1; 递归问题经典问题: 汉尼塔问题:定义一个函数hanoi,运用递归思路来解决问题。

C语言函数章节选择题(新)

1.在C语言中,全局变量的存储类别是: A) static B) extern C) void D) register A 2.C语言中,凡未指定存储类别的局部变量的隐含存储类别是: A) 自动(auto) B) 静态(static) C) 外部(extern) D) 寄存器(register) A 3. 在一个C源程序文件中,要定义一个只允许本源文件中所有函数使用的全局变量,则该变量需要使用的存储类别是:________。 A) extern B) register C) auto D) static D 4. 若有以下调用语句,则正确的fun函数首部是 main() { ∶ ∶ int a;float x; ∶ ∶ fun(x,a); ∶ ∶ } A) void fun(int m,float x) B) void fun(float a,int x) C) void fun(int m,float x[]) D) void fun(int x,float a) B 5. 有如下函数调用语句func(rec1,rec2+rec3,(rec4,rec5)); 该函数调用语句中,含有的实参个数是 A) 3 B) 4 C) 5 D) 有语法错误 A 6. 以下程序的运行结果是。 #include main() { int k=4,m=1,p; p=func(k,m); printf("%d, ",p); p=func(k,m); printf("%d\n",p); } func(int a,int b) { static int m=0,i=2; i+=m+1; m=i+a+b; return m; } A) 8,17, B) 8,17

第八章 函数(含答案)

第八章函数 一、选择题 1.以下正确的说法是【A】。 在c语言中:A)实参和与其对应的形参各占用独立的存储单元 B)实参相与其对应的形参共占用一个存储单元 C)只有当实参和与其对应的形参同名时才共占用存储单元 D)形参是虚拟的,不占用存储单元 2.以下正确的说法是【C】。 A)定义函数时,形参的类型说明可以放在函数体内 B)return后边的值不能为表达式 C)如果函数值的类型与返回值类型不一致,以函数值类型为准 D)如果形参与实参的类型不一致,以实参类型为准 3.c语言规定,简单变量做实参时,它和对应形参之间的数据传递方式是【C】。 A. 地址传递 B. 由实参传给形参,再由形参传回给实参 C. 单向值传递 D. 由用户指定传递方式 4. 以下程序有语法性错误.有关错误原因的正确说法是【 C 】。 main() {int G=5,k; void prt_char(); ..... k=prt_char(G); .....} A)语句void prt_char();有错,它是函数调用语句,不能用void说明 B)变量名不能使用大写字母 C)函数说明和函数调用语句之间有矛盾 D)函数名不能使用下划线 5.c语言允许函数值类型缺省定义,此时该函数值隐含的类型是【B】。 A)float型 B)int型 C)long型 D)double型 6.c语言规定,函数返回值的类型是由【D】。 A)return语句中的表达式类型所决定 B)调用该函数时的主调函数类型所决定 C)调用该函数时系统临时决定 D)在定义该函数时所指定的函数类型所决定 7.下面函数调用语句含有实参的个数为【B】 func((expl,eexp2),(exp3,2xp4,exp5)) A)1 B)2 C)4 D)5 8.以下正确的描述是【B】。 在c语言程序中 A)函数的定义可以嵌套,但函数的调用不可以嵌套 B)函数的定义不可以嵌套,但函数的调用可以识套 c)函数的定义和函数的调用均不可以嵌套 D)函数的定义相函数的调用均可以嵌套 9.以下子程序段是选出能被3整除且至少有一位是5的两位数,打印出这样的数及其个数,请选择填空。

谭浩强C语言第八章答案.doc

8.1 # include int yueshu(int m,int n); int beishu(int m,int n); int main() { int a,b,Y,B; printf("输入两个数字:\n"); scanf("%d%d",&a,&b); Y=yueshu(a,b); B=beishu(a,b); printf("最大公约数为Y=%d\n最小公倍数为B=%d\n",Y,B); } int yueshu(int m,int n) { int r,t; if(m float gen1(int a,int b,int c) { int x1,x2; x1=(-b+sqrt(b*b-4*a*c))/(2*a);

x2=(-b-sqrt(b*b-4*a*c))/(2*a); printf("%f\n%f\n",x1,x2); return 0; } float gen2(int a,int b,int c) { int x; x=-b/(2*a); printf("%f\n",x); return x; } float gen3(int a,int b,int c) { printf("无实根;\n"); return 0; } float function(int a,int b,int c) { float x,y; y=a*x*x+b*x+c; return y; } void main() { int x,a,b,c,y; printf("请输入系数:\n"); scanf("%d%d%d",&a,&b,&c); if(b*b-4*a*c>0) { printf("根为:%f%f",gen1(a,b,c)); } if(b*b-4*a*c==0) { printf("根为:%f",gen2(a,b,c)); } if(b*b-4*a*c<0) { printf("根为:",gen3(a,b,c)); } } 8.3 # include # include

相关文档