📄 cjj110.htm
字号:
st8
90
PASS<BR>
st10
89
PASS<BR>
st5 88 PASS<BR>
st2
80
PASS<BR>
st6
75
PASS<BR>
st1
67
PASS<BR>
st9
66
FAIL<BR>
st4
56
FAIL<BR>
st7
46
FAIL<BR><BR>---------------------------------------------------------<BR><BR><FONT
color=#0000ff>题23.编写一个程序,输入用户的姓名和电话号码,按姓名的词典顺序排列后,输出用户的姓名和电话号码。<BR></FONT>解:<BR>
设计一个类person,包含学生的姓名和电话号码等数据,以及setname()、setnum()、getname()和getnum()等四个成员函数。设计一个类compute,包含一个私有数据成员,即person类的对象数组pn[],另有三个公共成员函数getdata()、sort()、disp(),它们分别用于获取数据、按姓名的词典顺序排序和输出数据。<BR>本题程序如下:<BR>#include<stdio.h><BR>#include<string.h><BR>#define
N 5<BR>class person<BR>{<BR>
char name[10];<BR> char
num[10];<BR>
public:<BR>
void setname(char
na[]){strcpy(name,na);}<BR>
void setnum(char
nu[]){strcpy(num,nu);}<BR>
char *getname(){return
name;}<BR>
char *getnum(){return num;}<BR>};<BR>class
compute<BR>{<BR> person
pn[N];<BR>
public:<BR>
void
getdata();<BR>
void
getsort();<BR>
void outdata();<BR>};<BR>void
compute::getdata()<BR>{<BR> int
i;<BR> char
na[10],nu[10];<BR>
printf("输入姓名和电话号码:\n");<BR>
for(i=0;i<N;i++)<BR>
{<BR>
printf("
第%d个人:",i+1);<BR>
scanf("%s%s",na,nu);<BR>
pn[i].setname(na);<BR>
pn[i].setnum(nu);<BR>
}<BR>}<BR>void
compute::getsort()<BR>{<BR> int
i,j,k;<BR> person
temp;<BR>
for(i=0;i<N-1;i++)<BR>
{<BR>
k=i;<BR>
for(j=i+1;j<N;j++)<BR>
if(strcmp(pn[k].getname(),pn[j].getname())>0)<BR>
k=j;<BR> temp=pn[k];<BR>
pn[k]=pn[i];<BR>
pn[i]=temp;<BR> }<BR>}<BR>void
compute::outdata()<BR>{<BR> int
i;<BR>
printf("输出结果:\n");<BR>
printf(" 姓名
电话号码\n");<BR>
printf("-------------------\n");<BR>
for(i=0;i<N;i++)<BR>
printf("
%-8s%-8s\n",pn[i].getname(),pn[i].getnum());<BR>}<BR><BR>void
main()<BR>{<BR> compute
obj;<BR>
obj.getdata();<BR>
obj.getsort();<BR>
obj.outdata();<BR>}<BR><BR>本程序的执行结果如下:<BR>输入姓名和电话号码:<BR>
第1个人:Li87653781<BR>
第2个人:Zheng98356312<BR> 第3个人:Ma87867405<BR>
第4个人:Chen86888882<BR> 第5个人:Xu
87862345<BR>输出结果<BR>
姓名
电话号码<BR>
Chen 86888882<BR>
Li 87653781<BR>
Ma 87863705<BR>
Xu 87862345<BR>
Zheng 98356312
<BR><BR>---------------------------------------------------------<BR><BR><FONT
color=#0000ff>题24.编写一个程序,输入n个学生的姓名和出生日期,并按年龄从大到小输出。<BR></FONT><FONT
color=#000000>解:<BR> 设计一个结构体person,包含学生的姓名和出生日期等数据;设计一个类compute,包含一个私有数据成员,即person结构体数组st[],另有三个私有成员函数daynum()、count_day()、leap(),以及三个公共成员函数getdata、sort()、disp(),它们分别用于获取数据、按出生日期排序和输出数据,在实现过程中调用前面的三个私有成员函数。sort()成员函数是按结构体数组元素的d成员排序的,d存放的是该学生从1900年1月1日到出生日期的天数。<BR>本题程序如下:<BR>#include<stdio.h><BR>#define
N 4<BR>int count_day(int,int,int,int);<BR>int
leap(int);<BR>struct
person<BR>{<BR> char
name[10];<BR> struct
dates<BR>
{<BR>
int
year;<BR>
int
month;<BR>
int day;<BR>
}date;<BR> int d; //
ww 1900.1.1到出生日的天数<BR>};<BR>class
compute<BR>{<BR> struct person
st[N];<BR> int
daynum(int,int,int,int,int,int);<BR>
int
count_day(int,int,int,int);<BR>
int leap(int);<BR>
public:<BR>
void
getdata();<BR>
void
sort();<BR>
void disp();<BR>};<BR>int compute::daynum(int
s_year,int s_month,int s_day,int e_year,int
e_month,int e_day)<BR>{<BR> int
year,day,day1,day2;<BR>
if(s_year<e_year)<BR>
{<BR>
day=count_day(s_year,s_month,s_day,0);<BR>
for(year=s_year+1;year<e_year;year++)<BR>
if(leap(year))<BR>
day+=366L;<BR>
else<BR>
day+=365L;<BR>
day+=count_day(e_year,e_month,e_day,1);<BR>
}<BR> else
if(s_year==e_year)<BR>
{<BR>
day1=count_day(s_year,s_month,s_day,1);<BR>
day2=count_day(e_year,e_month,e_day,1);<BR>
day=day2-day1;<BR>
}<BR>
else<BR>
day=-1;<BR> return
day;<BR>}<BR>int compute::count_day(int year,int
month,int day,int flag)<BR>{<BR>
static int
day_tab[2][12]=<BR>
{{31,28,31,30,31,30,31,31,30,31,30,31},<BR> {31,29,31,30,31,30,31,31,30,31,30,31}};<BR>
/*使用二维数组存放各月天数,第一行对应非闰年,第二行对应闰年*/<BR>
int p,i,s;<BR>
if(leap(year))<BR>
p=1;<BR>
else<BR>
p=0;<BR>
if(flag)<BR>
{<BR>
s=day;<BR>
for(i=1;i<month;i++)<BR>
s+=day_tab[p][i-1];<BR>
}<BR>
else<BR> {<BR>
s=day_tab[p][month]-day;<BR>
for(i=month+1;i<=12;i++)<BR>
s+=day_tab[p][i-1];<BR>
}<BR> return s;<BR>}<BR>int
compute::leap(int year)<BR>{<BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -