上机1_结构体文件题目

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档