首页/文章/ 详情

VS创建自己的第一个C++程序

1月前浏览234
   

以VS2013为例,讲述如何创建第一个自己的C++程序,向屏幕输出“hello world!”

打开VS2013,初始的界面为

   

点击下图的箭头指示的“新建项目”

   

弹出的界面为

   

上图的1选择了创建C++程序;目前先选择最简单的“空项目”,即2指示的内容;3中的内容就是我们创建的这个C++文件夹的名称;4中是文件夹存储的位置。

点击“确定”就创建了文件夹,如下图框住的部分

   

按照序号依次点击以下内容

   

依次点击源文件->新建项->添加

   

依次选择“Visual C++”->“C++ 文件(.cpp)”,在3指示的“名称”部分修改为自己的程序名称,这里已经修改为“hello.cpp”,4指示的部分为模型的文件储存位置,点击添加,就创建了名称为“hello”的程序

   

这里左边的大片空白区域就是我们写程序的地方

下面创建自己的第一个程序,这个程序完成的功能为:向屏幕输出一段字符“hello world!”,然后我们点击任意键,程序退出,下面是程序的内容

   

在下图中依次点击“生成”->“生成解决方案”

   

这时我们发现屏幕下方1指示的地方输出了报错信息,没有定义程序入口,

   

这是因为我们犯了一个非常傻 逼的错误,在C/C++程序中,必须要设置一个主程序,即“main”程序,但是因为手残,可能会把“main”输入成“mian”,即上图2指示的地方,这是不论初学者还是入门者都可能会犯的一个非常傻 逼的错误,经常会让人一脸懵逼去程序中找BUG,但是殊不知程序从一开始就错了,非常令人抓狂。

下面贴上正确的代码













#include<iostream>#include<string>
using namespace std;
int main(){  string str = "hello world!";  cout << str << endl;
 system("pause");  return 0;}
 

点击屏幕上方“本地Windows 调试器”

   

程序的运行效果是

   

这是一个令人振奋的时刻,每个人在编程路上走得长远并不相同,每个人在编程世界里发现的美也不相同,但所有人的开始都是“hello world!”

程序在cmd中输出了字符串“hello world!”,下面简单逐行介绍一下上面的程序都是什么含义

前两行程序引入了两个标准库文件,分别是"iostream"和"string",标准库文件可以理解为大佬们为我们创造的轮子,我们不用再重复编程,直接引入就可使用标准库文件里面的内容

第四行是为了解决不同库之间的命名混乱的问题

第六行是主程序的开始,每一个C++程序都会包括以下内容





int main(){
 return 0;}
 

主程序同样会返回一个int类型的结果,即“return 0”



  string str = "hello world!";  cout << str << endl;
 

上面两行代码先是声明了一个字符串,然后通过输出流向cmd输出该字符串。

以上是第一个C++程序的所有内容,这便是入门,继续学习C++编程浩瀚之海,道阻且长,道阻且右。

     
     


来源:有限元先生
SystemUG
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-09-29
最近编辑:1月前
外太空土豆儿
硕士 我们穷极一生,究竟在追寻什么?
获赞 2粉丝 1文章 51课程 0
点赞
收藏
作者推荐

什么是abaqus二次开发

