文档库 最新最全的文档下载
当前位置:文档库 › 实验八 泛型程序设计

实验八 泛型程序设计

实验八   泛型程序设计
实验八   泛型程序设计

实验八泛型程序设计

软件1502 杨成进151303230

一、实验目的

1.了解链表类的定义与实现,学习其使用方法。

2.了解栈类的定义与实现,学习其使用方法。

3.了解队列类的定义与实现,学习其使用方法。

4.了解C++标准模板库STL的使用方法。

二、实验任务

1.编写程序link.h,实现教材中例9—6的链表类。在测试程序lab9—1.cpp中定义两个整型链表A和B,分别插入5个元素,然后把B中的元素加入A的尾部。

2.编写程序queue.h,用链表实现队列(或栈)类。在测试程序lab9—2.cpp中定义一个整型队列(或栈)对象,插入5个整数,压人队列(或栈),再依次取出并显示出来。

3.使用C++标准模板库(STL)中的双向队列类(deque)重新实现上一小题。

三、实验步骤

1.参照教材《C++语言程序设计》中链表类LinkeclI。ist的定义(教材中的例程9—6.h),给出其实现,注意合理使用NodIe类(教材中的例程9—3.h)的成员函数。在测试程序中定义整型链表A和B,分别插入5个元素,使用循环语句显示链表中的元素,然后把B中的元素加入A的尾部,再显示出来。

2.队列类的特点就是其元素的操作顺序为先入先出(FIFO),用上题中的链表类实现队列类,用链表类的成员函数实现队列的成员函数,在测试程序中定义一个整型队列对象,观察队列类中的元素先入先出的特点。

3.在程序中包含语句#include ,使用deque类的方法push_back()、empty()、pop_front()完成上一小题的要求。程序名:lab9_3.cpp。、

四、实验程序

1、

#include "link.h"

int main()

{

LinkedList A, B;

for(int i=0;i<5;i++)

{

A.InsertRear(2*i+1);

B.InsertRear(2*i+2);

}

A.Reset();

cout <<"链表A的元素为:" ;

while(!A.EndOfList())

{

cout << A.Data() <<"";

A.Next();

}

cout << endl;

B.Reset();

cout <<"链表B的元素为:" ;

while(!B.EndOfList())

{

cout << B.Data() <<"";

B.Next();

}

cout << endl;

cout <<"把B中的元素插入A中..."<< endl;

B.Reset();

while(!B.EndOfList())

{

A.InsertRear(

B.Data());

B.Next();

}

A.Reset();

cout <<"此时,链表A的元素为:" ;

while(!A.EndOfList())

{

cout << A.Data() <<"";

A.Next();

}

cout << endl;

}

#ifndef LINKEDLIST_CLASS

#define LINKEDLIST_CLASS

#include

#include

using namespace std;

#ifndef NULL

const int NULL = 0;

#endif // NULL

#include "9-3.h

template

class LinkedList

{

private:

Node *front, *rear;

Node *prevPtr, *currPtr;

int size;

int position;

Node *GetNode(const T& item,Node *ptrNext=NULL);

void FreeNode(Node *p);

void CopyList(const LinkedList& L);

public:

LinkedList(const LinkedList& L);

~LinkedList(void);

LinkedList& operator= (const LinkedList& L);

int ListSize(void) const;

int ListEmpty(void) const;

void Reset(int pos = 0);

void Next(void);

int EndOfList(void) const;

int CurrentPosition(void) const;

void InsertFront(const T& item);

void InsertRear(const T& item);

void InsertAt(const T& item);

void InsertAfter(const T& item);

T DeleteFront(void);

void DeleteAt(void);

T& Data(void);

void ClearList(void);

};

template

Node *LinkedList::GetNode(const T& item,

Node* ptrNext)

{

Node *p;

p = new Node(item,ptrNext);

if (p == NULL)

{

cout <<"Memory allocation failure!\n";

exit(1);

}

return p;

}

template

void LinkedList::FreeNode(Node *p)

{

delete p;

}

template

void LinkedList::CopyList(const LinkedList& L) {

Node *p = L.front;

int pos;

while (p != NULL)

{

p = p->NextNode();

}

if (position == -1)

return;

prevPtr = NULL;

currPtr = front;

for (pos = 0; pos != position; pos++)

{

prevPtr = currPtr;

currPtr = currPtr->NextNode();

}

}

template

LinkedList::LinkedList(void): front(NULL), rear(NULL), prevPtr(NULL),currPtr(NULL), size(0), position(-1) {}

template

LinkedList::LinkedList(const LinkedList& L)

{

front = rear = NULL;

prevPtr = currPtr = NULL;

size = 0;

position = -1;

CopyList(L);

}

template

void LinkedList::ClearList(void)

{

Node *currPosition, *nextPosition;

currPosition = front;

while(currPosition != NULL)

{

nextPosition = currPosition->NextNode();

FreeNode(currPosition);

currPosition = nextPosition;

}

front = rear = NULL;

prevPtr = currPtr = NULL;

size = 0;

position = -1;

}

template

LinkedList::~LinkedList(void)

ClearList();

}

template

LinkedList& LinkedList::operator=(const LinkedList& L) {

if (this == &L)

return *this;

ClearList();

CopyList(L);

return *this;

}

template

int LinkedList::ListSize(void) const

{

return size;

}

template

int LinkedList::ListEmpty(void) const

{

return size == 0;

}

template

void LinkedList::Next(void)

{

if (currPtr != NULL)

{

prevPtr = currPtr;

currPtr = currPtr->NextNode();

position++;

}

}

template

int LinkedList::EndOfList(void) const

{

return currPtr == NULL;

}

template

int LinkedList::CurrentPosition(void) const

{

return position;

}

template

void LinkedList::Reset(int pos)

int startPos;

if (front == NULL)

return;

if (pos < 0 || pos > size-1)

{

cerr <<"Reset: Invalid list position: "<< pos << endl;

return;

}

if(pos == 0)

{

prevPtr = NULL;

currPtr = front;

position = 0;

}

else

