首页/文章/ 详情

C++基础知识(一)

2月前浏览1204
   

注释

       

注释是出现在程序任何位置的字符段,但是编译器在编译程序的时候会自动忽略注释。自己写的程序常常睡一觉就忘得七七八八了,需要写一些解释性的注释用于后期提醒自己程序的功能。

C++有两种注释,分别是单行注释和多行注释,单行注释常常用于少量的解释语言,顾名思义,这种注释只能会出现在一行中。而多行注释则可以跨行,常常用于解释函数和大段程序的功能,以下分别介绍。

单行注释以“//”开始,在一行中,所有双斜杠后面的内容都是注释,均不被编译器识别,即


//双斜杠后面额内容都是注释
 

下面是一段程序,里面插入了几处单行注释













//注释可以出现在任何位置,这是出现在开头的注释#include <iostream>#include<string>using namespace std;//这也是单行注释int main(){
 ///这是一行注释
 return 0;}//注释可以出现在任何位置,这是出现在末尾的注释
   

多行注释是以"/*"开始,以"*/"结束的注释,如






/*这是多行注释的开始
这也是注释,多行注释可以跨行
这是多行注释的结尾*/
 

下面是一段程序,里面插入了几处多行注释




















//注释可以出现在任何位置,这是出现在开头的注释#include <iostream>#include<string>using namespace std;//这也是单行注释int main(){
 ///这是一行注释  /*  这是多行注释的开始  这也是注释,多行注释可以跨行  这是多行注释的结尾  */  return 0;}//注释可以出现在任何位置,这是出现在末尾的注释  /*  多行注释也可以出现在程序额任何位置  */
 

常量

     

常量是程序运行中不可改变的数据量。在解决问题的时候,有一些数据量是固定的,比如在数值仿真计算中,有一些物理量和数学常数都是不可以改变的,如圆周率、普朗克常数等等。

在C++中声明常数有两种方式,首先是宏常量定义





//#define 常量名称 常量数值# define pai 3.14159265358979//上面一行语句定义了圆周率,后面//所有的程序都可以直接使用
 

然后是“const”关键字修饰





//const 数据类型 常量名 = 常量值const pai=3.14159265358979//上面一行语句定义了圆周率,后面//所有的程序都可以直接使用
 

变量

       

变量,顾名思义,相对于常量而言,是在程序运行过程中数值可能会改变且数值可以被改变的一类数据量,变量有很多种类型,如整型、浮点型等等,变量的命名方法为





//数据类型 变量名称=变量初始值;int pai=3.14159265358979double pai=3.14159265358979//上面一行程序声明了一个双精度浮点型的数据
 

需要注意的是,变量的初始值要和变量的数据类型对应,如果变量的数据类型是整型,那么变量的初始值也必须是整型,如下面的声明方式就是错误的


int pai=3.14159265358979
 

下面给出一个变量的数据类型如变量变量初始值不对应的例子














#include <iostream>#include<string>
using namespace std;
int main(){  ///这里的数据类型如后面的变量初始值不相同,数据会出现误差  int pai = 3.14159265358979;  cout << pai << endl;
 system("pause");  return 0;}
 

这个程序的输出结果是“3”,只输出了数据的整数部分,小数部分被截断了,这在后续的程序运行中会导致无法预料的错误,必须杜绝这种使用方法

变量名称也有相应的命名规则,具体的规则为

* 不能是关键字

* 只能由字母、数字、下划线组成

* 第一个字符必须为字母或下划线

* 字母区分大小写

*变量在声明时,必须给出初始值,否则会报错

> 建议:命名时,争取做到见名知意的效果,方便自己和他人的阅读

关键字

       

关键字是C++语言默认保留的一些字段或者是标识符,这些标识符已经被C++语言默认制定某种东西了,就比如苹果只能指代苹果这种水果,地球只能用来指代我们生活的这个星球,这是都是默认的,自己定义的变量不能使用这些关键字,每个关键字都有自己的含义,如:int,指代的是整型数据,如:short ing指的是短整型主句类型,下面列举C++中的关键字,后续的学习过程中会逐渐涉及到

asm

do          

if              

return      

typedef  

auto      

double      

inline          

short      

typeid  

bool      

dynamic_cast

int              

signed      

typename

break      

else        

long            

sizeof      

union    

case      

enum        

mutable          

static      

unsigned

catch      

explicit    

namespace        

static_cast

using    

char      

export      

new              

struct      

virtual  

class      

extern      

operator        

switch      

void    

const      

false        

private          

template    

volatile

const_cast

float        

protected        

this        

wchar_t  

continue  

for          

public          

throw      

while    

default    

friend      

register        

true        

typedef  

delete    

goto        

reinterpret_cast

try        

typedef  


      

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

CPE8/CPS8用户自定义单元二次开发(1)

