结构与联合实验实验报告Word文档格式.docx
- 文档编号:18202823
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:41
- 大小:187.07KB
结构与联合实验实验报告Word文档格式.docx
《结构与联合实验实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《结构与联合实验实验报告Word文档格式.docx(41页珍藏版)》请在冰豆网上搜索。
c
3
*p++->
t,*p->
t
4
*(++p)->
5
*++p->
6
++*p->
2.源程序修改、替换
下面所给源程序的功能是:
给定一批整数,以0作为结束标志且不作为结点,将其建成一个先进先出的链表,先进先出链表的指头指针始终指向最先创建的结点(链头),先建结点指向后建结点,后建结点始终是尾结点。
请完成以下工作:
(1)源程序中存在什么样的错误(先观察执行结果)?
对程序进行修改、调试,使之能够正确完成指定任务。
(2)修改替换create_list函数,将其建成一个后进先出的链表。
后进先出链表的头指针始终指向最后创建的结点(链头),后建结点指向先建结点,先建结点始终是尾结点。
源程序:
#include"
stdio.h"
stdlib.h"
structs_list{
intdata;
/*数据域*/
structs_list*next;
/*指针域*/
};
voidcreate_list(structs_list*headp,int*p);
voidmain(void)
{
structs_list*head=NULL,*p;
ints[]={1,2,3,4,5,6,7,8,0};
/*0为结束标记*/
create_list(head,s);
/*创建新链表*/
p=head;
/*遍历指针p指向链头*/
while(p){
printf("
%d\t"
p->
data);
/*输出数据域的值*/
p=p->
next;
/*遍历指针p指向下一结点*/
}
printf("
\n"
);
}
voidcreate_list(structs_list*headp,int*p)
structs_list*loc_head=NULL,*tail;
if(p[0]==0)/*相当于*p==0*/
;
else{/*loc_head指向动态分配的第一个结点*/
loc_head=(structs_list*)malloc(sizeof(structs_list));
loc_head->
data=*p++;
/*对数据域赋值*/
tail=loc_head;
/*tail指向第一个结点*/
while(*p){/*tail所指结点的指针域指向动态创建的结点*/
tail->
next=(structs_list*)malloc(sizeof(structs_list));
tail=tail->
/*tail指向新创建的结点*/
/*向新创建的结点的数据域赋值*/
}
tail->
next=NULL;
/*对指针域赋NULL值*/
headp=loc_head;
/*使头指针headp指向新创建的链表*/
3.程序设计
编写并上机调试运行能实现以下功能的程序或函数:
(1)编写一个程序,实现以下功能:
设计一个字段结构structbits,它将一个8位无符号字节从最低位向最高位声明为8个字段,各字段依次为bit0,bit1,…,bit7,且bit0的优先级最高。
同时设计8个函数,第i个函数以biti(i=0,1,2,…,7)为参数,并且在函数体内输出biti的值。
将8个函数的名字存入一个函数指针数组p_fun。
如果bit0为1,调用p_fun[0]指向的函数。
如果structbits中有多位为1,则根据优先级从高到低依次调用函数指针数组p_fun中相应元素指向的函数。
8个函数中的第0个函数可以设计为:
voidf0(structbitsb)
Printf(“thefunction%discalled!
\n”,b);
}
(2)假设用单向链表建立一张班级成绩单,包括每个学生的学号、姓名、英语、高等数学、普通物理、C语言程序设计四门课程的成绩。
用函数编程实现下列功能:
(1)输入每个学生的各项信息。
(2)输出每个学生的各项信息。
(3)修改指定学生的指定数据项的内容。
(4)统计每个同学的平均成绩(保留2位小数)。
(5)输出各位同学的学号、姓名、四门课程的总成绩和平均成绩。
4.选做题
(1)对上述程序设计题中第
(2)题的程序,增加按照平均成绩进行升序排序的函数,试写出用交换节点数据域的方法升序排序的函数,排序可选择用选择法或冒泡法。
(2)对选做题第
(1)题,进一步写出用交换1节点指针域的方法升序排序的函数。
(3)采用双向链表重做编程设计题中的第
(2)题。
三、实验步骤及结果
1.表达式求值的程序验证
100
B
V
验证程序:
#include<
stdio.h>
intmain(void)
char*m;
char*n;
char*e;
char*f;
charu[]="
charv[]="
m=u,n=v;
structT{
intx;
charc;
char*t;
}a[]={{11,'
A'
u},{100,'
B'
v}},*p=a;
e=a[0].t;
f=a[1].t;
1.(++p)->
x\t%d\n"
(++p)->
x);
p=a;
*u=*m;
*v=*n;
a[0].t=e;
a[1].t=f;
2.p++,p->
c\t%c\n"
(p++,p->
c));
3.*p++->
t\t%c\n"
(*p++->
t));
4.*(++p)->
(*(++p)->
5.*++p->
(*++p->
6.++*p->
(++*p->
return0;
2.源程序修改、替换
(1)
#include<
stdlib.h>
structs_list{
intdata;
structs_list*next;
};
voidcreat_list(structs_list**headp,int*p);
intmain()
ints[]={1,2,3.4,5,6,7,8,0};
creat_list(&
head,s);
p=p->
voidcreat_list(structs_list**headp,int*p)
structs_list*loc_head=NULL,*tail;
if(p[0]==0)
;
else
{
loc_head=(structs_list*)malloc(sizeof(structs_list));
loc_head->
tail=loc_head;
while(*p)
tail->
tail=tail->
*headp=loc_head;
(2)
next=tail;
structbits{
unsignedcharbit0:
1;
unsignedcharbit1:
unsignedcharbit2:
unsignedcharbit3:
unsignedcharbit4:
unsignedcharbit5:
unsignedcharbit6:
unsignedcharbit7:
}t;
voidf0(structbitsb)
the1function%discalled!
b.bit0);
voidf1(structbitsb)
the2function%discalled!
b.bit1);
voidf2(structbitsb)
the3function%discalled!
b.bit2);
voidf3(structbitsb)
the4function%discalled!
b.bit3);
voidf4(structbitsb)
the5function%discalled!
b.bit4);
voidf5(structbitsb)
the6function%discalled!
b.bit5);
voidf6(structbitsb)
the7function%discalled!
b.bit6);
voidf7(structbitsb)
the8function%discalled!
b.bit7);
pleaseinputanunsignedbit:
unionw{
unsignedcharh;
structbitst;
}a;
a.h=getchar();
void(*p_fun[8])(structbits);
p_fun[0]=f0;
p_fun[1]=f1;
p_fun[2]=f2;
p_fun[3]=f3;
p_fun[4]=f4;
p_fun[5]=f5;
p_fun[6]=f6;
p_fun[7]=f7;
if(a.t.bit0)p_fun[0](a.t);
if(a.t.bit1)p_fun[1](a.t);
if(a.t.bit2)p_fun[2](a.t);
if(a.t.bit3)p_fun[3](a.t);
if(a.t.bit4)p_fun[4](a.t);
if(a.t.bit5)p_fun[5](a.t);
if(a.t.bit6)p_fun[6](a.t);
if(a.t.bit7)p_fun[7](a.t);
string.h>
structstu
longnum;
chars[10];
intc1;
intc2;
intc3;
intc4;
structstu*next;
voidcreatlist(structstu**headp);
voidoutputlist(structstu**headp);
voidcorrectlist(structstu**headp);
voidavstu(structstu**headp);
voidsumstu(structstu**headp);
structstu*head=NULL;
creatlist(&
head);
outputlist(&
correctlist(&
avstu(&
sumstu(&
voidcreatlist(structstu**headp)
*headp=(structstu*)malloc(sizeof(structstu));
structstu*tail=*headp,*p=*headp;
pleaseinputthenumberofstudentthenameGradeofEnglishGradeofmathGradeofphysicsGradeofClanguage.\n"
Toendtheinput,pleaseintput0asthenumberofstudent.\n"
for(;
)
scanf("
%ld"
&
p->
num);
if(p->
num==0)
break;
%s%d%d%d%d"
s,&
c1,&
c2,&
c3,&
c4);
p=(structstu*)malloc(sizeof(structstu));
next=p;
tail=p;
voidoutputlist(structstu**headp)
structstu*p=*headp;
while(p->
next!
=NULL)
ID%ldNAME%sENG%dMATH%dPHY%dC%d\n"
num,p->
s,p->
c1,p->
c2,p->
c3,p->
voidcorrectlist(structstu**headp)
structstu*p;
p=*headp;
1:
lookupbyname\n"
2:
lookupbynumber\n"
c=getchar();
switch(c)
case'
1'
:
pleaseinputthename\n"
chart[10];
%s"
t);
=NULL&
&
strcmp(p->
s,t);
p=p->
next)
if(!
s,t))
FINDID%ldNAME%sENG%dMATH%dPHY%dC%d\n"
elseif(p->
next==NULL)
NOTFOUND\n"
return;
2'
pleaseinputthenumber\n"
longtmp;
tmp);
tmp!
=p->
num;
if(tmp==p->
num)
whichonetochange?
number\n"
name\n"
3:
GradeofEnglish\n"
4:
GradeofMath\n"
5:
GradeofPhysics\n"
6:
GradeofCLanguage\n"
7:
Idon'
twanttochageanything\n"
pleasereinput\n"
s);
3'
%d"
c1);
4'
c2);
5'
c3);
6'
default:
voidavstu(structstu**headp)
=NULL;
doubletp;
tp=(p->
c1+p->
c2+p->
c3+p->
c4)/4.0;
ID%ldName%saverage%.2lf\n"
s,tp);
voidsumstu(structstu**headp)
intsum;
sum=p->
c4;
tp=sum/4.0;
ID%ldName%ssumis%daverageis%.2lf\n"
s,sum,tp);
doublec5;
voidsort_lists(structstu*head);
voidoutputlist2(structstu**headp);
int
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 联合 实验 报告