{

currPtr = front->NextNode();

prevPtr = front;

startPos = 1;

for(position=startPos; position != pos; position++) {

prevPtr = currPtr;

currPtr = currPtr->NextNode();

}

}

}

template

T& LinkedList::Data(void)

{

if (size == 0 || currPtr == NULL)

{

cerr <<"Data: invalid reference!"<< endl;

exit(1);

}

return currPtr->data;

}

template

void LinkedList::InsertFront(const T& item)

{

if (front != NULL)

Reset();

InsertAt(item);

}

template

void LinkedList::InsertRear(const T& item) {

Node *newNode;

prevPtr = rear;

newNode = GetNode(item);

if (rear == NULL)

front = rear = newNode;

else

{

rear->InsertAfter(newNode);

rear = newNode;

}

currPtr = rear;

position = size;

size++;

}

template

void LinkedList::InsertAt(const T& item) {

Node *newNode;

if (prevPtr == NULL)

{

newNode = GetNode(item,front);

front = newNode;

}

else

{

newNode = GetNode(item);

prevPtr->InsertAfter(newNode);

}

if (prevPtr == rear)

{

rear = newNode;

position = size;

}

currPtr = newNode;

size++;

}

template

void LinkedList::InsertAfter(const T& item) {

Node *p;

p = GetNode(item);

if (front == NULL)

{

front = currPtr = rear = p;

position = 0;

}

else

{

if (currPtr == NULL)

currPtr = prevPtr;

currPtr->InsertAfter(p);

if (currPtr == rear)

{

rear = p;

position = size;

}

else

position++;

prevPtr = currPtr;

currPtr = p;

}

size++;

}

template

T LinkedList::DeleteFront(void) {

T item;

Reset();

if (front == NULL)

{

cerr <<"Invalid deletion!"<< endl;

exit(1);

}

item = currPtr->data;

DeleteAt();

return item;

}

template

void LinkedList::DeleteAt(void) {

Node *p;

if (currPtr == NULL)

{

cerr <<"Invalid deletion!"<< endl;

exit(1);

}

if (prevPtr == NULL)

{

p = front;

front = front->NextNode();

}

else

p = prevPtr->DeleteAfter();

if (p == rear)

{

rear = prevPtr;

position--;

}

currPtr = p->NextNode();

FreeNode(p);

size--;

}

#endif

2、

#ifndef QUEUE_CLASS

#define QUEUE_CLASS

#include

#include

using namespace std;

#include "link.h"

template

class Queue

{

private:

LinkedList queueList;

public:

Queue(void);

void QInsert(const T& elt);

T QDelete(void);

T QFront(void);

int QLength(void) const;

int QEmpty(void) const;

void QClear(void);

};

template

Queue::Queue(void)

{}

template

int Queue::QLength(void) const

{

return queueList.ListSize();

}

template

int Queue::QEmpty(void) const

{

return queueList.ListEmpty();

}

template

void Queue::QClear(void)

{

queueList.ClearList();

}

template

void Queue::QInsert(const T& elt)

{

queueList.InsertRear(elt);

}

template

T Queue::QDelete(void)

{

if (queueList.ListEmpty())

{

cerr <<"Calling QDelete for an empty queue!"<< endl;

exit(1);

}

return queueList.DeleteFront();

}

template

T Queue::QFront(void)

{

if (queueList.ListEmpty())

{

cerr <<"Calling QFront for an empty queue!"<< endl;

exit(1);

}

queueList.Reset();

return queueList.Data();

}

#endif

#ifndef LINKEDLIST_CLASS

#define LINKEDLIST_CLASS

#include

#include

using namespace std;

#ifndef NULL

const int NULL = 0;

#endif

#include "9-3.h"

template

class LinkedList

{

private:

Node *front, *rear;

Node *prevPtr, *currPtr;

int size;

int position;

Node *GetNode(const T& item,Node *ptrNext=NULL);

void FreeNode(Node *p);

void CopyList(const LinkedList& L);

public:

LinkedList(void);

LinkedList(const LinkedList& L);

~LinkedList(void);

LinkedList& operator= (const LinkedList& L);

int ListSize(void) const;

int ListEmpty(void) const;

void Reset(int pos = 0);

void Next(void);

int EndOfList(void) const;

int CurrentPosition(void) const;

void InsertFront(const T& item);

void InsertRear(const T& item);

void InsertAt(const T& item);

void InsertAfter(const T& item);

T DeleteFront(void);

void DeleteAt(void);

T& Data(void);

void ClearList(void);

};

template

Node *LinkedList::GetNode(const T& item, Node* ptrNext) {

Node *p;

p = new Node(item,ptrNext);

if (p == NULL)

{

cout <<"Memory allocation failure!\n";

exit(1);

}

return p;

}

template

void LinkedList::FreeNode(Node *p)

{

delete p;

}

template

void LinkedList::CopyList(const LinkedList& L) {

Node *p = L.front;

int pos;

while (p != NULL)

{

InsertRear(p->data);

p = p->NextNode();

}

if (position == -1)

return;

prevPtr = NULL;

currPtr = front;

for (pos = 0; pos != position; pos++)

{

prevPtr = currPtr;

currPtr = currPtr->NextNode();

}

}

template

LinkedList::LinkedList(void): front(NULL), rear(NULL), prevPtr(NULL),currPtr(NULL), size(0), position(-1) {}

template

LinkedList::LinkedList(const LinkedList& L)

{

front = rear = NULL;

prevPtr = currPtr = NULL;

size = 0;

position = -1;

CopyList(L);

}

template

void LinkedList::ClearList(void)

{

Node *currPosition, *nextPosition;

currPosition = front;

while(currPosition != NULL)

{

nextPosition = currPosition->NextNode();

FreeNode(currPosition);

currPosition = nextPosition;

}

front = rear = NULL;

prevPtr = currPtr = NULL;

size = 0;

position = -1;

}

template

LinkedList::~LinkedList(void)

{

ClearList();

}

template

LinkedList& LinkedList::operator=

(const LinkedList& L) {

if (this == &L)

return *this;

ClearList();

CopyList(L);

return *this;

}

