C语言程序设计第3版何钦铭 颜 晖 第9章 结构Word文档格式.docx
- 文档编号:6408177
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:20
- 大小:19.99KB
C语言程序设计第3版何钦铭 颜 晖 第9章 结构Word文档格式.docx
《C语言程序设计第3版何钦铭 颜 晖 第9章 结构Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第3版何钦铭 颜 晖 第9章 结构Word文档格式.docx(20页珍藏版)》请在冰点文库上搜索。
math_sum=english_sum=computer_sum=0;
for(i=1;
i<
=n;
i++){
printf(No.%d:
i);
scanf(%d%s%d%d%d,&
s1.num,s1.name,&
s1.math,&
s1.english,&
puter);
math_sum+=s1.math;
english_sum+=s1.english;
computer_sum+=puter;
}
printf(math_ave:
%.2lf\nenglish_ave:
%.2lf\ncomputer_ave:
%.2lf\n,math_sum/n,english_sum/n,computer_sum/n);
return0;
}并对该结构数组的所有元定义一个包含名学生信息的结构数组,5【练习9-4】素进行初始化。
解答:
structstudent{intnum;
intcomputer,english,math;
};
231,132,李二张一studentstructs[5]={{30101,,69,75,84
426,刘五,81,92,73}};
王三754,赵四
【练习9-5】参考例9-2,输入并保存10个学生的成绩信息,分别输出平均成整理版.
绩最高和最低的学生信息。
{
inti,n,max,min;
structstudentstudents[50];
scanf(%d,&
for(i=0;
n;
printf(InputtheinfoofNo.%d:
\n,i+1);
printf(
umber:
students[i].num);
ame:
scanf(%s,&
students[i].name);
printf(mathscore:
students[i].math);
printf(englishscore:
students[i].english);
printf(computerscore:
students[i].computer);
students[i].average=(students[i].math+students[i].english+students[i].computer)/3.0;
max=min=0;
if(students[max].average<
students[i].average)max=i;
if(students[min].average>
students[i].average)min=i;
printf(max_average_infortmation:
printf(
%d,name:
%s,math:
%d,english:
%d,computer:
%d,average:
%.2lf\n,students[max].num,students[max].name,students[max].math,students[max].english,students[max].computer,students[max].average);
printf(min_average_information:
%.2lf\n,students[min].num,students[min].name,students[min].math,students[min].english,
students[min].computer,students[min].average);
return0;
}
【练习9-6】定义一个structstudent类型的结构指针,用其实现一个学生信息的输入和输出。
structstudent{/*学生信息结构定义*/
intnum;
/*学号*/
charname[10];
/*姓名*/
intcomputer,english,math;
/*三门课程成绩*/
doubleaverage;
/*个人平均成绩*/
}s,*p;
p=&
s;
scanf(%d%s%d%d%d,&
p->
english,
&
math,p->
name,&
num,
&
computer);
,将第一个形参改为结构数组)update_score(【练习9-7】改写例9-3中的函数形式。
intupdate_score(structstudents[],intn,intnum,intcourse,intscore){
inti,pos;
i++)
if(s[i].num==num)
break;
if(i<
n){
switch(course){
case1:
s[i].math=score;
break;
case2:
s[i].english=score;
case3:
s[i].computer=score;
pos=i;
else
pos=-1;
returnpos;
习题9
一、选择题
1.下面定义结构变量的语句中错误的是D。
A.structstudent{intnum;
charname[20];
}s;
B.struct{intnum;
C.structstudent{intnum;
structstudents;
D.structstudent{intnum;
students;
2.如果有定义语句:
struct{
intx,y;
}s[2]={{1,3},{2,7}};
。
B则语句:
printf(“%d\n”,s[0].y/s[1].x);
输出结果为
D.3C.2A.0B.1
。
CM的语句是3.根据下面的定义,能打印出字母structperson{charname[10];
intage;
}c[10]={“John”,17,“Paul”,19,“Mary”,18,“Adam”,16};
.printf(“%c”,c[3].name[1]);
BA.printf(“%c”,c[3].name);
.printf(“%c”,c[2].name[1]);
DC.printf(“%c”,c[2].name[0]);
B4.设有如下定义,则对data中的a成员的正确引用是structsk{inta;
floatb;
}data,*p=&
data;
.(*p).aBA.(*p).data.a
p.data.a.Dp->
data.aC.
5.对于以下结构定义,(*p)->
str++中的++加在D。
struct{intlen;
char*str;
}*p;
A.指针str上B.指针p上
C.str指向的内容上D.语法错误
二、填空题
1.“.”称为成员_(分量)_运算符,“->
”称为_指向_运算符。
2.完成下列程序,该程序计算10名学生的平均成绩。
#include<
string.h>
structstudent{
charname[20];
intscore;
structstudentstud[10];
inti,sum=0;
for(i=0;
i<
10;
i++){
scanf(%d%s%d,&stud[i].num,_stud[i].name_,&stud[i].score);
sum+=stud[i].score;
printf(aver=%d\n,sum/10);
return0;
3.下列程序读入时间数值,将其加1秒后输出,时间格式为:
hh:
mm:
ss,即整理版.
小时:
分钟:
秒,当小时等于24小时,置为0。
inthour,minute,second;
}time;
scanf(%d:
%d:
%d,_&
time.hour,&
time.minute,&
time.second_);
time.second++;
if(_time.second_==60){
_time.minute++_;
time.second=0;
if(time.minute==60){
time.hour++;
time.minute=0;
if(_time.hour==24_)
time.hour=0;
printf(%d:
%d\n,time.hour,time.minute,time.second);
4.写出下面程序的运行结果12AB。
structs1{
charc1,c2;
intn;
structs2{
structs1m;
}m={1,{‘A'
'
B'
2}};
printf(“%d\t%d\t%c\t%c\n”,m.n,m.m.n,m.m.c1,m.m.c2);
5.写出下面程序的运行结果23,wang,98.5,wang。
structabc{
inta;
char*c;
structabcx={23,98.5,wang};
structabc*px=&
x;
printf(%d,%s,%.1f,%s\n,x.a,x.c,(*px).b,px->
c);
三、程序设计题
1.时间换算:
用结构类型表示时间内容(时间以时、分、秒表示),输入一个时间数值,再输入一个秒数n(n<
60),以h:
m:
s的格式输出该时间再过n秒后的时间值(超过24点就从0开始计时)。
试编写相应程序。
structtime{
inthour;
intminute;
intsecond;
structtimetim;
printf(Entertime:
scanf(%d%d%d,&
tim.hour,&
tim.minute,&
tim.second);
printf(Enterseconds:
tim.hour=(tim.hour*60*60+tim.minute*60+tim.second+n)/3600$;
tim.minute=(tim.minute*60+tim.second+n)/60`;
tim.second=(n+tim.second)`;
printf(%d:
%d:
%d,tim.hour,tim.minute,tim.second);
2.计算两个复数之积:
编写程序,利用结构变量求解两个复数之积:
(3+4i)×
(5+6i)。
提示:
求解(a1+a2i)×
(b1+b2i),乘积的实部为:
a1×
b1-a2×
b2,虚部为:
b2
+a2×
b1。
intreal,im;
structcomplexcmult(structcomplexa,structcomplexb);
structcomplexa={3,4},b={5,6},c;
c=cmult(a,b);
printf((%d+%di)(%d+%di)=%d+%di\n,a.real,a.im,b.real,b.im,c.real,c.im);
structcomplexcmult(structcomplexa,structcomplexb)
structcomplexc;
c.real=a.real*b.real-a.im*b.im;
c.im=a.real*b.im+a.im*b.real;
returnc;
3.平面向量加法:
输入两个二维平面向量V1=(x1,y1)和V2=(x2,y2)的分量,计算并输出两个向量的和向量。
structvector{
floatx,y;
structvectorvec(structvectorv1,structvectorv2);
structvectorv1,v2,v;
牰湩晴尨?
愠摮礠?
?
scanf(%f%f,&
v1.x,&
v1.y);
v2.x,&
v2.y);
v=vec(v1,v2);
printf(v=(%f,%f),v.x,v.y);
structvectorvec(structvectorv1,structvectorv2)
structvectorv;
v.x=v1.x+v2.x;
v.y=v1.y+v2.y;
returnv;
4.查找书籍:
从键盘输入10本书的名称和定价并存入结构数组中,从中查找定价最高和最低的书的名称和定价,并输出。
#defineNUMBER10
structbook{
floatprice;
inti,maxl,minl,n;
structbooktest[NUMBER];
NUMBER;
scanf(%s%f,test[i].name,&
test[i].price);
maxl=minl=0;
if(test[maxl].price<
test[i].price)maxl=i;
if(test[minl].price>
test[i].price)minl=i;
printf(MaxPrice:
%f,%s\n,test[maxl].price,test[maxl].name);
printf(MinPrice:
%f,%s\n,test[minl].price,test[minl].name);
5.通讯录排序:
建立一个通讯录,通讯录的结构包括:
姓名、生日、电话号码;
其中生日又包括三项:
年、月、日。
编写程序,定一个嵌套的结构类型,输入
n(n≤10)个联系人信息,再按照他们的年龄从大到小依次输出其信息。
structfriends_list{
charphone[15];
voidsort(structfriends_lists[],intn);
inti,n;
structfriends_listfriends[10];
printf(Input%dfriends'
name,birthdayandphone:
n);
scanf(%s%d%d%d%s,friends[i].name,&
friends[i].birthday.year,&
friends[i].birthday.month,&
friends[i].birthday.day,&
friends[i].phone);
sort(friends,n);
printf(%s%d/%d/%d%s\n,friends[i].name,friends[i].birthday.year,friends[i].birthday.month,friends[i].birthday.day,friends[i].phone);
}
voidsort(structfriends_lists[],intn)
inti,j,index;
structfriends_listtemp;
n-1;
index=i;
for(j=i+1;
j<
j++){
if(s[index].birthday.year>
s[j].birthday.year)
index=j;
elseif((s[index].birthday.year==s[j].birthday.year)
(s[index].birthday.month>
s[j].birthday.month))
(s[index].birthday.month==s[j].birthday.month)&
(s[index].birthday.day>
s[j].birthday.day)){
temp=s[i];
s[i]=s[index];
s[index]=temp;
6.按等级统计学生成绩:
输入10个学生的学号、姓名和成绩,输出学生的成绩等级和不及格人数。
每个学生的记录包括学号、姓名、成绩和等级,要求定义和调用函数set_grade()根据学生成绩设置其等级,并统计不及格人数,等级设置:
85-100为A,70-84为B,60-69为C,0-59为D。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C语言程序设计第3版何钦铭 第9章 结构 语言程序设计