零概述有限元法编写二维四边形二阶用户自定义单元,采用abaqus提供的uel二次开发平台,包括单元的刚度矩阵K、质量矩阵M和阻尼矩阵C,uel需要向abaqus主程序输出AMARTIX、RHS等矩阵。编写的uel子程序适用于静动力计算、频域计算等等,帖子分为两个部分-&gt;理论部分CPE8/CPS8UEL用户自定义单元开发(1)结果部分CPE8/CPS8UEL用户自定义单元开发(2)壹形函数/位移插值函数在经典的三角形单元中,位移的插值是直接在子单元中进行,但是随着单元形状的复杂,直接在子单元进行计算回带来计算的困难的公式推导的困难,因此等参单元法应运而生。在等参元中,单元形状映射中的参数和位移场插值的参数数目相等,因此得名等参元。采用等参单元法计算二维八节点单元,其中,母单元为子单元,即我们绘制的网格真实形状为假设的坐标映射函数为将母单元中八个节点的坐标导入上述式子,求解出16个系数a0~a15,然后求得八节点等参元的形函数这是形状映射中x坐标的映射,对于y方向得映射,将上述所有x替换为y即可。写成求和形式写成矩阵形式为其中,对于边角点有对于边中点有上述公式,对于位移插值同样适用。贰雅各比矩阵等参元中的数值积分中涉及到自然坐标和局部坐标的转换,这种转换通过雅各比矩阵实现。根据链式求导法则有写成矩阵形式雅各比矩阵为将式代入雅各比矩阵有形函数对母单元坐标的导数,可以直接求导,因此,等参元的雅各比矩阵可以求得。则有因此,雅各比矩阵的逆矩阵也可求得。叁B矩阵有限元中,单元的刚度矩阵为D矩阵是弹性矩阵,在线弹性问题中,D矩阵为常数矩阵,根据物理方程可以推导出。B矩阵是应变-位移矩阵,用作将位移转化为应变,下面重点求解B矩阵。应变与位移有如下关系其中算子L为单元的位移u为则应变与位移的关系可表示为则B矩阵为B=LN,具体表达式为将B矩阵写成一个矩阵为其中Bi为在求B矩阵的时候,我们的目标是求得形函数对xy的倒数,这时候我们已经求得了形函数对局部坐标的倒数,因此,通过雅各比矩阵我们就可有求得形函数对xy的倒数,首先,引入以下矩阵通过雅各比矩阵,上述矩阵可以表示为上面等式右面的雅各比逆矩阵,我们已经求得,形函数对st坐标的导数也已经求得,因此,上面引入的矩阵就可以求出来,然后再按照元素对应的规律将上述矩阵以此存放到B矩阵中。在计算质量矩阵的时候,首先计算单元的额协调质量矩阵,然后将行质量集中到对角元,让后将非对角元素置为零,具体可参考帖子:质量矩阵的求解‍有限元先生,公众号:有限元先生C3D8BBARUEL用户自定义单元二次开发(1)单元的阻尼矩阵可按照比例阻尼求解,即刚度矩阵和质量矩阵的线性组合。求解刚度矩阵的主程序为subroutineKKmartix(KK,coords,DMatx,mcrd,nnode,jelem)INCLUDE&#39;ABA_PARAM.INC&#39;doubleprecisioncoords(mcrd,nnode),dmatx(3,3)doubleprecisionINTEGERPOINT(3),wgt(3)doubleprecisionKK(2*nnode,2*nnode)doubleprecisionB(3,2*NNODE),J(2,2)doubleprecisionDETJ,G,H,COFFdoubleprecisionNPXY(2,NNODE)INTEGERPOINT(1)=0.D0INTEGERPOINT(2)=0.7745966692D0INTEGERPOINT(3)=-0.7745966692D0wgt(1)=0.8888888889D0wgt(2)=0.5555555556D0wgt(3)=0.5555555556D0B=0.d0J=0.d0DETJ=0.d0G=0.d0H=0.d0COFF=0.d0NPXY=0.d0doI=1,3doII=1,3G=INTEGERPOINT(I)H=INTEGERPOINT(II)callCalBJ(B,J,DETJ,G,H,MCRD,NNODE,JELEM,COORDS)COFF=DETJ*WGT(I)*WGT(II)KK=KK+MATMUL(MATMUL(TRANSPOSE(B),DMatx),B)*COFFenddoenddoreturnend求解质量矩阵的主程序为subroutineMMmartix(MM,COORDS,PROPS,MCRD,NNODE,JELEM)INCLUDE&#39;ABA_PARAM.INC&#39;INTEGERMCRD,NNODE,JELEMDOUBLEPRECISIONMM(2*NNODE,2*NNODE),COORDS(MCRD,NNODE)DOUBLEPRECISIONNN(2,16)DOUBLEPRECISIONINTEGERPOINT(3),WGT(3)DOUBLEPRECISIONG,H,DETJ,DENSITY,COFFDOUBLEPRECISIONJ(2,2),PROPS(*)MM=0.D0wgt=0.D0JJ=0.D0NN=0.D0G=0.D0H=0.D0j=0.D0DETJ=0.D0Coff=0.D0DENSITY=0.D0INTEGERPOINT(1)=0.D0INTEGERPOINT(2)=0.7745966692D0INTEGERPOINT(3)=-0.7745966692D0wgt(1)=0.8888888889D0wgt(2)=0.5555555556D0wgt(3)=0.5555555556D0DENSITY=PROPS(3)DOI=1,3DOII=1,3G=INTEGERPOINT(I)H=INTEGERPOINT(II)CALLCalDETJ(J,DETJ,G,H,MCRD,NNODE,JELEM,COORDS)CALLCalNN(NN,G,H)COFF=DETJ*WGT(I)*WGT(II)*DENSITYMM=MM+(MATMUL(TRANSPOSE(NN),NN))*COFFENDDOENDDOreturnend至此,单元的刚度矩阵、质量矩阵和阻尼矩阵已经求得,uel程序的核心部分已经完成,下一个帖子会更新自编CPE8/CPS8uel程序的计算结果。来源:有限元先生

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