C++模板元编程1

C++模板元编程1
C++模板元编程1

第1章概述

你可以将这一章看成是本书后续内容的热身。在本章中,你将有机会小试牛刀,试一试手头的编译器,大致检阅一些基本概念和术语。至本章结束,你至少应该对本书所要讲述的内容有大致的印象,并且(我们希望)届时你将会渴望学习更多的知识。

1.1 起步走

关于模板元程序(template metaprogram)的一个美妙之处在于,它们与传统的优秀系统一样具有一个共同的特性,即:一旦一个元程序(metaprogram)写好了,只要它能够工作,你就大可以放心使用,而不必关心其底层工作机制究竟是怎样的。

为了建立你的信心,让我们以一个C++小程序开始,该程序只是简单地使用了一个采用模板元编程实现的设施:

#include "libs/mpl/book/chapter1/binary.hpp"

#include

int main()

{

std::cout << binary<101010>::value << std::endl;

return 0;

}

即使你一向擅长二进制算术,无需真正运行这个程序即可口算出结果,我们还是建议你不要怕麻烦,尝试编译和运行这个例子。这除了有助于建立信心外,还是一个很好的测试,看看你的编译器能否处理本书展示的代码。该程序应该向标准输出打印出二进制值101010的十进制值:

42

1.2 元程序的概念

如果按字面剖析单词“metaprogram”,它的含义就是“a program about a program”,译成中文,意思就是“一个关于另一个程序的程序”。一个不那么有节奏感的说法是,“a metaprogram is a

program that manipulates code”,即“元程序就是用于操纵代码的程序”。听起来这个概念好像有点怪怪的,但其实你可能早已熟悉这方面的一些“怪兽”了。你手头的C++编译器就是一个例子:它操纵C++代码来生成汇编语言(assembly language)或机器码(machine code)。

像YACC[Joh79]这样的解析器生成器(parser generators )是另外一类程序操纵程序(program-manipulating program )。

YACC 的输入是一种高阶解析器描述(parser description ),这种描述依据文法规则(grammar rule )编写,并且附加有采用封闭的大括号括起来的动作(action )。例如,为了采用通常的优先规则来解析和评估算术表达式,我们可以给YACC 如下的文法描述(grammar description ):

expression : term

| expression '+' term { $$ = $1 + $3; }

| expression '-' term { $$ = $1 - $3; }

;

term : factor

| term '*' factor { $$ = $1 * $3; }

| term '/' factor { $$ = $1 / $3; }

;

factor : INTEGER

| group

;

group : '(' expression ')'

;

作为响应,YACC 将会生成一个C/C++源文件,其中包含有一个yyparse

函数(以及一些别的东西),我们可以调用它以便根据文法来解析文本并执行适当的动作:

int main(){

extern int yyparse();

return yyparse();

}

YACC 的用户大多在解析器设计领域操作,因此我们将YACC 的输入语言称为该系统的领域语言(domain language )。因为用户程序的其余部分通常需要一个通用的编程系统,并且必须和生成的解析器(generated parser )互动,所以YACC 将领域语言翻译成宿主语言(host language )—C 语言,然后用户编译生成的语言代码,并将其与所编写的其他部分代码进行链接(link )。如此看来,领域语言经历了两个翻译(或转换,translation )步骤,用户总是可以很清醒地意识到它与程序其余部分之间的分界。

2第1章

1.3 在宿主语言中进行元编程

YACC 是一个翻译器(translator )的例子,即是这样的一个元程序:其领域语言不同于其宿主语言。在像Scheme[SS75]这样的语言中,还存在一种形式更有意思的元编程。Scheme 元编程程序员(metaprogrammer )将他的领域语言定义为Scheme 自身的一个合法的子集,元程序在与“处理用户程序的其余部分”相同的翻译步骤中执行。程序员在普通编程、元编程以及在领域语言中编程之间穿梭往来,但他们通常不会意识到这个转换过程,并且能够将多个领域无缝地联合于同一个系统中。

令人惊讶的是,如果你拥有一个C++编译器,以上所述的元编程威力恰好唾手可得。本书的其余部分将讲解如何释放这种威力,并且展示如何以及何时去使用它。

1.4 在C++中进行元编程

在C++中,几乎是在不经意中发现模板机制为原生语言元编程(native language metaprogramming )提供了丰富的设施([Unruh94], [Veld95b])。在这一节中,我们将探索元编程的基本机制以及在C++中进行元编程的一些惯用法。

1.4.1 数值计算

最早的C++元程序在编译期执行整数计算,其中最早的元程序之一是Erwin Unruh 在一次C++

标准委员会会议上所展示的。那实际上是一段不合法的代码,在其编译错误信息中含有一系列计算出来的质数值!

由于不合法的代码很难有效地应用于规模较大的系统中,因此让我们来考察一个稍微实际一点的应用。下面的元程序(这是我们上面用于测试编译器的那个小例子的“心脏”代码)将无符号的十进制数值转换为等价的二进制值,允许我们用一种易辨识的形式来表示二进制常数:template

struct binary

{

static unsigned const value

= binary::value * 2

// 将高位位移向低位

+ N%10;

};

template <>

// 特化struct binary<0>

// 终结递归{static unsigned const value = 0;};unsigned const one = binary<1>::value;unsigned const three = binary<11>::value;

unsigned const five = binary<101>::value;

概述3

译,台湾峰信息股份有限公司印行)第

4第1章

unsigned const seven = binary<111>::value;

unsigned const nine = binary<1001>::value;

如果你有这样的疑问:“程序在哪儿啊?”,那么请思考一下,当我们访问binary的嵌套成员::value时发生了什么。binary template针对一个较小的数N进行实例化,直到N变为0,并且该特化版被用做终结条件。这个处理过程有我们熟知的递归函数调用的味道,那么程序究竟是什么呢?毕竟这只是一个类模板而已?是这样的,本质上,这里编译器被用于解释(interpret)我们这个小型元程序。

错误检查

这儿没有采取任何措施来阻止用户向binary传递一个诸如678之类的值,即它的十进制表示并不是一个有效的二进制值。所得结果有几分奇怪(其值为6x22 + 7x21 + 8x20)。毋庸置疑,诸如678这样的输入很可能意味着用户的逻辑中出现了臭虫。在第3章,我们将向你展示如何确保只有当N的十进制表示仅由0和1构成时,才可以编译binary::value。

由于C++语言对编译期计算和运行期计算的表达方式强加了一些区别,因此,元程序看起来不同于它们的运行期对应物。如同在Scheme中一样,C++元编程程序员采用“和编写普通程序相同的”语言来编写代码,但是在C++中,程序员只能使用完整语言的一个编译期子集进行元编程。不妨将下面这个直观的运行期版本的binary和先前的例子比较一下:

