C/C++教材建设

2024-09-23

C/C++教材建设(通用7篇)

C/C++教材建设 篇1

在应用型人才培养模式下,安徽新华学院建成服务型外包人才培养基地。发展服务外包的关键在人才,尤其是一大批高素质的服务外包专门人才。

我院计算机科学技术特色专业,就是一个以培养服务型外包人才为目的的班级,C/C++语言程序设计课程经过八年的建设, 作为该专业的主要专业基础课程,结合软件外包企业的人才素质要求,对软件外包人才培养和专业教学内容的有效整合,形成了有鲜明特色的一门课程。

首先,对人才需求和目前的教学课程设计进行分析,主要包括:

1 人才需求分析

对软件外包企业对人才的需求做了分析,大多数外包企业都要求员工能否熟练掌握常用开发软件和实用技术,主要包含如下几条:

1)具备一定软件开发经验的人员;

2)熟练掌握一到两门编程语言,主要涉及的语言有C、C++、JAVA、ASP.Net等;

3)具有一定的数据库设计能力,能熟练掌握SQL或ORACLE中的一种;

4)了解软件开发流程,具备基本的软件开发思想;

5)熟悉软件技术文档的编写,具备良好的文档编制习惯和代码书写规范。

2 教学计划分析

经过课程组多位教师讨论,对近几年程序设计课程(主要是C语言和C++课程)的教学状况进行了调查分析,之前教学中存在的主要问题有:1) CC++

1) C语言与C++语言程序设计重复内容

C语言与C++语言程序设计在基础性内容,如语法、基本结构、运行环境等内容都有是一致的,多数内容是重复的。C++程序设计课程中往往是对C语言中的内容进行重复讲解,造成时间上的浪费。

2) 重点难不突出

经过讨论分析,C++面向对象程序设计是教学的重点,应该作为外包型人才培养的基础课程开设。而目前的教学计划不能满足应用型服务外包人才培养模式。

3特色课程建设

由于原课程存在的问题,提出对这两门课程进行课程改革,并在几年的课程建设中形成了鲜明的课程特色,主要特色有:

1) 课程整合

把面向过程程序设计C语言与面向对象程序设计语言C++进行合并。C++的基础语言是C语言,C++是在C语言面向过程的基础上加入了类和对象等面向对象的概念。

相同的语法,相同的运行平台,把两门语言进行整合,弱化非重点知识点的理论性讲,强调面向对象的设计方法。既满足了人才培养需求,同时兼顾面向过程知识的全面性。

2) 教学大纲改革

由于课程结构进行了较大变化,教学大纲和实验大纲以及实验指导书都进行了较大改革。

教学大纲中,由于课程整合,制定了新的教学计划,学时定为72+20的模式。虽然总学时增加了,但对于原来两门课的合并,学时数有一定的压缩。为了不影响教学和知识点的遗漏,我们组织了教研活动,将这两门课的老师以及相关课程老师组织在一起,针对用人的专业需求,统一调整了教学内容,去掉了重复的内容,让两门课程内容形成一个有效的整体,课程资源得到进一步优化。3)

3) 加强学生动手能力

外包企业需要动手能力强的学生,在上机实践环节、课程设计环节加大了对学生动手能力的培养。主要采用,加大上机练习,以分组的形式进行练习、讨论、提问、答辩。

以上内容是在本学期2010计算机科学与技术特色专业班级所采用的教学改革方法。通过课堂教学效果及学生的反馈,做到了全员参与,收到了很好的教学效果。

4 总结

经过三年的教改革实践,该课程已形成鲜明的课程特色,主要体现在课程体系、实践教学、课程设计环节特色鲜明、突出。在教学过程中,该课程收到了学生较高的教学评价,教学效果突出。

摘要:在服务外包培养模式中,建立合理的课程体系是人才培养的重要环节。C/C++作为一门重要的专业基础课程,经过多年教学改革,形成了具有鲜明特色的课程。

关键词:服务外包,教学改革,特色课程

C/C++教材建设 篇2

C/C复合材料是一种以碳纤维为增强体的先进复合材料, 它除了具有高比强度、高比模量、比重轻和耐腐蚀等性能外, 还具有良好的摩擦性和优越的烧蚀性以及生物相容性, 已广泛应用于航空、航天、汽车和生物医学等领域。C/C复合材料的应用很大程度上取决其强度, 因而C/C复合材料的强度预测和损伤过程分析成为了热点研究问题。针对三维编织结构复合材料的强度预测主要有解析方法和数值计算方法。Gu[1]基于织物和纱线拉伸应变关系, 采用能量守恒定律建立了三维四向编织材料的拉伸强度模型。徐焜等[2]和李典森等[3]基于等应变假设和桥联模型研究了材料的拉伸强度。Yu.I.Dimitrienko[4]甚至利用解析方法针对三维编织复合材料提出了高温强度的计算模型, 预报材料在高温下的拉伸和压缩强度。相对解析方法, 利用有限元原理对三维编织复合材料数值预报强度的方法研究较为广泛。庞宝君等[5]对三维四向编织复合材料纤维束采用Hoffman强度准则, 基体采用Mises强度准则, 材料的弹性矩阵采用刚度衰减的方法, 预报了材料的拉伸与压缩的应力-应变过程。曾涛等[6,7]提出了一种简化的有限元数值法, 基于Twai-Wu强度准则和Mises强度准则预报了三维编织复合材料的非线性响应和损伤演化过程。董纪伟等[8]对纤维束采用了Twai-Wu强度准则, 基体采用了Mises强度准则, 材料的弹性矩阵采用刚度衰减的方法分析了材料的损伤过程, 预报了材料的强度。方国东等[9]对三维四向碳/环氧材料纤维束采用Hashin强度准则, 基体采用最大应力破坏准则, 分析了材料的损伤过程, 预报了材料强度。

本文通过对细编穿刺C/C复合材料周期性几何单胞施加周期性边界条件, 利用两种不同的纤维束强度准则和同一种基体强度准则计算材料在拉伸载荷下的宏观强度, 并与文献[10]的实验结果进行对比, 通过计算材料的单元损伤和破坏率来说明材料的破坏模式和强度控制。

1 强度准则

一般来说, 强度准则的选取对材料的强度计算结果会有影响。因此, 本文通过对编织穿刺C/C复合材料纤维束和碳布采用Hashin强度准则和Hoffman强度准则, 基体采用最大应力破坏准则来预报材料的宏观拉伸强度。

1.1 Hashin强度准则

细观纤维束 (碳布) 的破坏模式可以分为四类:L纵向拉伸剪切, L纵向压缩剪切, T、Z横向拉伸剪切, T、Z横向压缩剪切破坏。

纤维束L方向拉伸强度准则为