零概述这个帖子文字多,但都是干货,一篇文章完全厘清abaqus二次开发的所有概念。“abaqus二次开发”是一个笼统的概念,下面可以进行细分,如abaqus建模二次开发、后处理二次开发和子程序二次开发等,不同的二次开发涉及的目的不一样,采用的工具不一样,下面逐个解释。壹abaqus建模二次开发正式介绍建模二次开发之前,先介绍abaqus的模型组织方式,一共有两种。一种是基于part的建模方式,即首先创建若干个part,然后通过assembly关键字进行组装,所有的部件、点、线和面都是基于part进行索引的。这种组织方式是现在使用最广泛的,其设计是依据python的面向对象编程思想。另一种是直接组装,不涉及part、asselbly等关键词,这种组织方式在帮助文档里面经常看得到,帮助文档里面还会出现一些上古的关键字,如*headingtestbergstrom-boyce,uniaxialloadingstrainrate=-0.01/s,material:ChloropreneRubber(65pphcarbonblack)*node1,2,0.0143,0.014,0.0134,0.0,0.013*element,type=cax4,elset=eall...1,2,2,0.2,2,2,0.*endstep**上面inp文件来自:help.3ds.com/2017/English/DSSIMULIA_Established/SIMAINPRefResources/mbbcdo3mcy_un_1e_2_cl65.inp?contextscope=all上面的模型组织方式就不涉及part,而是直接进行组装的,这种inp文件无法通过abaqusgui界面获得,只能通过自己手动编程序生成。下面正式介绍abaqus建模二次开发。特别注意的是,不要将建模二次开发和子程序二次开发搞混淆,二者有本质不同。建模二次开发主要涉及到模型的创建,常常用于解决多次的繁琐操作,如混凝土细观尺度模拟、零厚度单元批量创建等等,建模二次开发不涉及有限元计算。abaqus建模二次开发主要针对第一种模型组织方式,即直接在abaqusgui中进行编程操作。主要采用python进行编程,python处理大模型时候会出现速度慢的现象,为此,abaqus提供了C++二次开发工具,但C++二次开发对使用者有一定门槛,目前很少见到采用C++进行二次开发的,更多的是用python编程,然后优化程序提高计算速度。abaqus提供了若干种建模二次开发方式,这里只介绍一种方式,即在外部完成python程序,然后在abaqus中通过“runscript”按钮运行程序,如下面的程序&quot;&quot;&quot;modelAExample.pyAsimpleexample:Creatingapart.&quot;&quot;&quot;fromabaqusimport*fromabaqusConstantsimport*backwardCompatibility.setValues(includeDeprecated=True,reportDeprecated=False)importsketchimportpartmyModel=mdb.Model(name=&#39;ModelA&#39;)mySketch=myModel.ConstrainedSketch(name=&#39;SketchA&#39;,sheetSize=200.0)xyCoordsInner=((-5,20),(5,20),(15,0),(-15,0),(-5,20))xyCoordsOuter=((-10,30),(10,30),(40,-30),(30,-30),(20,-10),(-20,-10),(-30,-30),(-40,-30),(-10,30))foriinrange(len(xyCoordsInner)-1):mySketch.Line(point1=xyCoordsInner[i],point2=xyCoordsInner[i+1])foriinrange(len(xyCoordsOuter)-1):mySketch.Line(point1=xyCoordsOuter[i],point2=xyCoordsOuter[i+1])myPart=myModel.Part(name=&#39;PartA&#39;,dimensionality=THREE_D,type=DEFORMABLE_BODY)myPart.BaseSolidExtrude(sketch=mySketch,depth=20.0)myViewport=session.Viewport(name=&#39;ViewportforModelA&#39;,origin=(10,10),width=150,height=100)myViewport.setValues(displayedObject=myPart)myViewport.partDisplay.setValues(renderStyle=SHADED)以上程序来源于abaqus官方文档。这里只讲解概念,不讲解程序细节。可以在“startsession”界面点击“runscript”,然后选择已经编写好的py文件。也可以在abaqus主界面的菜单栏依次选择file-&gt;runscript上面程序的运行后,abaqus会创建如下模型以上是通过python在abaqusgui界面中进行模型二次开发。abaqus还提供了inp文件二次开发方式,即完全通过自编程序生成inp计算文件,然后通过bat文件或者直接在作业界面进行计算。这种二次开发方式对学者能力有较高要求,需要非常的熟悉abaqus的inp文件,还需要非常熟悉有限元计算的各个流程。一般来讲,不建议采用这种方式进行建模,更好的方法是将两种建模方式进行结合,即一部分通过python实现,然后导出inp计算文件,在导出的inp文件中手动修改少部分内容。贰子程序二次开发abaqus建模二次开发用于解决模型的问题,abaqus子程序二次开发则涉及到有限元核心计算的方方面面。abaqus本身为学者提供了非常强大的功能,但是对于特定问题,如复杂的温度荷载、切削分析等等,abaqus自身功能无法解决,但是abaqus向学者提供了一系列的二次开发接口,即abaqus子程序,学者可以自己编程实现特定需求,然后以子程序的形式嵌入进abaqus主程序中。子程序二次开发的大致流程为:按照自己的理论进行公式推导,离散为有限元格式,然后编程,编译运行。如下面展示了uel二次开发接口SUBROUTINEUEL(RHS,AMATRX,SVARS,ENERGY,NDOFEL,NRHS,NSVARS,1PROPS,NPROPS,COORDS,MCRD,NNODE,U,DU,V,A,JTYPE,TIME,DTIME,2KSTEP,KINC,JELEM,PARAMS,NDLOAD,JDLTYP,ADLMAG,PREDEF,NPREDF,3LFLAGS,MLVARX,DDLMAG,MDLOAD,PNEWDT,JPROPS,NJPROP,PERIOD)CINCLUDE&#39;ABA_PARAM.INC&#39;CDIMENSIONRHS(MLVARX,*),AMATRX(NDOFEL,NDOFEL),PROPS(*),1SVARS(*),ENERGY(8),COORDS(MCRD,NNODE),U(NDOFEL),2DU(MLVARX,*),V(NDOFEL),A(NDOFEL),TIME(2),PARAMS(*),3JDLTYP(MDLOAD,*),ADLMAG(MDLOAD,*),DDLMAG(MDLOAD,*),4PREDEF(2,NPREDF,NNODE),LFLAGS(*),JPROPS(*)usercodingtodefineRHS,AMATRX,SVARS,ENERGY,andPNEWDTRETURNENDabaqus提供了两种编程语言用于子程序二次开发,分别为fortran和C++,最经常用的是fortran,一种古老的计算语言,但是在计算速度方面,有一种不让廉颇的气魄。这里介绍两种调用子程序的方法。一种为采用bat文件调用。将编写好的for文件和事先准备好的inp文件放到同一个文件夹中,然后再准备一个bat文件,下面给出一个例子callabaqusjob=jobname.inpuser=user_subroutine.forcpus=10interactivepause上面的语句涉及到inp文件名称、子程序名称和cpu个数,然后直接双击准备好的bat文件就能运行子程序。另一种调用方法是直接在abaqusgui中定义job然后调用子程序,具体的步骤为在Module中进入job部分,点击createjob,在source中选择inputfile,如这便将inp文件导入了,然后点击continue,调用子程序按照上面的步骤,选择事先准备的fortran子程序,然后点击提交计算即可。abaqus子程序二次开发是一项非常有挑战性的工作,需要学者熟悉有限元计算的方方面面,还要懂商业有限元软件内部的运行机制等等,对使用者的数学功底、编程功底等等有着较高的要求。叁后处理二次开发后处理在计算结果展示时候有着重要的作用,当abaqus自带的后处理功能不能满足使用要求时,常常将数据导出到第三方软件中进行可视化,如:tecplot、sufur和paraview等等软件,这是后处理二次开发的一个使用场景。另外,当自己想要的结果中abaqus没有输出的时候,自己就需要依据abaqus输出的计算结果进行二次计算,这时候也需要将abaqus的计算结果导出,自己编程进行后续的计算。当采用一些子程序的时候,会影响到abaqus的可视化,如采用uel子程序的时候,odb中的单元室无法显示的,只有一系列的“XXXX”显示在窗口中,如这时候也需要将abaqus的计算结果用python或者C++提取出来,导入到三方软件中进行可视化。来源:有限元先生

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