unsigned binary(unsigned long N)

{

return N == 0 ? 0 : N%10 + 2 * binary(N/10);

}

运行期版本和编译期版本之间一个关键的不同在于终结条件的处理方式。我们的meta-binary(元程序版本的binary)使用模板特化(template specialization)来描述当N为0时干些啥。“存在用做终结条件的模板特化”是几乎所有C++ 元程序所具有的共性,尽管在某些情形下,它们隐藏在一个元编程程序库接口的背后。

下面这个使用for循环来取代递归的binary版本,凸现了存在于运行期C++和编译期C++之间的另一个重要区别:

unsigned binary(unsigned long N)

{

unsigned result = 0;

for (unsigned bit = 0x1; N; N /= 10, bit <<= 1)

{

if (N%10)

result += bit;

}

return result;

}

尽管这个版本比采用递归的那个版本冗长,然而很多C++程序员却感觉这个版本更舒服,原因并不仅在于运行期的迭代(iteration)有时比递归更高效,还在于这个版本看上去更加直观。

C++语言的编译期组成部分通常称为“纯函数性语言(pure functional language )”,因为它和Haskell 这样的语言具有一个共同的特性:(元)数据是不可变的(常性的,immutable ),并且(元)函数没有副作用(side effect )。结果导致编译期C++没有任何与用于运行期C++中的非常量变量相对应的东西。由于你无法在不检查其终结条件中一些可变的(mutable )东西的状态的情况下编写一个(有限)循环,因此在编译期无法实现迭代(iteration )。因此,对于C++ 元程序来说,递归(recursion )是惯用的手段。

1.4.2 类型计算

远比在编译期进行数值计算的能力重要得多的是C++“对类型进行计算(compute with types )”的能力。事实上,类型计算(type computation )将在本书余下内容中占据支配性的地位,我们会在下一章的第一节就给出这方面的例子。在我们检视后续内容期间,你可能会把模板元编程想象成“对类型进行计算”。

尽管你可能必须阅读第2章才能了解有关类型计算(type computation )的细节知识,然而在此我们希望给你一个有关其威力的初步认知。还记得我们的YACC 表达式求值器(expression evaluator )吗?事实证明我们不需要使用一个翻译器(translator )来获得那种威力和便利。利用来自Boost Spirit 程序库的适当的包覆代码(surrounding code ),以下合法的C++代码就可以发挥等价的功能:

expr =

( term[expr.val = _1] >> '+' >> expr[expr.val += _1] )

| ( term[expr.val = _1] >> '-' >> expr[expr.val -= _1] )

| term[expr.val = _1]

;

term =

( factor[term.val = _1] >> '*' >> term[term.val *= _1] )

| ( factor[term.val = _1] >> '/' >> term[term.val /= _1] )

| factor[term.val = _1]

;

factor =

integer[factor.val = _1]

| ( '(' >> expr[factor.val = _1] >> ')' )

;

每一个赋值都存储有一个函数对象(function object ),分别用于对其右侧的文法(grammar )进行解析和评估。当被调用时,每一个被存储的函数对象的行为完全由“用于构造它的表达式”的类型所决定,而每一个表达式的类型则由一个关联有形形色色运算符的元程序进行计算的。

就像YACC 一样,Spirit 程序库是一个从文法规范(grammar specification )生成解析器(parser )的元程序。不同于YACC 的是,Spirit 采用C++自身的一个子集来定义其领域语言(domain language )。如果此刻你还不明白是如何做到这一点的,不必忧心忡忡,到读完这本书时,你就会恍然大悟。

概述

5

1.5 为何进行元编程

那么,元编程有什么好处呢?毫无疑问,对于我们这里讨论的同类问题来说,还存在更简单的解决方案。让我们看看另外两种途径,考察当被应用于对二进制数值的解释(interpretation )和解析器(parser )的构造时它们是如何运作的。

1.5.1 替代方案1:运行期计算

最直截了当的方案是在运行期而非编译期执行计算。例如,我们可以使用早先展示的binary 函数实现之一,也可以使用一个用于在运行期解释(interpret )输入文法(input grammar )的解析系统(parsing system )(解析操作发生于当我们第一次叫它去解析时)。

采用元程序最显而易见的理由是,通过在结果所得程序启动之前做尽可能多的工作,我们可以获得速度更快的程序。当一个文法(grammar )被编译时,YACC 执行可观的解析表(parse table )生成和优化步骤,如果在运行期做这些事,将会显著地降低程序的整体性能。类似地,由于binary 在编译期做工作,其::value 是一个编译期常数,编译器可以将其直接编码(encode )到目的码(object code )中,因而当需要使用它时可以节省内存查找时间。

使用元程序的一个更微妙但也更重要的理由是,这种做法可以使得计算结果和目标语言进行更深入地互动。例如,C++数组的大小只能利用binary::value 这样的编译期常数合法地进行指定,而不能通过一个运行期函数返回值进行指定。在YACC 文法中用大括号括起来的动作可以包含任意C/C++代码—这些代码作为生成的解析器的一部分而被执行。只有当动作(actions )处理于文法编译期间并传递给目标C/C++编译器时,才有可能做到这一点。

1.5.2 替代方案2:用户分析

不是在运行期或编译期进行计算,我们也可以手动做这件事。毕竟,将二进制数值转换为十六进制值

从而使它们可被直接用做C++字面常数,是很常见的编程实践,何况YACC 和Boost.Spirit 程序库所执行的将文法描述转换为一个解析器(parser )的翻译步骤也是众所周知的。

如果替代的是编写一个只被使用一次的元程序,我们就可以辩称用户分析(user analysis

)更加方便:手工转换一个二进制数值要比编写一个正确的元程序做这件事当然要容易得多。然而在大多数情况下,这种做法的方便性远不及元程序的方式。一旦一个元程序被写好了,整个C++社群的其他程序员均可受惠于它所带来的方便性。

不管一个元程序被使用多少次,它总是可以让用户编写出更富有表达力的代码,因为用户可以以相应于他的心智模型(mental model )的形式来指定结果。在一个个体位(bit )值有意义的环境(context )中,写binary<101010>::value 要比42或传统的0x2a 更有意义。类似地,手写的解析器的C 源代码通常会使其文法元素之间的逻辑关系变得模糊不清、晦涩难懂。

最后,由于人类易犯错误,而一个元程序的逻辑只需要编写一次,结果所得程序更有可能

6第1章

