计算机软件基础(太原科技大学)实验四
软件技术基础实验指导及报告
太原理工大学现代科技学院软件技术基础课程实验报告专业班级通信14-1学号2014101596姓名王晓振指导教师范俊杰软件技术基础实验指导及报告实验说明:1、共5次实验,每次实验完成1个内容。
2、实验报告命名统一为:软件_专业班级_学号_姓名3、自备U盘,在实验前认真阅读实验要求,在实验中及时记录保存实验结果和调试过程,并填写到实验报告对应位置,实验结束后将该实验报告电子版在指定时间内提交给各班学习委员。
实验一顺序线性表的插入与删除1、实验目的:理解和掌握线性表的顺序存储结构,使用C语言根据相应算法编写程序,实现线性表的创建、插入和删除。
2、实验内容:编写C程序实现先建立一个长度不小于n = 8的线性表,输出原始线性表;然后进行插入运算,在第3个元素前面插入一个新元素b(值为学号后3位),得到一个长度为(n+1)的线性表,输出插入后的线性表;最后进行删除运算,删除第5个元素,得到长度为n的线性表,输出删除后的线性表。
3、参考程序:#include <stdio.h>#define MAXSIZE 20typedef struct{int data[MAXSIZE];int last;}List;void Init(List *pt){int i = 0;for(i=1;i<11;i++){pt->data[i] = i;pt->last = i;}}void Output(List *pt){int i,max=pt->last;printf("List have %d: \n",pt->last);for(i=1;i<=max;i++)printf("List %d Value is:%d \n",i,pt->data[i]);printf("\n");}void InsertL(List *pt, int i, int x){int k;if(i<1 || i>MAXSIZE-1){printf("插入位置不合适!\n");}else if(pt->last>=MAXSIZE-1){printf("线性表已满!\n");}else{for (k=pt->last;k>=i;k--)pt->data[k+1]=pt->data[k];pt->data[i]=x;pt->last++;}}void Insert(List *pt){int position,x;printf("please input insert position and value:");scanf("%d,%d",&position,&x);InsertL(pt, position, x);}void DeleteL(List *pt, int i){int k;if(i<1 || i>pt->last){printf("删除位置不合适!\n");}else{for(k=i+1;k<=pt->last;k++)pt->data[k-1]=pt->data[k];pt->last--;}}void Delete(List *pt){int position;printf("please input delete position:");scanf("%d",&position);DeleteL(pt, position);}int main(){int int_Insert,int_Delete;List L,*pt;pt = &L;Init(pt);Output(pt);Insert(pt);Output(pt);Delete(pt);Output(pt);return 0;}4、实验结果:将程序运行结果截屏粘贴至此处。
计算机软件技术基础实验报告
学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年11月22日成绩:实验四二叉树的建立与遍历一、实验目的1.掌握二叉树的建立、显示、节点数目、树深度等操作的程序实现。
2.掌握二叉树的先序、中序、后序遍历操作的程序实现。
3.加深对树的基本概念,基本理论及相应遍历算法的掌握与理解。
二、实验用软件和工具实验软件 VC++ 6.0三、实验步骤建立一棵二叉树、设计二叉树的节点数目、树深度等操作实现算法、调试并输出一棵树及其节点数目、树深度;编写一个程序实现如下功能:二叉树的先序、中序、后序遍历操作的程序实现,调试并输出结果。
1.定义一个二叉树结构体。
2.建立并显示一棵二叉树。
3.求二叉树的节点数目、树深度。
4.计算度为2,度为1的结点。
5.二叉树的先序、中序、后序遍历。
四、实验程序与程序运行结果/*二叉树的基本操作*/#include <stdio.h>#include <malloc.h>#define MaxSize 100#define MaxWidth 40typedef char ElemType;typedef struct node{ElemType data;struct node *left,*right;} BTree;void creatree(BTree **BT,char *str){BTree *stack[MaxSize],*p;int top=-1,k,j=0;/*top为栈指针,k指定是左还是右孩子,j为str指针*/char ch;学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年11月22日成绩:*BT=NULL;ch=str[j];while (ch!='\0'){switch(ch){case '(':top++;stack[top]=p;k=1; /*为左结点*/break;case ')':top--;break;case ',':k=2; /*为右结点*/break;default: p=(BTree *)malloc(sizeof(BTree));p->data=ch;p->left=p->right=NULL;if (*BT==NULL) /*根结点*/*BT=p;else{switch(k){case 1:stack[top]->left=p;break;case 2:stack[top]->right=p;}}}j++;ch=str[j];}}void disptree(BTree *BT){BTree *stack[MaxSize],*p;int level[MaxSize][2],top,n,i,width=4;if (BT!=NULL){printf("\n凹入表示法:\n");top=1;stack[top]=BT; /*根结点入栈*/level[top][0]=width;while (top>0){p=stack[top]; /*退栈并凹入显示该结点值*/n=level[top][0];for (i=1;i<=n;i++) /*其中n为显示场宽,字符以右对齐显示*/printf(" ");printf("%c",p->data);for (i=n+1;i<=MaxWidth;i+=2)printf("━");printf("\n");学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年11月22日成绩:top--;if (p->right!=NULL){ /*将右子树根结点入栈*/top++;stack[top]=p->right;level[top][0]=n+width; /*显示场宽增width*/level[top][1]=2;}if (p->left!=NULL){ /*将左子树根结点入栈*/top++;stack[top]=p->left;level[top][0]=n+width; /*显示场宽增width*/level[top][1]=1;}}}}int BTreeDepth(BTree *BT){int leftdep,rightdep;if (BT==NULL)return(0);else{leftdep=BTreeDepth(BT->left);rightdep=BTreeDepth(BT->right);if (leftdep>rightdep)return(leftdep+1);elsereturn(rightdep+1);}}int nodecount(BTree *BT){if (BT==NULL)return(0);elsereturn(nodecount(BT->left)+nodecount(BT->right)+1);}int leafcount(BTree *BT){if (BT==NULL)return(0);else if (BT->left==NULL && BT->right==NULL)return(1);elsereturn(leafcount(BT->left)+leafcount(BT->right));}int notleafcount(BTree *BT){学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年11月22日成绩:if (BT==NULL)return(0);else if (BT->left==NULL && BT->right==NULL)return(0);elsereturn(notleafcount(BT->left)+notleafcount(BT->right)+1);}int onesoncount(BTree *BT){if (BT==NULL)return(0);else if ((BT->left==NULL && BT->right!=NULL) ||(BT->left!=NULL && BT->right==NULL))return(onesoncount(BT->left)+onesoncount(BT->right)+1);elsereturn(onesoncount(BT->left)+onesoncount(BT->right));}int twosoncount(BTree *BT){if (BT==NULL)return(0);else if (BT->left==NULL || BT->right==NULL)return(twosoncount(BT->left)+twosoncount(BT->right));else if (BT->left!=NULL && BT->right!=NULL)return(twosoncount(BT->left)+twosoncount(BT->right)+1);}void printree(BTree *BT){if (BT!=NULL){printf("%c",BT->data);if (BT->left!=NULL || BT->right!=NULL){printf("(");printree(BT->left);if (BT->right!=NULL)printf(",");printree(BT->right);printf(")");}}}main(){BTree *B;char *s="A(B(D,E(H,I)),C(G))";creatree(&B,s);disptree(B);printf("二叉树括号表示:");printree(B);printf("\n二叉树深度:%d\n",BTreeDepth(B));学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年11月22日成绩:printf("总结点个数:%d\n",nodecount(B));printf("叶子结点个数:%d\n",leafcount(B));printf("非叶子结点个数:%d\n",notleafcount(B));printf("具有双孩子结点个数:%d\n",twosoncount(B));printf("具有单孩子结点个数:%d\n",onesoncount(B));}/*二叉树遍历*/#include <stdio.h>#include <malloc.h>#define MaxSize 100typedef char ElemType;typedef struct node{ElemType data;struct node *left,*right;} BTree;void creatree(BTree **BT,char *str){BTree *stack[MaxSize],*p;int top=-1,k,j=0;/*top为栈指针,k指定是左还是右孩子,j为str指针*/char ch;*BT=NULL;ch=str[j];while (ch!='\0'){switch(ch){case '(':top++;stack[top]=p;k=1; /*为左结点*/break;case ')':top--;break;case ',':k=2; /*为右结点*/break;default: p=(BTree *)malloc(sizeof(BTree));p->data=ch;p->left=p->right=NULL;if (*BT==NULL) /*根结点*/*BT=p;else{switch(k){case 1:stack[top]->left=p;break;case 2:stack[top]->right=p;}}}j++;ch=str[j];}学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年11月22日成绩:}void preorder(BTree *BT){if (BT!=NULL){printf("%c",BT->data);preorder(BT->left);preorder(BT->right);}}void inorder(BTree *BT){if (BT!=NULL){inorder(BT->left);printf("%c",BT->data);inorder(BT->right);}}void postorder(BTree *BT){if (BT!=NULL){postorder(BT->left);postorder(BT->right);printf("%c",BT->data);}}main(){BTree *B;char *s="A(B(D,E(H,I)),C(G))";creatree(&B,s);printf("\n先序遍历:");preorder(B);printf("\n中序遍历:");inorder(B);printf("\n后序遍历:");postorder(B);}试验运行结果如图:学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年11月22日成绩:学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年11月22日成绩:五、实验心得与体会通过本次上机实验,我掌握了二叉树的建立、显示、节点数目、树深度等操作的程序实现,以及二叉树的先序、中序、后序遍历操作的程序实现,对树与二叉树的遍历,尤其是广度优先遍历和深度优先遍历的理解进一步加深,收获很多啊。
计算机软件技术基础实验指导书
前言一、实验目的《计算机软件技术基础》是一门实践性非常强的课程。
要获得利用计算机、编写程序解决实际问题的能力,仅靠习读教材和听课是不够的,还有一个重要的环节是亲自在计算机上实践。
计算机软件技术基础实验教学能够培养学生理论联系实际的学风,培养学生研究问题和解决问题的能力,培养学生的创新能力和协作精神,提高学生编写程序解决实际问题的能力。
通过该课程的实验环节,训练学生的编程技能,使学生学会运用所学理论知识判断和解决实际问题,加深和扩大理论知识;学会使用C、VC++等常用的编程软件;能根据要求建立实际问题的数学模型,确定求解方法,画出程序方框图,编写程序;学会使用各种调试命令来分析并排除程序中的错误;能运用理论知识对实验现象、结果进行分析和处理。
二、实验前预习每次实验前,学生须仔细阅读本实验指导书的相关内容,明确实验目的、原理和步骤;认真阅读程序,并尝试画出程序方框图;复习与实验内容有关的理论知识;预习C、VC++编程软件的使用方法。
三、实验注意事项1.实验开始前,应先检查计算机是否工作正常,是否安装了需要的软件。
2.按照实验步骤做实验,在计算机上认真输入编好的程序并保存。
3.程序编写完后,仔细检查是否存在书写错误。
4.确定程序书写无误后,编译并连接程序。
若出现错误,则修改程序直到无语法错误。
5.利用调试工具查找程序中的逻辑错误,并进行排除。
6.运行程序,观察结果并保存或记录。
7.实验结束后,应关闭计算机,清理实验桌面。
9.爱护公物,发生仪器设备等损坏事故时,应及时报告指导教师,按有关实验管理规定处理。
10.自觉遵守学校和实验室管理的其它有关规定。
四、实验总结每次实验后,应对实验进行总结,即实验结果进行整理,撰写实验报告。
实验报告除写明实验名称、日期、实验者姓名外,还包括:1.实验目的;2.实验设备;3.实验内容;4.实验步骤;5.实验结果;6.心得体会。
目录目录 (1)实验一VC++软件的熟悉与使用 (3)实验二顺序存储线性表的基本运算 (11)实验三单向链表的基本操作 (15)实验四迷宫实验 (21)实验五二叉树的存储及遍历 (28)实验六图的单源最短路径 (32)实验七排序实验 (37)实验一VC++软件的熟悉与使用一、实验目的1、熟悉VC++控制台程序的建立、编辑、编译、运行步骤。
计算机软件基础实验四
swap1(a,b);
printf(“%d %d”,a,b);
swap2(p,q);
printf(“%d %d”,a,b);
}
2、编写程序。将数组a的数据复制到数组b中并输出出来(要求用指针变量完成)。主要的代码如下
int i,a[7]={23,24,15,3,64,21,5}
实验步骤:
1、编写一程序,含有一个主函数和另外两个子函数,子函数完成两个数的交换功能。
swap1(int a,int b)
{int c;
c=a;a=b;b=c;
}
swap2(int *p1,int *p2)
{int c;
c=*p1;*p1=*p2;*p2=c;
}
main()
{int a=3;b=5;
实验项目
C指针
实验时间
09.4.9
实验指导老师
实验课时
2
课程名称
计算机软件基础
实验成绩
实验目的:
熟悉和掌握C指针变量。
实验环境:
1、安装有TC软件
2、有一台正常运行的计算机
3、有教师演示系统
实验注意事项:
1、注意tc软件的运行,编译,文件的保存。
2、注意tc环境设置。
int b[7]}
int *p=a,*q=b;
for(i<=0;i<7;i++)
*q++=*p++;
for(i<=0;i<7;i++)
printf(“%d”,b[i]);
}
思考:
在第一个程序中,Swap2函数交换能不能用,c=p1; p1=p2; p2=c;表示?不能,会出现什么样的结果,能,会出现什么样的结果?
大学计算机基础实验四文字编辑软件Word
大学计算机基础实验四文字编辑软件Word第一篇:大学计算机基础实验四文字编辑软件 Word实验四文字编辑软件 Word 2010(一)一、实验目的1.掌握Word 2010的启动和退出方法2.掌握Word 2010窗口的组成及操作3.掌握Word 2010文档的建立、保存、保护、打开、关闭等操作4.掌握录用文本(尤其是符号和编号的录入)、光标定位、选定文本以及文本的基本编辑操作,如插入、修改、复制、移动、删除等二、实验准备知识【实验4-1】Word 2010的基本知识与基本操作Word 2010是微软公司开发的功能强大的文字处理软件,适合一般办公人员和专业排版人员制作各种电子文档。
1. Word的启动和退出(1)Word 的启动“开始”菜单启动“桌面快捷方式”启动“文档”启动“任务管理器”启动(2)Word 的退出单击“关闭”按钮选择“文件”菜单选择“退出”按Alt + F4双击“控制菜单”按钮或单击“控制菜单”按钮选择“关闭” 2. Word窗口的组成与操作Word 2010“选项”设置有七个选项卡,可以对Word 2010的各种运行功能做预先的设置,使Word在使用中效率更高,用户使用时更方便安全、更有个性。
Word 2010“选项”设置可以选择“文件”→“选项”命令,共有七个选项,分别是常规、显示、校对、保存、版式、语言和高级【实验4-2】Word 2010 文档的建立与编辑1.文档的基本操作(1)新建文档① 用户每次启动Word的时候,系统会自动建立一个名为“文档1”的空文档② “文件”的“新建”命令或者“快速访问工具栏”的“新建”按钮或者Ctrl + N(2)保存文档保存文档就是将文档从内存写到外存。
保存文档的方法有以下几种:⌝保存未命名文件“文件”的“保存”命令或者“快速访问工具栏”的“保存”按钮或者Ctrl + S,打开“另存为”对话框,然后选择“保存位置”,输入“文件名”,点击“保存”按钮⌝保存已有的文档方法与保存未命名文件类似,只是不再出现“另存为”对话框⌝将已有文档保存为其他的文件名“文件”菜单的“另保存”命令,打开“另存为”对话框,其他操作同保存未命名文件方法类似⌝设置自动保存文件设定自动保存文件后,系统会按照设定的时间间隔来自动保存文件。
《软件技术基础》上机实验安排
《软件技术基础》上机实验安排一、实验教学计划第4-8周,每周周二晚,6:30 - 9:30, 科1B-453,457,459 二、实验内容安排实验一:指针和结构体部分1、从键盘上输入10个整数,将其中最小的数与第一个数交换,把最大的数与最后一个数交换,并将交换之后的序列打印出来。
(提示:用指针实现,参考教材习题10.3)2、要求在主函数输入一串文字,并编写一个函数计算该文字串中的大写字母,小写字母,数字以及其它字符的个数,并在主函数中将文字串和以上计算结果打印出来。
参考教材习题10.8。
3、已知一个班有10名同学英语考试成绩为{88,76, 83,92,96,80,62,85,74,87},平时成绩为{4,3,4,2, 3,3,4,2,3,4},主函数中用C的指针分配函数:malloc()分配两块连续的存储单元存放以上的考试成绩和平时成绩,用一个函数计算该班同学的考试平均成绩和各同学的最终成绩(考试成绩+平时成绩),在主函数中将以上计算结果打印出来。
注意:本题选作。
4、编写一个函数input,输入学生的成绩,包含3个学生的数据即学号(num),姓名(name)和三科成绩score[3]。
再编写一个函数print ,打印学生的信息。
编写一个主函数实现学生成绩的输入和输出。
实验二、顺序表的相关操作1、 有序的一组整数,1-2-3-4-6-5-9-19设计顺序表并实现以下操作:A.初始化线性表;B.添加上述一组数;C.删除第四个数据元素; D.显示B,C 操作后的结果。
2、 教材P74页,习题9。
3、 图书资料管理问题,设一本书有编号、书名、作者、价格等信息,如下表设计顺序表并实现以下操作;A、初始化线性表;B 、添加表1中的记录;C 、删除第三条记录。
本题选作。
提示:图书资料的数据的C 语言描述typedef struct{ long int num;char name[50];char author[20];float price;} bookinfo;设计的顺序表点C 语言描述 23.00 zhao delphi 4 18.00wangC3 20.00 li VB 2 15.00 zhang Basic 1 价格作者 书名 编号typedef struct{ bookinfo data[MAXNUM];int num;} listtype;实验三、单链表的相关操作1、现有有序的一组整数的集合:1-2-2-3-4-6-6。
计算机软件技术基础实验报告
学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月25日成绩:实验二栈和队列的基本操作一、实验目的1.掌握栈与队列的数据类型描述及特点;2.掌握栈和队列的存储;3.掌握栈的顺序和链式存储存表示与入栈、出栈操作的程序实现;4. 掌握队列的链式存储表示与入队、出队基本操作算法实现。
二、实验用软件和工具实验软件 VC++ 6.0三、实验步骤1.根据栈数据结构,分别建立一个顺序栈和链式栈并实现其上基本操作(出栈和入栈等),定义一个顺序栈和链栈结构体(队列结构体)。
2.利用入栈功能保存数据。
3.利用出栈删除弹出栈内信息。
4.根据队列数据结构,分别建立链队列和循环队列,并完成其上的基本操作(出入队列等),利用入队功能保存数据。
5.利用出队删除队列信息。
四、实验程序与程序运行结果顺序栈程序:sxz.h#include <iostream>using namespace std;template <class T>class sq_Stack{private:int mm;int top;T *s;public:sq_Stack(int);void prt_sq_Stack();void ins_sq_Stack(T x);T del_sq_Stack();T read_sq_Stack();学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月25日成绩:};template <class T>sq_Stack<T>::sq_Stack(int m){mm=m;s = new T[mm];top=0;return;}template <class T>void sq_Stack<T>::prt_sq_Stack(){int i;cout<<"top="<<top<<endl;for (i=top;i>0;i--) cout<<s[i-1]<<endl;return;}template <class T>void sq_Stack<T>::ins_sq_Stack(T x){if (top==mm){cout<<"overflow!"<<endl; return;}//存储空间已满,上溢错误top=top+1; //s[top-1]=x; //插入新元素return;}template<class T>T sq_Stack<T>::del_sq_Stack(){T y;if(top==0) //空,下溢错误{cout<<"underflow!"<<endl; return(0);}y=s[top-1]; //top=top-1; //长度减1return(y);}template<class T>T sq_Stack<T>::read_sq_Stack(){if(top==0) //空,下溢错误{cout<<"underflow!"<<endl; return(0);}return(s[top-1]);学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月25日成绩:}sxz.cpp#include "sq_Stack.h"int main(){sq_Stack<int> s(10);s.ins_sq_Stack(50);s.ins_sq_Stack(60);s.ins_sq_Stack(70);s.ins_sq_Stack(80);s.ins_sq_Stack(90);s.ins_sq_Stack(100);cout<<"第1次输出栈顶指针与栈中的元素:"<<endl;s.prt_sq_Stack();cout<<"输出栈顶元素:"<<s.read_sq_Stack()<<endl;cout<<"输出退栈的元素:"<<endl;cout<<s.del_sq_Stack()<<endl;cout<<s.del_sq_Stack()<<endl;cout<<s.del_sq_Stack()<<endl;cout<<"再输出栈顶指针与栈中的元素:"<<endl;s.prt_sq_Stack();return 0;}顺序队列程序:sq_Queue.h#include <iostream>using namespace std;template <class T>class sq_Queue{private:int mm;int front;int rear;int s;T *q;public:sq_Queue(int) ;void prt_sq_Queue();void ins_sq_Queue(T x);T del_sq_Queue();};template <class T>sq_Queue<T>::sq_Queue(int m){mm=m;q = new T[mm];front=mm;学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月25日成绩:rear=mm;s=0;return;}template <class T>void sq_Queue<T>::prt_sq_Queue(){int i;cout<<"front="<<front<<endl;cout<<"rear="<<rear<<endl;if ((s==0)&&(rear==front)){cout<<"队列空!"<<endl; return;}i=front;if (front>=mm)front=i%mm ;for (i=front; i<rear;i++){ cout<<q[i]<<endl;}return;}template <class T>void sq_Queue<T>::ins_sq_Queue(T x){if ((s==1)&&(rear==front)){cout<<"Queue_overflow!"<<endl; return;}//存储空间已满,上溢错误rear=rear+1; //if (rear==mm+1)rear=1;q[rear-1]=x; //插入新元素s=1;return;}template <class T>T sq_Queue<T>::del_sq_Queue(){T y;if (s=0){cout<<"Queue_underflow!"<<endl; return(0);}//存储空间已满,上溢错误front=front+1; //if (front==mm+1)front=1;y=q[front-1]; //插入新元素if (rear==front)s=0;return(y);}sq_Queue.cpp学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月25日成绩:#include "sq_Queue.h"int main(){sq_Queue<int> q(10);q.prt_sq_Queue();q.ins_sq_Queue(50);q.ins_sq_Queue(60);q.ins_sq_Queue(70);q.ins_sq_Queue(80);q.ins_sq_Queue(90);q.ins_sq_Queue(100);cout<<"输出队头与队尾指针及队列中的元素:"<<endl;q.prt_sq_Queue();cout<<"输出退队元素:"<<endl;cout<<q.del_sq_Queue()<<endl;cout<<q.del_sq_Queue()<<endl;cout<<q.del_sq_Queue()<<endl;cout<<"再输出队头与队尾指针及队列中的元素:"<<endl;q.prt_sq_Queue();return 0;}链栈:#include <iostream.h>#include <stdio.h>#include <stdlib.h>typedef char DateType;typedef struct node{DateType data;struct node* next;}LinkStack;LinkStack *top;void InitStack(){top=(LinkStack*)malloc(sizeof(LinkStack));top->next=NULL;top->data=0;cout<<"初始化链栈成功!";}void push(DateType x){LinkStack* s;s=(LinkStack*)malloc(sizeof(LinkStack));s->data=x;s->next=top;top=s;cout<<"入栈成功!";}学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月25日成绩:void pop(){LinkStack* s;s=top;if(s->next==NULL){cout<<"栈为空!";}else{top=s->next;free(s);cout<<"出栈成功";}}void readTop(){if(top==NULL){cout<<"栈为空!";}else{cout<<"栈顶元素为:"<<top->data;}}void showStack(){LinkStack* s;s=top;if(s->next==NULL){cout<<"栈为空!";}else{cout<<"链栈元素为:\n";cout<<"\t\t\t";while(s!=NULL){cout<<" "<<s->data;s=s->next;}}}void main(){int i,j;DateType x;while(j)学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月25日成绩:{cout<<"\n\n\n\n";cout<<"****************************************************************"<<endl; cout<<"*** 菜单:***"<<endl;cout<<"*** ①创建链栈②入栈③读栈顶元***"<<endl;cout<<"*** ④出栈⑤显示链栈元素⑥退出***"<<endl;cout<<"****************************************************************"<<endl; cout<<"请选择您所希望的操作:";cin>>i;if(i==1){InitStack();}else if(i==2){if(top==NULL){cout<<"请先初始化链表!";}else{cout<<"请输入要入栈的元素:";cin>>x;push(x);}}else if(i==3){pop();}else if(i==4){readTop();}else if(i==5){showStack();}else if(i==6){j=0;cout<<"程序结束\n";}}}链队列:#include <stdlib.h>#include<iostream.h>#define TRUE 1#define FALSE 0学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月25日成绩:typedef int QElemType;typedef struct LNode{QElemType data;struct LNode *next;}LNode , *LinkList;typedef struct{LinkList front;LinkList rear;}LinkQueue;//链式队列void InitQueue_L(LinkQueue &Q)//引用做参数,Q为结构体{//初始化队列Q.front=Q.rear=new LNode;if(!Q.front) {cout<<"存储分配失败!"<<endl; exit(1);}Q.front->next=NULL;}int IsEmpty(LinkQueue &Q){if(Q.front==Q.rear){return TRUE;}else{return FALSE;}}//创建队列,数据元素由键盘输入void CreateQueue_L(LinkQueue &Q){QElemType temp;LNode *p;cout<<"输入要插入的队列值(输入-1结束)"<<endl;cin>>temp;while(temp != -1){p=new LNode;p->data=temp;p->next=NULL;Q.rear->next=p;学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月25日成绩:Q.rear=p;cin>>temp;}cout<<"创建成功!"<<endl;}//入队操作int EnterQueue(LinkQueue &Q,QElemType x){//将数据元素x插入到队列Q中LNode *NewNode=new LNode;if(!NewNode) {cout<<"存储分配失败!"<<endl; exit(1);}if(NewNode!=NULL){NewNode->data=x;NewNode->next=NULL;Q.rear->next=NewNode;Q.rear=NewNode;cout<<"入队成功!"<<endl<<endl;return(TRUE);}else return(FALSE); //溢出}//出队操作int DeleteQueue(LinkQueue &Q,QElemType &x){//将队列Q的队头元素出队,并存放到x所指的存储空间中LNode *p;/*if(Q.front==Q.rear){cout<<"该队列为空!"<<endl;return(FALSE);}*/p=Q.front->next;x=p->data;Q.front->next=p->next; //队头元素p出队if(Q.rear==p) //如果队中只有一个元素p,则p出队后成为空队Q.rear=Q.front;free(p); //释放存储空间cout<<"出队成功!"<<endl<<endl;return(TRUE);}//队列长度int QueueLength_L(LinkQueue Q){int length=0;if(IsEmpty(Q)) cout<<"该队列为空!"<<endl;else学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月25日成绩:{LNode *p=new LNode;p=Q.front->next;while(p){length++;p=p->next;}}return length;}//输出队列元素void OutputQueue_L(LinkQueue Q){LNode *p=new LNode;if(!p) {cout<<"存储分配失败!"<<endl; exit(1);}if(Q.front==Q.rear) cout<<"该队列为空!"<<endl;else{p=Q.front->next;cout<<endl;cout<<"队列的元素依次为:";while(p){cout<<p->data<<" ";p=p->next;}cout<<endl<<endl;}}QElemType SearchQueue(LinkQueue &Q,int &i){LNode *p=new LNode;if(!p) {cout<<"存储分配失败!"<<endl; exit(1);}//if(Q.front==Q.rear) cout<<"该队列为空!"<<endl;int j=1;p=Q.front->next;while(p&&j<i){j++;p=p->next;}return p->data;}学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月25日成绩://销毁队列void DestroyQueue_L(LinkQueue &Q){while(Q.front){Q.rear=Q.front->next;delete Q.front;Q.front=Q.rear;}}void main(){int flag=1,select;LinkQueue Q;int x;while(flag){cout<<" ☆☆链式队列基本操作☆☆"<<endl;cout<<" ☆1.创建队列☆"<<endl;cout<<" ☆2.判断链队列是否为空☆"<<endl;cout<<" ☆3.队头元素出队☆"<<endl;cout<<" ☆4.新元素入队☆"<<endl;cout<<" ☆5.求队列长度☆"<<endl;cout<<" ☆6.输出队列元素☆"<<endl;cout<<" ☆7.查找第i个位置元素☆"<<endl;cout<<" ☆8.销毁队列☆"<<endl;cout<<" ☆9.其他键退出☆"<<endl;cout<<endl;cout<<"请选择操作:";cin>>select;switch(select){case 1:InitQueue_L(Q);CreateQueue_L(Q);OutputQueue_L(Q);break;case 2:if(IsEmpty(Q)) cout<<"该队列为空!"<<endl;else cout<<"该队列不为空!"<<endl;break;case 3:if(IsEmpty(Q)) {cout<<"队列为空!"<<endl; break;}学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月25日成绩:DeleteQueue(Q,x);OutputQueue_L(Q);break;case 4:if(IsEmpty(Q)) {cout<<"队列还未创建!"<<endl; break;}cout<<"输入要入队的元素x:";cin>>x;EnterQueue(Q,x);OutputQueue_L(Q);break;case 5:if(IsEmpty(Q)) {cout<<"队列还未创建!"<<endl; break;}cout<<"该链队列的长度为:"<<QueueLength_L(Q)<<endl<<endl;break;case 8:if(IsEmpty(Q)) {cout<<"队列还未创建!"<<endl; break;}DestroyQueue_L(Q);cout<<"销毁成功!"<<endl<<endl;break;case 7:cout<<"请输入要查找的位置i:";cin>>x;if(x<1||x>QueueLength_L(Q)) {cout<<"i值不合法!"<<endl; break;}cout<<"该元素为:"<<SearchQueue(Q,x)<<endl<<endl;break;case 6:OutputQueue_L(Q);break;default:flag=0;break;}}}试验运行结果如图:栈:学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月25日成绩:队列:链栈:学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月25日成绩:链队列:学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月25日成绩:五、实验心得与体会通过本次上机实验,我掌握了栈的顺序和链式存储存表示与入栈、出栈操作的程序实现,以及队列的链式存储表示与入队、出队基本操作算法实现。
计算机软件技术基础实验报告
学院:信电学院班级姓名:学号:课程:计算机软件技术基础实验日期:2013年11月24日成绩:实验九建立结构图和程序流程图一、实验目的1、掌握Microsoft visio环境。
2、掌握4种类型的模块;3、掌握建立系统结构图;4、掌握程序流程图的建立。
二、实验用软件和工具1.计算机。
2.VISIO软件。
三、实验步骤1 Microsoft OfficeVisio 环境和使用。
(1)模板:通过打开一个模板来开始创建Microsoft Office Visio图表。
模板在绘图页的左侧打开一个或多个模具。
模具包含创建图表所需的形状。
模板还包括创建特定的图表类型所需的所有样式、设置和工具。
(2)模具和形状:打开模板后,从模具中将形状拖到绘图页上来创建您的图表。
模具上的形状专门用于特定的绘图类型,并且其中的许多形状是“智能”的 - 它们具有感知绘图环境的内置行为。
(3)绘图环境:打开模板后,您将看到 Microsoft Office Visio 绘图环境,它包括菜单、工具栏、包含形状的模具、绘图页和位于绘图页右侧的任务窗格。
您在绘图页上创建绘图,所创学院:信电学院班级姓名:学号:课程:计算机软件技术基础实验日期:2013年11月24日成绩:建的绘图表示打印页面,并包含帮助调整形状位置的网格。
Visio 菜单和工具栏与其他Microsoft Office 系统程序中的菜单和工具栏类似,因此您可以用熟悉的方法打开、打印和保存图表。
(4)开始创建图表:1)打开模板:在“文件”菜单上,指向“新建”,然后单击“选择绘图类型”。
在“选择绘图类型”窗口的“类别”下,单击“软件”。
在“模板”下,单击“数据流模型图”。
2)添加形状:通过将“形状”窗口中模具上的形状拖到绘图页上,可以将形状添加到图表中。
把进程,接口,数据存储和数据流拖动到绘图页上。
3)删除形状:删除形状很容易。
只需单击绘图页上形状,然后按 DELETE 键。
单击图表中的最后一个“进程”形状,然后按 DELETE 键。
大学计算机基础实践4
实验4 Office Excel 2003操作4.1 实验目的①掌握Excel 2003的基本操作。
②掌握公式、函数的使用及图表的创建方法。
③掌握数据筛选的操作方法。
④掌握数据库清单汇总统计及数据透视表的应用。
4.2 实验预备知识①电子表格的基本概念。
②工作表的建立、编辑和格式化。
③图表的建立与编辑。
④函数、公式的应用。
⑤ Excel的数据处理。
4.3 实验工具与环境①微型计算机系统一套。
② Windows XP操作系统和Office Excel 2003应用软件。
③学生成绩数据。
4.4 实验内容Excel处理的文档是工作簿,它由多个工作表构成。
在Excel 2003中,可对工作表进行重命名、移动、复制或删除等操作,也可在当前文档中添加新的工作表。
工作表以行、列方式组织和显示数据,可将数据处理成各种形式的统计图,利用统计图可以观察数据的分布状态。
可对存储的大量数据,实现分类汇总、统计、分析和计算。
每个工作表由许多单元格组成,每个单元格都有一个标识它的地址。
数据的输入、编辑、格式编排以及计算等操作均以单元格为单位来进行。
4.4.1 在Excel中创建表格及数据的分析统计、排名任务一在Excel 2003中创建一个新文档,输入2007级工商管理班07~08学年第一学期的成绩信息,内容如图4-1所示。
将该工作表命名为“07081成绩”,并将该文件保存为“Glgc07.xls”。
大学计算机基础实践教程64图4-1 “07081成绩”工作表实验步骤与操作参考:(1) 文件的新建与命名① 启动Excel 2003应用程序,系统将自动创建一个名为“Book1”的工作簿文件,其中包含3个自动命名为“Sheet1”、“Sheet2”和“Sheet3”的工作表,如图4-2所示。
图4-2 Excel 工作窗口② 双击当前工作表标签“Sheet1”,工作表标签“Sheet1”变黑进入编辑状态,输入“07081成绩”,完成重命名操作,如图4-3所示。
《大学计算机基础》实验报告四——Windows XP控制面板与“”操作
(签字)
评分
批改日期
7.常用附件的使用
(1)打开“画图”程序,捕捉桌面图像保存为jpeg格式,并取名为“我的桌面”存放到自己的U盘中。
(2)使用计算器做十进制的四则运算。
(3)使用计算器计算,将十进制数156转化为二进制数、八进制数及十六进制数。
(4)打开记事本,输入一段文字,字数在200字左右,并取名为“我的文档”,另存到U盘中。
2、通过这个实验我发现“常用附件”的使用会给我们带来许多方便。比如说,使用计算器计算十进制、二进制、八进制及十六进制之间的转化。
3、这个实验在老师讲解和自己看书及上机操作之后,我收到许多东西,也改正了许多在学此实验之前犯下的种种错误。
4、好好听讲、好好看书、上机认真操作就会收获到许并将货币的证书形式改为1.1$。
(3)将时间格式改为HH:mm:ss。
(4)将段日期格式改为yy-MM-dd。
3.Windows防火墙的设置
(1)在“控制面板”中打开【Windows防火墙】对话框。
(2)在【常规】选项卡中选择启用Windows防火墙。
4.Windows自动更新的设置
(5)选中【性能】选项卡,查看CPU的使用情况。
(6)使用Windows任务管理器注销当前用户。
6.管理工具的使用
(1)打开【事件查看器】工具,分别查看应用程序日志、安全日志和系统日志。
(2)打开【计算机管理】工具,查看系统磁盘分区情况,分析C:分区的碎片情况,并进行碎片整理。
(3)创建型用户“china”密码为“china”,将该用户加入“Administrators”组。注销当前用户,用“china”重新登录。
(1)打开“控制面板”,观察其中的工具图标。
计算机软件技术基础实验
计算机软件技术基础试验注意:为简单起见,所有试验都可用整数作为数据元素.关键字也是整数,用关键字代表记录.试验一:顺序表操作试验目的:通过本试验,熟悉顺序表各种操作的算法实现试验内容:设计一个主程序,通过调用下面4个子程序实现顺序表基本操作1.建立一个空顺序表(初始化顺序表子程序)2.建立一个顺序表,长度自定3.在顺序表中插入一个元素子程序4.在顺序表中删除一个元素子程序试验要求:1.在主程序中要有进行各种操作的提示界面,提示用户输入参数,且考虑各种可能情况(如:应输出插入前顺序表的内容,长度;提示输入插入位置;打印插入后顺序表的内容,长度;若插入位置不合法,要给出出错信息等.其他操作类似,请同学自己考虑)2.在子程序中要考虑操作结果的各种的情况(如插入元素时,要考虑是否溢出.)试验报告要求:1.试验目的2.试验内容3.试验设施4.试验过程程序框图,试验结果,调试时出现问题及解决方法.注意:试验结果要求打印,对每种操作,应打印其各种可能情况5.算法复杂性分析试验二:顺序表各种查找算法试验试验目的:通过本试验,熟悉顺序表各种查找操作的算法实现试验内容:设计一个主程序,通过调用下面5个子程序实现顺序表三种查找算法1.建立一个空顺序表(初始化顺序表子程序)2.建立一个顺序表,长度自定3.顺序表的顺序查找子程序4.顺序表的折半查找子程序5.顺序表的分块查找子程序试验要求:在程序中要有进行各种操作的提示界面,提示用户输入参数,且考虑各种可能情况(如:应输出顺序表的内容,长度;提示输入给定关键字;打印查找结果.若未找到,给出提示信息.其他操作类似,请同学自己考虑)试验报告要求:同试验一试验三:顺序表各种排序算法试验试验目的:通过本试验,熟悉顺序表各种排序操作的算法实现试验内容:设计一个主程序,通过调用下面子程序实现顺序表各种排序算法1.建立一个空顺序表(初始化顺序表子程序)2.建立一个顺序表,长度自定3.归并排序子程序4.直接插入排序子程序5.折半插入排序子程序6.希尔插入排序子程序7.简单选择排序子程序8.冒泡排序子程序9.快速排序子程序试验要求:在程序中要有进行各种操作的提示界面,提示用户输入参数,且考虑各种可能情况(如:应输出排序前顺序表的内容,长度;打印排序后顺序表的内容,长度.其他操作类似,请同学自己考虑)试验报告要求:同试验一试验四:链表各种基本操作算法试验试验目的:通过本试验,熟悉链表各种基本操作的算法实现试验内容:设计一个主程序,通过调用下面子程序实现链表表各种排序算法1.建立一个有头节点的空链表子程序2.用尾插法建立一个链表,长度自定3.在链表中插入一个元素子程序4.在链表中删除一个元素子程序试验要求:在程序中要有进行各种操作的提示界面,提示用户输入参数,且考虑各种可能情况试验报告要求:同试验一扩展试验:1.线性链表的查找2.带尾指针的两个链表的合并3. 堆排序。
计算机软件基础实验指导书
计算机软件技术基础实验指导书实验报告要求:1.手写报告2.统一封皮(封皮填写相应内容)3.包括内容1)实验题目2)实验内容和要求3)源程序(必要的注释)4)调试过程5)运行结果6)实验心得实验一多项式的链表表示及运算一、实验目的掌握多项式的链表表示及运算方法。
二、实验内容设有多项式A(x)=7+3x+9x8+3x15B(x)=5x+6x7-9x8(1)用单链表给出A(x)的存储表示;(2)用单链表给出B(x)的存储表示;(3)以上述两个单链表为基础,通过插入和删除等运算给出A(x)+B(x)的存储表示,使其存储空间覆盖A(x)和B(x)的存储空间。
三、实验要求上述A(x),B(x)的每项系数和指数均须从键盘输入, A(x)+B(x)每项系数和指数输出到屏幕。
实验二二叉树的生成与遍历一、实验目的熟悉二叉树的二叉链表表示法,掌握使用递归方法实现二叉树的三种遍历的算法。
二、实验内容图a生成如图a所示二叉树的二叉链表,并以前序、中序、后序遍历输出。
实验三 图的表示及其遍历一、 实验目的掌握图的两种存储方式,会编程实现二叉图的两种遍历算法。
二、 实验内容1.生成所示图的邻接表2.对其进行深度优先搜索 和广度优先搜索。
实验四 查找方法比较 一、 实验目的熟悉并掌握顺序,折半,二叉排序树查找的原理及其算法。
二、 实验内容题目1 顺序与折半查找分别采用顺序查找和折半查找的算法在顺序表 (11,21,31…,91,101) 中查找元素b 。
若查找成功,输出success !及该元素的序号;若查找失败,输出fail!。
要求:1)元素b 从键盘输入;2)输出查找的过程及比较次数,比较两种查找算法的效率。
题目2 二叉排序树查找按元素在表中的顺序生成序列(45,24,53,13,30,85)的二叉排序树,并查找元素b 。
如果查找成功,输出success !;否则,输出fail!。
要求:1)元素b 从键盘输入; 2)中序遍历该二叉树。
计算机软件技术基础实验报告
学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年11月22日成绩:实验六SQL Server 2005 的安装和数据库的创建和修改一、实验目的1.掌握SQL Server 2005的安装方法,了解SQL Server 2005 的环境。
2.掌握使用向导创建数据库的方法。
3.掌握使用向导和SQL语句创建表。
4.掌握使用SQL语句修改表。
二、实验用软件和工具1.实验软件 VC++ 6.0 。
2.SQL Server2005软件。
三、实验步骤1.安装SQL Server 2005。
2.使用向导创建学籍管理系统数据库EDUC。
3.使用向导和SQL语句创建学籍管理系统数据库中的表。
4.使用SQL语句修改学籍管理系统数据库中的表。
四、实验程序与程序运行结果1.安装SQL Server 2005。
(1)根据安装机器软硬件的要求,选择一个合适的版本,以下以开发版为例(2)将 SQL Server 2005 DVD 插入 DVD 驱动器。
如果DVD驱动器的自动运行功能无法启动安装程序无法启动安装程序,请导航到 DVD 的根目录然后启动splash.hta。
(3)在自动运行的对话框中,单击“运行 SQL Server 安装向导”。
(4)在“最终用户许可协议”页上,阅读许可协议,再选中相应的复选框以接受许可条款和条件。
接受许可协议后即可激活“下一步”按钮。
若要继续,请单击“下一步”若要结束安装程序,请单击“取消”。
如下图:学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年11月22日成绩:(5)在“SQL Server 组件更新”页上,安装程序将安装 SQL Server 2005 的必需软件。
有关组件要求的详细信息,请单击该页底部的“帮助”按钮。
若要开始执行组件更新,请单击“安装”。
更新完成之后若要继续,请单击“完成”。
(6)在 SQL Server 安装向导的“欢迎”页上,单击“下一步”以继续安装。
《软件技术基础》实验指导(含答案)
《软件技术基础》实验指导(含答案)说明每个实验题目含有一个main函数和一些函数,与实验题目相关的基本运算的函数定义和main函数定义的代码在附录以及对应的文件夹中给出,供上机实验参考使用。
对于每个题目,只需要根据题目要求设计算法,补充函数定义,然后对程序进行编译、调试。
1实验一线性表一、实验目的1.熟悉线性表的顺序和链式存储结构 2.掌握线性表的基本运算3.能够利用线性表的基本运算完成线性表应用的运算二、实验内容1.设有一个线性表E={e1, e2, … , en-1, en},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ en , en-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。
(文件夹:顺序表逆置、单链表逆置)2.已知由不具有头结点的单链表表示的线性表中,含有三类字符的数据元素(字母、数字和其他字符),试编写算法构造三个以循环链表表示的线性表,使每个表中只含有同一类的字符,且利用原表中的结点空间,头结点可另辟空间。
(文件夹:分解单链表)实验二栈和队列一、实验目的1.熟悉栈和队列的顺序和链式存储结构 2.掌握栈和队列的基本运算3.能够利用栈和队列的基本运算完成栈和队列应用的运算二、实验内容1.设单链表中存放有n个字符,试编写算法,判断该字符串是否有中心对称的关系,例如xyzzyx是中心对称的字符串。
(提示:将单链表中的一半字符先依次进栈,然后依次出栈与单链表中的另一半字符进行比较。
)(文件夹:判字符串中心对称)2.假设以数组sequ[m]存放循环队列的元素,同时设变量rear和quelen 分别指示循环队列中队尾元素的位置和内含元素的个数。
编写实现该循环队列的入队和出队操作的算法。
提示:队空的条件:sq->quelen==0;队满的条件:sq->quelen==m。
(文件夹:循环队列)实验三串一、实验目的1.熟悉串的顺序存储结构 2.掌握串的基本运算及应用二、实验内容1.串采用顺序存储结构,编写朴素模式匹配算法,查找在串中是否存在给定的子串。
计算机软件基础上机实验报告
计算机软件基础上机实验报告实验目的:通过本次实验,掌握计算机软件的基本操作、基本编程概念以及实现方法,并能对实验结果进行分析和总结。
实验设备:计算机硬件平台和软件平台。
实验内容:1.学习使用计算机软件的基本操作。
2.学习使用计算机软件进行编程。
3.编写一个简单的计算机软件,并进行测试。
实验步骤:1.打开计算机软件,并学习基本的操作方法。
包括如何创建、保存和打开文件,如何设置字体、颜色和格式等。
2.学习基本的编程概念和语法,包括变量、函数、条件语句和循环语句等。
3.编写一个简单的计算机软件,并进行测试。
假设我们要编写一个求解一元二次方程的软件。
首先,定义一个函数来计算方程的根。
然后,在主函数中输入方程的系数,并调用函数进行计算。
最后,输出结果。
实验结果分析:通过本次实验,我学会了如何使用计算机软件进行操作和编程。
在编写一元二次方程求解软件的过程中,我遇到了一些问题,如如何处理方程无解和有多个解的情况等。
为了解决这些问题,我添加了对方程判别式的计算和判断逻辑,从而得到了正确的结果。
实验总结:本次实验让我更加深入地了解了计算机软件的基本操作和编程概念。
通过编写一个简单的计算机软件,我不仅巩固了所学的知识,还锻炼了分析和解决问题的能力。
在今后的学习和工作中,我将继续深入学习和应用计算机软件,为实现更多的功能和创造更大的价值做出贡献。
此外,我还意识到在软件开发过程中应注重错误处理和逻辑判断,确保软件的稳定性和可靠性。
以上是本次计算机软件基础上机实验的报告,通过本次实验,我对计算机软件的基本操作和编程有了更深入的了解,并在实践中掌握了一些基本的编程技巧和方法。
这将为我今后的学习和工作奠定坚实的基础。
计算机软件基础(太原科技大学)实验四
第 8页 共 11 页
printf("%3d",fp[k]); printf("\n");
软件开发技术实验指导书
printf("数组现在已经是从小到大排列,下面将开始查 找.\n");
int bottom,top,middle; bottom=0; top=n; int m=0; while(bottom<=top) {middle=(bottom+top)/2; m++; if(fp[middle]<data) {bottom=middle+1;} else if(fp[middle]>data) {top=middle-1;} else {printf("经过%d次查找,查找到数 据%d.\n",m,data); return data;}
else if(choise==3) selectsort(arr,count); else if(choise==4)break; } while(choise==1||choise==2||choise==3); }
int SequenceSearch(int *fp,int Length) {int data,i;
第 7页 共 11 页
{printf("%5d",fp[k]);} printf("\n"); }
软件开发技术实验指导书
int selectsort(int *fp,int n)
{int data;
printf("开始使用二分法查询.\n请输入你想要查找到数 据.\n");
scanf_s("%d",&data);
计算机软件技术基础实验报告
学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月18日成绩:实验一顺序表的基本操作及学生信息管理实现一、实验目的1.掌握顺序表结构的实现方式。
2.掌握顺序表常用算法初始化、插入、删除等操作的程序实现。
2.熟悉利用顺序表解决问题的一般思路。
3.学习体会顺序表结构的优点与不足。
二、实验用软件和工具实验软件 VC++ 6.0三、实验步骤利用顺序表实现学生信息管理。
学生的信息包括学号、姓名、性别、班级和联系电话,功能要求:信息浏览:显示所有学生信息列表;插入信息:在线性表的头部插入一个学生信息;删除信息:按照学号删除某个学生的信息;修改信息:实现按照学号修改某个学生信息;退出程序。
编写程序调试并输出结果。
(1)建立一个顺序表、设计顺序表表的基本操作实现算法、调试并输出结果。
(2)参考顺序表的算法描述和算法的实现,在本程序中修改顺序表的插入、删除、修改等算法的实现函数。
①信息的浏览②利用插入功能插入学生信息。
③利用删除功能删除学生信息。
④利用修改功能修改学生信息。
(3)编写主函数,可通过在while循环结构中嵌入switch分支结构实现操作选择功能。
(4)可以增加学生的课程成绩,实现成绩的统计分析功能。
四、实验程序与程序运行结果#include <stdio.h>#include <string.h>struct data{int number;char name[10];char sex[5];char classes[5];int tel;};int insert(struct data st[5],int n); /*申明插入函数*/void scanning(struct data st[5],int n); /*申明浏览函数*/学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月18日成绩:int del(struct data st[5],int n); /*申明删除函数*/void fix(struct data st[5],int n); /*申明修改函数*/int main(){struct data st[5];int chioce,flag=1;int n;n=0;while(flag){printf("请选择功能:\n 1—信息浏览\n 2—插入信息\n 3—删除信息\n 4-修改信息\n 0—退出程序\n");scanf("%d",&chioce);switch(chioce){case 1:scanning(st,n);break;case 2:n=insert(st,n);break;case 3:n=del(st,n);break;case 4:fix(st,n);break;case 0:flag=0;break;}}printf("\n");printf("谢谢使用!\n");return 0;}void scanning(struct data st[5],int n) /*定义浏览函数*/{int i;if(n==0) /*无元素*/{printf("请选择功能键,先插入名单!\n");printf("\n");printf("\n");}else{学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月18日成绩:for(i=1;i<=n;i++){printf(" 学号:%d\n ",st[i].number);printf(" 姓名:%s\n",st[i].name);printf(" 性别:%s\n",st[i].sex);printf(" 班级:%s\n",st[i].classes);printf("联系方式:%d\n",st[i].tel);printf("\n");}}}int insert(struct data st[5],int n) /*定义插入函数*/{int i,p;struct data t;if(n>=5){printf("内存已满!\n");printf("\n");}else{printf("请输入学号:\n");scanf("%d",&t.number);printf("请输入姓名:\n");scanf("%s",);printf("请输入性别:\n");scanf("%s",t.sex);printf("请输入班级:\n");scanf("%s",t.classes);printf("请输入号码:\n");scanf("%d",&t.tel);}for(i=n;i>0;i--) /*所有元素后移*/{st[i+1].number=st[n].number;strcpy(st[i+1].classes,st[i].classes);strcpy(st[i+1].name,st[i].name);strcpy(st[i+1].sex,st[i].sex);st[i+1].tel=st[i].tel;}st[1].number=t.number;strcpy(st[1].classes,t.classes);strcpy(st[1].name,);strcpy(st[1].sex,t.sex);学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月18日成绩:st[1].tel=t.tel;p=n+1;return p;}int del(struct data st[5],int n) /*定义删除函数*/{int m,i,q,t;printf("请输入你要删除的同学的学号:\n");scanf("%d",&m);for(i=1;i<=n;i++){if(st[i].number==m){t=i;break;}}for(i=t;i<n;i++) /*删除结点后的所有元素后移*/{st[i].number=st[i+1].number;st[i].tel=st[i+1].tel;strcpy(st[i].classes,st[i+1].classes);strcpy(st[i].name,st[i+1].name);strcpy(st[i].sex,st[i+1].sex);}q=n-1;return q;}void fix(struct data st[5],int n) /*定义修改函数*/{int i,m,p,t=1;struct data s;printf("请输入你要修改的学生的学号:\n");scanf("%d",&m);for(i=1;i<=n;i++){if(st[i].number==m){while(t){printf("你想要修改哪项数据?\n 1代表学号\n 2代表姓名\n 3代表性别\n 4代表班级\n 5代表联系方式\n (注意:修改完毕请输入)\n");scanf("%d",&p);switch(p)学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月18日成绩:{case 1:printf("请输入修改后的学号!\n");scanf("%d",&s.number);st[i].number=s.number;break;case 2:printf("请输入修改后的姓名!\n");scanf("%s",);strcpy(st[i].name,);break;case 3:printf("请输入修改的性别!\n");scanf("%s",s.sex);strcpy(st[i].sex,s.sex);break;case 4:printf("请输入修改的班级!\n");scanf("%s",s.classes);strcpy(st[i].classes,s.classes);break;case 5:printf("请输入修改后的联系方式!\n");scanf("%d",&s.tel);st[i].tel=s.tel;break;case 0:t=0;break;}}}}}试验运行结果如图:学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年10月18日成绩:五、实验心得与体会掌握了顺序表的创建与数据的添加、删除、修改等操作;在设计功能性程序的过程中,对顺序表中的数据进行写入、查询实在很方便,正是其优点所在。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《软件开发技术基础》实验报告学院:电子信息工程学院__班级:电子131502____学号:姓名:实验四查找算法的实现(2学时)班级电子131502 学号 201315020232 姓名许鹏第 13 周星期五第3 、4节成绩 _____实验类型:验证性实验要求:必修实验学时: 2学时一、实验目的:了解静态查找和动态查找的各种方法,熟悉并掌握顺序查找和二分查找的基本思想和算法步骤。
二、实验要求:1、阅读程序,给出详细注解;2、运行程序,分析程序结果;3、改写程序并且实现。
三、实验内容:首先给出一组初始数值序列,然后给出待查的关键字数值,1、用顺序查询查找,查找到关键字后删除关键字,然后输出数值序列,若未查找到关键字,则将关键字插入到原序列的最后,并输出。
2、使用二分查找法查找,把初始的无序序列变成有序的,查找到关键字后删除关键字,然后输出序列,若未查找到关键字,则将关键字插入到原序列的最后,并输出。
3、用二分查找法查找(选择排序),把初始的无序序列变成有序的,查找关键字是否存在。
四、实验原理:顺序查询是从第一个元素开始,逐个把元素的关键字与给定值进行比较,若两者相等,则查找成功,否则说明不存在满足条件的数据元素,查找失败。
二分查找是在有序的序列中,先将查找的数值与序列中间的元素进行比较,若相等,则查找成功,若数值大于中间的元素,则在序列的后半部继续进行二分查找,否则在前半部进行二分查找。
所以在使用二分查找时要先将序列进行排序,可以选择冒泡排序法和选择排序法。
冒泡排序:比较相邻的元素。
如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。
在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
选择排序:第1趟,在待排序记录r~r[n]中选出最小的记录,将它与r交换;第2趟,在待排序记录r~r[n]中选出最小的记录,将它与r交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。
五、程序代码:#include<stdio.h>#define LENGTH 20int SequenceSearch(int *fp,int Length);int Search(int *fp,int length);void Sort(int *fp,int length);int selectsort(int *fp,int n);void main(){ static int count,a,i,j,n,m=0,b=0;int arr[LENGTH];printf("请输入你的数据的个数:\n");scanf_s("%d",&count);printf("请输入%d个数\n",count);for(int i=0;i<count;i++){scanf_s("%d",&arr[i]);}int choise=0;do{printf("1.使用顺序查询.\n2.使用二分查找法查找.\n3.使用二分查找法查找(选择排序).\n4.退出\n");scanf_s("%d",&choise);if(choise==1){a=SequenceSearch(arr,count);for(i=0;i<count;i++){ n=i+1;if(arr[i]==a){ n=n+LENGTH;for(j=i+1;j<count;j++)arr[i++]=arr[j];arr[j]='\0';printf("删除所查到数据后的序列为:");for(i=0;i<count-1;i++)printf("%3d",arr[i]);m=i-1;b=count;printf("\n");count=count-1;}}if((n<=count)&&(m!=b-1)){count=count+1;arr[count-1]=a;printf("插入原序列不存在数据后的序列为:"); for(i=0;i<count;i++)printf("%3d",arr[i]);printf("\n");}}else if(choise==2){ a=Search(arr,count);for(i=0;i<count;i++){ n=i+1;if(arr[i]==a){ n=n+LENGTH;for(j=i+1;j<count;j++)arr[i++]=arr[j];arr[j]='\0';printf("删除所查到数据后的序列为:");for(i=0;i<count-1;i++)printf("%3d",arr[i]);m=i-1;b=count;printf("\n");count=count-1;}}if((n<=count)&&(m!=b-1)){count=count+1;arr[count-1]=a;printf("插入原序列不存在数据后的序列为:"); for(i=0;i<count;i++)printf("%3d",arr[i]);printf("\n");}}else if(choise==3)selectsort(arr,count);else if(choise==4)break;}while(choise==1||choise==2||choise==3);}int SequenceSearch(int *fp,int Length){int data,i;printf("开始使用顺序查询.\n请输入你想要查找的数据.\n"); scanf_s("%d",&data);for(i=0;i<Length;i++)if(fp[i]==data){printf("经过%d次查找,查找到数据%d.\n",i+1,data); return data;}{printf("经过%d次查找,未能查找到数据%d.\n",i,data); return data;}}int Search(int *fp,int length){int data;printf("开始使用二分法查询.\n请输入你想要查找到数据.\n");scanf_s("%d",&data);printf("由于二分查找法要求数据是有序的,现在开始为数组排序.\n");Sort(fp,length);printf("数组现在已经是从小到大排列,下面将开始查找.\n");int bottom,top,middle;bottom=0;top=length;int i=0;while(bottom<=top){middle=(bottom+top)/2;i++;if(fp[middle]<data){bottom=middle+1;}else if(fp[middle]>data){top=middle-1;}else {printf("经过%d次查找,查找到数据%d.\n",i,data);return data;}}printf("经过%d次查找,未能查找到数据%d.\n",i,data);return data;}void Sort(int *fp,int length){printf("现在开始为数组排序,排列结果将是从小到大.\n"); int temp;for(int i=0;i<length;i++)for(int j=0;j<length-i-1;j++)if(fp[j]>fp[j+1]){temp=fp[j];fp[j]=fp[j+1];fp[j+1]=temp;}printf("排序完成!\n下面输出排序后的数组:\n");for(int k=0;k<length;k++){printf("%5d",fp[k]);}printf("\n");}int selectsort(int *fp,int n){int data;printf("开始使用二分法查询.\n请输入你想要查找到数据.\n");scanf_s("%d",&data);printf("由于二分查找法要求数据是有序的,现在开始为数组排序.\n");int min,i,j,temp,k;for(i=0;i<n-1;i++){min=i;for(j=i+1;j<n;j++){if(fp[min]>fp[j])min=j;}if(min!=i){temp=fp[i];fp[i]=fp[min];fp[min]=temp;}}printf("选择后的排序为:\n");for(k=0;k<n;k++)printf("%3d",fp[k]);printf("\n");printf("数组现在已经是从小到大排列,下面将开始查找.\n");int bottom,top,middle;bottom=0;top=n;int m=0;while(bottom<=top){middle=(bottom+top)/2;m++;if(fp[middle]<data){bottom=middle+1;}else if(fp[middle]>data){top=middle-1;}else {printf("经过%d次查找,查找到数据%d.\n",m,data); return data;}}printf("经过%d次查找,未能查找到数据%d.\n",m,data); return data;}六、实验结果软件开发技术实验指导书第11页共11页。