计算机软件技术基础实验报告
计算机软件技术基础实验报告

计算机软件技术基础实验报告自动化0901班郝万福学号:20092395实验1:线性表的排序与查找目的:掌握数据结构的基本概念、线性表的基本操作以及查找和排序方法的设计。
内容:键盘输入一组无序数据,添加到线性表中;排序线性表并输出排序结果;键盘输入一个数,并插入到排好序的线性表中(要求插入后的表仍为有序表),输出结果;键盘输入一个数,并从线性表中删除相应的数据,输出结果。
要求:程序清单;运行过程及运行结果。
实验代码:/*班级:自动化 0901 班姓名:郝万福学号:20092395编译环境: Visual Studio 2011Windows 7 x86-64 旗舰版*/#include"stdafx.h"#include"iostream"#include<conio.h>// 程序实现有各种方法,这里给出一个实例。
// 定义一个线性表const int nMaxSize = 15; // 最大值int nLen = 0; // 表中元素个数int nLinearList[nMaxSize];// 定义操作void LSort();void LOut();void LInsert(int n);void LDelete(int n);int main(){// 输入数据并放入线性表中printf("Please input data\n"); // std::cout << "Please input data\n";int nIn = 0;for (int i = 0; i <= 9; i++){scanf("%d",&nIn); // std::cin >> nIn;nLinearList[i] = nIn;nLen++;}LSort(); // 排序线性表LOut(); // 输出结果printf("Please input a data to insert \n");scanf("%d",&nIn);LInsert(nIn); // 输入一个数字,并插入到线性表中LOut();printf("Please input a data to delete \n");scanf("%d",&nIn);LDelete(nIn); // 输入一个数字,并从线性表中删除LOut();char chTmp;printf("Please input a char to finish this program.");chTmp = getch();return 0;}void LSort() // 冒泡排序,由大到小{for(int j=0;j<=10;j++){for (int i=0;i<11-j;i++)if (nLinearList[i]<nLinearList[i+1]){int temp=nLinearList[i];nLinearList[i]=nLinearList[i+1];nLinearList[i+1]=temp;}}}void LOut(){printf( "\n");for (int i = 0; i < nLen; i++){printf( "%d, ", nLinearList[i] );}printf( "\n");}void LInsert(int n){ nLen++;nLinearList[nLen] = n;for(int k=0;k<=nLen;k++){for (int l=0;l<nLen+1-k;l++)if (nLinearList[l]<nLinearList[l+1]) {int temp=nLinearList[l];nLinearList[l]=nLinearList[l+1]; nLinearList[l+1]=temp;}}}void LDelete(int n){int b=1;for(int k=0;k<=nLen;k++){if(n==nLinearList[k]) {b=0;}if(b==0){nLinearList[k]=nLinearList[k+1];}}nLen--;}实验结果:实验2:栈与队列的应用目的:掌握栈与队列的基本概念、基本操作及设计与应用。
电脑软件实验报告

实验名称:计算机软件应用实验实验日期:2023年3月15日实验地点:计算机实验室实验目的:1. 熟悉并掌握常用的电脑软件操作技巧。
2. 了解软件的功能及其在生活中的应用。
3. 提高计算机软件的使用效率。
一、实验内容1. 文字处理软件(Word)(1)实验目的:学习Word的基本操作,如新建文档、保存文档、设置字体格式、插入图片等。
(2)实验步骤:① 打开Word软件,新建一个空白文档;② 输入文字内容,并设置字体、字号、颜色等;③ 插入图片,调整图片大小和位置;④ 保存文档。
2. 电子表格软件(Excel)(1)实验目的:学习Excel的基本操作,如创建表格、输入数据、设置单元格格式、使用公式等。
(2)实验步骤:① 打开Excel软件,新建一个空白工作簿;② 创建表格,输入数据;③ 设置单元格格式,如字体、字号、颜色、边框等;④ 使用公式计算数据,如求和、平均值、最大值等。
3. 演示文稿软件(PowerPoint)(1)实验目的:学习PowerPoint的基本操作,如创建演示文稿、设置幻灯片背景、插入图片、添加动画等。
(2)实验步骤:① 打开PowerPoint软件,新建一个空白演示文稿;② 设置幻灯片背景,如颜色、图片等;③ 插入图片、文本框等元素;④ 添加动画效果,使演示文稿更具吸引力。
4. 网络安全软件(杀毒软件)(1)实验目的:学习网络安全软件的基本操作,如安装、卸载、更新病毒库、扫描电脑等。
(2)实验步骤:① 安装杀毒软件,如360安全卫士、瑞星杀毒等;② 更新病毒库,确保杀毒软件的病毒库是最新的;③ 扫描电脑,查找并清除病毒。
二、实验结果与分析1. 通过本次实验,掌握了Word、Excel、PowerPoint等常用软件的基本操作,提高了计算机软件的使用效率。
2. 在实验过程中,学会了设置字体格式、插入图片、使用公式、设置单元格格式、添加动画等技巧,为今后的学习和工作奠定了基础。
3. 在网络安全方面,学会了安装、卸载、更新病毒库、扫描电脑等操作,提高了网络安全意识。
计算机软件技术基础实验报告_2