正确且维护性更好。转换二进制值是一个如此平常的任务,以至于人们往往太不专心乃至犯错。相对而言,手工编写解析表(parse table )则需要付出过多的注意力(任何做过这件事的人都可以证实这一点)。防止犯错误是使用一个像YACC 这样的解析器生成器(parser generator )的充分理由。

1.5.3 为何进行C++ 元编程

在像C++这样的语言中,领域语言(domain language )不过是程序其余部分所使用的语言的一个子集,在这种情形下,元编程甚至具有更大的威力和方便性:

? 用户可以径自使用领域语言,而无需学习一种异质的语法,而且也不会打断原先代码的流程。

? 将元程序与其他代码、尤其是其他元程序进行接口连接,会变得平滑得多。

? 无需附加的生成(build )步骤(就像YACC 所强加的那样)。

在传统编程中,程序员常常要努力获得表达性、正确性和效率之间的恰当的平衡。元编程通常允许我们消除这种典型的紧张和压力,这是通过将表达性和正确性所需的计算从运行期转移至编译期而达成的。

1.6 何时进行元编程

你已经看到一些关于为何需要模板元编程的例子,你也已经一瞥如何进行模板元编程,但我们还没有讨论何时适合进行模板元编程。然而,我们其实已经接触了与它使用有关的大部分准则。作为一个指导方针,如果以下条件中有任何三个适合你,可能就适宜采用一个元编程解决方案:

? 你希望代码根据问题领域的抽象进行表达。例如,你可能需要将一个解析器(parser )表达成这样的东西:它看起来像一个正式的文法(formal grammar )而不是充满数值的表(table )或子例程(subroutine )的集合。你希望数组算术使用“针对矩阵或向量对象”的运算符记号编写而成,而不是根据对一系列数值的循环编写而成。

? 如果不使用模板元编程的话,你需要编写大量的刻板的实现代码。

? 你需要基于组件的类型参数的属性来选择组件实现。

? 你希望利用C++中泛型编程(generic programming )的极富价值的特性,例如静态类型检查(static type checking )和行为定制(behavioral customization )能力,同时无需付出效率上的代价。

? 你希望全部在C++语言内做这件事,而无需使用第三方的工具或定制的源代码生成器(source code generator )。

1.7 为何需要元编程程序库

不是白手起家构建元程序,我们将与Boost 元编程库(MPL )提供的高阶设施协作。即使你没有选择这本书来探索MPL ,我们还是认为你会发现花在学习MPL 上的投资是值得的,因为它可以为你的日常编程工作带来诸多好处:

概述

7

1. 质量(Quality )。大多数使用模板元编程组件的程序员将其看做“应用于一些更伟大目的”的实现细节。这种看法完全正确。比较而言,MPL 作者将开发有用的、高质量的工具和惯用法作为他们的中心使命。一般来讲,Boost 元编程库中的组件要比那些为了别的目标而开发的组件灵活性更大,且有着更好的实现。此外,你还可以期望从将来发布的升级版中获得更多的优化和改善。

2. 复用(Reuse )。所有程序库都将代码封装为可复用的组件。更重要的是,一个设计良好的泛型程序库建立了一个有关概念和惯用法的框架(framework ),此框架为解决问题提供了一个可复用的心智模型(reusable mental model )。就像C++ Standard Template Library 给与我们迭代器(iterators )和函数对象(function object )协议一样,Boost 元编程库提供了类型迭代器(type iterator )和元函数协议。一个经过深思熟虑的惯用法框架,使得元编程程序员可以集中于自己的设计决策,专注于手头的任务。

3. 移植性(Portability )。一个优秀的程序库可以“掩饰”平台有别的丑陋的现实。尽管在理论上,任何C++ 元程序都不必关心这方面的问题,然而在实践中,甚至在C++被标准化六年后,各家编译器对模板的支持仍然不一致。对此你不应感到意外,因为模板是C++语言力所能及的最复杂的特性,另一方面,这一事实也成就了C++ 元编程的威力。

4. 乐趣(Fun )。一遍遍地重复相同的刻板代码是枯燥乏味的。将高级组件迅速组装成可读性好的、优雅的设计才是有趣的事情!MPL 通过消除对最常反复使用的元编程模式的需要,减少了这种无趣的行为。尤其是借助MPL ,我们可以容易且优雅地避免编写作为终结条件的模板特化版本(template specializations )和显式递归代码。

5. 生产率(Productivity )。除了个人满足外,我们项目的健康性仰仗于充满乐趣的编程。当我们不再有乐趣时就会感到身心疲倦,效率低下,马虎随便。你知道,充满臭虫的代码甚至比慢慢腾腾地编写代码本身要付出更高的代价。

正如你看到的那样,Boost 元编程库是出于同样的实践考虑所激发的,即成为任何其他程序库的开发基础。我们认为它的出现是一个征兆:模板元编程终将离开高深莫测的王国,并在普通C++程序员的日常必备技能中寻觅一席之地。

最后,我想特别强调一下上面所言的第四个条款:MPL 不但使得元编程切实可行且易于使用,而且与之过从亦其乐无穷。在此祝愿诸位就像我们在使用和开发它的过程中享受快乐一样,在学习它的过程中也其乐融融。8第1

C语言程序设计大作业报告模板

《C语言程序设计》大作业报告 1.目的 掌握所学C语言程序设计的方法,熟悉所学语言的开发环境及调试过程,熟悉所学C语言中的数据类型,数据结构、语句结构、运算方法,巩固和加深对理论课中知识的理解,提高学生对所学知识的综合运用能力。通过综合设计要求达到下列基本技能: 1.培养查阅参考资料、手册的自学能力,通过独立思考深入钻研问题,学会自己分析、解决问题。 2.通过对所选题目方案分析比较,确立方案,编制与调试程序,初步掌握程序设计的方法,能熟练调试程序。 2.作业内容

熟练掌握所学语言的基本知识:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);大程序的功能分解方法(即函数的使用)等。进一步掌握各种函数的应用等。 3.要求: 1.要求每个同学都要认真对待,积极参与。 2.独立完成,不能抄袭。 3.课程设计结束时每位同学必须完成《大作业报告册》,其中包含设计源 代码和设计思路。 4.不符合要求的程序、设计报告、抄袭的设计报告或源程序代码、在设 计中完全未参与的将作不及格处理。 5.统一格式,A4打印,按时提交。 4.题目:设计要求:编写一个程序,求3x4数组的转置矩阵。要求在main函数里面读数,在change函数里面把矩阵转置。 5.程序设计 设计思路:1是先定义两个数组,一个是a[3][4],另一个是b[4][3]。2是将随便输入的12个数输入到a[3][4]。3是在change函数中将a[3][4]中值通过for循环的镶嵌将数组a[3][4]的值赋值给数组b[4][3]。4在主函数中将数组b[4][3]通过for循环的嵌套输出。 代码

