首页/文章/ 详情

C++基础知识(一)

1天前浏览93
   

注释

       

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

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
最近编辑:1天前
外太空土豆儿
硕士 我们穷极一生,究竟在追寻什么?
获赞 2粉丝 0文章 30课程 0
点赞
收藏
作者推荐

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

零概述 有限元法编写二维四边形二阶用户自定义单元,采用abaqus提供的uel二次开发平台,包括单元的刚度矩阵K、质量矩阵M和阻尼矩阵C,uel需要向abaqus主程序输出AMARTIX、RHS等矩阵。编写的uel子程序适用于静动力计算、频域计算等等,帖子分为两个部分-&gt;理论部分CPE8/CPS8 UEL用户自定义单元开发(1)结果部分CPE8/CPS8 UEL用户自定义单元开发(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矩阵中。在计算质量矩阵的时候,首先计算单元的额协调质量矩阵,然后将行质量集中到对角元,让后将非对角元素置为零,具体可参考帖子:质量矩阵的求解‍ 有限元先生,公 众号:有限元先生C3D8 BBAR UEL用户自定义单元二次开发(1) 单元的阻尼矩阵可按照比例阻尼求解,即刚度矩阵和质量矩阵的线性组合。 求解刚度矩阵的主程序为 subroutine KKmartix(KK,coords,DMatx,mcrd,nnode,jelem) INCLUDE &#39;ABA_PARAM.INC&#39; double precision coords(mcrd,nnode),dmatx(3,3) double precision INTEGERPOINT(3),wgt(3) double precision KK(2*nnode,2*nnode) double precision B(3,2*NNODE),J(2,2) double precision DETJ,G,H,COFF double precision NPXY(2,NNODE) INTEGERPOINT(1)= 0.D0 INTEGERPOINT(2)= 0.7745966692D0 INTEGERPOINT(3)=-0.7745966692D0 wgt(1)=0.8888888889D0 wgt(2)=0.5555555556D0 wgt(3)=0.5555555556D0 B=0.d0 J=0.d0 DETJ=0.d0 G=0.d0 H=0.d0 COFF=0.d0 NPXY=0.d0 do I=1,3 do II=1,3 G=INTEGERPOINT(I) H =INTEGERPOINT(II) call CalBJ(B,J,DETJ,G,H,MCRD,NNODE,JELEM,COORDS) COFF=DETJ*WGT(I)*WGT(II) KK=KK+MATMUL(MATMUL(TRANSPOSE(B),DMatx),B)*COFF enddo enddo return end 求解质量矩阵的主程序为 subroutine MMmartix(MM,COORDS,PROPS,MCRD,NNODE,JELEM) INCLUDE &#39;ABA_PARAM.INC&#39; INTEGER MCRD,NNODE,JELEM DOUBLE PRECISION MM(2*NNODE,2*NNODE),COORDS(MCRD,NNODE) DOUBLE PRECISION NN(2,16) DOUBLE PRECISION INTEGERPOINT(3),WGT(3) DOUBLE PRECISION G,H,DETJ,DENSITY,COFF DOUBLE PRECISION J(2,2),PROPS(*) MM=0.D0 wgt=0.D0 JJ=0.D0 NN=0.D0 G=0.D0 H=0.D0 j=0.D0 DETJ=0.D0 Coff=0.D0 DENSITY=0.D0 INTEGERPOINT(1)= 0.D0 INTEGERPOINT(2)= 0.7745966692D0 INTEGERPOINT(3)=-0.7745966692D0 wgt(1)=0.8888888889D0 wgt(2)=0.5555555556D0 wgt(3)=0.5555555556D0 DENSITY=PROPS(3) DO I=1,3 DO II=1,3 G =INTEGERPOINT(I) H =INTEGERPOINT(II) CALL CalDETJ(J,DETJ,G,H,MCRD,NNODE,JELEM,COORDS) CALL CalNN(NN,G,H) COFF=DETJ*WGT(I)*WGT(II)*DENSITY MM =MM+(MATMUL(TRANSPOSE(NN),NN))*COFF ENDDO ENDDO return end 至此,单元的刚度矩阵、质量矩阵和阻尼矩阵已经求得,uel程序的核心部分已经完成,下一个帖子会更新自编CPE8/CPS8 uel程序的计算结果。 来源:有限元先生

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