template

int LinkedList::ListSize(void) const

{

return size;

}

template

int LinkedList::ListEmpty(void) const

{

return size == 0;

}

template

void LinkedList::Next(void)

{

if (currPtr != NULL)

{

prevPtr = currPtr;

currPtr = currPtr->NextNode();

position++;

}

}

template

int LinkedList::EndOfList(void) const

{

return currPtr == NULL;

}

template

int LinkedList::CurrentPosition(void) const

{

return position;

}

template

void LinkedList::Reset(int pos)

{

int startPos;

if (front == NULL)

return;

if (pos < 0 || pos > size-1)

{

cerr <<"Reset: Invalid list position: "<< pos << endl;

return;

}

if(pos == 0)

{

prevPtr = NULL;

currPtr = front;

position = 0;

}

else

{

currPtr = front->NextNode();

prevPtr = front;

startPos = 1;

for(position=startPos; position != pos; position++) {

prevPtr = currPtr;

currPtr = currPtr->NextNode();

}

}

}

template

T& LinkedList::Data(void)

{

if (size == 0 || currPtr == NULL)

{

cerr <<"Data: invalid reference!"<< endl;

exit(1);

}

return currPtr->data;

}

template

void LinkedList::InsertFront(const T& item) {

if (front != NULL)

Reset();

InsertAt(item);

}

template

void LinkedList::InsertRear(const T& item) {

Node *newNode;

prevPtr = rear;

newNode = GetNode(item);

if (rear == NULL)

front = rear = newNode;

else

{

rear->InsertAfter(newNode);

rear = newNode;

}

currPtr = rear;

position = size;

size++;

}

template

void LinkedList::InsertAt(const T& item) {

Node *newNode;

if (prevPtr == NULL)

{

newNode = GetNode(item,front);

front = newNode;

}

else

{

newNode = GetNode(item);

prevPtr->InsertAfter(newNode);

}

if (prevPtr == rear)

{

rear = newNode;

position = size;

}

currPtr = newNode;

size++;

}

template

void LinkedList::InsertAfter(const T& item) {

Node *p;

p = GetNode(item);

if (front == NULL)

{

front = currPtr = rear = p;

position = 0;

}

else

{

if (currPtr == NULL)

currPtr = prevPtr;

currPtr->InsertAfter(p);

if (currPtr == rear)

{

rear = p;

position = size;

}

else

position++;

prevPtr = currPtr;

currPtr = p;

}

size++;

}

template

T LinkedList::DeleteFront(void)

{

T item;

Reset();

if (front == NULL)

{

cerr <<"Invalid deletion!"<< endl;

exit(1);

}

item = currPtr->data;

DeleteAt();

return item;

}

template

void LinkedList::DeleteAt(void) {

Node *p;

if (currPtr == NULL)

{

cerr <<"Invalid deletion!"<< endl;

exit(1);

}

if (prevPtr == NULL)

{

p = front;

front = front->NextNode();

}

else

p = prevPtr->DeleteAfter();

if (p == rear)

{

rear = prevPtr;

position--;

}

currPtr = p->NextNode();

FreeNode(p);

size--;

}

#endif // LINKEDLIST_CLASS

#include "queue.h"

int main()

{

Queue A;

for(int i=0;i<5;i++)

{

A.QInsert(2*i+1);

}

cout <<"队列A的元素为:" ;

while(!A.QEmpty())

{

cout << A.QFront() <<"";

A.QDelete();

}

cout << endl;

}

4、

5、

#include

#include "array1.h"

using namespace std;

int main()

{

Array A(10);

int i,k;

int SortType;

int SearchNum;

cout <<"请输入10个整数"<< endl;

for(i=0;i<10;i++)

{

cout <<"输入第"<< i+1 <<"个数字:";

cin >> A[i];

}

cout <<"输入的数组为:"<< endl;

for(i=0;i<10;i++)

cout << A[i] <<"";

cout << endl;

cout <<"请选择排序方法:1.直接插入排序2.直接选择排序3.冒泡排序:" ;

cin >> SortType;

switch(SortType)

{

case 1:

A.InsertionSort();

break;

case 2:

A.SelectionSort();

break;

case 3:

A.BubbleSort();

break;

default:

cout <<"输入错误,程序退出!";

exit(0);

}

cout <<"排序后的数组为:"<< endl;

for(i=0;i<10;i++)

cout << A[i] <<"";

cout << endl;

cout <<"请输入待查找的数字:";

cin >> SearchNum;

k= A.SeqSearch(SearchNum);

if (k<0)

cout <<"没有找到数字"<< SearchNum << endl;

else

cout << SearchNum <<"是第"<< k+1 <<"个数字"<< endl; }

#ifndef ARRAY1_CLASS

#define ARRAY1_CLASS

#include

#include

using namespace std;

#ifndef NULL

const int NULL = 0;

#endif

enum ErrorType

{invalidArraySize, memoryAllocationError, indexOutOfRange}; char *errorMsg[] =

{

"Invalid array size", "Memory allocation error",

"Invalid index: "

};

template

class Array

{

private:

T* alist;

int size;

void Error(ErrorType error,int badIndex=0) const;

public:

Array(int sz = 50);

Array(const Array& A);

~Array(void);

Array& operator= (const Array& rhs);

T& operator[](int i);

operator T* (void) const;

int ListSize(void) const;

void Resize(int sz);

void InsertionSort();

void SelectionSort();

void BubbleSort();

int SeqSearch(T key);

};

template

void Array::Error(ErrorType error, int badIndex) const {

cerr << errorMsg[error];

if (error == indexOutOfRange)

cerr << badIndex;

cerr << endl;

exit(1);

}

template

Array::Array(int sz)

{

if (sz <= 0)

Error(invalidArraySize);

size = sz;

alist = new T[size];

if (alist == NULL)

Error(memoryAllocationError);

}

template

Array::~Array(void)

{

delete [] alist;

}

template

Array::Array(const Array& X)