程序设计报告模板

北京化工大学计算机科学与技术专业2014程序设计实训报告 题目:个人记账软件 专业:计算机科学与技术 班级:计科1305 指导教师:江志英

2014程序设计实训任务书

目录 2014程序设计实训任务书...................................... 错误!未定义书签。目录..................................................... 错误!未定义书签。第一章需求分析.............................................. 错误!未定义书签。 引言............................................... 错误!未定义书签。 任务概述........................................... 错误!未定义书签。 数据描述........................................... 错误!未定义书签。 功能需求........................................... 错误!未定义书签。 运行需求........................................... 错误!未定义书签。 任务计划........................................... 错误!未定义书签。第二章概要设计.............................................. 错误!未定义书签。 总体设计........................................... 错误!未定义书签。 面向对象设计....................................... 错误!未定义书签。 运行界面设计....................................... 错误!未定义书签。第三章详细设计.............................................. 错误!未定义书签。 ........................................................ 错误!未定义书签。第四章测试分析............................................. 错误!未定义书签。第五章用户手册(可选)..................................... 错误!未定义书签。第六章课程设计总结.......................................... 错误!未定义书签。附录:程序代码(仅电子版需要、纸质版不需要)................. 错误!未定义书签。

高级语言程序设计实验C

高级语言程序设计实验 C Coca-cola standardization office【ZZ5AB-ZZSYT-ZZ2C-ZZ682T-ZZT18】

陕西理工大学 《高级语言程序设计(C)》 实验报告 院系: 班级: 学号: 姓名:

目录

实验一:C开发环境与顺序结构程序设计 1.实验目的: (1) 了解集成开发环境VC++的使用方法,理解相关命令的含义,掌握编辑、编译、连接以及运行调试的方法,掌握程序的基本结构,掌握输入输出的方式。 (2) 掌握程序设计的基本要素中的数据类型、变量、运算符以及表达式的运用。 (3) 学会正确使用逻辑运算符和逻辑表达式以及关系运算符与关系表达式,掌握在程序设计中灵活使用顺序结构。 2.实验环境: (1) 硬件环境 CPU: Inter Pentium(R)4 CPU 以上 内存:2GByte (2) 软件环境 操作系统:Microsoft Windows 7 编译系统:Microsoft Visual C++ 3.实验步骤: 按如图所示流程进行实验内容的 调试。 (1) 在XP操作系统中,启动VC++ 编译环境; (2) 在VC++编译界面输入C源程 序; (3) 选择编译、组建、执行命令 进行编译、链接和运行,并记录 实验数据; (4) 按以上方法依次输入其他源 程序并调试、运行和记录实验数 据。

4.实验内容: 输入并运行下列程序,查看程序运行的结果。 #include<> void main() { printf(“* * * * * * * * * *\n”); printf(“Programing in c A Labrtry Maual\n”); printf(“* * * *\n”); printf(“*\n”); } 查看程序运行的结果 #include<> void main() { int i,j,m,n; i=8; j=10; m=++i; n=j--; printf(“%d,%d,%d,%d\n”,i,j,m,n); } 找出下列程序中的错误,改正后写出程序运行结果. #include<> void main() { Int x,y=z=5,aver; x=7; AVER=(x+y+z)/3 printf(“AVER=%d\n”,aver); }

程序设计实践报告模板

面向对象程序设计实践(Project 2) 报告 题目: 专业软件工程(NIIT) 学生姓名 班级学号 指导教师杨健 指导单位计算机学院/软件学院 日期

评分细则 评分项优秀良好中等差遵守机房规章制度 上机时的表现 学习态度 程序准备情况 程序设计能力 团队合作精神 课题功能实现情况 算法设计合理性 用户界面设计 报告书写认真程度 内容详实程度 文字表达熟练程度 回答问题准确度 简短 评语教师签名: 年月日 评 分 等 级 备 注 评分等级有五种:优秀、良好、中等、及格、不及格

Title(Here,please write the name of your Project) (题目格式:宋体,3号,加粗,居中对齐) 一、D escription and Requirement(格式:Times New Roman,4号,加粗, 两端对齐) (正文格式:宋体(中文) Times New Roman(英文),小4号,不加粗,两端对齐, 1.5倍行距) 二、Requirement Analysis(格式:Times New Roman,4号,加粗,两端对齐) 在该部分中叙述系统的功能,由此得到相应的模块,并分析需要什么的数据,由此可以指导数据库的设计。 (正文格式:宋体(中文)Times New Roman(英文),小4号,不加粗,两端对齐,1.5倍行距) 三、High level design(格式:Times New Roman,4号,加粗,两端对齐) 在此说明每个部分的算法设计说明(可以是描述算法的流程图),每个程序中使用的存储结构设计说明(如果指定存储结构请写出该存储结构的定义,如果用面向对象的方法,应该给出类中成员变量和成员函数原型声明),数据库设计的说明(给出数据库的结构,包括有哪些表,每个表有什么字段,分别存储什么样的数据) (正文格式:宋体(中文)Times New Roman(英文),小4号,不加粗,两端对齐, 1.5倍行距) 四、Low level design格式:Times New Roman,4号,加粗,两端对齐) 各个算法实现的源程序(可以是一组源程序,每个功能模块采用不同的函数实现),源程序要按照写程序的规则来编写。要结构清晰,重点函数的重点变量,重点功能部分要加上清晰的程序注释。 注意:不要粘贴全部程序,只要把关键算法的程序粘贴过来就可以了。 (正文格式:宋体(中文)Times New Roman(英文),小4号,不加粗,两端对齐, 1.5倍行距) 五、Tested data and result analysis(格式:Times New Roman,4号,加粗,

高级语言程序设计C

高级语言程序设计(C)模拟题四 一、选择题(本题共20道小题,每题2分,共40分。) 1.以下有4组用户标识符,其中合法的一组是()。 A) For -sub Case B) 4d DO Size C) f2_G3 IF abc D) WORD void define 答案:C 解析:标识符的命名规则:由字母、数字、下划线组成,第一个字符必须是字母或者下划线,标示符的命名不能同C语言的关键字相同。 2. 若有下面的程序片段: int a[12]={0}, *p[3], **pp, i; for(i=0; i<3; i++) p[i]=&a[i*4]; pp=p; 则对数组元素的错误引用是 A) pp[0][1] B) a[10] C) p[3][1] D) *(*(p+2)+2) 答案:C 解析:A. pp[0]表示p[0]的地址,而pp[0]也为一个指针,它和pp用法相同,故pp[0][1]则表示a[1]的地址,正确。 B.正确。 C.数组p的最大下标为2,错误。 D. *(*(p+2)+2)表示a[10],正确。 3. 若要求在if后一对圆括号中表示a不等于0的关系,则能正确表示这一关系的表达式为 A) a<>0 B) !a C) a=0 D) a 答案:D 解析:对if(a)而言,如果a的值不为0,则if语句括号中表达式的值不为0,if为真,选D。 4. 若已定义: int a[ ]={0,1,2,3,4,5,6,7,8,9], *p=a,i; 其中0≤i≤9, 则对a数组元素不正确的引用上 A) a[p-a] B) *(&a[i]) C) p[i] D) a[10] 答案:D 解析: A. a[p-a]表示a[0],正确。 B. *(&a[i])表示a[i],正确。 C. p[i]表示&a[i],正确。 D. a数组最大下标为9,错误。

