实验八教案含答案.docx

上传人:b****4 文档编号:4221032 上传时间:2023-05-06 格式:DOCX 页数:30 大小:23.48KB
下载 相关 举报
实验八教案含答案.docx_第1页
第1页 / 共30页
实验八教案含答案.docx_第2页
第2页 / 共30页
实验八教案含答案.docx_第3页
第3页 / 共30页
实验八教案含答案.docx_第4页
第4页 / 共30页
实验八教案含答案.docx_第5页
第5页 / 共30页
实验八教案含答案.docx_第6页
第6页 / 共30页
实验八教案含答案.docx_第7页
第7页 / 共30页
实验八教案含答案.docx_第8页
第8页 / 共30页
实验八教案含答案.docx_第9页
第9页 / 共30页
实验八教案含答案.docx_第10页
第10页 / 共30页
实验八教案含答案.docx_第11页
第11页 / 共30页
实验八教案含答案.docx_第12页
第12页 / 共30页
实验八教案含答案.docx_第13页
第13页 / 共30页
实验八教案含答案.docx_第14页
第14页 / 共30页
实验八教案含答案.docx_第15页
第15页 / 共30页
实验八教案含答案.docx_第16页
第16页 / 共30页
实验八教案含答案.docx_第17页
第17页 / 共30页
实验八教案含答案.docx_第18页
第18页 / 共30页
实验八教案含答案.docx_第19页
第19页 / 共30页
实验八教案含答案.docx_第20页
第20页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

实验八教案含答案.docx

《实验八教案含答案.docx》由会员分享,可在线阅读,更多相关《实验八教案含答案.docx(30页珍藏版)》请在冰点文库上搜索。

实验八教案含答案.docx

实验八教案含答案

第八课

教学内容:

结构体变量和结构体数组处理类算法

教学目的:

掌握结构体变量和结构体数组处理类算法的考题

教学内容:

一、结构体变量和结构体数组处理类算法的考题特点

1.此类算法主要以填空题和程序设计题为考查形式。

2.在填空和改错题中容易考到的知识:

(1)结构体变量的运算:

C规定只有同类型的结构体变量才能整体赋值运算。

(2)结构体变量成员的运算:

使用分量运算符访问最低一级成员,且成员的性质决定了整个结构体变量成员可以进行的运算。

如成员是int型,则可以进行int型变量可以的运算;如成员是数组,则成员数组名仅带表成员数组的首地址,可带下标访问成员数组的元素。

注意运算符优先级最高的四个运算符是:

()、[]、.、->,它们的结合方向是左结合。

(3)结构体数组:

性质同普通数组,不同的是结构体数组的元素可以再包含多个不同类型的成员。

(4)指向结构体变量的指针:

可以用形如:

p->num或(*p).num的形式访问其指向结构体变量的成员。

(5)参数传递方式:

结构体变量的值或结构体变量的地址,注意实参和形参的对应关系。

3.编程题中所涉及的算法有:

修改、查找、排序,方法同普通数组的运算,但其处理的对象一般是结构体变量的成员,注意其表示方法。

三、课堂练习

第一套

1、程序填空题(在被调函数中修改并输出结构体变量的值)

程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。

函数fun的功能是将形参a所指结构体变量中的数据赋给函数中的结构体变量b,并修改b中的学号和姓名,最后输出修改后的数据。

例如:

a所指变量中的学号、姓名、和三门课的成绩依次是:

10001、"ZhangSan"、95、80、88,则修改后输出b中的数据应为:

10002、"LiSi"、95、80、88。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

#include

structstudent

{longsno;

charname[10];

floatscore[3];

};

voidfun(structstudenta)

