C语言程序设计第3版何钦铭 颜 晖 第9章结构Word文档格式.docx
《C语言程序设计第3版何钦铭 颜 晖 第9章结构Word文档格式.docx》由会员分享,可在线阅读,更多相关《C语言程序设计第3版何钦铭 颜 晖 第9章结构Word文档格式.docx(16页珍藏版)》请在冰豆网上搜索。
intnum;
charname[10];
intcomputer,english,math;
doubleaverage;
intmain(void)
{
inti,n;
doublemath_sum,english_sum,computer_sum;
structstudents1;
printf("
Inputn:
"
);
scanf("
%d"
&
n);
Inputthestudent'
snumber,nameandcoursescores:
\n"
math_sum=english_sum=computer_sum=0;
for(i=1;
i<
=n;
i++){
No.%d:
i);
%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;
}
math_ave:
%.2lf\nenglish_ave:
%.2lf\ncomputer_ave:
%.2lf\n"
math_sum/n,english_sum/n,computer_sum/n);
return0;
}
【练习9-4】定义一个包含5名学生信息的结构数组,并对该结构数组的所有元素进行初始化。
charname[10];
intcomputer,english,math;
structstudents[5]={{30101,"
张一"
69,75,84},{30132,"
李二"
80,85,90},{40231,"
王三"
71,91,74},{40754,"
赵四"
65,76,87},{50426,"
刘五"
81,92,73}};
【练习9-5】参考例9-2,输入并保存10个学生的成绩信息,分别输出平均成绩最高和最低的学生信息。
{
inti,n,max,min;
structstudentstudents[50];
printf("
scanf("
for(i=0;
n;
printf("
InputtheinfoofNo.%d:
i+1);
number:
scanf("
students[i].num);
name:
%s"
students[i].name);
mathscore:
students[i].math);
englishscore:
students[i].english);
computerscore:
students[i].computer);
students[i].average=(students[i].math+students[i].english+students[i].computer)/3.0;
}
max=min=0;
for(i=1;
if(students[max].average<
students[i].average)max=i;
if(students[min].average>
students[i].average)min=i;
max_average_infortmation:
printf("
%d,name:
%s,math:
%d,english:
%d,computer:
%d,average:
students[max].num,students[max].name,students[max].math,students[max].english,students[max].computer,students[max].average);
min_average_information:
students[min].num,students[min].name,students[min].math,students[min].english,students[min].computer,students[min].average);
return0;
【练习9-6】定义一个structstudent类型的结构指针,用其实现一个学生信息的输入和输出。
structstudent{/*学生信息结构定义*/
intnum;
/*学号*/
/*姓名*/
intcomputer,english,math;
/*三门课程成绩*/
doubleaverage;
/*个人平均成绩*/
}s,*p;
p=&
s;
scanf("
p->
num,p->
name,&
math,&
english,&
computer);
【练习9-7】改写例9-3中的函数update_score(),将第一个形参改为结构数组形式。
intupdate_score(structstudents[],intn,intnum,intcourse,intscore)
inti,pos;
for(i=0;
i++)
if(s[i].num==num)
break;
if(i<
n){
switch(course){
case1:
s[i].math=score;
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}};
则语句:
printf(“%d\n”,s[0].y/s[1].x);
输出结果为B。
A.0B.1C.2D.3
3.根据下面的定义,能打印出字母M的语句是C。
structperson{
intage;
}c[10]={“John”,17,“Paul”,19,“Mary”,18,“Adam”,16};
A.printf(“%c”,c[3].name);
B.printf(“%c”,c[3].name[1]);
C.printf(“%c”,c[2].name[0]);
D.printf(“%c”,c[2].name[1]);
4.设有如下定义,则对data中的a成员的正确引用是B。
structsk{inta;
floatb;
}data,*p=&
data;
A.(*p).data.aB.(*p).a
C.p->
data.aD.p.data.a
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++){
%d%s%d"
&stud[i].num,_stud[i].name_,&stud[i].score);
sum+=stud[i].score;
aver=%d\n"
sum/10);
return0;
3.下列程序读入时间数值,将其加1秒后输出,时间格式为:
hh:
mm:
ss,即小时:
分钟:
秒,当小时等于24小时,置为0。
inthour,minute,second;
}time;
%d:
%d:
%d"
_&
time.hour,&
time.minute,&