JAVAWEB程序设计报告模板

南京晓庄学院《JAVA WEB程序设计》 课程报告 题目: 学生信息管理系统 姓名: 沈莉莉 学号: 13131320 班级: 13计算机转本1班 完成时间2016年6月23号 成绩:

数学与信息技术学院

目录 1.系统需求分析 (1) 2.相关技术与原理介绍 (1) 3.系统分析与设计 (2) 3.1 系统功能分析 (2) 3.2 系统结构分析 (2) 3.3 数据库设计 (3) 4.系统实现 (4) 4.1 登录模块实现 (4) 4.2 教师模块实现 (6) 4.3 成绩模块实现 (7) 4.4 学生模块实现 (8) 5.总结与体会 (11) 5.1 工作总结 (11) 5.2 改进设想 (11)

1.系统需求分析 (对系统的功能需求进行分析) 在本次的实验中主要用到了Eclipse、Mysql、Tomcat等软件。用JSP和JAVABEAN 编写代码,编写完的低吗主要用来实现教师、学生、成绩以及课程的查询、修改、删除等操作。 2.相关技术与原理介绍 (对Tomcat、MySQL、JSP、JDBC、JAVABEAN等技术进行简要介绍) 2.1、Tomcat简介 Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问童虎不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个初学者来说,当一台机器上配置好Apache服务器,可利用它响应HTML(标通用标记语言下的一个应用)页面访问的请求。实际上Tomcat部分是Apache服务器的扩展,但它是独立运行的,所以当你圆形tomcat时,它实际上是作为一个与Apache独立的进程单独运行。 2.2、MySQL的简介 MySQL是一个小型关系数据库管理系统,它的主要特性如下: (1)支持多线程,充分利用CPU资源。 (2)一共TCP/IP、ODBC和JDBC等多种数据库连接途径。 (3)使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。 2.3、JSP的简介 JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。 2.4、JDBC的简介 JDBC 扩展了Java 的功能。例如,用Java 和JDBC API 可以发布含有applet 的网页,而该applet 使用的信息可能来自远程数据库。企业也可以用JDBC 通过Intranet 将所有职员连到

程序设计类模板

专科毕业实习报告 (毕业论文/设计形式用) 课题名称中小型企业无线网络的设计与实现 学院信息工程学院 专业计算机应用技术 班级12专计算机(1)班 姓名2012135373 指导老师邹群 江西科技学院教务处

毕业实习任务书 学院信息工程学院专业计算机网络技术年级2009级 班级12专计算机(1)班姓名柯志红起止日期2014.9-2014.10 题目中小型企业无线网络的设计与实现 1.毕业实习任务及要求(根据题目性质对学生提出具体要求) 1、实现酒店信息管理功能:酒店查询,酒店信息添加、删除和修改,房间信息添加、删除和修改。 2、实现订单信息管理功能:订单信息添加、删除、修改和查询,酒店住房信息浏览。 3、实现业务信息管理功能:员工添加、删除和修改,员工查询,员工业务统计。 4、实现用户信息管理功能:用户添加、删除和修改,用户权限设置,密码修改。 2.毕业实习的原始资料及依据(包括做调研的背景,研究条件、应用环境等) 1、调研背景:近年来,随着酒店的经营规模的进一步的加大,人员与酒店资源不断的增加,给酒店的管理带来了诸多的问题,比如客户预订工作的展开,传统的管理模式效率低下,占用了大量的人力资源,已经不适合当代酒店预订管理的需求。经过分析其主要存在的缺陷有这么几点:全人工管理,效率低下、客户对酒店的信息不过了解,要发展新客户困难、数据查询不方便,耗费人力。 2、研究条件:Visual Basic 6.0开发平台,数据库采用Microsoft Access 2010。 3.主要参考资料、文献 [1]萨师煊,王珊.数据库系统概论[M].北京:高等教育出版社,2000. [2]龚沛增.Visual Basic 程序设计教程[M].北京:清华大学出版社,2008. [3]李长林,张丽华,王红.Visual Basic数据库应用系统开发从基础到实践[M].北京:电子工业出版社,2008. [4]卢镇波,李青.Visual Basic编程实例入门与提高[M].北京:电子工业出版社,2008.

《高级语言程序设计》复习题及答案

一、选择题 1.以下叙述正确的是( ): A)在C程序中,main函数必须位于程序的最前面 B) C程序的每行只能写一条语句 C) C语言使用库函数实现输入输出操作 D)注释中的拼写错误会影响编译结果 2、以下说法中正确的是() A) C语言程序总是从第一个的函数开始执行 B) C语言程序总是从main()函数开始执行 C)在C语言程序中,要调用的函数必须在main()函数中定义 D)C语言程序中的main()函数必须放在程序的开始部分 3、下列选项种说法正确的是( ) A)函数由声明部分和执行部分两部分组成 B)语言中main函数一定在程序的开始部分 C)C语言程序总是从第一个定义的函数开始执行 D)C程序的每行中只能写一条语句 4、设有说明:int a;float b; char c; double d; 则表达式1.3*a+2*b*c+d*(int) 2.6 值的类型为( )。 A)doubleB) char C) floatD) int 5、C语言的标识符只能由字母、数字和下划线三种字符组成,且第一个字符( ) A)必须为字母 B)必须为下划线 C)必须为字母或下划线 D)可以是字母、数字和下划线中任一种字符 6、以下不正确的C语言标识符是( )。 A) ABC B) abc C)a_bc D) void 7、下列运算符中优先级最高的是( ) A)< B)+ C)&& D)!= 8、以下选项中属于C语言中合法关键字的是( ) A)Float B)abc C)int D)CASE 9、若x、i、j和k都是int型变量,计算下面表达式后,x的值为( ) x=(i=4,j=16,k=32) A)4 B)16 C)32 D)52 10、在C语言中,要求数据必须是整型的运算符是( ) A)/ B)+ + C)!=D) % 11、若整型变量x的值为8,则下列表达式中值为1的表达式是 A)x+=x-=x B) x%=x-1 C) x%=x%=3 D) x/=x+x 12、若w=1,x=2,y=3,z=4,则条件表达式“w > x? w : y< z ? y : z”的值是( ) A)4 B)3 C)2 D)1 13、有以下程序,程序运行后的输出结果是。 main() {inti=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) printf("%d %d %d\n",i,j,k); }