{structstudentb;inti;

/**********found**********/

b=__1__;//a同类型的结构体变量可以整体赋值

b.sno=10002;

/**********found**********/

strcpy(__2__,"LiSi");//b.name成员数组的名字代表该成员存储空间的首地址

printf("\nThedataaftermodified:

\n");

printf("\nNo:

%ldName:

%s\nScores:

",b.sno,b.name);

/**********found**********/

for(i=0;i<3;i++)printf("%6.2f",b.__3__);//score[i]

printf("\n");

}

main()

{structstudents={10001,"ZhangSan",95,80,88};

inti;

printf("\n\nTheoriginaldata:

\n");

printf("\nNo:

%ldName:

%s\nScores:

",s.sno,s.name);

for(i=0;i<3;i++)printf("%6.2f",s.score[i]);

printf("\n");

fun(s);//单向值传递

}

2、程序设计题(在结构体数组中查找指定学号的学生数据)

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun,它的功能是:

函数返回指定学号的学生数据,指定的学号在主函数中输入。

若没找到指定学号,在结构体变量中给学号置空串,给成绩置-1,作为函数值返回。

(用于字符串比较的函数是strcmp)。

注意:

部分源程序在文件PROG1.C中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include

#include

#defineN16

typedefstruct

{charnum[10];

ints;

}STREC;

STRECfun(STREC*a,char*b)

{inti;

STRECc;

for(i=0;i

if(strcmp(b,a[i].num)==0)

{c=a[i];break;}

if(i>=N)

{strcpy(c.num,"");c.s=-1;}

returnc;

}

main()

{STRECs[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",77},{"GA017",64},{"GA018",64},{"GA016",72}};

STRECh;

charm[10];

inti;FILE*out;

printf("Theoriginaldata:

\n");

for(i=0;i

{if(i%4==0)printf("\n");

printf("%s%3d",s[i].num,s[i].s);

}

printf("\n\nEnterthenumber:

");gets(m);

h=fun(s,m);

printf("Thedata:

");

printf("\n%s%4d\n",h.num,h.s);

printf("\n");

}

第二套

1、程序填空题(通过被调函数输出结构体变量各成员的值)

程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。

函数fun的功能是输出这位学生的信息。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

typedefstruct

{intnum;

charname[9];

charsex;

struct{intyear,month,day;}birthday;

floatscore[3];

}STU;

/**********found**********/

voidshow(STU___1___)//tt

{inti;

printf("\n%d%s%c%d-%d-%d",tt.num,tt.name,tt.sex,tt.birthday.year,tt.birthday.month,tt.birthday.day);

for(i=0;i<3;i++)

/**********found**********/

printf("%5.1f",___2___);//tt.score[i]

printf("\n");

}

main()

{STUstd={1,"Zhanghua",'M',1961,10,8,76.5,78.0,82.0};

printf("\nAstudentdata:

\n");

/**********found**********/

show(___3___);//std

}

2、程序设计题(查找成绩最低的学生记录)

已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。

请编写函数fun,函数的功能是:

找出成绩最低的学生记录,通过形参返回主函数(规定只有一个最低分)。

注意:

部分源程序存在文件PROG1.C文件中。

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。

#include

#include

#defineN10

typedefstructss

{charnum[10];ints;}STU;

fun(STUa[],STU*s)

{inti;

STUmin=a[0];

for(i=1;i

if(min.s>a[i].s)

min=a[i];

*s=min;

}

main()

{STUa[N]={{"A01",81},{"A02",89},{"A03",66},{"A04",87},{"A05",77},{"A06",90},{"A07",79},{"A08",61},{"A09",80},{"A10",71}},m;

inti;

printf("*****Theoriginaldata*****\n");

for(i=0;i

printf("No=%sMark=%d\n",a[i].num,a[i].s);

fun(a,&m);

printf("*****THERESULT*****\n");

printf("Thelowest:

%s,%d\n",m.num,m.s);

}

三、课后练习

1、程序填空题(在被调函数中修改结构体变量的值并返回其值)

程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。

函数fun的功能是将形参a中的数据进行修改,把修改后的数据作为函数值返回主函数进行输出。

例如:

传给形参a的数据中,学号、姓名、和三门课的成绩依次是:

10001、"ZhangSan"、95、80、88,修改后的数据应为:

10002、"LiSi"、96、81、89。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

#include

structstudent

{longsno;

charname[10];

floatscore[3];

};

/**********found**********/

__1__fun(structstudenta)//structstudent

{inti;

a.sno=10002;

/**********found**********/

strcpy(__2__,"LiSi");//a.name

/**********found**********/

for(i=0;i<3;i++)__3__+=1;//a.score[i]

returna;

}

main()

{structstudents={10001,"ZhangSan",95,80,88},t;

inti;

printf("\n\nTheoriginaldata:

\n");

printf("\nNo:

%ldName:

%s\nScores:

",s.sno,s.name);

for(i=0;i<3;i++)printf("%6.2f",s.score[i]);

printf("\n");

t=fun(s);

printf("\nThedataaftermodified:

\n");

printf("\nNo:

%ldName:

%s\nScores:

",t.sno,t.name);

for(i=0;i<3;i++)printf("%6.2f",t.score[i]);

printf("\n");

}

2、程序填空题(在被调函数中修改结构体变量的值)

给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。

函数fun的功能是将该学生的各科成绩都乘以一个系数a。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

typedefstruct

{intnum;

charname[9];

floatscore[3];

}STU;

voidshow(STUtt)

{inti;

printf("%d%s:

",tt.num,tt.name);

for(i=0;i<3;i++)

printf("%5.1f",tt.score[i]);

printf("\n");

}

/**********found**********/

voidmodify(___1___*ss,floata)//STU

{inti;

for(i=0;i<3;i++)

/**********found**********/

ss->___2___*=a;//score[i]

}

main()

{STUstd={1,"Zhanghua",76.5,78.0,82.0};

floata;

printf("\nTheoriginalnumberandnameandscores:

\n");

show(std);

printf("\nInputanumber:

");scanf("%f",&a);

/**********found**********/

modify(___3___,a);//&std

printf("\nAresultofmodifying:

\n");

show(std);

}

3、程序填空题(在被调函数中修改结构体变量值并返回其地址)

程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。

函数fun的功能是将形参a所指结构体变量s中的数据进行修改,并把a中地址作为函数值返回主函数,在主函数中输出修改后的数据。

例如:

a所指变量s中的学号、姓名、和三门课的成绩依次是:

10001、"ZhangSan"、95、80、88,修改后输出t中的数据应为:

10002、"LiSi"、96、81、89。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

#include

structstudent

{longsno;

charname[10];

floatscore[3];

};

/**********found**********/

__1__fun(structstudent*a)//structstudent*

{inti;

a->sno=10002;

strcpy(a->name,"LiSi");

/**********found**********/

for(i=0;i<3;i++)__2__+=1;//a->score[i]

/**********found**********/

return__3__;//a

}

main()

{structstudents={10001,"ZhangSan",95,80,88},*t;

inti;

printf("\n\nTheoriginaldata:

\n");

printf("\nNo:

%ldName:

%s\nScores:

",s.sno,s.name);

for(i=0;i<3;i++)printf("%6.2f",s.score[i]);

printf("\n");

t=fun(&s);

printf("\nThedataaftermodified:

\n");

printf("\nNo:

%ldName:

%s\nScores:

",t->sno,t->name);

for(i=0;i<3;i++)printf("%6.2f",t->score[i]);

printf("\n");

}

4、程序填空题(在被调函数中通过形参指针修改结构体变量的值)

程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。

函数fun的功能是对形参b所指结构体变量中的数据进行修改,最后在主函数中输出修改后的数据。

例如:

b所指变量t中的学号、姓名、和三门课的成绩依次是:

10002、"ZhangQi"、93、85、87,修改后输出t中的数据应为:

10004、"LiJie"、93、85、87。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

#include

structstudent

{longsno;

charname[10];

floatscore[3];

};

voidfun(structstudent*b)

{inti;

/**********found**********/

b__1__=10004;//->sno

/**********found**********/

strcpy(b__2__,"LiJie");//->name

}

main()

{structstudentt={10002,"ZhangQi",93,85,87};

inti;

printf("\n\nTheoriginaldata:

\n");

printf("\nNo:

%ldName:

%s\nScores:

",t.sno,t.name);

for(i=0;i<3;i++)printf("%6.2f",t.score[i]);

printf("\n");

/**********found**********/

fun(__3__);//&t

printf("\nThedataaftermodified:

\n");

printf("\nNo:

%ldName:

%s\nScores:

",t.sno,t.name);

for(i=0;i<3;i++)printf("%6.2f",t.score[i]);

printf("\n");

}

5、程序填空题(在结构体数组中找出年龄最大的数据)

给定程序中,函数fun的功能是:

将形参std所指结构体数组中年龄最大者的数据作为函数值返回,并在main函数中输出。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

typedefstruct

{charname[10];

intage;

}STD;

STDfun(STDstd[],intn)

{STDmax;inti;

/**********found**********/

max=___1___;//std[0]

for(i=1;i

/**********found**********/

if(max.age<___2___)max=std[i];//std[i].age

returnmax;

}

main()

{STDstd[5]={"aaa",17,"bbb",16,"ccc",18,"ddd",17,"eee",15};

STDmax;

max=fun(std,5);

printf("\nTheresult:

\n");

/**********found**********/

printf("nName:

%s,Age:

%d\n",___3___,max.age);//max.name

}

6、程序填空题(对结构体中的数据按姓名从小到大排序)

程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和3门课的成绩。

函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到大)排序。

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。

注意:

源程序存放在考生文件夹下的BLANK1.C中。

不得增行或删行,也不得更改程序的结构!

#include

#include

structstudent

{longsno;

charname[10];

floatscore[3];

};

voidfun(structstudenta[],intn)

{

/**********found**********/

__1__t;//structstudent

inti,j;

/**********found**********/

for(i=0;i<__2__;i++)//n-1

for(j=i+1;j

/**********found**********/

if(strcmp(__3__)>0)//a[i].name,a[j].name

{t=a[i];a[i]=a[j];a[j]=t;}

}

main

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2