收藏 分销(赏)

软件技术基础实验规范及大纲(C语言学生版).doc

上传人:xrp****65 文档编号:7656236 上传时间:2025-01-11 格式:DOC 页数:10 大小:85KB 下载积分:10 金币
下载 相关 举报
软件技术基础实验规范及大纲(C语言学生版).doc_第1页
第1页 / 共10页
软件技术基础实验规范及大纲(C语言学生版).doc_第2页
第2页 / 共10页


点击查看更多>>
资源描述
《软件技术基础》课程实验教学规范(理工类专业) 第一部分 《软件技术基础》课程实验教学大纲 适用专业:非计算机专业(理工类) 实验类别:基础实验 总实验学时:6学时(分3次上机,每次2学时) 一、 教学总目的和要求 本大纲是针对全校选修课程中《软件技术基础》课程的上机应用训练而编写的。本课程的主要任务是运用在《软件技术基础》课程中学到的理论知识指导实验,使学生们建立起验证常用数据结构的算法,提高熟练解决实际问题的编程能力。本实验课程着重培养学生的逻辑思维能力和动手能力,帮助学生加深对常用数据结构的理解,掌握典型管理信息系统的开发方法,培养良好的实验习惯。 要求学生独立完成每个实验,教师检查实验现象和实验结果。实验中出现的问题,学生应自己解决,如果解决不了,可以在教师指导下加以解决。 二、 实验目的: 1. 掌握数据结构中的一些基本概念。数据、数据项、数据元素、数据类型和数据结构,以及它们之间的关系。 2. 了解数据的逻辑结构和数据的存储结构之间的区别与联系;数据的运算与数据的逻辑结构的关系。 3. 掌握线性表的基本操作:插入、删除、查找以及线性表的合并等运算。 4. 掌握常用的排序方法,并用高级语言实现排序算法。 5. 理解排序的定义和各种排序的特点。 6. 了解排序过程以及依据的原则,并了解各种排序方法的时间复杂度分析。 7. 掌握运用C语言上机调试线性表的基本方法。 三、 实验条件 1. 硬件:每人一台微机 2. 软件:操作系统和C语言系统 四、 实验方法 课前认真准备预习。实验时先确定存储结构后,上机调试实现线性表的基本运算。课后根据教师要求撰写实验报告。 五、 实验内容 1、线性表操作(4学时) 【内容】 1. 试编写在无头结点的单链表上实现线性表基本运算LOCATE(L,X),INSERT(L,X,1)和DELETE(L,1)的算法。 参考算法: #include <stdio.h> typedef struct node { int data; struct node *next; }lklist; lklist *creat(void) { lklist *p,*q,*head; int i=0; p=q=(lklist *)malloc(sizeof(lklist)); printf("\ncreate :input data,0--end\n"); scanf("%d", &p->data); head = NULL; while (p->data!=0) { i++; if(i==1) { head=p; } else { q->next=p; } q=p; /* 此部分学生填写(此处可能有一条或多条语句) */ } q->next=NULL; return(head); } void display(lklist *L) { lklist *p,*q; p=L; printf("\n"); while(p!=NULL) { /* 此部分学生填写(此处可能有一条或多条语句) */ } } void locate(lklist *L, int x) { lklist *p,*q;int i=1; p=L; while(p->next!=NULL) { if(p->data==x) { printf("\nfound!It's position is %d",i); return; } else { /* 此部分学生填写(此处可能有一条或多条语句) */ } } if(p->data!= x) { printf("no this node!"); } } lklist *insert(lklist *L,int x,int i) { lklist *p,*q;int j; p=L; q=(lklist *)malloc(sizeof(lklist)); q->data = x; if(i<0) { printf("error,try again!"); } if(i==1) { q->next=L; L=q; return L; } j=1; while((j<i-1) && (p->next!=NULL)) { j++; p=p->next; } if(j==i-1) { /* 此部分学生填写(此处可能有一条或多条语句) */ } else { printf("error!");return L; } } lklist *delete(lklist *L,int i) { lklist *p,*q; int j=1; p=L; if(i==1) { q=L; L=L->next; free(q); return L; } while(p->next&&j<i-1) { p=p->next; ++j; } if(!(p->next)||j>i) { return L; } /* 此部分学生填写(此处可能有一条或多条语句) */ return L; } main() { lklist *L; int data,loc,i; printf("\n1--insert 2--delete 3--locate\n"); printf("please input:"); scanf("%d",&i); switch(i) { case 1: L=creat(); printf("insert:input data and postion:"); scanf("%d,%d",&data,&loc); L=insert(L,data,loc); display(L); break; case 2: L=creat(); printf("delete data:input position:"); scanf("%d",&loc); L=delete(L,loc); display(L); break; case 3: L=creat(); printf("input the data want to find:"); scanf("%d",&data); locate(L,data); } } 2. 假设有两个按数据元素值递增有序排列的线性表A和B,均以单链表作为存储结构。编写算法将A表和B表归并成一个按元素值递减有序(即非递增有序,允许值相同)排列的线性表C,并要求利用原表(即A表和B表)结点空间存放表C。 参考算法: #include <stdio.h> typedef struct node { int data; struct node *next; }lklist; lklist *creat(void) { lklist *p,*q,*head; int i=0; p=q=(lklist *)malloc(sizeof(lklist)); printf("\ncreate :input data,0--end\n"); scanf("%d",&p->data); head=NULL; while(p->data!=0) { i++; if(i==1) { head=p; } else { q->next=p; } q=p; p=(lklist *)malloc(sizeof(lklist)); scanf("%d",&p->data); } q->next=NULL; return(head); } void display(lklist *L) { lklist *p,*q; p=L; printf("\n"); while(p!=NULL) { printf("%d ",p->data); p=p->next; } } lklist *connectlink(lklist *A,lklist *B,lklist *C) { lklist *p,*q,*m; p=A; q=B; C=NULL; while((p!=NULL)&&(q!=NULL)) { if(p->data<q->data) { m=p; A=A->next; p=A; } else { /* 此部分学生填写(此处可能有一条或多条语句) */ } m->next=C; C=m; } while(p!=NULL) { m=p; A=A->next; p=A; m->next=C; C=m; } while(q!=NULL) { /* 此部分学生填写(此处可能有一条或多条语句) */ } return C; } main() { lklist *A,*B,*C; A=creat(); B=creat(); C=NULL; C=connectlink(A,B,C); display(C); } 3. 将一个线性表中的值就地逆置。 main() { /* 主程序参数说明部分 */ int a[ ]={1,2,3,4,5,6,7,8},i; /* 将线性表以顺序存储方式存放 */ void Converse(int a[ ]; int n); /* 函数说明 */ /* 程序主体 */ printf(“\n 原数组序列为: “); for (i=0;i<8;i++) { printf(“%d”,a[i]); } Converse(a,8); /* 函数调用 */ printf(“\n 逆序数组序列为: “); for (i=0;i<8;i++) { printf(“%d”,a[i]); } } /* 函数 */ void Converse(int a[ ]; int n) { /* 参数说明部分*/ int m, x, i ; /* 程序主体 */ m=n/2; for (i=0;i<m;i++) { /* 此部分学生填写(此处可能有一条或多条语句) */ } } 4. 在线性表的顺序存储结构的第一个位置上插入一个元素。 #include <stdio.h> #define MAXSIZE 100 typedef struct { int datas[MAXSIZE]; int last; }SEQUENLIST; SEQUENLIST insert(SEQUENLIST la,int x); main() { int flag=1,x,i; SEQUENLIST la; la.last=0; printf("\n"); while(flag) { scanf("%d",&la.datas[la.last]); if(la.datas[la.last]==0) flag=0; la.last++; } la.last--; printf("\ninput the data want to insert:"); scanf("%d",&x); la=insert(la,x); printf("\n"); for(i=0;i<la.last;i++) printf("%d ",la.datas[i]); } SEQUENLIST insert(SEQUENLIST la,int x) { int k; for(k=la.last;k>=1;k--) /* 此部分学生填写(此处可能有一条或多条语句) */ la.datas[0]=x; la.last=la.last+1; return la; }  2、排序基本操作(2学时) 【内容】 1. 设计一待排序的线性表以顺序存储结构存储,试写出冒泡排序算法。 参考程序如下: #include <stdio.h> #define N 10 main( ) { int a[N+1]; int i, j, t; for(i = 1; i <= N; i++) { scanf("%d", &a[i]); } printf("\n"); for(j = 1; j < N; j++) for( i = 1; i < N-j+1; i++) /* 此部分学生填写(此处可能有一条或多条语句) */ printf("the sorted numbers:\n"); for(i = 1; i <= N; i++) { printf("%4d", a[i]); } } 2. 给出n个学生的考试成绩表,每条信息由姓名与分数组成,试设计一个算法: (1)按分数高低次序,打印出每个学生在考试中获得的名次,分数相同的为同一名次。 (2)按名次列出每个学生的姓名与分数。 参考程序如下: #define N 10 struct student { char name[8]; int score; }; struct student R[N]; main() { int num,i,j,max; struct student temp; printf("\n 请输入学生成绩:\n"); for(i=0;i<N;i++) { printf("name:"); scanf("%s",R[i].name); scanf("%4d",&R[i].score); } num=1; for(i=0;i<N;i++) { /* 此部分学生填写(此处可能有一条或多条语句) */ if(max!=i) { temp=R[max]; R[max]=R[i]; R[i]=temp; } if((i>0)&&(R[i].score<R[i-1].score)) { num=num+1; } printf("%4d%s%4d",num,R[i].name,R[i].score); } } 第10页 共10页
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服