华南理工大学高级语言程序设计(C++I)试卷及答案

华南理工大学计算机学院 高级语言程序设计(C++I)试卷 学生证号:____________________ 姓名: ____________________ 注意事项:1. 本试卷共五大题,满分100分,考试时间120分钟; 2. 所有答案请写在答卷上,试卷和答卷同时提交; 一.单项选择题(每小题2分,共20分) 1.下列字符列中,合法的长整型常量是: (A) 4.18e3 (B) 0.46793 (C) 4L (D) 956738 2.设变量x,y,a,b,c,d的值为1,计算表达式(x=a!=b)&&(y=c!=d)后,变量x,y的值分别是: (A) 0,0 (B) 0,1 (C) 1,0 (D) 1,1 3.以下运算符中,优先级最低的是: (A) *= (B) ?:: (C) && (D) >= 4.在C++中,char类型数据在内存的存储形式是: (A) 原码(B) 反码(C) 补码(D) ASCII码 5.设变量定义int x = 6, y, z; 执行语句 y = z = x--; y = x == z; 后变量y的值是:(A) 0 (B) 1 (C) 5 (D) 6 6.下面的变量定义中,不正确的是: (A) char *p=”string”(B) int a[]={‘A’,’B’,’C’} (C) float *q=&b, b; (D) doudle a, *r=&a; 7.设有变量定义 doubleb[5], *p=b; 能正确表示b数组中元素地址的表达式是: (A) b (B) b+5 (C) *b[0] (D) &b 8.设有变量定义 int a[]={2,3,5,9,11,13},*pa=a, w; 执行语句w=++(*++pa); 后,变量w和*pa的值是: (A) 3和3 (B) 4和3 (C) 3和4 (D) 4和4 9.语句if(w) … ; else … ; 中的表达式w的等价表示是: (A) w==0 (B) w==1 (C) w!=0 (D) w!=1 10.设有函数说明和变量定义:int max(int x,int y); int(*p)(int,int)=max; int a, b; 以下正确调用函数的代码是: (A) *p(a,b) (B) p(a,b) (C) *(p(a,b)) (D) p(&a,&b)

计算机编程设计报告模板

计算机编程设计报告题目:学生成绩管理系统 专业名称:信息与计算科学 班级:17信计(1)班 学号:28 09 16 23 26 34 20223 姓名:刘奇熊鹏王策李进 石锦锋杨炳坤李俊华 指导教师:刘花璐 组织单位:数理学院

时间:2018.5.14—2018.5.27 目录 1.题目要求 (2) 2. 题目分析 (2) 3. 编写程序 (3) 4.运行结果 (8)

1.题目要求 作为教师,考试之后对试卷进行分析和研究是必须要做的一项工作,下列图表某学校要求老师在考试之后填写的一个表格,并要求教师根据考试分数分布情况画出直方图。下面就来解决这个实际问题。 某高校试卷分析表 分类 项目不及格60~69分70~79分80~89分90~100分平均分标准差人数86163511 比例10.53%7.89%21%46%14%人数2011141912 比例26%14%18%25%16%人数1213191913 比例16%17%25%25%17% 15.04 19.11 17.97 期末考试卷面及格率:73.68% 期末考试卷面最高分:97 期末考试卷面最低分:28总评=平时*20%+考试*80% 学生总人数76名 平时成绩期末成绩总评77.371.572.6 2. 题目分析 (1)程序运行时,首先必须接收总评成绩的计算比例,应为针对不同的课程,平时成绩和期末考试成绩所占的比例可能不同。 (2)接收若干同学的平时成绩和期末考试成绩,计算出总评成绩,总评成绩的计算方法是“平时成绩所占比例乘以平时成绩+期末成绩所占比例乘以期末成绩”。 (3)根据考试成绩计算分数段的分布情况,画出直方图。 (4)计算平时成绩,期末成绩和总评成绩的平均分和标准差,以及期末考试卷面的及格率,最高分和最低分等。 由于针对一个学生有3个有关成绩的数据,因此最简单的方式就是使用结构体数组。 本题使用的存储结构如图14.1所示。第一列为学生的学号,第二列为学生的平时

JAVA程序设计模板

PINGDINGSHAN UNIVERSITY 《JAVA程序设计》 课程设计报告 题目: 多功能计算器 院(系): 计算机学院(软件学院) 专业年级: 计算机科学与技术2015级 姓名: 马雪 学号: 8 任课教师: 李永明 2017年6月25日

1 绪论 (1) 课题的背景及意义 (1) 系统功能设计 (1) 系统设计 (1) 论文主要工作和结构安排 (1) 2 相关技术及工具介绍 (3) 系统功能设计 (3) 用户信息管理功能的实现 (4) 公告管理功能的实现 (4) 附录 (5) 参考文献 (6) 致谢 (7)

1 绪论 随着互联网的发展,大数据时代的来临和云计算的产生于发展,计算现在已成为一个具有研究性的方向。其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。 现在我国的云计算刚刚起步,这样的速度发展已经快要赶不上大数据时代的来临了,现在我们很多的计算仍然只停留在简单的计算机计算,这样花费了很多的时间。在这个飞速发展的时代,这种简单的计算必然会被正在高速发展的云计算所取代。 根据现实状况,该计算器能够实现简单的四则运算、进制转换、求对数、三角函数运算、开平方运算,以及实现正负号、退格、清零等简单的拓展运算。 课题的背景及意义 架构、数据库管理系统、web 挑战。所以做了这个简单的Java计算器。 该计算器采用java语言编程技术来设计一个图形界面的计算器应用程序,完成简单的算术运算,使用具有强大功能的Eclipse开发工具进行编程。Java语言最大的特点是具有跨平台性,使其不受平台的影响,得到了广泛的应用本课程是Java 面向对象程序设计,体现的是面向对象而不是面向过程,它与面向过程有很大的区别,它避免了面向过程中很多容易出错的内容,例如:指针等,在面向对象的设计中,注意体现的是面向对象的几大机制,继承、多态、封装和抽象,在面向过程的设计中的多继承java采用了接口来代替实现。除此之外Java语言是简单的,分布式的、健壮的、安全的、体系结构中立的、可移植性的、可解释型的、高性能的、多线程的、动态的高级语言。