纤维束L方向压缩强度准则为

纤维束T方向和Z方向拉伸剪切强度准则为

纤维束T方向和Z方向压缩剪切强度准则为

式中:FLt, FTt和FZt分别为纤维束在L, T和Z方向的拉伸强度;FLc, FTc和FZc分别为纤维束在L, T和Z方向的压缩强度;FsLT, FsTZ和FsZL分别为纤维束在LT, TZ和ZL方向的剪切强度;α是损伤模式中的贡献因子。

1.2 Hoffman强度准则

式中:

损伤模式的各个方向由式 (7) 应力与其强度比值来确定, 比值最大的方向为损伤断裂方向。例如, σL2/XtXc值为最大, 则其损伤模式为L型损伤。

1.3 基体的强度准则

式中:σ1t为基体的拉伸应力;Fmt为基体拉伸强度;σ1c为基体的压缩应力;Fmc为基体压缩强度。

2 损伤演化模型

材料损伤过程中, 当达到初始破坏准则后会引起材料的局部刚度减小而出现软化特征, 并会出现对网格的依赖性, 因而在模型中对损伤变量引入了单元长度的概念, 组分材料中的每种破坏模式的损伤演化方程可以表示为:

式中, DeqIi和DeqIf分别是破坏模式I的初始损伤等价位移和全损伤等价位移两式如下:

式中:FI为强度准则的数值;GI和σeqIi分别为组分材料破坏模式I的断裂能量密度和初始破坏时的等价应力, 可以由下式得到:

式中, σeqIi为等价应力。

3 损伤模型

含损伤的刚度矩阵C (ω) 可以表示为未损伤的刚度C以及损伤变量ωI表示, 即

式中:Cij是纤维束或基体未损伤的刚度矩阵项,

为了提高数值计算的收敛性。利用Duvaut-Lions模型, 其损伤变量的导数形式为

式中:ηI为破坏模式I的黏性系数;ωI*为规则化后破坏模式I的损伤变量。

4 计算结果与分析

本文采用细编穿刺C/C复合材料周期性单胞模型, 如图1所示。周期单胞的构成是由沿X方向的碳纤维布和沿Y方向的碳纤维布相互交织的平面碳布, 结合垂直于碳布Z向的纤维束组成的预制体, 针对预制体留下的空隙利用石墨基体进行填充, 最终形成编织穿刺C/C复合材料。利用本文介绍的强度准则、损伤演化模型和损伤模型, 针对细编穿刺C/C复合材料的周期几何单胞施加周期性边界条件, 计算材料的宏观强度、内部组分材料的损伤和破坏率, 说明材料在各个方向加载时的破坏模式和强度控制。

X方向单轴拉伸载荷下的应力-应变曲线, 如图2所示。从周期性单胞结构可以看出材料的X方向和Y方向结构相似, 因而本文只对X方向拉伸进行分析。从图中可以看出纤维束 (碳布) 利用Hashin强度准则计算出的材料强度为130.721 MPa, 而纤维束 (碳布) 利用Hoffman强度准则计算出的材料强度为132.164 MPa, 文献[10]的实验结果表明, 材料强度在X方向和Y方向均为122.7 MPa, 从数值上可以看出, 与实验测出的材料强度值相比, 两个准则计算出的强度值与实验值相比相差的并不大, Hashin强度准则比Hoffman强度准则要更接近实验值。

Z方向单轴拉伸载荷下的应力-应变曲线, 如图3所示。纤维束采用Hashin和Hoffman强度准则计算出强度分别为168.089 MPa和158.015 MPa, 而文献[10]中实验测试Z方向的拉伸结果为183.9 MPa。从结果对比来看, 纤维束采用Hashin强度准则计算出的结果与实验值更为接近。

X方向加载时损伤破坏单元变化, 如图4所示。图4 (a) 、 (b) 、 (c) 分别为整体坐标系下X、Y、Z方向的损伤和破坏单元变化, 为描述方便, 将整体坐标系下X方向设为L方向, Y方向设为T方向, Z方向设为Z方向。X方向加载时最初基体发生损伤随后迅速破坏, X方向的碳布和Z方向的碳布在基体出现破坏后出现损伤, 但Z方向碳布没有出现破坏, 穿刺方向的纤维束没有发生损伤和破坏。当随着载荷的进一步增加直至材料发生最终的失效, X方向碳布在T方向发生的损伤和破坏要大于L方向的损伤和破坏, L方向的损伤和破坏要大于Z方向的损伤和破坏。因此可以认为, 材料在单胞拉伸时是基体的拉伸破坏和X方向碳布的拉伸剪切破坏, 材料强度是X方向碳布的拉伸和剪切强度控制。

Z方向加载时损伤和破坏单元变化, 如图5所示。图5 (a) 、 (b) 、 (c) 分别为L、T、Z方向的损伤和破坏单元变化。从图中可以看出, 材料在Z方向拉伸载荷作用下, 基体首先迅速出现损伤, 随后纤维束在各个方向上出现了损伤, 而碳布在整个过程中没有出现L方向和T方向的损伤和破坏, 但在Z方向出现了损伤和破坏, 随着载荷的进一步增加, 材料的载荷全部由纤维束承担和碳布Z方向承担。总体可以认为基体的拉伸破坏, 碳布的Z方向拉伸破坏和纤维束的拉伸剪切破坏。强度主要是由纤维束的拉伸和剪切强度控制以及碳布的横向拉伸强度控制。

5 结论

对细编穿刺C/C复合材料纤维束和碳布利用Hashin强度准则和Hoffman强度准则, 基体采用最大应力准则, 通过数值计算得出:

在沿碳布轴向 (X或Y方向) 单轴拉伸时, 两种纤维束准则计算的结果与文献实验值吻合, 两种准则相差不大;在沿纤维束穿刺方向 (Z方向) 单轴拉伸时, 两种不同纤维束强度准则计算出的结果与实验结果相比, Hashin准则更为接近。

在沿碳布轴向单轴拉伸时, 材料的基体最先受到破坏, 随后碳布开始承担载荷, 随着载荷的进一步增加碳布开始发生损伤和破坏直至失效。从损伤和破坏的单元比例来看, 其破坏模式主要是基体的拉伸破坏和碳布的拉伸剪切破坏, 材料的强度主要受碳布的拉伸和剪切强度控制。

材料在沿穿刺方向单轴拉伸时, 材料的基体最先受到破坏, 随着载荷的进一步增加, 纤维束和碳布开始发生损伤和破坏直至失效。从损伤和破坏的单元比例来看, 基体破坏模式主要是基体的拉伸破坏, 碳布的拉伸破坏以及纤维束的拉伸和剪切破坏。强度主要是由纤维束的拉伸和剪切强度控制以及碳布的横向拉伸强度控制。