{

int n = X.size;

size = n;

alist = new T[n];

if (alist == NULL)

Error(memoryAllocationError);

T* srcptr = X.alist;

T* destptr = alist;

while (n--)

*destptr++ = *srcptr++;

}

template

C语言程序设计实验实验指导书及答案

实验一熟悉C程序运行环境 班级学号成绩 一、实验目的 1. 熟悉C语言Visual C++6.0调试环境。 2. 掌握C程序的编辑、调试及运行。 二、实验内容 项目1. 调试并运行下面程序,并写出运行结果: #include int main() { printf(“Good morning!\n”); printf(“Hello,world!\n”); return 0; } 运行结果(注意,按照屏幕输出格式写): 项目2. 调试并运行下面程序,并写出运行结果: #include int main() { int a , b , sum; /*定义变量*/ a=23; b=56; /*为变量赋值*/ sum=a+b; /*计算两个变量的和*/ printf(“sum is %d\n”,sum); /*输出计算结果*/ return 0; } 运行结果:

项目3. 调试并运行下面程序,并写出运行结果: #include int max(int,int); int main() { int a , b , c; /*定义变量*/ a=23; b=56; /*为变量赋值*/ c=max(a,b); /*调用max函数,将得到的值赋给c*/ printf(“max is %d\n”,c); /*输出c的值*/ return 0; } int max(int x,int y) /*定义max函数,函数值为整型*/ { int z; /*定义变量*/ if(x>y) z=x; else z=y; return(z); /*将z的值返回*/ } 运行结果: 三、提高部分 1.试想,如果求10个数中的最大者,则程序该如何编写。 程序代码 运行结果:

程序设计基础实验指导书

说明 每个实验做完以后,按照实验报告模板格式完成相应的实验报告,存储为word 文档,最终提交的实验文档数量种类和命名原则如下例:(不按要求 者拒收) 目录结构图目录实验 1 内的文件种类和命名原则实验报告成绩将作为平时成绩的一部分计算到期末总成绩中。 实验报告严禁相互抄袭,一经发现抄袭和被抄袭者本次实验按零分计算!

实验1 C 的实验环境和C 语言的数据类型 1. 实验目的 ⑴ 了解在具体的语言环境下如何编辑、编译、连接和运行一个C 程序。 ⑵ 通过运行简单的C 程序,初步了解C 源程序的特点。 ⑶ 掌握C 语言数据类型, 熟悉如何定义一个整型、字符型和实型的变量,以及对它 们赋值的方法。 ⑷ 掌握不同的类型数据之间赋值的规律。 ⑸ 学会使用C 的有关算术运算符,以及包含这些运算符的表达式,特别是自加(+ +)和自减(--)运算符的使用。 2. 实验内容和步骤 检查所用的计算机系统是否已安装了C 编译系统并确定他所在的子目录。 进入所用的集成环境。 熟悉集成环境的界面和有关菜单的使用方法。 输入并运行一个简单的、正确的程序。 3. 实验题目 输入下面的程序 # include "stdio.h" void main() { printf( "This is a c program.\n" ); } 程序无误,其运行的结果为:(请填写) ⑵ 输入并编辑一个有错误的 C 程序。 # include “ stdio.h ” void main() { int a,b,sum a=123; b=456; sum=a+b print( “ suism%d n” ,sum); } 运行后程序出现几处错误,请分别指出,并逐一更改: ⑶ 若k,g 均为int 型变量, 则下列语句的输出为, : # include "stdio.h" void main() { int k, g; k=017; g=111;

课后答案——C++语言程序设计教程(第二版)

1.1习题1解答 1. (1)机器语言是计算机直接理解执行的语言,由一系列(二进制)指令组成,其助记符构成了汇编语言;接近人的自然语言习惯的程序设计语言为高级语言。 (2)结构化程序设计方法主要内容有:自顶向下,逐步求精;面向对象方法将现实世界中的客观事物描述成具有属性和行为的对象,抽象出共同属性和行为,形成类。 (3)C++程序开发通常要经过5个阶段,包括:编辑,编译,连接,运行,调试。首先是编辑阶段,任务是编辑源程序,C++源程序文件通常带有.c p p扩展名。接着,使用编译器对源程序进行编译,将源程序翻译为机器语言代码(目标代码),过程分为词法分析、语法分析、代码生成3个步骤。 在此之前,预编译器会自动执行源程序中的预处理指令,完成将其他源程序文件包括到要编译的文件中,以及执行各种文字替换等。 连接器的功能就是将目标代码同缺失函数的代码连接起来,将这个“漏洞”补上,生成可执行文件。程序运行时,可执行文件由操作系统装入内存,然后CPU从内存中取出程序执行。若程序运行进程中出现了错误,还在需要对程序进行调试。 (4)对象与对象之间通过消息进行相互通信。 (5)类是具有相同属性和行为的一组对象的抽象;任何一个对象都是某个类的一个实例。(6)多态性是指在一般类中定义的属性或行为,被特殊类继承之后,可以具有不同的数据类型或表现出不同的行为。 (7)面向对象的软件开发过程主要包括面向对象的方法分析、面向对象的设计、面向对象的编程、面向对象的测试和面向对象的维护。 (8)泛型程序设计是指在程序设计时,将数据类型参数化,编写具有通用性和可重用的程

序。 (9)#include是一条预处理指令(语句),在编译(或预处理)时由编译器(或预编译器)执行,其功能是将iostream文件包含(复制)到指令处。 (10)C++中使用cin作为标准输入流对象,通常代表键盘,与提取操作符>>连用;使用cout作为标准输出流对象,通常代表显示设备,与<<连用。 2.简答题 (1)叙述机器语言、汇编语言、高级语言的特点。 机器语言是计算机直接执行的语言,由二进制的0和1构成的一系列指令组成; 汇编语言是机器语言的助记符; 高级语言是接近人的自然语言习惯的编程语言,通过编译变成机器语言。 (2)结构化的语言与面向对象的语言是截然分开的吗? 不是截然分开的,面向对象的程序设计中也包含过程,含有结构化的思想。 (3)C编写的程序不加修改就可以在C++编译器中编译。 (5)C++程序通过编译变成带扩展名.obj的目标文件;再通过连接变成带扩展名.exe的可执行文件。 (6)如果要求不使用include包含头文件,有什么办法使程序正常编译运行? 在相应的文件夹(子目录)中,找到需要包含的头文件,将头文件复制到包含处。 3.单选 C++语言程序能够在不同操作系统下编译、运行,说明C++具有良好的移植性。 (可以说C++语言完全兼容C语言,但是在这不能说C++语言程序能兼容不同的操作系统;对于计算机硬件,一般使用“兼容”一词,对于程序使用“移植”)。 (3)#include语句在程序运行前就执行了。