高级语言程序设计实验 C

陕西理工大学 《高级语言程序设计(C)》 实验报告 院系: 班级: 学号: 姓名:

目录

实验一:C开发环境与顺序结构程序设计 1.实验目的: (1) 了解集成开发环境VC++的使用方法,理解相关命令的含义,掌握编辑、编译、连接以及运行调试的方法,掌握程序的基本结构,掌握输入输出的方式。 (2) 掌握程序设计的基本要素中的数据类型、变量、运算符以及表达式的运用。 (3) 学会正确使用逻辑运算符和逻辑表达式以及关系运算符与关系表达式,掌握在程序设计中灵活使用顺序结构。 2.实验环境: (1) 硬件环境 CPU:Inter Pentium(R)4 CPU 以上 内存:2GByte (2) 软件环境 操作系统:Microsoft Windows 7 编译系统:Microsoft Visual C++ 3.实验步骤: 按如图所示流程进行实验内容的 调试。 (1) 在XP操作系统中,启动VC++ 编译环境; (2) 在VC++编译界面输入C源程 序; (3) 选择编译、组建、执行命令进 行编译、链接和运行,并记录实验 数据; (4) 按以上方法依次输入其他源程 序并调试、运行和记录实验数据。 4.实验内容: 输入并运行下列程序,查看程序运行的结果。 #include<>

void main() { printf(“* * * * * * * * * *\n”); printf(“Programing in c A Labrtry Maual\n”); printf(“* * * *\n”); printf(“*\n”); } 查看程序运行的结果 #include<> void main() { int i,j,m,n; i=8; j=10; m=++i; n=j--; printf(“%d,%d,%d,%d\n”,i,j,m,n); } 找出下列程序中的错误,改正后写出程序运行结果. #include<> void main() { Int x,y=z=5,aver; x=7; AVER=(x+y+z)/3 printf(“AVER=%d\n”,aver); }

程序设计心得体会范文

程序设计心得体会范文 在程序设计时,在一次程序运行中,只能行使一种权限,要想再行使另一种权限,就只能退出程序,然后再运行程序,在此分享心得体会范文。下面是为大家收集整理的程序设计心得体会范文,欢迎大家阅读。 程序设计心得体会范文篇1 学习C语言已经一年多,对C也算得上半个入门者,期间也写过一些自娱自乐的代码。其实个人认为无论学习什么语言,最重要的是掌握习编程思想,然而C语言一种学习编程思想的基础语言。所以,C语言的重要性不言而喻。 一、课本 无论用的是什么书,要学好C语言,把书上的每一个例题、习题的代码读懂,这是学C最基本的要求。弄懂每一章的内容是什么?在C语言中有什么用?并尝试修改每一个例题的代码,采用不同的代码来实现题目的要求。 二、课堂 在每一节课上,注意老师讲的内容,有的知识,老师稍微提点,你就能弄懂,但是自己看书,或许你几天也弄不懂。老师更能清晰地让你明白所要求掌握的知识点。在课堂上,尽可能多的在草稿纸上写下你自己的代码,让老师看或是自己上机调试。 三、笔记 无论学习什么知识,笔记是重点,俗话说:好记性不如烂笔头。

一个认真学习的人,总是记了很多笔记的,想学好编程,你的笔记本上总有课本上的每一个例题代码的核心部分。以及八大经典的算法举例,递推、递归、穷举、贪心、分治、动规、迭代、分枝。 四、交流 想学好C语言,交流是必须的,尤其是学习C语言的新手,这里,我向大家推介——百度C语言贴吧,这里有很多的学习者,也有很多高手,在这里你能学到课本以及课堂上学不到的东西。和他人交流也是很重要的。 五、上机练习 这是学习好C语言的关重要的环节,无论你编程学得多好,上机实现才是目的,所以,不怕要辛苦,把你的每一段代码都敲进计算机,让计算机来实现,这样有助于你对程序的理解,并试着修改你的代码,让你的代码更精简,效率更高。平时没事的时候,在计算机上多敲代码,一个编程厉害的高手,他的计算机上会有多代码。 想成为编程高手的军规: 1、大学生活丰富多彩,会令你一生都难忘,但难忘有很多种,你可以学了很多东西而难忘,也会因为什么都没学到而难忘! 2、编程不是技术活,而是体力活。 3、C语言是基础,很重要,如果你不学好C语言,那么什么高级语言你都学不好。 4、计算机专业是一个很枯燥的专业,但即来之、则安之,只要你努力学,也会发现其中的乐趣。

机票预订系统程序设计说明书模板(面向对象)

程序设计说明书 1引言 1.1编写目的 程序设计说明书提供用户与开发人员对开发软件的共同理解,使用户与开发单位就该系统的功能定义、环境需求达成共识,是今后各阶段设计工作的基础和依据,也是本阶段评审和测试阶段确认与验收的依据。本需求分析的读者对象包括客户、业务人员需求分析人员、测试人员、用户文档编写人和项目管理人员。 本阶段已在系统的需求分析的基础上,对机票预定系统做概要设计。主要解决了实现该系统需求的程序模块设计问题。包括如何把该系统划分成若干个模块、决定各个模块之间的接口、模块之间传递的信息,以及数据结构、模块结构的设计等。在以下的概要设计报告中将对在本阶段中对系统所做的所有概要设计进行详细的说明。 在下一阶段的详细设计中,程序设计员可参考此概要设计报告,在概要设计对机票预定系统所做的模块结构设计的基础上,对系统进行详细设计。在以后的软件测试以及软件维护阶段也可参考此说明书,以便于了解在概要设计过程中所完成的各模块设计结构,或在修改时找出在本阶段设计的不足或错误。 预期的读者:系统管理员、机票预订管理员、订票旅客、程序员。 1.2背景 软件名称:机票预订系统 提出者:程序员 开发者:xxx。 用户:系统管理员、程序员。 运行该软件的计算站(中心):Internet、航空公司、网上银行 2程序设计说明 2.1需求规定 1.管理员管理航班与打印机票活动图 (1)管理员登陆界面管理航班信息与旅客信息。 (2)管理员根据旅客信息安排航班。 (3)管理员根据机票价格收费。 (4)打印机票与账单。