参考文献

[1]GU Bohong.Prediction of the uniaxial tensile curve of 4 step3-dimensional braided preform[J].Composite Structures, 2004, 64 (2) :235-241.

[2]XU Kun, XU Xiwu, TIAN Jing.A Model for Tensile Strength Prediction of Low Angel 3D Braided Composites[J].Acta Aeronautica Et Astronautica Sinica, 2007, 28 (2) :294-300.

[3]LI Diansen, LU Zixing, LU Wenshu.Theoretical prediction of stiffness and strength of three-dimensional and fourdirectional braided composites[J].Applied Mathematics and Mechanics, 2008, 29 (2) :163-170.

[4]DIMITRIENKO Y I.A structural thermo-mechanical model of textile composite materials at high temperatures[J].Composites science and technology, 1999, 59 (1) :1041-1053.

[5]PANG Baojun, DU Shanyi, HAN Jiecai, et al.Nonlinear Behavior of the Constitutive Simulation of Meso-Scopic Computitional Mechanics for Three-Dimensional MultiDirectional Braided Composites[J].Acta Material Composite Sinica, 2000, 17 (1) :98-102.

[6]ZENG Tao, WU Linzhi, GUO Licheng.A finite element model for failure analysis of 3D braided composites[J].Materials Science and Engineering A, 2004, 366 (1) :144-151.

[7]ZENG Tao, FANG Daining, GUO Licheng.Predicting the nonlinear response and failure of 3D braided composites[J].Materials Letters, 2004, 58 (26) :3237-3241.

[8]DONG Jiwei, FENG Miaolin.Asymptotic expansion homogenization for simulating progressive damage of 3D braided composites[J].Composite Structures, 2010 (92) :873-882.

[9]FANG Guodong, LIANG Jun, WANG Baolai.Progressive damage and nonlinear analysis of 3D four-directional braided composites under unidirectional tension[J].Composite Structures, 2009, 89 (1) :126-133.

C/C++教材建设 篇3

1 字符串的存储

字符串可以看作一组字符型数据的集合, 例如字符串“Hello”存储如图1所示。

注意每个字符串末尾都有一个字符“�”做结束符, 这里的“�”是ASCII码的八进制表示, 也就是ASCII码为0的Null字符, 称为以零结尾的字符串 (Null-terminated String) 。

1.1 字符数组

可以使用字符数组存储字符串, 主要的有以下二种用法。

一种方法是char str[10]=“hello”;初始化字符串数组时, 编译器自动将字符串最后一个字符后面加上“�”, 以表示字符串的结束。相当于char str[10]={“h”, “e”, “l”, “l”, “o”, “�”};

如果数组的大小大于字符串的长度+1, 那么把字符串结束后面的元素也都初始化为“�”。

如果数组的大小小于字符串的长度+1, 则数组str只包含字符串的前10个字符, 不包含“�”字符, 这种情况编译器会给出警告。

如果要用一个字符串的字符准确地初始化一个字符数组, 最好的办法是不指定数组的长度, 让编译器自己计算:char str[]=“Hello”, 字符串的长度包括“�”字符在内一共6个字符, 编译器会确定数组str的长度为6。这是第二种常用的方法。

1.2 字符指针

char*ptr=“abc”, 前面提到字符串是作为字符数组进行存储, 编译器把“abc”当成常量并它放到程序的常量区, 按照C/C++标准的描述, “abc”是string literal (字符字面量、字符文字量) , 具有静态存储性质, 类型是数组类型, 并且不能被改变。因此定义的是一个指向字符类型的指针ptr, 这个指针指向了字符串的首地址。建议的写法应该是const char*ptr=“abc”。

2 字符串的使用

2.1 用字符数组处理字符串

字符数组中存放的字符串可以像普通数组一样逐个引用数组元素进行赋值和其他运算, 也可以和普通数组不同, 通过字符数组名将整个字符串一次输入、输出[2]。参考例1, 本文的程序在VC++6.0系统下调试通过。

例1中用str数组存放字符串“hello”, 其中str[0]='h', str[1]='e', str[2]='l', str[3]='l', str[4]='o', str[5]=“�” (由系统自动加入’�’) , 使用while循环, 当数组元素不是字符串的结束符“�”时, 输出数组元素。

C/C++中, 数组名作为数组元素的首地址, 输出时, 是将从数组首地址开始输出字符直到字符串结束。

2.2 使用字符指针处理字符串

例3中, 字符指针ps指向字符串常量“hello”的首地址, 即*ps=“h”。可以用指针输出这个字符串 (从字符串的第一个字符开始输出到字符串的结束符“�”为止) 。将字符指针加一ps++后, ps指针指向字符串的第二个字符, 即*ps=“e”, 依次使用指针将字符串的每一个字符赋值给字符数组str, 最后将“�”放入数组。

3 一些需要注意的问题

char*ps=“hello”;字符指针指向的是一个常量, 因此, *ps=“a”, 这样的语句由于试图对常量进行改变, 尽管编译通过, 在运行时仍会出现错误。另外, 也有这样的输入字符串的方式char*p;cin>>p;这种方式在编译时会给出警告, 因为指针p并没有被赋值, 也就是说指针p的指向是不确定的, 可能指向空闲的存储单元, 也可能指向程序或数据区域, 因此, 在使用时必须先给指针赋值, 如char s[10], *p=s。

摘要:C/C++中使用字符数组和字符指针处理字符串, 本文对字符数组, 字符指针及字符串的初始化、赋值和使用进行了细致深入的探讨。

关键词:C/C++,字符指针,字符串

参考文献

[1]谭浩强.C程序设计[M].清华大学出版社, 1997:157.

C/C++教材建设 篇4

Python作为一种被广泛应用的脚本编程语言, 其语法简单、语义清晰、平台兼容性好、模块丰富。同时由于Python作为“胶水语言”的设计初衷, 因此经常被用于连接C/C++等编译型语言编写的模块。近年来随着分布式编程模式被广泛应用, Python的并行化也日益被人们所重视。

从实现方式来看主要有3类:①以ParallelPython和RPYC为代表。其使用纯Python作为系统实现, 主要通过模块文本的传递和Pickle序列化参数传递等方式实现并行;②以MPI的Python封装作为实现, 在编程方式上沿袭MPI的模式;③以Cython为代表, 通过自动化编译实现Python模块的并行化, 其内在机制在于通过编译器加入OpenMP支持。

