}
(3)
#include
usingnamespacestd;
intdigitCount(inti){
intcount=0;
if(i<0)i=-i;//变成绝对值,以能够处理负数
do{//整数至少有一位,整数0有1位。
i/=10;
count++;
}while(i>0);
returncount;
}
intdigitCount(longi){
intcount=0;
if(i<0)i=-i;
do{
i/=10;
count++;
}while(i>0);
returncount;
}
intdigitCount(floati){
intcount=0;
if(i<0)i=-i;
while(i>=1){//只要有整数部分,该数字肯定>=1
i/=10;
count++;
}
returncount;
}
intdigitCount(doublei){
intcount=0;
if(i<0)i=-i;
while(i>=1){
i/=10;
count++;
}
returncount;
}
intmain(){
inti;
longl;
doubled;
floatf;
cout<<"请输入整数,长整数,双精度浮点数,单精度浮点数:
";
cin>>i>>l>>d>>f;
cout<
cout<cout<cout<}
(4)
#include
#include
usingnamespacestd;
voidhanoi(int,char,char,char);
voidmove(char,char);
intmain()
{
intn;
cout<"<cin>>n;
hanoi(n,'A','B','C');
cout<return0;
}
voidhanoi(intn,chara,charb,charc)
{
if(n==1)move(a,c);
else
{
hanoi(n-1,a,c,b);
move(a,c);
hanoi(n-1,b,a,c);
}
}
voidmove(charx,chary)
{
cout<}
(5)
#include
usingnamespacestd;
#defineUPCASE
intmain(){
charc;
cin>>c;
#ifdefUPCASE
if(c>='a'&&c<='z'){//小写字母
c=c+'A'-'a';//转换为大写字母
}
#else
if(c>='A'&&c<='Z'){//大写字母
c=c+'a'-'A';
}
#endif
cout<}
第5章习题参考答案
选择题
(1)C
(2)B(3)C(4)B(5)D
(6)C(7)C(8)A、C、D(9)D(10)A
(11)D(12)B(13)D(14)B(15)B
填空题
(1)【1】123【2】321【3】123
(2)【4】200,100
(3)【5】s*next;
(4)(第一行为地址,每次运行可能不同)【6】
0013FF7C0013FF7C0013FF70
151510
(5)【7】p1++,q1++【8】*(p+i)【9】*(p+i)【10】str
编程题
(1)
#include
usingnamespacestd;
intbisearch(chars[],inti,intj)
{while(i{intk=(i+j)/2;
if('a'==s[k])returnk;
elseif('a'
elsei=k+1;
}
return-1;
}
intmain()
{chars[100],c;
inti=0,j;
while(c!
='#')
{cin>>c;
s[i++]=c;
}
j=bisearch(s,0,i-1);
if(j==-1)cout<<"**";
elsecout<<"s["<}
(2)
#include
usingnamespacestd;
voidinsert()
{charstr[100];
charc;
inti=0;
cout<<"plealeinputastring:
";
while(c!
='#')
{cin>>c;
str[i++]=c;
}
for(intj=0;jcout<}
intmain(){
insert();
}
(3)
boolinsert(Node*&h,inta,intpos){
Node*q=newNode(a);
if(pos==0){
q->next=h;
h=q;
returntrue;
}
else{
Node*p=h;
inti=1;
while(p!
=NULL&&ip=p->next;
i++;
}
if(p!
=NULL){
q->next=p->next;
p->next=q;
returntrue;
}
else
returnfalse;
}
}
(4)
boolremove(Node*&h,int&a,intpos)
{
Node*p=h,*q=null;
inti=1;
while(p!
=NULL&&i{q=p;
p=p->next;
i++;
}
if(p!
=NULL)
{a=p->id;
if(q!
=NULL)
q->next=p->next;
else
h=p->next;
deletep;
returntrue;
}
else
returnfalse;
}
(5)
voidinsert_sort(Node*&h)
{
if(h==NULL)return;
Node*q=h->next;
h->next=NULL;
while(q!
=NULL)
{Node*p=h,*p1=NULL,*q1=q;
q=q->next;
while(p!
=NULL&&q1->id>p->id)
{
p1=p;
p=p->next;
}
if(p!
=NULL)
{if(p1==NULL)
h=q1;
else
p1->next=q1;
q1->next=p;
}
else
{p1->next=q1;
q1->next=NULL;
}
}
}
(6)
#include
usingnamespacestd;
boola[8];//a[i]表示第i行是否可以放皇后
boolb[15];//b[k]表示"从左下往右上"('/')的第k个对角线是否可以放皇后
boolc[15];//c[k]表示"从左上往右下"('\')的第k个对角线是否可以放皇后
//与棋盘第i行、第j列的格子所对应的行和对角线为:
a[i],b[i+j],c[j-i+7]
intx[8];//x[j]表示第j列上皇后的位置(所在的行)。
booltry_by_col(intj)
{for(inti=0;i<8;i++)//选择第j列中可放皇后的行,然后递归选择第j+1列可放皇后的行...。
{if(a[i]&&b[i+j]&&c[j-i+7])//第j列第i行的位置所在的行以及两个对角线上无皇后。
{
x[j]=i;//设置第j列皇后的位置。
a[i]=b[i+j]=c[j-i+7]=false;//把第j列皇后所在的行以及两个对角线设为已占用。
if(j==7||try_by_col(j+1))//是最后一列或第j+1列皇后位置选择成功。
returntrue;
else//第j+1列皇后位置选择失败。
a[i]=b[i+j]=c[j-i+7]=true;//取消第j列皇后位置,准备选择下一个位置。
}
}
returnfalse;
}
intmain()
{inti,j,k;
//初始化:
所有行以及对角线可放皇后。
for(i=0;i<8;i++)
a[i]=true;
for(k=0;k<15;k++)
b[k]=true;
for(k=0;k<15;k++)
c[k]=true;
if(try_by_col(0))//从第0列开始尝试放皇后的位置。
{//x[0],x[1],...,x[7]分别为第一列、第二列、...、第七列上皇后的位置(所在的行)
for(j=0;j<8;j++)//按列输出皇后
{
for(i=0;icout<<"|Q|";
for(i=x[j]+1;i<8;i++)cout<<"_|";
cout<}
}
cout<return0;
}