皮德常c++全套答案.docx

上传人:b****2 文档编号:2390918 上传时间:2022-10-29 格式:DOCX 页数:33 大小:23.13KB
下载 相关 举报
皮德常c++全套答案.docx_第1页
第1页 / 共33页
皮德常c++全套答案.docx_第2页
第2页 / 共33页
皮德常c++全套答案.docx_第3页
第3页 / 共33页
皮德常c++全套答案.docx_第4页
第4页 / 共33页
皮德常c++全套答案.docx_第5页
第5页 / 共33页
点击查看更多>>
下载资源
资源描述

皮德常c++全套答案.docx

《皮德常c++全套答案.docx》由会员分享,可在线阅读,更多相关《皮德常c++全套答案.docx(33页珍藏版)》请在冰豆网上搜索。

皮德常c++全套答案.docx

皮德常c++全套答案

第2章习题

2-5、计算一个人一段时期的薪水,第1天1分钱,第2天2分钱,每天翻倍。

要求用户输入天数(输入检验),列表显示每天的薪水,及薪水总和(输出人民币的单位:

“元”)。

#include

usingnamespacestd;

voidmain()

{

intdaynum;

floatdaypay,paysum=0;

do{

cout<<"请输入天数(>1整数):

";

cin>>daynum;

}while(daynum<=1);#include

usingnamespacestd;

voidnewstr(charstr1[],charstr2[]);

staticintm=0;

voidmain()

{

charstr1[100];

charstr2[100];

cout<<"请输入一个字符串:

"<

(str1,100);

newstr(str1,str2);

cout<<"新字符串为:

"<

cout<

}

voidnewstr(charstr1[],charstr2[])

{

char*p,*q;

q=str1;

p=str2;

inti=0;

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

{

if(*(q+i)=='\0')

{

*((p+i/2)+1)='\0';

break;

}

elseif(i%2!

=0)

{

*(p+i/2)=*(q+i);

}

}

}

5-8、编写一个函数palin()用来检查一个字符串是否是正向拼写与反向拼写都一样的“回文”(palindromia).如“MADAM”是一个回文。

若放宽要求,即忽略大小写字母的区别、忽略空格及标点符号等,则像“Madam,I'mAdam”之类的短语也可视为回文。

编程要求:

1)在主函数中输入字符串。

2)将字符串首指针作为函数参数传递到函数palin()中。

当字符串是回文时,要求函数palin()返回true,否则返回false。

3)若是回文,在主函数中输出yes。

若不是回文,在主函数中输出no.

#include

usingnamespacestd;

boolpalin(chara[]);

intmain()

{

chara[100];

cout<<"请输入一个字符串:

"<

cin>>a;

if(palin(a))

cout<<"yes"<

else

cout<<"no"<

return0;

}

boolpalin(chara[])