实际使用中, 这3者各有利弊:第一种方式运行效率相对较低, 但可以充分发挥Python的优势;第二种方法虽然效率上优于完全基于Python的分布式实现, 但受到MPI已有模式的约束, 不能充分发挥Python内嵌数据结构的效能;第三种方式效率相对较高, 但语法上比较晦涩, 同时只能多线程并行, 不能多CPU并行。出于实际应用的需要, 本文拟建立一种综合各方优点、基于Python的分布式编程架构。该架构主要解决如下3个问题:其一, 数据的高效传递;其二, 混合Python和C/C++代码;其三, 数据同步问题。

脚本语言在数据传递上的效率上虽不如C/C++的MPI, 但总体传输时间和传输效率仍旧和需传输的信息量成正比例关系, 这主要是由于Python内建的传输机制主要仍然基于封装socket等传统的传输方式。因此随着机器性能和网络传输速度的提升, 传输效率的高效性对基于Python的分布式系统是有保障的。混合代码运算主要是为保证分布式计算架构在原子级别运算的效率。Python作为脚本语言语法易用、语义简单, 相应地由于其弱类型和动态解释特征而造成其在原子级别运行效率相对不足。Python是按模块化运作的, 因此使用C/C++等高效编译型语言编写Python扩展模块以提升原子算法的运行效率。为便于在分布式系统上自动达成这一目标, 故使用SWIG作半自动编译。

1SWIG的半自动化编译

SWIG是一个旨在帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具, 其既支持脚本语言, 也支持非脚本语言。原子算法对执行效率的要求是最高的, 故使用C/C++作为原子算法的开发语言, 并通过Python调用SWIG生成接口文件, 由SWIG处理生成C/C++代码, 进而通过C/C++编译器编译生成模块文件以供Python解释器导入 (import) 。这一过程主要由4个步骤组成:设计算法、明确输入输出、序列化复杂对象、Python调用shell命令编译SWIG接口文件、部署到相应节点位置。

1.1设计算法, 明确输入输出

原子算法的本质是一个对输入数据的变换处理过程, 设计上要功能单一化。同时由于最终编译过程是发生在运算节点的, 因此原子算法的整体篇幅也要进行控制, 以降低传输时间。以计算阶乘为例:

首先编写SWIG接口文件, main.i:

/* main.i */

%module Sam

%{

/* Put header files here or function declarations like below */

extern int fact (int n) ;

%}

extern int fact (int n) ;

为了实现阶乘功能, 用c语言编写实现文件main.c

/* File : main.c */

int fact (int n)

{

if (n <= 1) return 1;

else return n*fact (n-1) ;

}

1.2序列化复杂对象

Python支持类实例等复杂的对象, Python定义了7种基本数据类型:对象、整型、浮点型、字符串、元组、列表和字典。对于将C/C++数据类型转为Python对象可以使用Python C API:Py_BuildValue, 其原型为:PyObject* Py_BuildValue (const char *format, ...) ;若要将Python对象转为C/C++数据类型可以使用Python C API:PyArg_Parse, 其原型为:int PyArg_Parse (PyObject *args, const char *format, ...) 。为实现Python分布式计算的OOP特性, 对于对象等复杂数据类型在架构上也必须加以支持, 而以上方法只是对简单对象 (数据类型) 直接的转换, 对于复杂对象的转换可以采取两种方法:其一是将Python对象的定义和运行状态序列化, 以字符串方式处理, 用exec () 加以运行;其二是用import指令导入相应定义和状态。为了在C/C++程序段内可以使用Python的对象/类定义和过程, 可以使用Python C API在C/C++程序段内运行Python解释器。在C/C++程序段内使用Python对象有一定效率损失, 故因慎重对待, 尽可能少用。

1.3Python调用shell命令编译生成SWIG接口文件

对于c语言的SWIG命令比较容易 (默认接口文件和生成的文件在同一目录下) :swig-python main.i, 进而通过Python引入os模块, 使用os.system () 函数调用对其进行编译, 生成模块封装文件 main_wrap.和Sam.py (该文件和SWIG定义文件内的模块名同名) 。

1.4部署到相应节点位置

由于模块封装文件 (main_wrap.c) 和模块实现文件 (main.c) 都是源码文本文件, 因此可以简单地通过RPYC传递分发到各个运算节点, 并进行同步编译器编译。

SWIG生成的模块封装并不针对某种特定编译环境, 这里使用gcc作为编译环境, 其编译命令行为:

gcc-shared main.c main_wrap.c

-ID: Python25 include -LD: Python25 Libs -lPython25 -o _Sam.pyd

同上, 使用os.system () 函数调用对其进行编译, 生成相应的Python扩展模块文件。

2通讯层的实现

通讯层的作用旨在解决数据的同步问题和数据的高效传递。通过对不同Python RPC的比较, RPYC易用而不失效率, 符合架构需要。

为实现数据的同步需使用读写适配器 (read/write adapter) 算法, 首先引入读写适配器的核心数据结构, 其数学描述如下:序偶L:L=。其中processor_id为不同进程的标示, obj_name为需要读写同步的对象名称, obj_value为对象值, step为步骤数, r|w为读写指示。读写同步操作的实现如下:若系统按照C/S实现则在服务端建立一个“读写适配器”, 适配器按照step的先后按照r|w进行对象和对象值的传递派发;若系统实现时没有明确的服务端, 则向读写目标发送相应的序偶, 由目标解释器进程处理。

3分布式模块的优化

原子算法是使用C/C++实现, 并使用Python调用的。由于Python有GIL, 因此线程安全可以保证。而同时在分布式模块的编写中可以进一步地使用OpenMP对多线程进行优化, 同时可以基于分批和分离TCP连接的方法进行算法优化。

参考文献

[1]Python Software Foundation.Python编程语言的首页[EB/OL].http://www.python.org/, 2011.

[2]Vitalii Vanovschi.Parallel Python主页[EB/OL].http://www.parallelpython.com/.

[3]Tomer Filiba.RPYC主页[EB/OL].http://rpyc.sourceforge.net/, 2012.

[4]DALCIN L D.Parallel distributed computing using Python[J].Ad-vances in Water Resources, 2011 (9) .

[5]Cython主页[EB/OL].http://www.cython.org/, 2012.

[6]BEAZLEY D M.Automated scientific software scripting with SWIG[J].Future Generation Computer Systems, 2003 (5) .

[7]徐咏梅.Python网络编程中的远程调用研究[J].电脑编程技巧与维护, 2011 (18) .

C/C++教材建设 篇5

1 实验

1.1 材料

所用材料为采用液态浸渍结合热梯度化学气相沉积工艺制备的碳化铪含量为2.5%的整体炭毡增强的C/C复合材料,其密度为1.83g/cm3。其工艺过程为:首先通过液相浸渍、干燥的方法在预制体中引入一定量的HfO2,接着通过热梯度化学气相沉积(TCVI)工艺对预制体进行致密化;最后在石墨化过程中难熔金属氧化物HfO2会与复合材料中的碳元素发生反应,转换为HfC。按GJB323A—96要求,烧蚀实验的试样尺寸为ϕ30mm×10mm。