《C程序设计基础》实验指导

《C程序设计基础》实验指导 实验1 C程序的设计环境和运行方法 【实验目的】 1.熟悉所用计算机系统的基本操作方法。 2.学习Turbo C 2.0的使用方法,掌握程序编辑、编译、连接、运行及查看运行结果的方法。 3.掌握C程序的基本结构。 【实验内容】 1.熟悉使用的计算机系统的基本操作,创建自己的工作目录,参照附录中介绍的方法,掌握Turbo C 2.0的启动方法(一种或多种),了解Turbo C 2.0系统的安装路径和结构。2.进入Turbo C 2.0的工作环境,参照附录设置环境,用File/Change dir…设置当前工作目录、用Options/Directories设置系统的安装路径、包含文件路径、标准库文件路径、输出文件路径和源文件路径。 3.熟悉Turbo C 2.0的系统菜单组成及功能。学习使用功能键和快捷键调用菜单项的方法。 掌握文件建立、编辑、修改和保存的方法。落实文件的存储位置是否是你的工作目录,如果不是,回第二步重新设置。了解编译、连接和运行命令在屏幕菜单项的位置和调用方法。 4.输入并运行下面最简单的C程序 ①使用File菜单的New命令创建一个新文件。 ②在编辑区输入下面程序: #include mian() { printf(" Hello World!\n") } ③按功能键F9进行编译和连接,观察屏幕显示的编译信息。如果出现出错信息,信息窗口中将显示错误内容及定位错误时的语句行号,修改错误,再进行编译。 ④如果编译无错,按Ctrl+F9运行程序,按Alt+F5切换到用户屏,观察运行结果。 ⑤改变源程序中双引号内的字符串内容,重新编译和连接,并查看运行结果。 ⑥保存文件,查看你的工作目录下是否有该文件。编译连接的中间文件应该在Output设置的目录中。如果没有设置Output目录,中间文件应该在当前工作目录中。 5.输入并运行下面一个需要在运行时输入数据的程序,程序要求从键盘输入三个浮点数,输出它们的和。 #include mian()

第8章_泛型编程习题_参考答案

《面向对象程序设计》习题 第8章泛型编程 一、选择题(共40分,每题2分) 二、填空题(共20分,每空2分) 1. 逻辑数据类型 2. 函数类 3. 函数模板类模板 4.函数类型形参类型 5.2 6. 尖括号 三、下列程序有2个错,找出并修改(共6分) 错1:public: A(T a, b) // A(T a,T b) {x=a,y=b;s=x+y;} 错2: int main() { A add(10,100); // A add(10,100); add.show(); return 0; } 四、看程序写结果(共12分,每题4分) 1. 2. 3.

五、编程题(22分) 1.设计一个函数模板,实现两数的交换,并用int、float、double、char类型的数据进行测试。 #include #include using namespace std; template void change(T &x, T &y) { T temp; temp=x; x=y; y=temp; } int main() { int a=12, b=34; float c=1.1, d=2.2; double e=1.23456789, f=2.23456789; char u='A', v='B'; cout<<"交换前:a="<

程序设计基础(c语言)实验指导与测试答案

习题集参考答案 测试1 1.BDAAA 6.DBCDB 11.AADDD 16.CDCCC 21.BCDBA 26.AD 28.a+b,a-b,a-b 测试2 1.BBBDC 6.BCABC 11.CDBBA https://www.wendangku.net/doc/657855628.html,DCB https://www.wendangku.net/doc/657855628.html,(假设输入12345回车)CBB 26.ACDDC 31.CBC 34. x>=0 x0 m=n/10 36. i==j k!=i&&k!=j 37. i<10 j%3!=0 38. k!=0 k/10 continue 39. 0 z<10 100*x+10*y+z 40. i=1,m=0 m+=i 测试3 1.CDACB 6.CBDBA 11.AACC CAC 16.C 17. 1.0/(i*i) sqrt(6*s) 18. m=n r !=0 return n 19. <=n s fun(k) 测试4 1.*CDBD 6.DCDA CD 11.DCDBD 16.DCCBB 21.BBABD 26.BDDDD 31.ABCCC 36.CDDCB 41.BAABB 46.CABDC 51.题目中strcat(p1,p2)有误,因为p1指向的是字符串常量 52.DC 55.1110 56. &a[i] continue 57. i=strlen(a) ;i>=j ;i-- a[i+1]=a[i] 58. ‘\0’str1[i]-str2[i] 59. j++ ‘\\’j++ ‘\\’j++ ‘\0’ 60. j<3 b[j][i]=a[i][j] i<3 61. b[i][j+1]=a[i][j] i=0 i<2 printf(“\n”) 62. i=j+1 found=1 63. strlen(t) t[k]==c 64. BD 65. float a[10],x i<10 i<9 j<9-i a[j]>a[j+1] a[j]=a[j+1] i<10 i%5==0 66. ADD 67. DA 测试5 1.BCBAD 6.DBDDA 11.DDCCB

实验八泛型程序设计

