精华内容
下载资源
问答
  • 1概述在Adams使用过程中,有些复杂情况特别是涉及到一些...用户子程序属于Adams较难掌握部分,且Adams2012版本和以前版本相比较,用户子程序的数据格式和函数内容都已了较大发展,本文介绍如何在Adams2012...

    0096d7e3aae146a9142fa03b3d4478c5.png

    1 概述

    在Adams使用过程中,有些复杂的情况特别是涉及到一些逻辑表达,用函数表达式很难表达出来,这种情况需要使用用户子程序。

    Adams用户子程序支持C语言和Fortran语言,随着C语言的普及,越来越多的用户使用C语言编写用户子程序。用户子程序属于Adams较难掌握的部分,且Adams2012版本和以前版本相比较,用户子程序的数据格式和函数内容都已有了较大的发展,本文介绍如何在Adams2012版本中编译C语言用户子程序。

    2 操作平台

     操作系统:Windows 7 64位

     软件版本:Adams 2012 32位、Visual Studio 2008 32位

     编译软件:Intel Fortran 11.0

     环境配置:

    1.在操作系统环境变量Path中增加Adams启动文件mdi.bat的路径,如D:\MSC.Software\Adams\2012\common\mdi.bat

    2.把Fortran安装路径下的libifcoremd.lib、libmmd.lib、libifportmd.lib、libirc.lib、svml_dispmd.lib这5个库文件复制到Adams安装路径下win32文件夹下

    3 编写用户子程序

    Adams安装程序solver\c_usersubs文件夹下有C语言编写的常用的用户子程序,其中slv_c_utils.h文件是用户子程序的头文件。编写用户子程序时,在这些程序的基础上进行更改会有事半功倍的效果。

    本文以编写VForce用户子程序为例,对其编写、编译操作过程进行说明。

    复制vfosub.c和slv_c_utils.h两个文件到个人工作文件夹下,如D:\mysubroutine,可以对vfosub.c文件进行代码修改。本文直接使用vfosub.c的原始代码,其代码为:

    982c937f3d130074796d2a130fe0cb88.png

    图1 用户子程序代码

    注意:因为代码中引用了slv_c_utils.h,复制时必须同时复制slv_c_utils.h文件,否则编译时会报错。

    4 编译操作

    (1) 在开始菜单下,启动Visual Studio 2008命令提示工具。

    918e8dfdfae1d7d9a3665e999662787b.png

    图2 启动编译工具

    (2) 把工作路径设置到用户子程序文件所在路径(D:\mysubroutine)。

    b727ab4d4e385b7ff423614e6c06b861.png

    图3 设置工作路径

    (3) 输入mdi,系统进入Adams环境中,输入cr-u,进入编译子程序,这时系统提示是否在调试状态下连接,直接输入回车。

    f713bdfcd74fb0f23396633bf25a01ee.png

    图4 进入Adams编译环境

    (4) 输入C语言用户子程序的文件名vfosub.c并回车,注意:

    该文件必须是以.c为后缀名,不能以.cpp为后缀名

    该文件必须在当前路径下存在

    系统提示输入下一个文件名称,这时直接点击回车;然后输入生成的dll文件的名称,这个文件名可不与c文件同名,比如输入myvfosub.dll,然后点击回车,系统进行编译。

    64ab34a06b5f693a6800aa84c42cd99b.png

    图5 输入用户子程序的名称

    (5) 编译完成后,如果系统提示编译成功,会在vfosu.c所在的文件夹中生成编译成功的dll文件,至此完成用户子程序的编译。

    57c956e5a03f0d6fd580cd8b663eb768.png

    图6 生成用户子程序dll文件

    5 结论

    用户子程序涉及到Adams、C语言、Fortran语言等知识,且需要配置环境,初学者很难掌握。本文详细介绍了如何在Adams2012中编译C语言用户子程序的过程,对初学者有很好的参考意义。

    展开全文
  • 主程序和子程序 2. 设 int x=1, y=1; 表达式(!x||y--)值是( )。 A. 0 B. 1 C. 2 D. -1 3. 以下所列的C语言常量中,错误是( )。 A. Ox1. 组成C语言程序是( )。 A. 子程序 B. 过程 C. 函数 D. 主程序和子程序 2...

    1. 组成C语言程序的是( )。 A. 子程序 B. 过程 C. 函数 D. 主程序和子程序 2. 设 int x=1, y=1; 表达式(!x||y--)的值是( )。 A. 0 B. 1 C. 2 D. -1 3. 以下所列的C语言常量中,错误的是( )。 A. Ox

    1. 组成C语言程序的是( )。 A. 子程序 B. 过程 C. 函数 D. 主程序和子程序 2. 设 int x=1, y=1; 表达式(!x||y--)的值是( )。 A. 0 B. 1 C. 2 D. -1 3. 以下所列的C语言常量中,错误的是( )。 A. OxFF B. 1.2e0.5 C. 2L D. ‘72’ 4. ... 1. 组成C语言程序的是( )。

    A. 子程序

    B. 过程

    C. 函数

    D. 主程序和子程序

    2. 设 int x=1, y=1; 表达式(!x||y--)的值是( )。

    A. 0

    B. 1

    C. 2

    D. -1

    3. 以下所列的C语言常量中,错误的是( )。

    A. OxFF

    B. 1.2e0.5

    C. 2L

    D. ‘72’

    4. 下面四个选项中,均是合法的用户标识符的选项是( )

    A. A P_0 do

    B. float la0 _A

    C. b-a goto int

    D. _123 temp INT

    5. 以下4个选项中,不能看作一条语句的是( )。

    A. {;}

    B. a=0,b=0,c=0;

    C. if(a>0)

    D. if(b==0) m=1; n=2;

    6. 正确的定义变量是( )。

    A. int a=10,b,c=2;

    B. const int a;

    C. int a=b=c=10;

    D. int a;b;c

    7. 以下选项中合法的实型常数是( )。

    A. 5E2.0

    B. E-3

    C. 2E0

    D. 1.3E

    8. 设以下变量均为int类型,则值不等于7的表达式是( )。

    A. (x=y=6, x y, x 1)

    B. (x=y=6, x y, y 1)

    C. (x=6, x 1, y=6, x y)

    D. (y=6, y 1, x=y, x 1)

    9. 以下程序的输出结果是( )。 Main( ) { int a=3; Printf(“%dn”,(a =a-=a*a)); }

    A. -6

    B. 12

    C. 0

    D. -12

    10. C语言中运算对象必须是整型的运算符是( )。

    A. %

    B. /

    C. =

    D. <= 展开

    展开

    全部

    展开全文
  • 匿名用户1级2010-12-11 回答递归(recursion)就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题解决问题基本方法。递归通常用来解决结构自相似问题。所谓结构自相似,是指构成...

    匿名用户

    1级

    2010-12-11 回答

    递归(recursion)就是子程序(或函数)直接调用自己或通过一系列调用语句间接调用自己,是一种描述问题和解决问题的基本方法。

    递归通常用来解决结构自相似的问题。所谓结构自相似,是指构成原问题的子问题与原问题在结构上相似,可以用类似的方法解决。具体地,整个问题的解决,可以分为两部分:第一部分是一些特殊情况,有直接的解法;第二部分与原问题相似,但比原问题的规模小。实际上,递归是把一个不能或不好解决的大问题转化为一个或几个小问题,再把这些小问题进一步分解成更小的问题,直至每个小问题都可以直接解决。因此,递归有两个基本要素:

    (1)边界条件:确定递归到何时终止,也称为递归出口。

    (2)递归模式:大问题是如何分解为小问题的,也称为递归体。递归函数只有具备了这两个要素,才能在有限次计算后得出结果

    汉诺塔问题:对汉诺塔问题的求解,可以通过以下3个步骤实现:

    (1)将塔上的n-1个碟子借助塔C先移到塔B上;

    (2)把塔A上剩下的一个碟子移到塔C上;

    (3)将n-1个碟子从塔B借助塔A移到塔C上。

    在递归函数中,调用函数和被调用函数是同一个函数,需要注意的是递归函数的调用层次,如果把调用递归函数的主函数称为第0层,进入函数后,首次递归调用自身称为第1层调用;从第i层递归调用自身称为第i+1层。反之,退出第i+1层调用应该返回第i层。采用图示方法描述递归函数的运行轨迹,从中可较直观地了解到各调用层次及其执行情况,具体方法如下:

    (1)写出函数当前调用层执行的各语句,并用有向弧表示语句的执行次序;

    (2)对函数的每个递归调用,写出对应的函数调用,从调用处画一条有向弧指向被调用函数入口,表示调用路线,从被调用函数末尾处画一条有向弧指向调用语句的下面,表示返回路线;

    (3)在返回路线上标出本层调用所得的函数值。n=3时汉诺塔算法的运行轨迹如下图所示,有向弧上的数字表示递归调用和返回的执行顺序

    三、递归函数的内部执行过程

    一个递归函数的调用过程类似于多个函数的嵌套的调用,只不过调用函数和被调用函数是同一个函数。为了保证递归函数的正确执行,系统需设立一个工作栈。具体地说,递归调用的内部执行过程如下:

    (1)运动开始时,首先为递归调用建立一个工作栈,其结构包括值参、局部变量和返回地址;

    (2)每次执行递归调用之前,把递归函数的值参和局部变量的当前值以及调用后的返回地址压栈;

    (3)每次递归调用结束后,将栈顶元素出栈,使相应的值参和局部变量恢复为调用前的值,然后转向返回地址指定的位置继续执行。

    上述汉诺塔算法执行过程中,工作栈的变化如下图所示,其中栈元素的结构为(返回地址,n值,A值,B值,C值),返回地址对应算法中语句的行号,分图的序号对应图中递归调用和返回的序号

    我可以帮助你,你先设置我最佳答案后,我百度Hii教你。

    展开全文
  • 文章目录函数是什么?一、C语言中函数的分类二、函数的参数1.实际参数(实参)2....为了支持可移植性提高程序的效率,C语言的基础库中提供了一系列库函数,满足一些基础功能,他们不是业务性的代码,在开发的过程



    函数是什么?

    • 在计算机科学中,子程序是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。
    • 一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件库。

    一、C语言中函数的分类

    1、库函数
    为了支持可移植性和提高程序的效率,C语言的基础库中提供了一系列库函数,满足一些基础功能,他们不是业务性的代码,在开发的过程中每个程序员都可能用的到,方便程序员进行软件开发。
    C语言常用库函数:

    • IO函数
    • 字符串操作函数
    • 字符操作函数
    • 内存操作函数
    • 时间/日期函数
    • 数学函数
    • 其他库函数

    使用库函数,必须包含#include对应的头文件

    库函数学习:www.cplusplus.com

    2、自定义函数
    函数的组成:

    ret_type fun_name(para1,*)
    {
    	statement;
    }
    /*
    ret_type:返回值类型
    fun_name:函数名
    para1,*:形参列表
    */
    

    C语言默认返回值是整形,函数传参要发生形参实例化,这个过程要发生值拷贝。(形参的实例化之后其实相当于实参的一份临时拷贝)

    二、函数的参数

    1.实际参数(实参)

    真实传给函数的参数,叫实参。实参可以是:常量,变量,表达式,函数等。无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传给形参。

    2.形式参数(形参)

    形式参数是指函数名后括号中的变量,因为形式参数只有在函数在被调用的过程中才实例化(分配内存单元),所以叫形式参数。形式参数当函数调用完成之后就自动销毁了。因此形式参数只在函数中有效。
    函数传参必定形成临时变量,临时变量的形成是在函数被调用时,但正式的代码执行之前。
    形参实例化的顺序是从右向左
    :写一个函数可以交换两个整形变量的内容

    #include<stdio.h>
    #include<windows.h>
    
    //每调用一次,就会将num的值加1
    void add(int *cp){
    	(*cp)++;
    }
    //交换两个整形变量的内容
    void Swap1(int x, int y){
    	int tmp = 0;
    	tmp = x;
    	x = y;
    	y = tmp;
    }
    void Swap2(int *px, int *py){
    	int tmp = 0;
    	tmp = *px;
    	*px = *py;
    	*py = tmp;
    }
    int main(){
    	//int count = 1;
    	//for (int i = 1; i <= 10; i++){
    	//	add(&count);
    	//	printf("%d\n", count);
    	//}
    	int num1 = 1;
    	int num2 = 2;
    	Swap1(num1, num2);
    	printf("Swap1:num1 = %d num2 = %d\n", num1, num2);
    	Swap2(&num1, &num2);
    	printf("Swap2:num1 = %d num2 = %d\n", num1, num2);
    	system("pause");
    	return 0;
    }
    

    结果:

    Swap1:num1 = 1 num2 = 2
    Swap2:num1 = 2 num2 = 1
    请按任意键继续. . .
    

    三、函数的调用

    • 传值调用
    • 传址调用
      传值和传指针(传地址)的区别:
      传值:形参是实参的一份拷贝,函数运行起来后,形参是形参,实参是实参,形参和实参没有任何关联性,改变形 参时,不会对实参造成任何影响。
      传地址:形参是实参地址的一份拷贝,形参指向的实体是实参,对形参解引用后,拿到的内容就是实参,因此对形参解引用之后的内容进行修改,改变的就是实参。

    :写一个函数,每调用一次这个函数,就会将num的值增加1。

    #include<stdio.h>
    #include<windows.h>
    //每调用一次,就会将num的值加1
    void add(int *cp){
    	(*cp)++;
    }
    int main(){
    	int count = 1;
    	for (int i = 1; i <= 10; i++){
    		add(&count);
    		printf("%d\n", count);
    	}
    	system("pause");
    	return 0;
    }
    

    调用函数,形成栈帧;
    函数返回,栈帧销毁;
    形成和释放栈帧是有成本的(时间和空间)。

    四、函数的声明和定义

    函数声明:
    • 告诉编译器有一个函数叫什么,参数是什么,返回类型是什么。但是具体是否存在,无关紧要。

    • 函数声明一般出现在函数的使用之前。先声明后使用。

    • 函数的声明一般要放在头文件中。

    函数声明

    #pragma once
    
    #ifndef   _ TEST_H _
    #define _ TEST_H _ 
    //函数的声明
    int Add(int x,int y);
    #endif// _ TEST_H _
    

    变量声明

    extern int g_val;
    
    函数定义:
    • 函数的定义是指函数的具体实现,交代函数的功能实现。

    函数定义只能进行一次,但声明可以多次进行

    五、函数递归

    程序调用自身的编程技巧称为递归(recursion).
    递归的两个必要条件:

    • 存在限制条件,当满足这个限制条件时,递归便不再继续
    • 每次递归调用之后越来越接近这个限制条件

    递归
    优点:代码简洁
    缺点:效率低(原因:递归要多次进行函数调用,每次函数调用都会形成和释放栈帧,而栈帧的形成和释放是有成本的【时间和空间】)

    地址空间:只要程序还在运行,地址空间便一直存在

    在这里插入图片描述
    临时变量保存在栈区,栈:先进后出,后进先出


    展开全文
  • C语言的函数

    多人点赞 2021-06-05 18:56:25
    C语言中的函数函数是什么库函数为什么...第一,函数就是 C 语言的子程序,一块一块的,较强的独立性,可以相互调用,换句话说,C 语言中,一个函数里面可以调用 很多 个函数C语言是面向过程的语言。 第二,函数
  • C语言函数

    2021-06-14 15:36:10
    虽然C中的函数和其他语言中的函数子程序过程作用相同,但是细节上略不同。一些函数执行某些动作,如printf()把数据打印到屏幕上;一些函数找出一个值供程序使用,如 strlen()把指定字符串长度返回给程序。...
  • c语言-函数

    2019-10-20 15:43:29
    定义:子程序。是一个大型程序中某部分代码,由一个或多个语句块组成。它负责完成某项特定任务,具备相对独立性。 一般会输入参数并返回值。提供对过程的封装细节隐藏。 C语言函数的分类: 库函数 ...
  • C语言函数入门

    2021-06-03 14:55:49
    C语言函数浅知什么是函数?库函数自定义函数函数的调用传值调用or传址调用函数的嵌套调用...一般会输入参数并返回值,提供对过程的封装细节隐藏。这些代码通常被集成为软件库。函数在面向过程的语言中已经出现
  • C语言函数

    2019-07-30 12:30:15
    一般会输入参数并返回值,提供对过程的封装细节隐藏。这些代码通常被集成为软件库。 C语言函数的分类: 1.库函数 2.自定义函数 库函数 C语言常用库函数都: IO函数 字符串操作函数 字符操作函数 内存...
  • c语言 函数调用 ppt

    2010-05-10 12:11:21
    函数调用,指针C语言的函数子程序的总称,包括函数和过程。(返回值、无返回值,教材中称为:返回值函数,无返回值函数
  • C语言函数1

    2020-03-07 22:44:24
    函数 维基百科对函数的定义为:子程序 在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram,callable unit...一般会输入参数并返回值,提供对过程的封装细节隐藏...
  • C语言中简单函数

    千次阅读 2018-08-11 16:13:52
    维基百科中对函数的定义:子程序 一般会输入参数并返回值,提供对过程的封装细节隐藏。这些代码通常被集成为软件库。 函数在面向过程的语言中已经出现。是结构(Struct)类(Class)前身。...
  • 文章目录函数是什么函数的分类1.库函数2.自定义函数函数的参数函数的调用1.传值调用2.传址调用3.练习函数的嵌套调用...一 般会输入参数并返回值, 提供对过程的封装细节隐藏。这些代码通常被集成为软件库。
  • C语言细讲——函数

    2019-07-26 15:11:42
    在这里我们对函数的定义:子程序,是一个大型程序中某部分代码, 由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代 码,具备相对独立性。 一般会输入参数并返回值,提供对过程的封装...
  • C语言函数重要知识

    2021-02-19 11:45:14
    函数的定义:子程序,是一个大型程序中某部分代码,由一个或多个语句块组成。它负责完成某项特定任务,具备相对独立性。一般会输入参数并返回值,提供对过程的封装细节隐藏。 二、为什么会库函数: ...
  • C语言---变量与函数

    2019-09-22 10:51:21
    程序文件分为库函数用户自己定义的函数,以及函数、无参函数函数调用的过程: 1) 定义函数时指定形参,未出现函数调用时,并不占存储单元,发生函数调用时,形参被分配临时空间。 2) 将实参对应...
  • ubuntu下编写C语言程序

    千次阅读 2020-09-30 10:54:24
    题目:编写一个主程序文件main1.c一个子程序文件sub1.c,如下要求:子程序sub1.c包含一个算术运算函数float x2x(int a,int b),此函数功能为对两个输入整型参数做某个运算,将结果做浮点数返回;主程序main1.c...
  • 第八回合:函数 函数函数是包含一条或多条C语言的语句,完成程序中的部分功能的子程序。C源程序是由函数组成的。 A: 函数的分类 ...(二) C语言的函数其他语言中的函数和过程两种功能: (a)
  • 第一章 C语言概述 一选择题 1C语言规定必须用 作为主函数名 A)Function B)include C)main D)stdio 2一个C程序可以包含任意多个...A)函数 B)函数和过程 C)超文本过程 D)子程序 4下列说法正确是 A)一个函数的函数体必
  • 函数 目录 函数是什么 库函数 自定义函数 函数参数 函数调用 函数的嵌套调用链式...一般会输入参数并返回值,提供对过程的封装细节隐藏。这些代码通常被集成为软 件库。 C语言函数的分类 1.库函数 2.自定
  • 其他所有函数都是 main()函数的子函数(或者与之相关联的过程,例如回调函数),并且它们的函数名称可以自己设定。 每个函数都只能被定义一次。但一个函数可以根据需要被多次的声明调用。 函数的定义 函数类型 ...
  • 2. C语言的函数其它语言中的函数和过程两种功能,从这个角度看,又可把函数分为返回值函数和无返回值函数两种。 (1)返回值函数  此类函数被调用执行完后将向调用者返回一个执行结果, 称为函数返回值。如...
  • C语言----函数

    2020-02-03 11:49:18
    函数是什么? 在计算机科学中,子程序(英语:Subroutine, procedure, function, routine, method, subprogram, ...一般会输入参数并返回值,提供对过程的封装细节隐藏。这些代码通常被集成为软件库。...
  • 什么是函数?...(2)一般会输入参数并返回值,提供对过程的封装细节隐藏。这些代码通常被集成为软 件库。 在C语言中,函数是编写代码不可或缺一部分,因为我们不能把所有功能都写在主函数里,因此
  • 程序的入口:main函数 从main函数开始执行,执行过程中遇到函数调用,暂停保护当前现场, 然后跳转到子函数执行,当子函数执行完毕之后,返回主函数恢复现场继续执行。 注意: 1)当函数被调用时,形参才被分配...
  • SystemVerilog在任务和函数方面做了很多改进,使其更加接近于C语言,从而使代码编写变得更加容易,尤其是在处理参数传递上面。 3.1 过程语句 SystemVerilog从C和C++中引用了很多操作符和语句。下面就来简单介绍...
  • A:C语言编译时不检查语法B:C语言的子程序有过程和函数两种C:C语言的函数可以嵌套定义D:C语言中,根据函数能否被其它源文件调用,被区分为内部函数和外部函数答案:D难度:2知识点:单选题/第七章2、设有以下函数...
  • 1.1 C语言的发展过程 1.2 当代最优秀的程序设计语言 1.3 C语言版本 1.4 C语言的特点 1.5 面向对象的程序设计语言 1.6 CC++ 1.7 简单的C程序介绍 1.8 输入输出函数 1.9 C源程序的结构特点 1.10 书写程序...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 187
精华内容 74
关键字:

c语言的子程序有过程和函数

c语言 订阅