计算机软件基础实验报告姓名学号实验目的1. 掌握C语言程序设计方法, 并学会上机调试。
2. 熟悉Huffman编码源程序,并构造Huffman树。
实验内容试设计一算法, 从包括n个元素的数组中, 求最大和最小元素, 并使得当n个元素为有序排列时, 元素之间的比较次数仅为n-1次。
在给出的Huffman编码源程序基础上, 要求画出Huffman树, 求出与等长编码相比时的压缩比。
实验要求1.根据实验内容编写算法, 并用 C 语言进行程序设计。
2.将所编程序在计算机上调试通过,并全面测试.实验结果1. 以一个含有8个元素的一维数组{1, 2, 3, 5, 7, 8, 9, 12}为例,设计程序如下:#include<stdio.h>int maxArray(int x ,int y);int minArray(int x ,int y);int main(void){int i = 0 ;int array[8]={ 1, 2, 3, 5, 7, 8, 9, 12} ;printf;do{scanf("%d",&array[i]);i++;} while(i < 8);int maxTemp = array[0];int minTemp = array[0];int maxIndex = 0;int minIndex = 0;for(i=1;i<8;i++){maxTemp = maxArray(array[i] , maxTemp);minTemp = minArray(array[i] , minTemp);}for(i=0;i<8;i++){if (maxTemp == array[i]){maxIndex = i;}if (minTemp == array[i]){minIndex = i;}}printf;return 0;}运行结果如下:2.Huffman编码源程序#include <dos.h>#include <conio.h>#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct{unsigned int weight; //结点权值unsigned int parent,lchild,rchild; //结点的父指针, 左右孩子指针}HTNode,*HuffmanTree; //动态分配数组存储哈夫曼树typedef char **HuffmanCode; //动态分配数组存储哈夫曼编码表void CreateHuffmanTree(HuffmanTree &,unsigned int*,int ); //生成哈夫曼树void HuffmanCoding(HuffmanTree,HuffmanCode &,int ); //对哈夫曼树进行编码void PrintHuffmanCode(HuffmanCode,unsigned int*,int); //显示哈夫曼编码void Select(HuffmanTree,int,int&,int&); //在数组中寻找权值最小的两个结点void main(){HuffmanTree HT; //哈夫曼树HTHuffmanCode HC; //哈夫曼编码表HCint n,i; //n是哈夫曼树叶子结点数unsigned int *w; //w存放叶子结点权值char j='y';printf("演示构造哈夫曼树.\n");printf("输入需要进行编码的字符数目.\n例如:8\n");printf("然后输入每个字符出现的次数/权值.\n");printf("例如:5 29 7 8 14 23 3 11\n");printf("自动构造一棵哈夫曼树并显示哈夫曼编码.\n");printf(" 5---0110\n 29---10\n 7---1110\n 8---1111\n 14---110\n");printf(" 23---00\n 3---0111\n 11---010\n");while(j!='N'&&j!='n'){printf("请输入字符数目:");scanf("%d",&n); //输入字符数目if(n<=1) {printf("该数不合理!\n");continue;}w=(unsigned int*)malloc(n*sizeof(unsigned int)); //开辟空间存放权值printf("请输入各字符出现的次数/权值:\n");for(i=0;i<n;i++) scanf("%d",&w[i]); //输入各字符出现的次数/权值CreateHuffmanTree(HT,w,n); //生成哈夫曼树HuffmanCoding(HT,HC,n); //进行哈夫曼编码PrintHuffmanCode(HC,w,n); //显示哈夫曼编码printf("哈夫曼树构造完毕, 还要继续吗?(Y/N)");scanf(" %c",&j);}}void CreateHuffmanTree(HuffmanTree &HT,unsigned int *w,int n){//w存放n个结点的权值, 将构造一棵哈夫曼树HTint i,m;int s1,s2;HuffmanTree p;if(n<=1) return;m=2*n-1; //n个叶子结点的哈夫曼树, 有2*n-1个结点HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); //开辟2*n各结点空间for(p=HT+1,i=1;i<=n;++i,++p,++w) //进行初始化{p->weight=*w;p->parent=0;p->lchild=0;p->rchild=0;}for(;i<=m;++i,++p){p->weight=0;p->parent=0;p->lchild=0;p->rchild=0;}for(i=n+1;i<=m;++i) //建哈夫曼树{Select(HT,i-1,s1,s2);//从HT[1...i-1]中选择parent为0且weight最小的两个结点, 其序号分别为s1和s2HT[s1].parent=i; HT[s2].parent=i; //修改s1和s2结点的父指针parentHT[i].lchild=s1; HT[i].rchild=s2; //修改i结点的左右孩子指针HT[i].weight=HT[s1].weight+HT[s2].weight; //修改权值}}void HuffmanCoding(HuffmanTree HT,HuffmanCode &HC,int n){//将有n个叶子结点的哈夫曼树HT进行编码, 所编的码存放在HC中//方法是从叶子到根逆向求每个叶子结点的哈夫曼编码int i,c,f,start;char *cd;HC=(HuffmanCode)malloc((n+1)*sizeof(char *)); //分配n个编码的头指针向量cd=(char *)malloc(n*sizeof(char)); //开辟一个求编码的工作空间cd[n-1]='\0'; //编码结束符for(i=1;i<=n;++i) //逐个地求哈夫曼编码{start=n-1; //编码结束位置for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent) //从叶子到根逆向求编码if(HT[f].lchild==c) cd[--start]='0'; //若是左孩子编为'0'else cd[--start]='1'; //若是右孩子编为'1'HC[i]=(char *)malloc((n-start)*sizeof(char)); //为第i个编码分配空间strcpy(HC[i],&cd[start]); //将编码从cd复制到HC中}free(cd); //释放工作空间}void PrintHuffmanCode(HuffmanCode HC,unsigned int *w,int n){//显示有n个叶子结点的哈夫曼树的编码表int i;printf("HuffmanCode is :\n");for(i=1;i<=n;i++){printf(" %3d---",w[i-1]);puts(HC[i]);}printf("\n");}void Select(HuffmanTree HT,int t,int&s1,int&s2){//在HT[1...t]中选择parent不为0且权值最小的两个结点, 其序号分别为s1和s2 int i,m,n;m=n=10000;for(i=1;i<=t;i++){if(HT[i].parent==0&&(HT[i].weight<m||HT[i].weight<n)) if(m<n){n=HT[i].weight;s2=i;}else {m=HT[i].weight;s1=i;}}if(s1>s2) //s1放较小的序号{i=s1;s1=s2;s2=i;}}运行结果如下:输入数据后的运行结果:实验心得要熟练掌握程序的编写, 如果没有一定的想象能力和大量的上机实践是根本无法完成的。
计算机软件基础实验报告