实验八泛型程序设计 软件1502 杨成进 0 一、实验目的 1.了解链表类的定义与实现,学习其使用方法。 2.了解栈类的定义与实现,学习其使用方法。 3.了解队列类的定义与实现,学习其使用方法。 4.了解C++标准模板库STL的使用方法。 二、实验任务 1.编写程序link.h,实现教材中例9—6的链表类。在测试程序lab9—1.cpp中定义两个整型链表A和B,分别插入5个元素,然后把B中的元素加入A的尾部。 2.编写程序queue.h,用链表实现队列(或栈)类。在测试程序lab9—2.cpp中定义一个整型队列(或栈)对象,插入5个整数,压人队列(或栈),再依次取出并显示出来。 3.使用C++标准模板库(STL)中的双向队列类(deque)重新实现上一小题。 三、实验步骤 1.参照教材《C++语言程序设计》中链表类LinkeclI。ist的定义(教材中的例程9—6.h),给出其实现,注意合理使用NodIe类(教材中的例程9—3.h)的成员函数。在测试程序中定义整型链表A和B,分别插入5个元素,使用循环语句显示链表中的元素,然后把B中的元素加入A的尾部,再显示出来。 2.队列类的特点就是其元素的操作顺序为先入先出(FIFO),用上题中的链表类实现队列类,用链表类的成员函数实现队列的成员函数,在测试程序中定义一个整型队列对象,观察队列类中的元素先入先出的特点。 3.在程序中包含语句#include ,使用deque类的方法push_back()、empty()、pop_front()完成上一小题的要求。程序名:。、 四、实验程序 1、 #include "" int main()

c程序设计教程与实验__吉顺如__实验一到七

实验1熟悉Visual C++环境及运行C程序 一、实验目的 1.掌握在Visual C++环境下C程序的建立、编辑、编译和执行过程。 2.掌握C程序的最基本框架结构,完成简单程序的编制与运行和调试。 3.掌握发现语法错误、逻辑错误的方法以及排除简单错误的操作技能。 二、实验内容 1.从键盘输入两个数a和b,求它们的平方和,并在屏幕上输出。输入该C程序,编译并运行之,记下屏幕的输出结果,以文件名保存。 #include <> main() { int a,b,sum; /*定义整型变量a、b、sum */ printf("Please Input a,b \n "); /*输出提示信息*/ scanf("%d%d",&a,&b); /*从键盘输入两个整数分别赋予a和b*/ sum=a*a+b*b; /*赋值语句,把a2+b2的结果赋给变量sum*/ printf("%d*%d+ %d*%d=%d\n",a,a,b,b,sum); /*输出语句*/ }

