《C语言学习与应用》课后习题及答案11_第1页
《C语言学习与应用》课后习题及答案11_第2页
《C语言学习与应用》课后习题及答案11_第3页
《C语言学习与应用》课后习题及答案11_第4页
《C语言学习与应用》课后习题及答案11_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

学习任务十一参考答案

问题11-1:说明一个结构体类型st,含有姓名(name)、年龄(age)

和身高(heigh)成员。

structst{

charname[12];

intage;

floatheigh;

);

问题11-2:参照问题117,使用一种方法,定义一个st结构体

类型的变量studo

structststud;

问题11-3:定义一个student结构体类型的变量stud,并赋初

值。

structdata{intyear,month,day;};

structstudent{charname[12];

charsex;

structdatabirthday;

floatsc[4];

1;

voidmain()

{

structstudentstud={"陈立方

",'M',1962,5,10,67.5,56.8,90,100);

问题11-4:参照应用举例11-4,定义一个结构体类型STU,并

写出show函数和fun函数,fun函数的功能是更改x变量的name成

员值,参照程序的执行结果,将代码补充完整。

#include"stdio.h"

#incIude"string.h"

typedefstruct{charnum[3];

charname[9];

charsex;

floatscore[2];

}STU;

voidshow(STUy)

printfC学号姓名性别成绩\n”);

printf("%4s%6s%c%.2f%.2f\n",y.num,y.name,y.sex,y.scor

e[0],y.score[1]);

}

voidfun(STU*z)〃此函数用于更改name成员值

(

strcpy((*z).name,"那仁央措”);

)

voidmain()

(

STUx={”01“,”张楠。W,67,94.5};

printf("修改前:\n");

show(x);

fun(&x);//调用fun函数,更改x变量的name成员值

printf("修改后:\n");

show(x);

getchar();

}

问题11-5:将应用举例11-5中,按姓名排序改为按总成绩降序

排序,将代码补充完整。

#incIude"stdio.h"

#incIude"string.h"

#defineN3

typedefstruct

{charnum[3];

charname[9];

charsex;

floatscore[2];

}STU;

voidshow(STU*x)

{

inti;

printf("学号姓名性别成绩\n“);

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

printf(n%s%6s%3c%.2f%.2f\n",\

x[i].num,x[i].name,x[i].sex,x[i].score[0],x[i].score[1]

);

}

voidsort(STU*x)

(

inti,j;

STUt:

for(i=0;i<N-1;i++)

for(j=i+1;j<N;j++)

if(x[i].score[0]+x[i].score[1]<x[j].score[0]+x[j].score[1])

t=x[i],x[i]=x[j],x[j]=t;

)

voidmain()

(

STUx[N]={{”0r,“张楠”,'W',67.5,74.5},\

{“02”,”李小涵二,98,91.5},\

「03”,"郭金晶"JW',69,84.51);

show(x);

sort(x);

printf("按成绩降序排序后:\n");

show(x);

getchar();

)

问题11-6:输出平均分。

#incIude"stdio.h"

#incIude"string.h"

typedefstruct

{charnum[3];

charname[9];

charsex;

floatscore[2];

}STU;

typedefstructsIist〃说明节点的结构体类型

{STUst;〃数据域成员

structsIist*next;〃指针域成员

JSLIST;

SLIST*create_sIist()〃创建链表的函数

{STUx;

SLIST*h,*s,*r;

h二(SLIST*)malloc(sizeof(SLIST));〃动态分配一个存储单

元,地址赋给h。

r=h;

puts(”请输入学号:");

gets(x.num);

puts(”请输入姓名:");

gets(x.name);

puts("请输入性别和两科成绩:");

scanf("%c%f%f",&x.sex,&x.score[0],&x.score[1]);

while(1)

if(strcmp(x.num,"00")-0)//当学号为:"00"

时,结束输入.

break;

fflush(stdin);〃清空标准输入缓

s=(SLIST*)malloc(sizeof(SLIST));〃分配一个存储单

元,地址赋给So

s->st=x;//为结点的数据成

员赋值

r->next=s;//与前一个结点链

r=s;//指针r后移

puts(“请输入学号:");

gets(x.num);

puts(“请输入姓名:");

gets(x.name);

puts(”请输入性别和两科成绩:”);

scanf("%c%f%f",&x.sex,&x.score[0],&x.score[1]);

)

r->next=NULL;〃为链表最后一个结点的指针

成员赋结束标志

returnh;〃返回链表头地址

}

voidprint_slist(SLIST*head)〃输出链表的函数,形参为

链表的头地址。

{SLIST*p;

p=head->next;//p指向第一个有数据的结

点。

if(P=='\0')

printf("Linklistisnull!\n");

eIse

{printf(”学号姓名性别成绩平均分

\n");

do{

printf("%2s%6s%c%.2f%.2f\n",\

p->st.num,p->st.name,p->st.sex,\

p->st.score[0],p->st.score[1],\

(p->st.score[0]+p->st.score[1])/2);

p=p->next;〃指向

下一个结点

}while(p!=f\0');

}

}

main()

{SLIST*head;

head=create_slist();//调用函数创建链表,带回链表的头

地址。

print_sIist(head);〃实参是链表的头地址,调用函数输

出链表中各节点值。

getchar();

getchar();

)

程序运行结果如下:

请输入学号:

01

请输入姓名:

张楠

请输入性别和两科成绩:

W67.574.5

请输入学号:

02

请输入姓名:

李小涵

请输入性别和两科成绩:

M9891.5

请输入学号:

03

请输入姓名:

郭金晶

请输入性别和两科成绩:

W6984.5

请输入学号:

00

请输入姓名:

请输入性别和两科成绩:

MOO

学号姓名性别成绩平均分

01张楠W67.5074.50

02李小涵M98.0091.50

03郭金晶W69.0084.50

编程训练11T按要求说明结构体类型。

typedefstructstudent{

intsno;

charname[10];

fIoatscore[3];

}STU;

编程训练11-2编写输出函数。

#incIude<stdio.h>

#defineN5

typedefstructstudent{

intsno;

charname[10];

floatscore[3];

}STU;

voidshow(STU*a)

{inti;

printf(”学号姓名成绩\n”);

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

printf("%d%-6s%.Of%.Of%.Of\n",\

a[i].sno,a[i].name,a[i].score[0],\

a[i].score[1],a[i].score[2]);

1

voidmain()

{STUt[N]={{10001,“马超”,91,92,77},{10002,“曹凯”,

75,60,881.

{10003,“李斯”,85,70,78},{10004,”刘芳

菲“,90,82.87},

{10005,”张萨欧,95,80,88));

show(t);

getchar();

程序运行结果:

学号姓名成绩

10001马超919277

10002曹凯756088

10003李斯857078

10004刘芳菲908287

10005张萨欧958088

编程训练11-3:编写查找函数。

#include<stdio.h>

#incIude<string.h>

#defineN5

typedefstructstudent(

intsno;

charname[10];

floatscore[3];

}STU;

intfun(STU*a,char*s)//形参依据实参写

{inti;

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

if((strcmp(a[i].name,s))=0)

returni;

return-1;

)

voidmain()

{STUt[N]={{10001,”曹凯二91,92,77},{10002,”马利超

",75,60.88).

{10003,“李斯”,85,70.78},{10004,“刘芳菲”,

90,82.87),

{10005,”张萨欧二95,80,88}};

charsname[10];

intn,i;

printf(“请输入要查找的姓名:");

gets(sname);

n=fun(t,sname);//实参是数组名和一个字符串

if(n>=0)

{printf("您要查找的是:“);

printf("\n%-8d%-8s",t[n].sno,t[n].name);

for(i=0;i<3;i++)printf(n%6.2f",

t[n].score[i]);

printf("\n");

}

eIse

printf("查无此人!");

getchar0:

)

程序执行结果:

请输入要查找的姓名:刘娜

查无此人!

请输入要查找的姓名:刘芳菲

您要查找的是:

10004刘芳菲90.0082.0087.00

编程训练11-4编写删除某下标元素的函数。

#incIude<stdio.h>

#incIude<string.h>

#defineN5

typedefstructstudent{

intsno;

charname[10];

fIoatscore[3];

}STU;

voidshow(STU*a,intm)〃输出a地址开始的m个数组元素

{

inti;

printf(”学号姓名成绩\n”);

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

printf("%d%-6s%.Of%.Of%.0f\n",\

a[i].sno,a[i].name,a[i].score[0],\

a[i].score[1],a[i].score[2]);

)

intfun(STU*afchar*s)//查找某姓名的函数

{

inti;

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

if((strcmp(a[i].name,s))=0)

returni;

return-1:

)

voiddeI(STU*a,int*k,intn)//删除a数组*k个元素中下

标为n的元素

(

inti;

for(i=n;i<*k;i++)

a[i]=a[i+1];

一*k;

)

voidmain()

{STUt[N]={{10001,”曹凯二91,92,77},{10002,”马利超

",75,60.88).

{10003,"李斯",85,70,78},{10004,“刘芳菲”,

90,82.87).

{10005.”张萨欧”,95,80,88));

charsname[10];

intn,i,k=N;

charc;

printf("\n请输入要删除的姓名:");

gets(sname);

n=fun(t,sname);

if(n>=0)

{printf(“您要查找的是:”);

printf("\n%-8d%-8s",t[n].sno,t[n].name);

for(i=0;i<3;i++)printf(H%6.2f",

t[n].score[i]);

printf("\n是否删除?Y/N:");

c=getchar();

if(toupper(c)—'Y')

deI(t,&k,n);

show(t,k);

)

else

{printf("查无此人!:\n"):

show(t,k);

)

getchar();

getchar();

)

程序运行结果」:

请输入要删除的姓名:刘娜

查无此人!:

学号姓名成绩

10001曹凯919277

10002马利超756088

10003李斯857078

10004刘芳菲908287

10005张萨欧958088

程序运行结果_2:

请输入要删除的姓名:刘芳菲

您要查找的是:

10004刘芳菲90.0082.0087.00

是否删除?Y/N:N

学号姓名成绩

10001曹凯919277

10002马利超756088

10003李斯857078

10004刘芳菲908287

10005张萨欧958088

程序运行结果_3:

请输入要删除的姓名:刘芳菲

您要查找的是:

10004刘芳菲90.0082.0087.00

是否删除?Y/N:Y

学号姓名成绩

10001曹凯919277

10002马利超756088

10003李斯857078

10005张萨欧958088

编程训练11-5按平均分降序排序

#include<stdio.h>

#incIude<string.h>

#defineN5

typedefstructstudent(

Intsno;

charname[10];

floatscore[3];

}STU;

voidshow(STU*a,intm)〃输出数组元素各成员值及平均分

{inti;

printf(”学号姓名成绩平均分\「);

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

printf("%d%-6s%.Of%.Of%.Of%.2f\n",\

a[i].sno,a[i].name,a[i].score[0],\

a[i].score[1],a[i].score[2],\

(a[i].score[0]+a[i].score[1]+a[i].score[2])/3);

1

voidsort(STU*a,intm)〃依据平均分降序排序

{inti,j;

STUt;

for(i=0;i<m-1;i++)

for(j=i+1;j<m;j++)

if(a[i].score[0]+a[i].score[1]+a[i].score[2]<\

a[j].score[O]+a[j].score[1]+a[j].score[2])

t=a[i],a[i]=a[j],a[j]=t;

)

voidmain()

{STUt[N]={{10001.”曹凯”,91,92.77l,110002,”马利超

",75,60.88).

{10003,“李斯”,85,70.78},{10004,“刘芳菲”,

90,82,87},

{10005,”张萨欧二95,80,88));

intn,i,k=N;

printf(”原数组:\n");

show(t,k);

sort(t,k);

printf("\n排序后的数组:\n");

show(t,k);

getchar();

)

程序运行结果:

原数组:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论