根据上面的描述,管理员管理航班与打印机票活动图如图5-1所示。 图2.1订票管理员管理航班与打印机票活动图 2.旅客订票与打印机票活动图 (1)旅客登陆操作界面选择航班或由订票管理员安排航班。 (2)选择航班后确认订票形象。 (3)确认完毕缴费。 (4)由管理员打印机票和账单。 根据上面的描述,旅客订票与打印机票活动图如图5-2所示。

华南理工 《高级语言程序设计C 》平时作业

一、分析程序,写输出结果 1.#include #include void main() {int m, k, i ; for( m=1; m<=10; m+=2 ) { k = m/3; for( i=2; i<=k; i++ ) if( m%i ) cout << m << " "; } } 解:m 的取值为1,3,5,7,9 对应k的取值为0,1,1,2,3, 第二个for循环:只有当k=2和k=3时才执行,当k=2,i=2,m%i等于1为真,输出m为7 当k=3,i=2,m%i等于1为真,输出m为9, i=3,m%i等于0为假,无输出结果为: 7 9 2.#include void fun(); void main() {int i; for(i=1;i<5;i++) fun(); cout< int fun(int n) { if(n==0) return 1; return 2*fun(n-1); } void main()

{ int a=5; cout< void main() { char *cp="word"; for (int i=0 ; i<4; i++ ) cout< void main() { int max; int a[10]={76,55,95,87,85,83,65,90,77,85}; int *p= a ; max=*p; for( ; p< &a[10] ; p++) if( *p>max ) max= *p ; cout<<"max= "<

华工高级语言程序设计C++_随堂练习答案

华工高级语言程序设计C++_随堂练习答案答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D.

答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D.

答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D.

答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D.

答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D. 答题: A. B. C. D.

《JAVA-WEB程序设计》报告模板

南京晓庄学院 《JAVA WEB程序设计》 课程报告 | 题目: 学生信息管理系统 姓名: ; 沈莉莉 学号: 班级:13计算机转本1班完成时间2016年6月23号成绩:) 数学与信息技术学院

目录 1.系统需求分析 (1) 2.相关技术与原理介绍 (1) 3.系统分析与设计 (2) 系统功能分析 (2) 系统结构分析 (2) 数据库设计 (3) 4.系统实现 (4) 登录模块实现 (4) 教师模块实现 (6) 成绩模块实现 (7) 学生模块实现 (8) 5.总结与体会 (11) 工作总结 (11) 改进设想 (11)

1.系统需求分析 (对系统的功能需求进行分析) 在本次的实验中主要用到了Eclipse、Mysql、Tomcat等软件。用JSP和JAVABEAN 编写代码,编写完的低吗主要用来实现教师、学生、成绩以及课程的查询、修改、删除等操作。 2.相关技术与原理介绍 (对Tomcat、MySQL、JSP、JDBC、JAVABEAN等技术进行简要介绍) 、Tomcat简介 Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问童虎不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。对于一个初学者来说,当一台机器上配置好Apache服务器,可利用它响应HTML(标通用标记语言下的一个应用)页面访问的请求。实际上Tomcat部分是Apache服务器的扩展,但它是独立运行的,所以当你圆形tomcat时,它实际上是作为一个与Apache独立的进程单独运行。 、MySQL的简介 MySQL是一个小型关系数据库管理系统,它的主要特性如下: (1)支持多线程,充分利用CPU资源。 (2)一共TCP/IP、ODBC和JDBC等多种数据库连接途径。 (3)使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。 、JSP的简介 JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网页的处理逻辑。网页还能通过tags和scriptlets访问存在于服务端的资源的应用逻辑。JSP将网页逻辑与网页设计的显示分离,支持可重用的基于组件的设计,使基于Web的应用程序的开发变得迅速和容易。 JSP(JavaServer Pages)是一种动态页面技术,它的主要目的是将表示逻辑从Servlet中分离出来。Java Servlet是JSP的技术基础,而且大型的Web应用程序的开发需要Java Servlet 和JSP配合才能完成。JSP具备了Java技术的简单易用,完全的面向对象,具有平台无关性且安全可靠,主要面向因特网的所有特点。 、JDBC的简介 JDBC 扩展了 Java 的功能。例如,用 Java 和 JDBC API 可以发布含有 applet 的网页,而该 applet 使用的信息可能来自远程数据库。企业也可以用 JDBC 通过 Intranet 将所有职员连到一个或多个内部数据库中(即使这些职员所用的计算机有 Windows、 Macintosh 和UNIX 等各种不同的操作系统)。随着越来越多的程序员开始使用Java 编程语言,对从 Java 中便捷地访问数据库的要求也在日益增加。

程序设计实验报告模板

C语言程序设计实验报告 1 实验目的 (1)掌握函数的定义方法、调用方法、参数说明以及返回值; (2)掌握实参与形参的对应关系,以及参数之间的“值传递”的方式; (3)掌握函数的嵌套调用及递归调用的设计方法; (4)在编程过程中加深理解函数调用的程序设计思想。 2 实验内容 (1)编辑、编译、运行实验指导中给出的程序,并分析输出结果。 (2)编写一个函数primeNum(int x),功能是判别一个数是否为素数。 (3)输入3个整数,求最大值和最小值。 (4)编写函数mulNum(int a,int b),它的功能是用来确定a和b是否是整数倍的关系。如果a是b的整数倍,则函数返回值为1,否则函数返回值为0。 (5)编写两个函数,一个函数gcd()的功能是求两个整数的最大公约数,另一个函数mul()的功能是求两个整数的最小公倍数。

3算法描述流程图 4源程序 (1) #include #include int computernum(int x) { int a,b,c,d,e,sum; sum=0; x=abs(x); a=x/10000; b=(x%10000)/1000; c=(x%1000)/100; d=(x%100)/10; e=x%10; sum=a+b+c+d+e; return sum; } main()

{ int a,b; printf("please a number :"); scanf("%d",&a); b=computernum(a); printf("the sum of all digits is %d",b); } (2) #include #include main() { int a,b,i; printf("please input a number x="); scanf("%d",&a); b=(int)sqrt(a); for(i=2;i<=b;i++) { if(a%i==0) printf("x is not a prime number"); } if(i>=b) { printf("x is prime number"); } } (3) #include int zuida(int a,int b,int c) { if(a>=b) a=a; if(a<=b) a=b; if(a>=c) a=a; if(a<=c) a=c; return a; } int zuixiao(int a,int b,int c) { if(a>=b) a=b; if(a<=b) a=a; if(a>=c) a=c; if(a<=c) a=a; return a; }

相关文档
最新文档