计算机软件基础(二)实验报告实验一DOS和WINDOWS95系统的基本操作一、实验要求和目的1.熟悉MS-DOS环境。
2.掌握常用DOS命令的基本操作。
二、软硬件环境1.硬件环境:微机CPU 486以上,500MB以上硬盘,32M以上内存;2.软件环境:装有MASM 5.0、DEBUG、LINK和EDIT等应用程序。
三、实验涉及的主要知识单元●DOS的功能和组成:DOS的主要功能是管理磁盘文件,管理显示器、键盘、磁盘驱动器、打印机等各种设备,负责监视计算机及执行的处理过程,以便有效地利用系统资源,方便用户使用。
从内部来看,DOS是完成各种功能的一组程序。
版本不同,程序的数日也不同,但组成DOS的最主要的程序有四个,即命令处理模块(COMMAND.COM)、磁盘操作管理模块(MS-DOS.SYS)、输入输出接口模块(10.SYS)和一个引导程序。
存放DOS程序模块的磁盘称为DOS系统盘。
DOS提供了多条操作命令,对一般用户最常用的是有关文件操作、文件目录操作、磁盘操作和若干系统命令。
DOS的人机界面采用的是命令行方式。
●DOS的启动:DOS的启动就是从系统盘上把DOS装入内存并执行的过程。
启动MS-DOS应用程序,有三种方法:第一种方法:从“开始”菜单启动MS-DOS操作系统。
步骤为:1.在Windows XP界面状态,单击“开始”|“运行”命令,如图2-1-1所示。
图1-1 “运行”命令条2.在“运行”对话框中键入“cmd”,如图2-1-2所示,单击“确定”按钮。
图1-2 “运行”对话框3.操作系统界面随即进入MS-DOS模式。
如图2-1-3所示。
图 1-3 “运行”对话框第二种方法:单击“开始”|“程序”|“附件”|“命令提示符”命令即可启动MS-DOS操作系统。
第三种方法:在“我的电脑”或“资源管理器”中,一级一级打开驱动器和文件夹,直至找到需要运行的MS-DOS操作系统,双击启动程序文件。
计算机软件技术基础实验报告

}linklist;
体 linklist *creat()
{
实
int i;
linklist *head,*r,*q;
验
q=(linklist *)malloc(LEN);
head=q;
内
r=q;
q->next=NULL;
容
printf("Please input the number:\n");
scanf("%d",&i);
计算机软件技术基础实验报告
《计算机软件技术基础》实验报告
专 业 _____________ 年 级 _____________ 学 号 _____________ 学生姓名 _____________ 指导老师 _____________
南华大学计算机学院编
1 / 29
计算机软件技术基础实验报告
I 实验要求
while(p!=0)
{
printf("%d\n",p->data);
p=p->next;
}
}
void deletelist(int i,linklist *head)
{
linklist *p,*q;
int k=1;
p=head;
q=p->next;
3 / 29
计算机软件技术基础实验报告
while((q!=NULL)&&(i!=k)) {
实验一 线性表
【实验目的】
1.熟悉 VC 环境,学习如何使用 C 语言实现线性表的两种存储结构。 2.通过编程、上机调试,进一步理解线性表的基本概念,熟练运用 C 语言实现线性表基本操作。 3.熟练掌握线性表的综合应用问题。
计算机软件技术基础实验报告

学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期: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日成绩:五、实验心得与体会通过本次上机实验,我掌握了二叉树的建立、显示、节点数目、树深度等操作的程序实现,以及二叉树的先序、中序、后序遍历操作的程序实现,对树与二叉树的遍历,尤其是广度优先遍历和深度优先遍历的理解进一步加深,收获很多啊。
计算机软件基础实验报告

课程名称:计算机软件基础实验项目:1.最简单的C程序2.C程序的选择结构3.C程序的循环结构4.C程序的函数5.C程序的指针6.数据结构初步实验一、最简单的C程序一、实验目的(1)理解常用运算符的意义。
(2)掌握c 语言表达是的运算规则。
二、实际设备及器材计算机三、实验内容(1)整数除的危险性分析三个表达式的值,再设计程序测试,进行比较和分析。
int a=5,b=7,c=100,d,e,f;d=a/b*c;e=a*c/b;f=c/b*a;d=0,e=71,f=70.程序测试:#include<stdio.h>int main(){int a=5,b=7,c=100,d,e,f;d=a/b*c;e=a*c/b;f=c/b*a;printf("% d,% d,%d\n",d,e,f);}结果:(1)分析下面程序是比较x++与++x之间的区别。
例如:#include<stdio.h>int main(){int a=5,b=8;printf("a++=%d\n",a++);printf("a=%d\n",a);printf("++b=%d\n",++b);printf("b=%d\ny",b);}运行结果:由上述程序可以看出,x++是先使用x在使x+1,而++x是先使x+1在使用x。
(2)分析下列表达式的值测试程序:#include<stdio.h>int main(){int a,b,c,d,e,f;scanf("a=%d,b=%d\n",a,b);c=b+a+++a;d=b+(a++)+a;e=b+a+(++a);f=b+a+++a++;printf("c=%,d=%d,e=%d,f=%d\n",c,d,e,f);}四、思考题1.整数除的危险性2.C语言的运算规则实验二、C语言选择结构一、实验目的(1)掌握分支程序的基本结构。
计算机软件技术基础实验报告

学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年11月22日成绩:实验七SQL 简单查询、连接查询和子查询一、实验目的1.掌握在查询分析器中使用SELECT语句进行简单查询。
2.熟练掌握简单表的数据查询、数据排序和数据连接查询的操作方法。
3.熟练掌握数据查询中的分组、统计、计算和组合的操作方法。
4.观察查询结果, 体会SELECT语句实际应用二、实验用软件和工具1.计算机。
实验软件 VC++ 6.02.SQL Server2005软件。
三、实验步骤1 简单查询操作此部分查询包括投影、选择条件表达、数据排序、使用临时表等。
对EDUC(shiyan6)数据库实现以下查询:(1)求信电学院的学生学号和姓名;(2)求选修了课程的学生学号;(3)求选修C1 课程的学生学号和成绩,并要求对查询结果按成绩的降序排列,如果成绩相同则按学号的升序排列;(4)求选修课程C1 且成绩在80-90 之间的学生学号和成绩,并将成绩乘以系数0.75 输出;(5)求计算机系和数学系的姓张的学生的信息;(6)求缺少了成绩的学生的学号和课程号。
2 连接查询操作对EDUC(shiyan6)数据库实现以下查询:(1)查询每个学生的情况以及他(她)所选修的课程;(2)求学生的学号、姓名、选修的课程名及成绩;(3)求选修C1 课程且成绩在90 分以上的学生学号、姓名及成绩;(4)查询每一门课的间接先行课。
3.子查询操作,在数据库EDUC(shiyan6)中实现查询:学院:信电学院班级:姓名:学号:课程:计算机软件技术基础实验日期:2013年11月22日成绩:(1)求选修了高等数学的学生学号和姓名;(2)求C1 课程的成绩高于张三的学生学号和成绩;(3)求其他系中比计算机系某一学生年龄小的学生信息(即求其它系中年龄小于计算机系年龄最大者的学生);(4)求其他系中比计算机系学生年龄都小的学生信息;(5)求选修了C2 课程的学生姓名;(6)求没有选修C2 课程的学生姓名;(7)查询选修了全部课程的学生的姓名;(8)求至少选修了学号为“S2”的学生所选修的全部课程的学生学号和姓名。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机软件基础实验报告姓名学号实验目的1. 掌握C语言程序设计方法,并学会上机调试。
2. 熟悉Huffman编码源程序,并构造Huffman树。
实验内容1.试设计一算法,从包括n个元素的数组中,求最大和最小元素,并使得当n个元素为有序排列时,元素之间的比较次数仅为n-1次。
2.在给出的Huffman编码源程序基础上,要求画出Huffman树,求出与等长编码相比时的压缩比。
实验要求1.根据实验内容编写算法,并用 C 语言进行程序设计。
2. 将所编程序在计算机上调试通过,并全面测试。
实验结果1.以一个含有8个元素的一维数组{1,2,3,5,7,8,9,12}为例,设计程序如下:#include<stdio.h>int maxArray(int x ,int y);int minArray(int x ,int y);int main(void){int i = 0 ;int array[8]={1,2,3,5,7,8,9,12} ;printf;do{scanf("%d",&array[i]);i++;} while(i < 8);int maxTemp = array[0];int minTemp = array[0];int maxIndex = 0;int minIndex = 0;for(i=1;i<8;i++){maxTemp = maxArray(array[i] , maxTemp);minTemp = minArray(array[i] , minTemp);}for(i=0;i<8;i++){if (maxTemp == array[i]){maxIndex = i;}if (minTemp == array[i]){minIndex = i;}}printf;return 0;}运行结果如下:2.Huffman编码源程序#include <dos.h>#include <conio.h>#include <stdio.h>#include <stdlib.h>#include <string.h>typedef struct{unsigned int weight; //结点权值unsigned int parent,lchild,rchild; //结点的父指针,左右孩子指针}HTNode,*HuffmanTree; //动态分配数组存储哈夫曼树typedef char **HuffmanCode; //动态分配数组存储哈夫曼编码表void CreateHuffmanTree(HuffmanTree &,unsigned int*,int ); //生成哈夫曼树void HuffmanCoding(HuffmanTree,HuffmanCode &,int ); //对哈夫曼树进行编码void PrintHuffmanCode(HuffmanCode,unsigned int*,int); //显示哈夫曼编码void Select(HuffmanTree,int,int&,int&); //在数组中寻找权值最小的两个结点void main(){HuffmanTree HT; //哈夫曼树HTHuffmanCode HC; //哈夫曼编码表HCint n,i; //n是哈夫曼树叶子结点数unsigned int *w; //w存放叶子结点权值char j='y';printf("演示构造哈夫曼树.\n");printf("输入需要进行编码的字符数目.\n例如:8\n");printf("然后输入每个字符出现的次数/权值.\n");printf("例如:5 29 7 8 14 23 3 11\n");printf("自动构造一棵哈夫曼树并显示哈夫曼编码.\n");printf(" 5---0110\n 29---10\n 7---1110\n 8---1111\n 14---110\n");printf(" 23---00\n 3---0111\n 11---010\n");while(j!='N'&&j!='n'){printf("请输入字符数目:");scanf("%d",&n); //输入字符数目if(n<=1) {printf("该数不合理!\n");continue;}w=(unsigned int*)malloc(n*sizeof(unsigned int)); //开辟空间存放权值printf("请输入各字符出现的次数/权值:\n");for(i=0;i<n;i++) scanf("%d",&w[i]); //输入各字符出现的次数/权值CreateHuffmanTree(HT,w,n); //生成哈夫曼树HuffmanCoding(HT,HC,n); //进行哈夫曼编码PrintHuffmanCode(HC,w,n); //显示哈夫曼编码printf("哈夫曼树构造完毕,还要继续吗?(Y/N)");scanf(" %c",&j);}}void CreateHuffmanTree(HuffmanTree &HT,unsigned int *w,int n){//w存放n个结点的权值,将构造一棵哈夫曼树HTint i,m;int s1,s2;HuffmanTree p;if(n<=1) return;m=2*n-1; //n个叶子结点的哈夫曼树,有2*n-1个结点HT=(HuffmanTree)malloc((m+1)*sizeof(HTNode)); //开辟2*n各结点空间for(p=HT+1,i=1;i<=n;++i,++p,++w) //进行初始化{p->weight=*w;p->parent=0;p->lchild=0;p->rchild=0;}for(;i<=m;++i,++p){p->weight=0;p->parent=0;p->lchild=0;p->rchild=0;}for(i=n+1;i<=m;++i) //建哈夫曼树{Select(HT,i-1,s1,s2);//从HT[1...i-1]中选择parent为0且weight最小的两个结点,其序号分别为s1和s2HT[s1].parent=i; HT[s2].parent=i; //修改s1和s2结点的父指针parentHT[i].lchild=s1; HT[i].rchild=s2; //修改i结点的左右孩子指针HT[i].weight=HT[s1].weight+HT[s2].weight; //修改权值}}void HuffmanCoding(HuffmanTree HT,HuffmanCode &HC,int n){//将有n个叶子结点的哈夫曼树HT进行编码,所编的码存放在HC中//方法是从叶子到根逆向求每个叶子结点的哈夫曼编码int i,c,f,start;char *cd;HC=(HuffmanCode)malloc((n+1)*sizeof(char *)); //分配n个编码的头指针向量cd=(char *)malloc(n*sizeof(char)); //开辟一个求编码的工作空间cd[n-1]='\0'; //编码结束符for(i=1;i<=n;++i) //逐个地求哈夫曼编码{start=n-1; //编码结束位置for(c=i,f=HT[i].parent;f!=0;c=f,f=HT[f].parent) //从叶子到根逆向求编码if(HT[f].lchild==c) cd[--start]='0'; //若是左孩子编为'0'else cd[--start]='1'; //若是右孩子编为'1'HC[i]=(char *)malloc((n-start)*sizeof(char)); //为第i个编码分配空间strcpy(HC[i],&cd[start]); //将编码从cd复制到HC中}free(cd); //释放工作空间}void PrintHuffmanCode(HuffmanCode HC,unsigned int *w,int n){//显示有n个叶子结点的哈夫曼树的编码表int i;printf("HuffmanCode is :\n");for(i=1;i<=n;i++){printf(" %3d---",w[i-1]);puts(HC[i]);}printf("\n");}void Select(HuffmanTree HT,int t,int&s1,int&s2){//在HT[1...t]中选择parent不为0且权值最小的两个结点,其序号分别为s1和s2int i,m,n;m=n=10000;for(i=1;i<=t;i++){if(HT[i].parent==0&&(HT[i].weight<m||HT[i].weight<n)) if(m<n){n=HT[i].weight;s2=i;}else {m=HT[i].weight;s1=i;}}if(s1>s2) //s1放较小的序号{i=s1;s1=s2;s2=i;}}运行结果如下:输入数据后的运行结果:实验心得要熟练掌握程序的编写,如果没有一定的想象能力和大量的上机实践是根本无法完成的。
首先要做的是多看程序,勤编程序。
完整地编写一个准确、严谨的程序绝非易事。
大量阅读程序有助于我们掌握编程的常用语法和基本要领。
随着阅读量的不断增加,我们大脑中对于知识的积累越来越丰富,对于编程的感觉也越来越敏感。
渐渐地,在基本掌握了编程的方法套路后,我们大脑中的“数据库”日益壮大,编写各种类型的程序便会显得得心应手,也不再像以前那样看到编程就会一头雾水。