您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > 实验14结构体-答案
实验14结构体[实验目的]1.掌握结构体和结构体数组的概念、定义及存储2.掌握结构体和结构体数组的基本操作及应用[DIY]1、调试下列程序(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标)[1.1]下列程序的功能为:应用结构体求多项式的值。多项式:anxn+an-1xn-1+an-2xn-2+…+a1x+a0,请纠正程序中存在的错误,使程序实现其功能。答案#includestdio.h#includemath.hstructPoly{floata;/*系数*/intn;/*指数*/};doublefpvalue(){structPolyp;doublepvalue=0;floatx;printf(输入多项式X:\n);scanf(%f,&x);printf(输入多项式系数(a)和指数(n,n=-10000,结束):\n);scanf(%f%d,&p.a,&p.n);while(p.n!=-10000){pvalue+=p.a*pow(x,p.n);scanf(%f%d,&p.a,&p.n);}returnpvalue;}[1.2]13个人围成一圈,从第1个开始顺序报号1、2、3。凡报到“3”者退出圈子。找出最后留在圈子中的人原来的序号。[分析]本题算法通过一个循环队列来实现,用结构体数组构造一个循环队列,每个元素中定义一个成员存放下一个元素的下标。答案#includestdio.h#defineN13structperson{intnumber;/*当前元素的序号*/intnextp;/*下一个元素的位置*/}link[N+1];/*定义N+1个元素的结构体数组存放N个人的信息*/main(){inti,count,h;for(i=1;i=N;i++)/*给循环队列初始化,下标从1开始*/{if(i==N)link[i].nextp=1;/*最后一人的下一个元素的位置为1即第一个元素,形成循环队列*/elselink[i].nextp=i+1;/*下一个人的序号*/link[i].number=i;/*每个人的序号与下标值相等*/}printf(\n);count=0;h=N;/*count统计出列的人数,h初始化为队列的最后一个元素*/printf(sequencethatpersonsleavetheircle:\n);while(countN-1){i=0;while(i!=3)/*报数,i统计当前数到的顺序,没数到3时继续报数*/{h=link[h].nextp;/*h指向当前元素即前一个元素的后面一个元素*/if(link[h].number)i++;/*如果h的序号为0,表示该元素已出列,i不加*/}printf(%4d,link[h].number);/*数到3循环退出,输出数到3的人的序号*/link[h].number=0;/*将其序号置0,表示该元素已出列*/count++;/*统计出列的人数*/}printf(\nThelastoneis);for(i=1;i=N;i++)if(link[i].number)/*若元素值不为0,表示该元素没出列,即是留下来的元素*/printf(%3d\n,link[i].number);}2.程序填空(请填写适当的符号,使程序实现其功能)[2.1]下列函数findbook的功能为:在有n个元素的数组s中查找书名为a的书,若找到,函数返回数组下标,否则,函数返回0,请填写适当的符号或语句,使程序实现其功能。答案#includestdio.h#includestring.hstructbdata{intid;charbname[20];floatprice;};intfindbook(structbdatast[],intn,chars[]){inti;for(i=0;in;i++){if(strcmp(st[i].bname,s)==0)returni+1;}return0;}voidmain(){structbdatabook[100]={12,program-c,23.5,2,大学计算机,43.5,3,大学物理,33.5,6,大学化学,53.5,8,大学语文,23.5,9,哲学,13.5};charst[20];intindex;printf(请输入要查找书名:);gets(st);index=findbook(book,6,st);if(index)printf(书号:%d,书名:%s,价格:%f\n,book[index-1].id,book[index-1].bname,book[index-1].price);elseprintf(%s不在书库中\n,st);}[2.2]下列函数average功能为:计算5名学生3门课成绩的平均分,请填写适当的符号或语句,使程序实现其功能。答案#includestdio.h#definem3#definen5structstud{intno;charname[16];floatmark[m];floatave;};voidaverage(structstudst[]){inti,j;floatsum;for(i=0;in;i++){sum=0;for(j=0;jm;j++)sum=sum+st[i].mark[j];st[i].ave=sum/m;}}voidmain(){structstudpreson[n]={1,张平,90,88,78,0,2,王新,70,88,78,0,3,李和平,60,68,78,0,4,王开新,80,78,78,0,5,赵明,89,98,98,0};inti;average(preson);printf(\t\t\t成绩表\n);for(i=0;in;i++)printf(%3d%10s,%6f,%6f,%6f,%.2f\n,preson[i].no,preson[i].name,preson[i].mark[0],preson[i].mark[1],preson[i].mark[2],preson[i].ave);}3.编程[3.1]编写一个程序实现如下功能:定义一个点的结构数据类型,实现下列功能:①为点输入坐标值。②求两个点中点坐标。③求两点间距离。#includestdio.h#includemath.hstructpoint{floatx;floaty;};voidinput(structpointa[]){inti;for(i=0;i2;i++){printf(输入第%d点的坐标\n,i+1);scanf(%f%f,&a[i].x,&a[i].y);}}voidmidpoint(structpointa[]){inti;structpointm;m.x=0;m.y=0;for(i=0;i2;i++){m.x=m.x+a[i].x;m.y=m.y+a[i].y;}m.x=m.x/2;m.y=m.y/2;a[2].x=m.x;a[2].y=m.y;}floatdis(structpointa[]){inti;floats;structpointm;m.x=a[0].x;m.y=a[0].y;{m.x=m.x-a[1].x;m.y=m.y-a[1].y;}s=sqrt(m.x*m.x+m.y*m.y);returns;}main(){structpointa[3];input(a);printf(第1点%f%f第2点%f%f\n,a[0].x,a[0].y,a[1].x,a[1].y);midpoint(a);printf(中点%f%f\n,a[2].x,a[2].y);printf(距离%f\n,dis(a));}[3.2]建立一份同学通讯录,包含姓名、电话、通信地址、邮编、生日等信息,要求按姓名的字母顺序排列输出通讯录。#includestdio.h#includestring.hstructdata{intmonth;intday;intyear;};structstud{charname[20];chartele[12];charzip[7];structdatabirthday;charaddre[30];};structstudstud1[30]={liming,1331187907,210020,3,14,1988,beijing,chaening,13789087907,260020,8,14,1980,tianjing,being,13678987907,710020,9,14,1990,nanjing};main(){intk,i,j,n=3;structstudtemp;for(i=0;in-1;i++){k=i;for(j=i+1;jn;j++)if(strcmp(stud1[j].name,stud1[k].name)0)k=j;temp=stud1[i];stud1[i]=stud1[k];stud1[k]=temp;}printf(姓名电话邮编生日地址\n);for(i=0;i3;i++)printf(%10s%12s%8s%2d-%2d-%4d%15s\n,stud1[i].name,stud1[i].tele,stud1[i].zip,stud1[i].birthday.month,stud1[i].birthday.day,stud1[i].birthday.year,stud1[i].addre);}[本章测试]一、单选题(10分)1.下列关于结构体的说法错误的是D。A.结构体是由用户自定义的一种结构类型B.结构体中可设定若干个不同数据类型的成员C.结构体中成员的数据类型可以是另一个已定义的结构D.在定义结构时,可以为成员设置默认值2.下列程序中,结构体变量a所占内存字节数是C。unionu{charst[4];inti;longl;};structA{intc;unionu;}a;A.4B.5C.6D.83.以下对结构体类型变量的定义中,不正确的是__A_____。A.typedefstructaa{intn;floatm;}AA;AAtdl;C.struct{intn;floatm;}aa;structaatdl;4.若有下面的说明和定义,则sizeof(structtest)的值是___A____。structtest{intm1;charm2;B.#defineAAstructaaAA{intn;floatm;}tdl;D.struct{intn;floatm;}tdl;floatm3;unionuu{charul[5];intu2[2];}ua;}myaa;A.12B.16C.14D.95.若程序中有下面的说明和定义,则会发生的情况是__A___。structabc{intx;chary;}structabcs1,s2;A.编译是错B.程序将顺利编译、连接、执行C.能顺利通过编译、连接但不能执行D.能顺利通过编译、但连接出错6.以下对C语言共用体中共用体类型数据叙述正确的是_C__。A.一旦定义了一个共用变量后,即可引用该变量或该变量中的任意成员B.一个共用体变量中可以同时存放其所有成员C.一个共用体变量中不能同时存放其所有成员D.共用体类型数据可以出现在结构体类型定义中,但结构类型数据不能出现在共用体类型定义中7.下面的程序使用了共用体,其输出结果是_D__。#defineN5uniondata{chara;intb;};main(){uniondatad;d.b=0xeeff;d.a=0xaa;printf(%x,d.b);}A.eeffB.0xaaC.aaeeD.eeaa8.以下程序的输出结果是C。#definef(x)x*xmain(){inta=6,b=2,c;c=f(a)/f(b);printf(%d\n,c);}A.9B.6C.36D.189.下列程序的输出结果是B。structabc{inta,b,c;};main(){structabcs[2
本文标题:实验14结构体-答案
链接地址:https://www.777doc.com/doc-5648220 .html