1.2 冲击损伤实验

冲击损伤利用压杆直径为ϕ12.7mm的SHPB装置[8]进行。冲击时将试样夹在入射杆和透射杆之间,且使三者的轴线保持共线,利用撞击杆撞击入射杆所产生的应力脉冲对试样进行冲击损伤。试样所承受的冲击载荷可按下式进行计算。

undefined

根据能量守衡,忽略动能损失,试样在冲击过程中的能量吸收按下式进行计算[9]。

undefined

上两式中, E0为压杆的弹性模量(GPa), A0为压杆的横截面面积(mm2),C0为压杆的弹性纵波波速(m/s),t0为入射波的脉宽,而εi(t),εr(t),εt(t)分别为贴在压杆上的应变片所采集到的入射、反射和透射波的弹性应变信号(V)。

1.3 烧蚀实验

按GJB323A-96,采用氧乙炔烧蚀装置对HfC-C/C复合材料样品进行烧蚀实验。烧蚀条件如表1所示。

2 结果与讨论

2.1 冲击载荷响应

根据公式(1),HfC-C/C复合材料在冲击载荷下的应力响应如图1所示,复合材料经受了3种不同的冲击载荷,1#试样的冲击载荷峰值为121MPa,2#试样的冲击载荷峰值为168 MPa,3#试样的冲击载荷峰值为196 MPa。其冲击载荷从零增加到最大值的时间大约为50μs左右,而采用坠落装置冲击时,其响应为毫秒级,故采用SHPB装置对材料进行冲击加载能较好的反映高速物体碰撞对复合材料造成的冲击损伤。试样在冲击过程中的能量吸收(公式(2))与冲击载荷的关系如表2所示,HfC-C/C复合材料在冲击过程中的能量吸收峰值随载荷的增加而增加,其中1#试样对冲击能吸收峰值为0.8J,2#试样的冲击能吸收峰值为1.4 J,3#试样的冲击能吸收峰值为2.1J。

2.2 冲击损伤对烧蚀性能的影响

图2是烧蚀前后试样的宏观照片。烧蚀前,HfC-

C/C复合材料表面在宏观上均没有出现微裂纹,表明复合材料的整体骨架没有因冲击载荷的作用而发生局部的破坏。烧蚀后,复合材料试样表面明显比烧蚀前的要疏松、粗糙,由于基体被烧蚀掉,一些纤维的骨架脉络显露出来,且由于火焰的灼烧和热气流的冲刷,烧蚀后的试样表面更加富有光泽,同时复合材料表面烧蚀驻点区域与边缘区的分界线依稀可见。

