上机1_结构体文件题目
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
短学期实习
上机1
[实验目的]
1.掌握结构体和结构体数组的概念、定义及存储
2.掌握结构体和结构体数组的基本操作及应用
[实验范例]
[问题] 下列程序的功能为:学生姓名(name)和年龄(age)存于结构体数组person中,函数fun的功能是:找出年龄最小的那名学生,请纠正程序中存在的错误,使程序实现其功能。
#include
struct stud
{ char name[20];
int age;
} ;
ufun(struct stud person[],int n)
{
int min,i;
min=0;
for(i=0;i if(person[i] return (person ); } void main() { struct stud a[]={{"Zhao",21},{"Qian",20},{"Sun",19},{"LI",22}}; int n=4; struct stud minpers; minpers=fun(a,n); printf("%s 是年龄小者,年龄是:%d\n",,minpers.age); } [DIY] 1、调试下列程序(下列各程序中存在一些问题,通过调试发现问题,并加以修正,使其实现预期目标) [1.1]下列程序的功能为:应用结构体求多项式的值。多项式: a n x n+a n-1x n-1+a n-2x n-2+…+a1x+a0,请纠正程序中存在的错误,使程序实现其功能。 [代码] #include #include struct Poly { float a; /*系数*/ int n; /*指数*/ }; double fpvalue() { struct Poly p; double pvalue=0; float x; 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, n); scanf("%f %d", p.a, p.n); } return pvalue; } void main() { printf("多项式值:%20.8f\n",fpvalue()); } [1.2] 13个人围成一圈,从第1个开始顺序报号1、2、3。凡报到“3”者退出圈子。找出最后留在圈子中的人原来的序号。 [分析]本题算法通过一个循环队列来实现,用结构体数组构造一个循环队列,每个元素中定义一个成员存放下一个元素的下标。 [代码] #include #define N 13 struct person { int number ; /*当前元素的序号*/ int nextp ; /*下一个元素的位置*/ } link[N+1] ; /*定义N+1个元素的结构体数组存放N个人的信息*/ main() { int i, count, h ; for( i = 1 ; i<=N ; i++) /*给循环队列初始化,下标从1开始*/ { if(i = N) link[i].nextp=1 ; /*最后一人的下一个元素的位置为1即第一个元素,形成循环队列*/ else link[i].nextp=i+1; /*下一个人的序号*/ link[i].number=i; /*每个人的序号与下标值相等*/ } printf("\n") ; h=N ; /*count统计出列的人数,h初始化为队列的最后一个元素*/ printf("sequence that persons leave the ircle: \n") ; while(count < N-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("\n The last one is ") ; 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,请填写适当的符号或语句,使程序实现其功能。 #include #include "string.h" struct bdata { int id; char bname[20]; float price; }; int findbook(struct bdata st[],int n,char s[]) { int i; for(i=0;i {if(________)return i+1;} ________; } void main() {struct bdata book[100]={12,"program-c",23.5,2,"大学计算机",43.5,3,"大学物理",33.5,6,"大学化学",53.5,8,"大学语文",23.5,9,"哲学",13.5}; char st[20]; int index; printf("请输入要查找书名:"); gets(st); index=findbook(_______________); if(index) printf("书号:%d,书名:%s,价格:%f\n",book[index-1].id,book[index-1].bname,book[index-1].price);