C语言实习报告.docx
《C语言实习报告.docx》由会员分享,可在线阅读,更多相关《C语言实习报告.docx(10页珍藏版)》请在冰豆网上搜索。
![C语言实习报告.docx](https://file1.bdocx.com/fileroot1/2023-1/1/9c99c6ea-12d2-4ec0-ac9a-077d81eb69db/9c99c6ea-12d2-4ec0-ac9a-077d81eb69db1.gif)
C语言实习报告
题目一线性结构的操作
1.用线性表的顺序存储(数组)保存数据
算法的N-S图或流程图
2.用线性表的链式存储(链表)保存数据
插入:
H
S
inelude#includetypedefstruct
{
intnum;//学号
charname[10];//姓名
}student;//定义的抽象元素类型ElemtypetypedefstructNode/*结点类型定义*/{
studentdata;
structNode*next;
}Node,*LinkList;/*LinkList为结构指针类型*/
staticintcount;//学生人数
//带头结点的尾插入法创建链表
voidinsert(LinkListhead)
{
LinkListp,q;〃p代表的待插元素代入最后一个元素
q=head;〃q指向head结点
printf("输入学生人数:
");
scanf("%d",&count);
for(inti=0;i{
printf("\n输入第%(个学生信息:
\n",i+1);
p=(LinkList)malloc(sizeof(Node));//结点p申请一个空间
printf("输入学号:
");
scanf("%d",&p->data.num);//输入结点p的数据°学号
printf("\n输入姓名:
");
scanf("%s",p->data.name);//输入结点的数据域姓名name为数组类
型数组名为首地址所有此处不需要地址符号
if(i==0)
{
head->next=p;〃i=0链表中没有元素只有头节点把插入到head
之后
else
{
q->next=p;//链表中已有结点元素结点采用尾插入法
}
q=p;//每插入一个元素就赋值于qq始终指向最后一个元素
}
p->next=NULL;//设置next域为空
}
voidprint(LinkListhead)
{
LinkListx;//定义一个链表结点
x=head->next;//该节点指向第一个元素
printf("学生信息如下\n");
while(x)//存在结点
{
printf("学号%d姓名%s\n",x->data.num,x->data.name);//输出该
结点的数据域学号和姓名
x=x->next;//下一个元素
}
printf("\n");
}
//把链表中的文件信息放入文件中
//写入语句
voidsavetofile(LinkListhead)
{
FILE*fp;
LinkListp;
p=head->next;
if((fp=fopen("d:
\\st2.txt","wb+"))==NULL)
{
printf("不能打开文件");
return;
}
while(p)
{
fprintf(fp,"%d%s\r\n",p->data.num,p->data.name);
p=p->next;
}
printf("\n写入成功\n");
}
//功能菜单提示性语句voidmenu(){
printf("\n0.退出1.输入2.输出3.写入\n");
}voidmain()
{
intchoice;
LinkListl;
l=(LinkList)malloc(sizeof(Node));//头结点申请空间
l->next=NULL;//头结点的next为空
menu();
while
(1)
{
scanf("%d",&choice);//输入一个整数
switch(choice)
{
case1:
insert(l);menu();break;
case2:
print(l);menu();break;
default:
exit(O);
题目二排序
#include"stdio.h"
#include"stdlib.h"
#include"time.h"
#defineTRUE1
#defineFALSE0
typedefintKeyType;
typedefintOtherType;
#defineMAXSIZE200/*线性表可能达到的最大长度*/
typedefstruct
{KeyTypekey;
OtherTypeother_data;
}RecordType;
voidInsSort(RecordTyper[],intlength)
/*对记录数组r做直接插入排序,length为数组中待排序记录的数目*/
{
inti,j;
for(i=2;i<=length;i++)
{
r[O]=r[i];/*将待插入记录存放到监视哨r[0]中*/
j=i-1;
while(r[O].key{
r[j+1]=r[j];
j=j-1;
}
r[j+1]=r[0];/*将待插入记录插入到已排序的序列中*/
}
}/*InsSort*/
voidBubbleSort(RecordTyper[],intlength)
/*对记录数组r做冒泡排序,length为数组的长度*/
{
intn,i,j;
intchange;
RecordTypex;
n=length;
change=TRUE;
for(i=1;i<=n-1&&change;++i)
{
change=FALSE;
for(j=1;j<=n-i;++j)
if(r[j].key>r[j+1].key)
{x=r[j];
r[j]=r[j+1];
r[j+1]=x;
change=TRUE;
}
}
}/*BubbleSort*/
voidSelectSort(RecordTyper[],intlength)
/*对记录数组r做简单选择排序,length为数组的长度*/
{
inti,j,k;
intn;
RecordTypex;
n=length;
for(i=1;i<=n-1;++i)
{
k=i;
for(j=i+1;j<=n;++j)
if(r[j].keyk=j;
if(k!
=i)
{
x=r[i];
r[i]=r[k];
r[k]=x;
}
}
}/*SelectSort*/
voidsqrand(RecordTyper[])〃获取随机数据
{
inti;
intlen;
srand(time(NULL));〃设置随机数种子。
for(i=1;i<=100;i++)
{
r[i].key=rand()%101;
}
}
voidout(RecordTyper[])
{
for(inti=1;i<=100;i++)
{
printf("%5d",r[i].key);
}
}
voidmenu()
{
printf("\n1生成随机数2输出随机数3插入排序4冒泡排序5简单选择
排序其他退出\n");
}
intmain()
{
intlen,n;
RecordTyper[MAXSIZE];
menu();
len=100;
while
(1)
{
scanf("%d",&n);
switch(n)
{
case1:
sqrand(r);break;
case2:
out(r);break;
case3:
1nsSort(r,len);break;
case4:
BubbleSort(r,len);break;
case5:
SelectSort(r,len);break;
default:
exit(O);break;
}
menu();
}
return0;
}
源程序清单
宿舍结构体顺序存储结构定义如下:
#defineMAXSIZE100
typedefstruct//学生住宿记录结构体
{
chardormlD[10];
intstudentID;
charname[10];
charsex[2];
intage;
}dormitory;
typedefstruct//顺序表的存储结构
{
dormitorydorm[MAXSIZE];//线性表占用的数组空间
intlast;//最后一个元素在数组中的位置(下标值),空表置为-1
}SeqList;
宿舍结构体链式存储结构定义如下:
typedefstructdormitory//学生住宿记录结构体
{
chardormID[10];
intstudentID;
charname[10];
charsex[2];
intage;
}dormitory;
typedefstructNode//学生住宿记录结点
studentdata;
structNode*next;
为结构体指针类型
}Node,*LinkList;//LinkList
题目一线性结构的操作
1.用线性表的顺序存储(数组)保存数据
(1)键盘输入你所在宿舍的同学信息到数组;
(2)遍历输出所以学生数据;
(3)按姓名查找并输出指定学生数据,统计查找的次数;
(4)把数组内容输出到文件;
(5)从文件读入学生数据,按学号排序后显示在屏幕;
(6)某同学调入你的宿舍,请增加其信息;并查看增加后的结果;
(7)某同学调离你的宿舍,请删除其信息,并查看删除后的结果;
题目一线性结构的操作
2.用线性表的链式存储(链表)保存数据
(1)键盘输入你所在宿舍的同学信息到数组;
(2)遍历输出所以学生数据;
(3)按姓名查找并输出指定学生数据,统计查找的次数;
(4)把数组内容输出到文件;
(5)从文件读入学生数据,按学号排序后显示在屏幕;
(6)某同学调入你的宿舍,请增加其信息;并查看增加后的结果;
(7)某同学调离你的宿舍,请删除其信息,并查看删除后的结果;题目二排序
实习总结报告
这次课程设计的心得体会通过实习我的收获如下:
数据结构是计算机很基础的一
门学科,但是学习就是要从基础学起•本次实训首先巩固课本上重要知识点,首先
是一些基本操作,掌握线性表在单链存储结构中实现基本运算(查找、插入、删除、合并等)的算法,线性表在单向循环链表结构中实现基本运算(查找、插入、删除、合并等)的算法1巩固和加深了对数据结构的理解,提高综合运用本课程所学知识的能力。
2、培养了我选用参考书,查阅手册及文献资料的能力。
培养独立思考,深入研究,分析问题、解决问题的能力。
3、通过实际编译系统的
分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。
4、通过课程
设计,培养了我严肃认真的工作作风,逐步建立正确的生产观念、经济观念和全局观念。
从刚开始得觉得很难,到最后把这个做出来,付出了很多,也得到了很多,以前总以为自己对编程的地方还不行,现在,才发现只要认真做,没有什么不可能。
编程时要认真仔细,出现错误要及时找出并改正,(其中对英语的要求也体
现出来了,因为它说明错误的时候都是英语)遇到问题要去查相关的资料。
反复的调试程序,最好是多找几个同学来对你的程序进行调试并听其对你的程序的建议,在他们不知道程序怎么写的时候完全以一个用户的身份来用对你的用户界面做一些建议,正所谓当局者迷旁观者清,把各个注意的问题要想到;同时要形成自己的编写程序与调试程序的风格,从每个细节出发,不放过每个知识点,注意与理论的联系和理论与实践的差别。
另外,要注意符号的使用,注意对字符处理,特别是对指针的使用很容易出错且调试过程是不会报错的,那么我们要始终注意指针的初始化不管它怎么用以免不必要麻烦。
通过近两周的学习与实践,体验了一下离开课堂的学习,也可以理解为一次实践与理论的很好的连接。
特别是本组所做的题目都是课堂上所讲的例子,在实行之的过程中并不是那么容易事让人有一种纸上谈兵的体会,正所谓纸上得来终觉浅绝知此事要躬行。
实训过程中让我们对懂得的知识做了进一步深入了解,让我们的理解与记忆更深刻,对不懂的知识与不清楚的东西也做了一定的了解•