C/C复合材料的烧蚀实验结果如表3所示:与未进行改性处理的C/C复合材料的试样(4#)相比, HfC-C/C复合材料试样(0#)的烧蚀性能得到了一定程度的改善;且与未受冲击的试样(0#)相比,HfC-C/C复合材料试样在受到三种不同冲击损伤后,其线烧蚀率无明显的变化,但质量烧蚀率随冲击载荷的增加而增加。

HfC-C/C复合材料试样烧蚀后的SEM形貌如图3所示。由图3a可以观察到未受冲击的试样烧蚀表面的微裂纹很少。受冲击的试样烧蚀表面都存在有纵横交错的微裂纹,如图3(b,c,d)所示,随着冲击载荷的加大,烧蚀后其表面的烧蚀微裂纹明显增多,烧蚀后

的表面也更加粗糙,甚至有少量基体从表面剥离和脱落,出现了剥蚀现象。这是因为在复合材料的表面,高速气流带来的氧气与材料发生氧化反应,发生热化学烧蚀,气流中高速粒子的冲刷会引起表面材料的热力学腐蚀(侵蚀)。HfC-C/C复合材料烧蚀表面由于构成、材料取向和缺陷分布的差异,各区域的抗烧蚀能力是不同的,这种抗烧蚀能力的不同会引起复合材料烧蚀表面的粗糙化。由于纤维的抗烧蚀能力大于基体的抗烧蚀能力,在烧蚀过程中基体和纤维间的界面是一个薄弱环节,随着热化学烧蚀的进行,复合材料表面的纤维区域将凸起,基体、界面区域将逐渐凹下。受冲击载荷作用后,复合材料缺陷较多的区域产生的损伤程度会大于缺陷较少的区域,这会加速缺陷较多区域的热化学烧蚀和热力学腐蚀(侵蚀),使得冲击后复合材料的烧蚀表面变得更加粗糙。当表面粗糙度达到临界值时,复合材料的表面凸起部分受到的压应力、剪切应力超过其强度时,剥离便会开始,引起部分机械剥蚀。

冲击载荷引起的复合材料质量烧蚀率的增加如图4所示,与未受冲击损伤的试样(0#)相比,当冲击载荷为121MPa(1#)时,复合材料质量烧蚀率增加了近3.0%,冲击载荷为168MPa(2#)时,质量烧蚀率增加了6.4%,而当冲击载荷增加到196MPa(3#)时,其质量烧蚀率增加了26.7%。这说明冲击损伤对HfC-C/C复合材料烧蚀性能的影响有一个阈值,超过此值,冲击损伤才会对复合材料的烧蚀性能产生显著影响。

HfC-C/C复合材料在承受冲击载荷后,冲击表面并没有出现可觉察的凹陷与破损,故本实验中,复合材料所吸收的能量主要反映了材料在冲击载荷作用下发生的内损伤。冲击载荷下,复合材料的基本损伤形式有分层、界面脱粘和基体的开裂。C/C复合材料中的界面一般为弱界面,低的界面强度会使复合材料在冲击载荷作用下易于发生界面脱粘现象,吸收部分冲击能。C/C复合材料中微裂纹的存在会强化冲击载荷在复合材料中所造成局部应力集中,这种应力集中会引起微裂纹处原有裂纹的扩展或者产生新的微裂纹,由于C/C复合材料中的基体炭失效应变较小,随着冲击载荷的增加,原有裂纹的扩展与新裂纹的不断增殖会使复合材料中部分基体炭被压碎而产生局部的基体失效,进一步增加对冲击能量的吸收。

在复合材料的烧蚀过程中,冲击载荷所造成的裂纹、脱粘与局部基体失效一方面为气流中的高速粒子进入复合材料内部提供了通道,使复合材料内部发生了与表面材料相似的热力学侵蚀,另一方面也使得更多的内部纤维与基体被高速热气流携带氧气所包围,加速了复合材料内部物质的氧化消耗,增加了复合材料的质量烧蚀率。冲击载荷所造成的局部基体失效使复合材料的有效承载面积减小,导致作用于未失效区域的有效应力增加,当冲击载荷达到一定数量,这种局部的基体失效对材料损伤过程的加速才能显现出来,这也就说明了为什么冲击载荷对HfC-C/C复合材料质量烧蚀率的影响存在着一个阈值。尽管冲击载荷在复合材料造成了一些不可恢复的损伤,但复合材料表面的纤维骨架并未发生破坏,而只是增加了复合材料烧蚀表面的粗糙度,因而冲击载荷对复合材料的线烧蚀率并没有显著的影响。

3 结论

(1)通过液态浸渍结合热梯度化学气相沉积制备的含HfC为2.5%的HfC-C/C复合材料有较好的抗烧蚀能力。

(2)当冲击载荷作用于HfC-C/C复合材料时,其所造成的损伤对复合材料的质量烧蚀率有显著的影响,而对复合材料的线烧蚀率的影响不显著。

(3)冲击损伤对HfC-C/C复合材料质量烧蚀率的影响存在有一个阈值,超过此值,复合材料在受冲击后的质量烧蚀率显著增加。

摘要:通过液态浸渍结合热梯度化学气相渗透(TCVI)制备了碳化铪含量为2.5%(质量分数)的C/C(HfC-C/C)复合材料。利用split Hopkinson pressure bar(SHPB)装置,对HfC-C/C复合材料进行了不同载荷冲击损伤,采用氧乙炔火焰烧蚀法测定了复合材料的烧蚀性能,结合扫描电镜分析了冲击损伤对HfC-C/C复合材料烧蚀性能的影响。结果表明:动态冲击损伤对HfC-C/C复合材料线烧蚀率的影响不显著,而其质量烧蚀率随冲击载荷的增加而增加,且冲击载荷对HfC-C/C复合材料质量烧蚀率的影响存在有一个阈值,超过此值,材料的质量烧蚀率显著增加。

关键词:C/C复合材料,SHPB,冲击损伤,烧蚀性能

参考文献

[1]FITZER E.The future of carbon-carbon composites[J].Carbon,1987,25(2):163-190.

[2]李贺军.炭/炭复合材料[J].新型炭材料,2001,16(2):79-80.

[3]TANGS F,DENGJ Y,WANGS J,et al.Ablation behaviors of ultra-high temperature ceramic composites[J].Mater Sci Eng A,2007,465(1-2):1-7.

[4]WUNDER V,POPOVSKA N,WEGNER A,et al.Multilayer coatings on CFCcomposites for high-temperature applications[J].Surf Coat Technol,1998,100-101:329-332.

[5]AWASTHI S,WOODJ L.C/C composite materials for air craft brakes[J].Adv Ceram Mater,1988,3(5):449-451.

[6]KEISUKE F,EIICHI Y,TAKASHI A,et al.Effect of charac-teristics of materials on fracture behavior and modeling using graphite-related materials with a high-velocity steel sphere[J].Int J I mpact Eng,2003,28(9):985-999.

[7]KI MJ K,MACKAY D B,MAI Y W.Drop-weight i mpact dam-age tolerance of CFRP with rubbermodified epoxy matrix[J].Composites,1993,24(6):485-494.

[8]李玉龙,郭伟国,徐绯,等.Hopkinson压杆技术的推广应用[J].爆炸与冲击,2006,26(5):385-395.

C/C++教材建设 篇6

既然短的气体滞留时间有利于热解炭在孔隙更深处沉积, 许多研究者也研究了气体滞留时间为0.1s时, C/C复合材料的致密化行为以及热解炭基体组织结构。但是很少有研究者研究在更短的气体滞留时间下, C/C复合材料的致密化以及组织结构的变化。为此, 作者借鉴德国HÜTTINGER课题组张伟刚等人的经验, 对传统ICVI工艺进行了改进, 通过设计气体流场, 把气体滞留时间分别控制在0.01, 0.02, 0.03s更短的时间内, 以天然气为前驱体, 无载气的情况下对C/C复合材料的致密化和基体炭的组织结构进行了研究。

1 实验

1.1 实验设备及原料

实验设备为自行设计的新型化学气相渗透炉, 沉积室结构及样品放置方式如图1所示。沉积所用炭源前驱体为天然气, 其组成物的质量分数分别为CH4 96.1%, C2H6 0.45%, C3 0.07%, C4 0.03%, CO2 3.2%, H2/N2 微量, H2S <20mL/m3, 预制体采用2D针刺整体炭毡, 原始密度0.45g/cm3, 纤维体积分数25.7%, 冲裁成ϕ65mm×20mm 的圆柱形, 并经1600℃预处理后置于沉积室中渗透沉积。

1.2 气体滞留时间

滞留时间是指气体从完全充满到完全排出预制体周围空间所用时间, 该空间是指图1中预制体与石墨模具之间形成的圆筒状环形缝隙空间。其计算公式如下:

undefined

式中:τ为气体滞留时间, s;V为预制体外围空间体积, cm3;Q为气体体积流量, cm3/s;T0为室温即298K;T为沉积温度, K;P为绝对压力, kPa;P0为标准压力即101.3 kPa。

在进行致密化沉积前, 炉子绝对压力, 沉积温度已经确定, 依据式 (1) 气体滞留时间与体积流量成反比关系, 调节气体流量确定滞留时间。

1.3 实验方案

沉积温度1100℃, 总压为8~10kPa, 调节气体流量使气体滞留时间分别为0.01, 0.02, 0.03s, 致密化周期为150~200h, 每50h停炉降温并取出试样称重。

1.4 密度测量及组织分析

由于在预制体渗透沉积过程中气体渗透方向具有对称性, 故把不同工艺条件下制备的C/C复合材料, 沿半径方向取样, 如图2所示。经机械加工后, 测量体积、质量并计算其体积密度;之后经镶嵌、粗磨、细磨、抛光后, 置于LEICA DLMP偏光显微镜下观察组织结构, 采用JEOL JSM-6700F场发射扫描电子显微镜观察基体炭微观形貌。

2 结果与讨论

2.1 致密化

C/C复合材料的致密化过程实质就是多孔炭纤维预制体中孔隙的填充过程。为此, 研究2D C/C复合材料的ICVI致密化过程, 首先应了解2D针刺炭毡的孔隙结构。2D针刺炭毡预制体是由无纬布平面织物 (non-weft plane fabric) 与短切炭纤维网胎 (short-cut fiber web) 成0°和90°交替针刺成型, 这种预制体无纬布中的较长纤维呈X, Y方向规则排列, 短纤维网胎中的短切纤维呈无方向无规则排列。这样以来在2D针刺毡中通常存在两种空隙, 即位于纤维束之间以及不同炭纤维层之间的较大的宏观空隙, 同时还有存在于纤维束内和网胎中的微观孔隙。C/C复合材料最终密度的高低决定于孔隙的填充程度, 尤其是微观孔隙的填充程度。图3a, b分别为气体滞留时间为0.01, 0.02, 0.03s预制体质量增加率和表观密度随致密化时间的关系曲线。从图3可以看出, 前100h三种滞留时间预制体的致密化速率基本都呈线性增加的趋势, 但是增加的程度有所不同。滞留时间为0.01s时预制体质量增加率以及表观密度的增加介于另外两个滞留时间之间, 当气体滞留时间为0.02s时致密化速率最高。这是因为在1100℃, 总压为10kPa的工艺条件下, 气体滞留时间与气体体积流量成反比关系, 滞留时间为0.01s时气体流量最大, 但是气体在预制体边缘停留的时间最短, 大量的气态小分子来不及反应生成芳香族或多环芳香族碳氢化合物, 即被排出反应区。然而仍然有相当数量的气态小分子进入预制体内部, 并在高温的炭纤维表面脱氢成炭沉积在纤维表面。滞留时间为0.02s时气体流量减小为0.01s的1/2, 但是由于气体在预制体表面的停留时间相对要长一些, 使得气态小分子能够反应生成体积和质量稍大一点的大分子, 这些大一点的小分子能够进入预制体内部并在纤维表面脱氢成炭, 使得在相同的致密化时间内其致密化效率和表观密度高于0.01s时的情况。而气体滞留时间为0.03s时, 致密化效率最低, 这是因为在此气体流量是最小的, 虽然在这么长的滞留时间下, 气态分子更容易长大并脱氢成炭, 但是炭源气体供应不足, 使得沉积速率缓慢, 甚至需要250h以上才能获得较高的密度。

在致密化前期, 预制体具有较大的孔隙, 前驱体的输送通畅, 从而在不同滞留时间下, 预制体都具有较高的致密化速率;随着致密化时间的延长, 不同的气体滞留时间呈现不同的致密化趋势。最短的气体滞留时间在渗透后期具有较高的致密化速率, 并且最终C/C复合材料具有最高的表观密度, 达到1.75g/cm3以上。其原因是在渗透沉积的后期阶段, 主要是预制体中较小的微观孔隙的填充。当滞留时间较短时, 在预制体周围炭源前驱体都是些小分子, 这些小分子具有较高的扩散系数和分子平均自由程, 它们能够扩散进入预制体内部和更小的孔隙中, 最终使C/C复合材料的密度进一步提高。

图4为不同气体滞留时间下, 最终制备的C/C复合材料沿径向密度分布曲线。从曲线可以看出, 较短的滞留时间可以制备出具有较高平均体积密度, 密度梯度呈现内高外低特点的C/C复合材料。由于滞留时间较短, 减少了前驱体的预分解, 明显抑制了前驱体在预制体外表面的均相热解反应, 使得前驱体在进入预制体内部之前来不及大量裂解, 即使裂解也是生成分子质量和体积都较小的气态分子, 从而前驱体能够保持以较小的分子量状态向预制体内部传输, 进入孔隙内部再裂解, 脱氢成炭, 提高了前驱体的扩散速率。并且由于气体流速快, 裂解反应生成的H2更容易被排出, 从而加快致密化。此研究结果与HU Z.J.[6]等研究结果一致, 即较短的气体滞留时间提高了孔隙的填充效果, 制备的C/C复合材料密度表现为内高外低特点。

2.2 组织结构

制备C/C复合材料除了追求高速致密化外, 另外就是力求达到对组织结构的有效控制。由于高织构 (High Texture, HT) 或粗糙层 (Rough Laminar, RL) 热解炭基体具有石墨化程度高、导热性能好、摩擦磨损性能优等特点, 因此制备出具有纯粹HT/RL热解炭基体的C/C复合材料, 一直是C/C复合材料研究领域内的一个热点和难点。图5为不同滞留时间下, 经过不同时间致密化后C/C试样的偏光组织结构照片。从图5可以看出, 三种情况下, 在炭纤维表面均存在一薄层大约2μm的中织构热解炭层, 其消光角Ae约为13°, 之后完全为高织构热解炭, 其消光角Ae均大于22°, 高织构热解炭基体体积分数大于96%。对于图5a, b由于渗透时间一样, 密度接近, 外层高织构热解炭基体的长大程度基本一致, 接近10μm。而图5c是在滞留时间0.03s致密化200h后的组织形貌, 明显高织构热解炭基体要张得更大, 达到15μm左右, 但是仍然存在较大的孔隙。

(a) 0.01s; (b) 0.02s; (c) 0.03s

(a) 0.01s; (b) 0.02s; (c) 0.03s

图6为C/C复合材料典型织构高倍扫描电镜照片, 进一步证实了C/C复合材料具有双层热解炭基体。最近的研究结果认为, 高织构热解炭的形成取决于均相气相反应中形成的芳香族大分子碳氢化合物与线性小分子尤其是乙炔等碳氢化合物的比例, 即R值。当R值达到一个合适值时便生成高织构, 否则只能生成中织构或低织构[9,10]。

炭纤维表面形成的第一层MT织构, 其原因可能如下: (1) 在这三种气体滞留时间下, 前驱体在预制体周围停留的时间都较短, 进入预制体内部的多为线性小分子, 或质量和体积都较小的芳香分子, 这样以来生成热解炭的碳氢化合物中线性小分子占统治地位, 使得R偏离最优值范围, 从而生成MT织构; (2) 预制体在经预处理后, 位于纤维表面的一层黏胶并没有处理干净, 从而经高温炭化后形成了一层MT织构。对于MT的具体形成原因, 在今后将利用透射电镜 (TEM) 加以分析。随着致密化的进行, 预制体孔隙结构发生演变, 其A/V (表面积/气孔体积) 值迅速增大, 导致孔隙内部及微沉积区域气体分压发生变化, 致使R值处于最佳比值范围, 从而生成高织构粗糙层。对于沉积后期, 为什么高织构热解炭的沉积可以一直保持而没有随着A/V值的变化而发生改变, 可能是因为在此工艺条件下, 前驱体热解生成的混合气体有较好的气体组成, 致使R值在A/V值一直变化的情况下, 始终处于生成高织构热解炭的比值范围。

3 结论

(1) 以天然气为炭源, 无载气, 在较短的气体滞留时间 (0.01s) 下, 150h内可以制备出表观密度达1.75g/cm3以上, 密度梯度呈现内高外低特点的C/C复合材料。

(2) 制备的C/C复合材料组织结构为MT和HT的双层织构, MT只在纤维表面存在, 并且厚度小于2μm, 其他均为HT组织。

参考文献

[1]李贺军.炭/炭复合材料[J].新型炭材料, 2001, 16 (2) :79-80.

[2]GOLECKI I.Rapid vapor-phase densification of refractory com-posites[J].Materials Science and Engineering, 1997, 20 (2) :37-124.

[3]DELHAES P.Chemical vapor deposition and infiltration proces-ses of carbon materials[J].Carbon, 2002, 40 (5) :641-657.

[4]BENZINGER W, H TTINGER K J.Chemical vapor infiltrationof pyrocarbon-II the influence of increasing methane partial pres-sure at constant total pressure on infiltration rate and degree ofpore filling[J].Carbon, 1998, 36 (7-8) :1033-1042.

[5]BENZINGER W, H TTINGER K J.Chemical vapor infiltrationof pyrocarbon-III the influence of increasing methane partial pres-sure at increasing total pressure on infiltration rate and degree ofpore filling[J].Carbon, 1998, 37 (2) :181-193.

[6]HU Z J, SCHOCH G, H TTINGER K J.Chemistry and kinet-ics of chemical vapor infiltration of pyrocarbon:VII:infiltrationof capillaries of equal size[J].Carbon, 2000, 38 (7) :1059-1065.

[7]ZHANG W G, HU Z J, H TTINGER K J.Chemical vapor in-filtration of carbon fiber felt:optimization of densification and car-bon microstructure[J].Carbon, 2002, 40 (7) :2529-2545.

[8]ZHANG W G, H TTINGER K J.Densification of a 2D carbonfiber preform by isothermal, isobaric CVI:kinetics and carbonmicrostructure[J].Carbon, 2003, 41 (12) :2325-2337.

[9]XU Guo-zhong, LI He-jun, BAI Rui-cheng, et al.Influence ofthe matrix texture on the fracture behavior of 2D carbon/carboncomposites[J].Materials Science and Engineering A, 2008, 478 (1-2) :319-323.

C/C++教材建设 篇7

本文将首先介绍ACM国际大学生程序设计竞赛的平台模式, 并在借鉴ACM竞赛平台模式基础上研究开发适合于C/C++课程教学中使用的在线编译教学系统。

二、ACM竞赛平台简介

ACM国际大学生程序设计竞赛是由国际计算机学界著名的ACM学会主办, 是目前世界上规模最大、水平最高的国际大学生程序竞赛之一。ACM竞赛平台采用的B/S结构, 用户可以通过网页浏览器提交程序源代码, 而服务器接收到源代码后进行在线编译, 并将相应的编译执行结果立即返回给用户。

由于ACM竞赛平台基于B/S结构, 具有用户可以在任何时间与地点通过互联网使用网页浏览器来使用该平台, 可以方便地在线出题和发布信息, 系统自动对在线提交的源程序判断其正确性并给出相应结果, 使得ACM竞赛平台的模式同样在平常的C/C++教学工作中有着极好的应用前景。

三、系统设计

为了使ACM竞赛平台的模式更加适应于日常的C/C++教学工作中, 在借鉴ACM竞赛平台的模式的基础上, 对在线编译教学系统进行了设计与规划, 重点是在浏览器中实现C/C++源代码的提交、修改, 并获得编译与运行的结果, 不需要在网页和本机的开发环境中切换, 提高学生使用的方便性和更好的用户体验。主要以下功能:

在线编译功能:用户提交的源代码, 在服务器端进行编译

结果反馈功能:将程序编译和运行

在线调试代码功能:根据反馈的结果, 用户直接在网页中进行代码的修改,

统一管理功能:将用户提交的程序, 运行成绩等信息统一存储到数据库中, 实现用户对已经提交的程序的修改与查询等管理功能

四、技术实现

考虑到在C/C++教学多用微软的Visual Studio开发环境, 所以本系统在Windows平台下, 采用APACHE服务器、PHP语言和My SQL数据库进行开发。以下对系统中主要功能实现的方法与技术进行描述:

在线编译功能:此功能是在线编译教学系统重要功能, 此功能的实现通过调用微软的Visual Studio开发环境中的cl.exe文件, 对提交的C/C++源程序进行编译。在调用cl.exe进行命令行运行时, 需要使用-GX选项, 以在命令行方式下对源程序进行编译。

结果反馈功能:为了编译和运行程序, 并得到反馈的编译或运行结果, 使用PHP中提供的passthru () 函数对外部程序进行调用。passthru () 函数在运行外部程序的同时, 可以得到命令行试调用外部程序运行的输出结果, 并在反馈给浏览器, 以在用户网页界面中直观的看到编译或程序运行的结果。

在线调试代码功能:为了使用户在使用中不需要在网页和本机的开发环境中切换, 提供良好的使用方便性和舒适的使用体验, 系统在设计实现中采用了异步Java Script和XML (AJAX) 技术。Ajax是使用客户端脚本与Web服务器交换数据的Web应用开发方法, 使用Ajax, 实现了接近本地桌面应用的直接、高可用、更丰富、更动态的Web用户界面。用户在网页中点击反馈的编译信息, 可以在同一网页中快速定位到出错的位置, 极大方便了用户的在线调试代码。

统一管理功能:使用My SQL数据库, 将用户提交的程序, 运行成绩等信息进行存储到数据库中, 极大的方便用户对已经提交的程序的修改与查询等, 教师也可以进行题目管理及成绩统计与查询等管理工作。

五、功能界面

在线编译教学系统的主要功能页面中分为两个区域。

题目选择与显示区域:此区域主要供用户选择相应的作业及题目, 以进行编程调试工作。

源代码编辑调试区域:在此区域中用户可以在答题文本框中输入和编辑源程序代码, 并且可以将源程序保存到数据库中, 也可以对源程序进行编译及运行, 编译和运行的结果会在输出窗口中显示。当程序编译出错时, 点击输出文本框中的相应信息, 可以在答题文本框中快速定位到出错的代码行处。

六、总结

本系统借鉴了ACM竞赛平台, 在Windows环境下, 采用APACHE服务器、PHP语言和My SQL数据库设计开发了适合于C/C++课程教学的在线编译教学系统。

在线编译教学系统采用了AJAX技术提供了良好的人机交互界面, 主要有:在同一网页页面中实现源程序的编辑与调试;可以根据编译结果, 在网页中进行快速的错误代码行的定位;用户的计算机上无需安装相应的编译软件等特点。此系统在实际使用过程中取得了良好的教学效果。

参考文献

[1]何莉辉、梁沧:《基于ACM国际大学生程序设计竞赛的学习模式》, 《经济与文化》, 2008年。

上一篇:地方政府融资下一篇:汽车检测