{

char*p1=a,*p2;

intn,i;

for(i=0,n=0;i<100;i++)

{

if(a[i]>='a'&&a[i]<='Z')

*(p1+n)=a[i];

n++;

}

for(p2=p1+n;p1

{

if(*p1==*p2)

p1++;

p2--;

}

if(p2-p1==1||p2-p1==0)

returntrue;

else

returnfalse;

}

5-10、有n个人围成一圈,顺序排号,顺序号是1、2、3、.....、n。

从第1个人开始报号,凡报到m的人退出圈子,问最后留下的人是第几号。

要求在主函数输入n和m,将数组a以及n、m作为参数传递给函数count(),在该函数中依次输出退出圈子的人的序号,最后输出的就是留下者的序号。

#include

usingnamespacestd;

voidcount(intn,intm,inta[]);

intmain()

{

intn,m;

cout<<"输入n:

"<

cin>>n;

cout<<"输入m:

"<

cin>>m;

inta[100];

for(inti=0;i

a[i]=i+1;

count(n,m,a);

return0;

}

voidcount(intn,intm,inta[])

{

inti,k=0,t=0,*p=a;

for(i=0;i

p[i]=i+1;

while(t

{

for(p=a;p

if(*p!

=0)

{

k++;

if(k==m)

{

k=0;

cout<<*p<<"";

*p=0;

t++;

}

}

}

p=a;

while(*p==0)

p++;

cout<<*p<

}

6-1、假设每个学生信息包括学号、姓名和3门课程的考试分数。

从键盘输入10个学生的数据,采用结构体数组数据的存储,程序实现如下功能:

1)输出三门课的平均成绩。

2)输出三门功课分数分别最高的学生的信息。

3)按总分对这10个学生从高到低排序,并输出排序结果。

4)输出平均分高于80分那些学生的信息。

#include

#include

#include

usingnamespacestd;

structstudent

{

intID;

charname[20];

doublescore[3];

};

voidinput(student*,intn);

doubleaverage(student*,intn);

voidprint(student*,intn);

voidsort(student*,intn);

constintstudentNumber=10;

intmain()

{studentstud[10];

input(stud,studentNumber);

print(stud,studentNumber);

.\n";

p2=head=initlist();

cout<<"Pleaseinputanumber(if(-1)stop):

";

cin>>a;

while(a!

=-1)

{

p1=(NODE*)malloc(sizeof(NODE));

p1->data=a;

p2->next=p1;

p2=p1;

cin>>a;

}

p2->next=NULL;

return(head);

}

voidprint(NODE*head)

{NODE*p;

p=head->next;

if(p!

=NULL)

{

cout<<"Outputlist:

";

while(p!

=NULL)

{

cout<data;

p=p->next;

}

cout<<"\n";

}

}

voidsort(NODE*head)

{NODE*p,*n;

inti;

for(n=head->next;n->next!

=NULL;n=n->next)

for(p=head->next;p->next!

=NULL;p=p->next)

if((p->data)>(p->next->data))

{

i=(p->next->data);

p->next->data=p->data;

p->data=i;

}

}

intmain()

{

NODE*L1=NULL;

cout<<"\n\tCreatalist:

\n";

L1=create();

cout<<"排序前为:

";

print(L1);

cout<<"排序后为:

";

sort(L1);

print(L1);

return0;

}

6-6、编写函数merge()将两个非递减序链表合并成一个新的非递减序链表,合并后两个原链表将不存在。

函数原型为:

NODE*merge(NODE*headA,NODE*headB);

#include

#include

#include

usingnamespacestd;

#defineLENsizeof(NODE)

typedefstructnode

{

intdata;

node*next;

}NODE;

.\n";

head=initlist();

cout<<"Pleaseinputanumber(if(-1)exit):

";

cin>>a;

while(a!

=-1)

{

p=(NODE*)malloc(sizeof(NODE));

p->data=a;

insert(head,p);

cin>>a;

}

returnhead;

}

voidprint(NODE*head)

{NODE*p;

p=head->next;

if(p!

=NULL)

{

cout<<"Outputlist:

";

while(p!

=NULL)

{

cout<data;

p=p->next;

}

cout<<"\n";

}

}

voidfree_list(NODE*head)

{NODE*p;

while(head)

{

p=head;

head=head->next;

free(p);

}

}

NODE*merge(NODE*headA,NODE*headB)

{

NODE*p1=headB->next,*p2=p1->next;

while(p2!

=NULL)

{

insert(headA,p1);

p1=p2;

p2=p1->next;

}

insert(headA,p1);

returnheadA;

}

intmain()

{

NODE*p1=NULL,*p2=NULL,*p=NULL;

cout<<"\n\tCreatalist:

\n";

p1=create_sort();

print(p1);

p2=create_sort();

print(p2);

p=merge(p1,p2);

print(p);

return0;

}

6-7、编写函数isSubset()用于判断链表L1中的每个数据元素是否都在链表L2中出现过,若是,则返回真,否则假。

函数原型均为:

boolisSubset(NODE*L1,NODE*L2);

#include

#include

#include

usingnamespacestd;

#defineLENsizeof(NODE)

typedefstructnode

{

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1