改错题 (1计算x*y 的值并将结果输出。试纠正程序中存在的错误,以实现其功能。程序以文件名保存。 #include <> main main () { int x=2;y=3;a int x=2,y=3,a ; A=x*y a =x*y ; print ('a=%d",A); print f ("a=%d",a ); printf("\n"); } (2)下程序的功能为:求两数中的较大数据并输出。纠正程序中存在的错误,以实现其功能。程序以文件名保存。 #include <> viod main() void main() { int a ,b , max; Scanf(“%d,%d ”,&a,&b); s canf(“%d,%d ”,&a,&b); Max=a; m ax=a; If (max

北京邮电C语言程序设计实验指导书10版 V1.0

《C语言程序设计》 实 验 指 导 手 册 授课教师: 宋 茂 强 实验指导教师: 李 晶 教学对象: 一年级本科生 开课时间: 秋季学期 北京邮电大学软件学院 2010年8月

《C语言程序设计》实验指导手册 (2010年8月) 实验内容分为九部分,涉及到编程环境的使用,循环控制语句的练习,判断分支语句练习,函数的应用,模块化开发,数组和字符串的应用,结构体、指针以及链表的应用等,最终完成一个学生成绩管理系统的设计与实现。 关于实验的说明: 1. 实验环境为:Visual Studio C++ 6.0。 2. 有需要提交实验内容的部分在实验要求一项中有提示。 3. 实验内容提交至:ftp://59.6 4.164.17/软件学院/ 10级/软件学院10级C 语言程序设计用户名:student,密码:student。 4. 提交时请注意:每一部分都有对应的文件夹,每个班都有对应的文件夹。 提交内容时,遵守“学号-姓名”命名规则上传。比如,2010211501班某 同学张三,学号为100011,完成的第一部分实验包含了两部分:工程和 实验报告。工程的提交方法:找到“part 1”文件夹下 “10-01”文件夹,找 到“project”文件夹,并将工程打包为.rar包,命名为:100011-张三.rar, 传到这个文件夹下。实验报告的提交方法:找到“part 1”文件夹下 “10-01” 文件夹,找到“report”文件夹,将word形式的实验报告命名为:100011- 张三.doc上传至该文件夹下。 第一部分: VC6.0的使用(2学时) 1.实验目的 (1) 掌握Visual Studio C++ 6.0 编程环境的基本使用方法; (2) 掌握如何在Visual Studio C++ 6.0编程环境下为工程引入第三方类库。 2.实验内容 如何建立新的工程 (1) 打开【file】|【new】,出现new窗口。选择【project】选项卡,选择【Win32 Console Application】。在右面的【project name】栏中输入工程的名字,【location】项是指定当前的工程文件放在那个目录中,单击右面的按钮 可以进行更改。选择一个合适的目录(更为方便的方法是,在硬盘上建 立一个自己的目录,比如在D盘上建立一个目录名为C Programming, 那么,【location】这里就选择D:\ C Programming\ ,这样后面所有部分 的实验内容都可以放在这个目录下),最后单击【OK】。如图1-1所示。

java程序设计基础(第3版)实验指导答案 第四章

实验16 public class shiyan16 { public static void main(String[] args) { int i; int []a; a=new int[10]; for(i=0;i<=a.length-1;i++) System.out.print("a["+i+"]="+a[i]+" "); System.out.print("\n"); for(i=a.length-1;i>=0;i--) { a[i]=i; System.out.print("a["+i+"]="+a[i]+" "); } } } //定义一个长度为10的整形数组,输出元素的内容,再对数组元素进行赋值 实验17 import java.util.*; public class shiyan17 { public static void main(String[] args) { int i,max,min; int []a=new int[5]; Scanner reader=new Scanner(System.in); System.out.println("从键盘输入5个整数"); for(i=0;i<5;i++) a[i]=reader.nextInt(); max=a[0]; min=a[0]; for(i=1;i<5;i++) { if(a[i]>max) max=a[i]; if(a[i]

程序设计基础实验指导书

实验1 C程序的运行环境和C语言的数据类型⒈ 实验目的 ⑴了解在具体的语言环境下如何编辑、编译、连接和运行一个C程序。 ⑵通过运行简单的C程序,初步了解C源程序的特点。 ⑶掌握C语言数据类型,熟悉如何定义一个整型、字符型和实型的变量,以及对它 们赋值的方法。 ⑷掌握不同的类型数据之间赋值的规律。 ⑸学会使用C的有关算术运算符,以及包含这些运算符的表达式,特别是自加(++) 和自减(--)运算符的使用。 ⒉ 实验内容和步骤 ⑴检查所用的计算机系统是否已安装了C编译系统并确定他所在的子目录。 ⑵进入所用的集成环境。 ⑶熟悉集成环境的界面和有关菜单的使用方法。 ⑷输入并运行一个简单的、正确的程序。 ⒊ 实验题目 ⑴ 输入下面的程序 # include “stdio.h” void main() { printf(“This is a c program.\n”); } 程序无误,其运行的结果为:(请填写) ⑵ 输入并编辑一个有错误的C程序。 # include “stdio.h” void main() { int a,b,sum a=123; b=456; sum=a+b print(“sum is %d\n”,sum); } 运行后程序出现几处错误,请分别指出,并逐一更改:

⑶若k,g均为int型变量,则下列语句的输出为,: # include “stdio.h” void main() { int k, g; k=017; g=111; print(“%d\t”,++k); printf(“%x\n”,g++); } 运行结果为:

⒈ 实验目的 ⑴掌握C语言中赋值语句的使用方法。 ⑵掌握各种类型数据的输入输出的方法,能正确使用各种格式转换符。 ⑶进一步熟悉C程序的编辑、编译、连接和运行的过程。 ⒉ 实验内容 用下面的scanf函数输入数据,使a=3,b=7,x=8.5,y=71.82,c1=’A’,c2=’a’。问在键盘上如何输入? 请书写程序 #include “stdio.h” void main() { int a,b; float x,y; charc1,c2; scanf(“a=%d b=%d”,&a,&b); scanf(“%f %e”,&x,&y); scanf(“ %c %c”,&c1,&c2); printf(“a=%d,b=%d,x=%f,y=%f,c1=%c,c2=%c\n”); } 运行,并按照如下方式在键盘上输入: A=3 b=7 8.5 71.82 A a 运行结果: A=3,b=7,x=8.500000,y=71.820000,c1=A,c2=a 思考:为什么在第三个scanf函数双引号第一个字符为空格字符,如果没有这个空格字符,而写成:scanf(“%c %c”,&c1,&c2); 按以上的输入、输出将如何变化? 请分析原因

C程序设计试验参考指导书

C程序设计试验参考指导书

《C++程序设计实验指导书》 市级精品课程《VC++与面向对象技术》课程组 2011-9-1

目录 实验一顺序与分支结构程序设计 (4) 实验二循环结构程序设计 (10) 实验三一维数组及应用 (11) 实验四指针及应用 (14) 实验五结构体及应用 (16) 实验六类的定义及使用 (17) 实验七类的继承和派生 (18) 实验八多态性及应用 (20)

实验一顺序与分支结构程序设计 一、实验目的 1、了解和使用VC集成开发环境; 2、熟悉VC环境的基本命令和功能键; 3、熟悉常用的功能菜单命令; 4、掌握顺序结构程序设计; 5、掌握分支结构程序设计。 二、实验内容 C++ 、编译并运行程序: #include <> int main() { /*定义部分和执行部分分开*/ double r = , pi = ; printf(" area = %f \n ",pi * r * r); /*输出圆面积*/ printf(" circumference = %f \n",2 * pi * r); return 0; } ,判断该年份是否闰年,如果是就输出YES,否则输出NO。

,b,c,要求按由小到大的顺序输出。 三、实验步骤 Visual C++ 选择菜单“开始/程序/Microsoft Visual Studio ++ ”,得到Visual C++ ,如图1-1所示。 图1-1 Visual C++ 1、创建新工程 (1)单击菜单“文件/新建”,显示“新建:对话框,如图1-2所示。 (2)在此对话框的列表栏中,选择“Win32 Cons ole Application”(Win32控制台应用程序”)。在“工程”栏中输入一个工程名,如实验一。在位置文本框中选择工程所在的路径,如图中所示H:\C++实验\实验一。单击“确定”按钮。

程序设计基础实验指导书

程序设计基础实验指导书

前言 本指导书是针对计算机专业及非计算机专业函授生的需要提供的程序设计基础实验指导书。前面十个实验涉及的是C语言的基础内容,要求学生必须熟练掌握。后面三个综合性实验能提高学生对较复杂问题的分析及程序设计能力。另外每个实验后面都有思考题,主要目的是进一步巩固所学的知识。在本指导书的第三、四部分给出了turbo C的常用函数表和错误信息表,目的是方便学生编程并查阅所需要函数并尽快找出错误的根源。 上机内容中有的给出了参考程序(主要是前面几个实验),更多的需要学生自己编写程序,所以要求学生必须在每次实验前认真预习本次实验内容,编写好程序方能参加实验。 编者 2009.8

Turbo C集成编译环境 Turbo C集成编译环境是一个集程序编辑、编译、连接、调试为一体的C程序开发软件,它具有速度快、效率高、功能强、使用方便等优点。用户在这个集成环境下,可以利用内部的编辑器进行全屏幕编辑,利用窗口功能进行编译、连接、调试、运行、环境设置等工作。 如果你的计算机系统已经安装了Turbo C编译系统,则在DOS命令状态下键入命令: TC或TC filename 其中filename是用户需要进行编辑、编译、连接、运行的C程序的文件名。在前者情况下,该文件名可以在进入集成环境后再指定。 如果是在windows环境下启动TC,只需要找到TC.exe文件双击即可。 进入Turbo C集成环境后,首先在屏幕上显示Turbo C主菜单窗口,如图1所示。 图1 由图1可以看出,在该菜单下,有八个菜单条目,即提供了八种选择。每一个条目的意义如下: File 处理文件(包括装入、存盘、选择、建立、换名写盘),目录操作(包括列表、改变工作目录),退出系统及调用DOS。 Edit 建立、编辑源文件 Run 控制运行程序。如果程序已经编辑连接好,且Debug/Source Debugging以及Option/Compiler/Code generation/OBJ Debug Information开关置为ON,则可以用此菜初始化调试阶段。 Compile 编译并生成目标程序与可执行文件。 Project 允许说明程序中包含哪些文件的管理条目(Project)。

C语言程序设计项目教程习题答案资料

C语言程序设计项目教程— 习题答案 说明:本文档在“文档结构图”视图方式下应用比较方便。 第1章第2章第3章第4章第5章第6章第7章第8章第9章 第1章 1. 什么是软件?软件有哪些特点? 答:软件是程序、数据及其相关文档的完整集合。 软件具有以下特点: ①软件是一种逻辑产品,它以程序和文档的形式出现,保存在计算机的存储器中(磁盘或光盘),通过计算机的运行才能体现它的功能和作用。 ②软件产品的生产主要是研制。 ③软件产品不会用坏,不存在磨损、消耗的问题,但是软件在使用过程中,往往需要根据用户需求变化或软硬件环境的变化对软件进行修改,这种修改被称为软件维护。 ④软件产品的生产主要是脑力劳动。 ⑤软件的费用是不断增加的,软件成本相当昂贵。 2. 什么是软件工程? 答:软件工程是一门用工程化方法,指导计算机软件开发和维护的学科,它采用工程的概念、原理、技术和方法来开发、维护以及管理软件。 3. 什么是软件生命周期?软件生命周期包括哪些阶段? 答:软件生命周期是指从开发软件概念的提出起,直到该软件的使用、失去使用价值而被废弃的整个过程,也可以称作软件生存周期。 软件生命周期包括可行性研究与计划制订、需求分析、软件设计、软件实现、软件测试、运行与维护。

4. 什么是软件开发模型? 答:软件开发模型是软件开发全部过程、活动和任务的结构框架。 5. 写出数据结构的概念。 答:数据结构是指相互之间存在一种或多种特定关系的数据元素的集合,是计算机存储、组织数据的方式。数据结构主要研究和讨论数据的逻辑结构、存储结构和数据的运算。 6. 填空: ⑴数据结构包括逻辑结构、存储结构和数据的运算三个方面。 ⑵据结构的逻辑结构包括线性结构和非线性结构两大类。 ⑶据结构的存储结构包括顺序存储结构、链式存储结构、索引存储结构和散列存 储结构四类。 ⑷表是一种采用链式存储结构的线性表。 7. 什么是算法?算法有哪些特性? 答:算法是解决问题所采取的步骤和方法。算法具有以下特性:有穷性、确定性、有效性、有零个或多个输入、有一个或多个输出。 8. 什么是算法的时间复杂度?什么是算法的空间复杂度? 答:时间复杂度是指执行算法所耗费的时间。空间复杂度是指算法在计算机内执行时所占用的内存开销规模。 9~12. DCDA 13. 分别用流程图、N-S图描述以下问题的算法。 (1)输入一个年份,判断是否为闰年。 提示:闰年的判断条件为:①能被4整除,但不能被100整除;②能被400整除。满足两个条件之一,即为闰年。

C语言程序设计实验实验指导书及标准答案

实验一熟悉C程序运行环境 班级学号姓名成绩 一、实验目的 1. 熟悉C语言Visual C++6.0调试环境。 2. 掌握C程序的编辑、调试及运行。 二、实验内容 项目1. 调试并运行下面程序,并写出运行结果: #include int main() { printf(“Good morning!\n”); printf(“Hello,world!\n”); return 0; } 运行结果(注意,按照屏幕输出格式写): 项目2. 调试并运行下面程序,并写出运行结果: #include int main() { int a , b , sum; /*定义变量*/ a=23; b=56; /*为变量赋值*/ sum=a+b; /*计算两个变量的和*/ printf(“sum is %d\n”,sum); /*输出计算结果*/ return 0; } 运行结果:

项目3. 调试并运行下面程序,并写出运行结果: #include int max(int,int); int main() { int a , b , c; /*定义变量*/ a=23; b=56; /*为变量赋值*/ c=max(a,b); /*调用max函数,将得到的值赋给c*/ printf(“max is %d\n”,c); /*输出c的值*/ return 0; } int max(int x,int y) /*定义max函数,函数值为整型*/ { int z; /*定义变量*/ if(x>y) z=x; else z=y; return(z); /*将z的值返回*/ } 运行结果: 三、提高部分 1.试想,如果求10个数中的最大者,则程序该如何编写。 程序代码 运行结果:

程序设计题库

实训三 21、声明double a; int b;哪些选项中的表达式能够正确的进行类型转换? A. a = b B. a = (decimal)b C. a = (int)b D. b = a 22、从下列选项中,选出变量result 的返回值是false 的表达式? A. bool result = (1 = 1) B. bool result = (4 == 5) C. bool result = (1 != 1) D. bool result = 0; 23、设置int a = 3。从以下选项中,选出所有变量result 的值为true 的表达式? A. bool result = !(a++ > 3) B. bool result = (++a > 3) C. bool result = (a++ >= 3) D. bool result = (~a == -4)

24、声明int32 a = 3,经过运算int32 b = a | 0xFFFFFFFF,变量 b 的最终值为? A. -1 B. 4294967295 C. 0 D. 无法编译通过 25、以下表达式中,哪些表达式的最终结果为-1? A. 2 << 1 | -5 B. 3 –6 / 3 C. (float) (-1 / 1) D. ~6 % 3 26、下列关于“||”运算符的描述中,哪些 是正确的? A. “||”运算符执行短路计算。 B. “||”运算符不是关键字。 C. “||”运算符是一种比较运算符。 D. 在使用“||”运算符的运算中,如果结果为真,则运算符左右两边的操作数都为真。

相关文档
相关文档 最新文档