完整版皮德常c++全套答案.docx

上传人:b****8 文档编号:9312349 上传时间:2023-02-04 格式:DOCX 页数:104 大小:41.01KB
下载 相关 举报
完整版皮德常c++全套答案.docx_第1页
第1页 / 共104页
完整版皮德常c++全套答案.docx_第2页
第2页 / 共104页
完整版皮德常c++全套答案.docx_第3页
第3页 / 共104页
完整版皮德常c++全套答案.docx_第4页
第4页 / 共104页
完整版皮德常c++全套答案.docx_第5页
第5页 / 共104页
点击查看更多>>
下载资源
资源描述

完整版皮德常c++全套答案.docx

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

完整版皮德常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);//有效性检验

for(inti=1;i<=daynum;i++)

{daypay=i/100.0;

cout<<"第"<

"<

if(i%2==0)

cout<

paysum+=daypay;//列表输出每天薪水,计算总薪水

}

cout<

cout<<"薪水总和:

"<

}

2-7、用for循环计算1/30+2/29+3/28+…+30/1。

#include

usingnamespacestd;

voidmain()

{

inti;

floatsum=0;

for(i=1;i<=30;i++)

sum+=i/float(31-i);

cout<<"sum="<

}

2-8、用循环语句输出如下图形。

AAAAAAA

AAAAA

AAA

A

AAA

AAAAA

AAAAAAA

#include

usingnamespacestd;

voidmain()

{

inti,j,k;

for(i=0;i<=3;i++)//控制行

{for(j=0;j

cout<<'';//控制每行输出的''的数目

for(k=7-i;k>i;k--)//控制每行输出的'A'的数目

cout<<'A';

cout<

}

for(i=1;i<=3;i++)

{for(j=3;j>i;j--)

cout<<'';//控制每行输出的''的数目

for(k=0;k<2*i+1;k++)//控制每行输出的'A'的数目

cout<<'A';

cout<

}

}

2-9、采用循环结构计算公式s的前30项和。

s=2/1+3/2+5/3+…

#include

usingnamespacestd;

#defineN30

voidmain()

{inti;

floata1,a2,sum=0,temp;//a1分子,a2分母

for(a1=2,a2=1,sum=0,i=1;i<=N;i++){

sum+=a1/a2;

temp=a1;a1=a1+a2;a2=temp;//为下一次求和做准备

}

cout<<"\nsumis:

"<

}

2-10、求sum=a+aa+…+aa…a,a和n由键盘输入。

#include

usingnamespacestd;

voidmain()

{

inti,a,n;

longsum,temp;

sum=temp=0;

cout<<"\nEnteraandn:

";

cin>>a>>n;

for(i=1;i<=n;i++)

{temp=a+temp*10;

sum+=temp;

}

cout<<"theresultis:

"<

}

2-11、输入一行字符,以回车结束,分别统计其中出现的大写英文字母、小写英文字母、数字字符、空格和其他字符出现的次数。

#include

usingnamespacestd;

voidmain()

{charc;

intlletters=0,uletters=0,spaces=0,digits=0,others=0;

cout<<"Pleaseenterthecharacters:

\n";

while((c=cin.get())!

='\n')

{if(c>='a'&&c<='z')

lletters++;

elseif(c>='A'&&c<='Z')

uletters++;

elseif(c=='')

spaces++;

elseif(c>='0'&&c<='9')

digits++;

else

others++;

}

cout<<"thenumberoflowercaseletters:

"<

cout<<"thenumberofuppercaseletters:

"<

cout<<"thenumberofdigits:

"<

cout<<"thenumberofspaces:

"<

cout<<"thenumberofothers:

"<

}

第3章习题:

3-1、编写求阶乘及组合的函数,在主函数调用求组合的函数。

#include

usingnamespacestd;

longfac(intn)

{

longfac=1;

for(inti=2;i<=n;i++)

fac*=i;

returnfac;

}

longcomb(intn,intk)

{

returnfac(n)/(fac(k)*fac(n-k));

}

voidmain()

{intn,k;

cout<<"Pleaseinputthenandthek:

";

cin>>n>>k;

cout<<"thecombinationnumberofnandk:

"<

}

3-2、编写函数计算ex的近似值,在主函数中输入x及精度10-9(要求最后一项小于10-9)。

#include

#include

usingnamespacestd;

doubleex(doublex,doubleeps)

{

inti=1;

doublee=1,t=1;

while(fabs(t)>eps)

{t=t*x/i;

e=e+t;

i++;

}

return(e);

}

voidmain()

{doublex,eps;

cout<<"Pleaseinoutxandeps:

\n";

cin>>x>>eps;

cout<<"e**x:

\n"<

}

3-3、编写被调函数,求出1000以内素数,在主函数中调用函数并输出素数,每行输出5个素数。

#include

#include

#include

usingnamespacestd;

voidPrimeNum(intn=1000)

{inti,j,k,flg=1,num=0;

for(i=2;i

{

k=sqrt(i);

for(j=2;j<=k;j++)

if(i%j==0)

flg=0;

if(flg==1)

{cout<

num++;

if(num%5==0)

cout<

}

flg=1;

}

}

voidmain()

{PrimeNum();

}

3-4、输出1000以内的所有完数。

#include

#include

usingnamespacestd;

voidprint(intn)//输出因子

{inti;

for(i=1;i<=n/2;i++)

if(n%i==0)cout<

cout<

}

voidwanshu(intn)

{inti;

inta,s=0;

a=n/2;

for(i=1;i<=a;i++)

if(n%i==0)s+=i;

if(s==n)

{cout<

";

print(n);

}

}

voidmain()

{inti;

for(i=1;i<=1000;i++)

wanshu(i);

}

3-5、编写函数(递归和非递归)求两个整数的最大公约数和最小公倍数。

#include

usingnamespacestd;

intgcd(intx,inty)

{intr;

r=x%y;

while(r!

=0)

{x=y;y=r;r=x%y;}

return(y);

}

//intgcd(inta,intb)

//{if(a%b==0)

//returnb;

//else

//returngcd(b,a%b);

//}

intgbs(intx,inty)

{intbs,ys;

ys=gcd(x,y);

bs=x*y/ys;

returnbs;

}

voidmain()

{intx,y,g,bs;

cout<<"Entertwonumber:

\n";

cin>>x>>y;

g=gcd(x,y);

bs=gbs(x,y);

cout<<"thegcd:

"<

cout<<"thegbs:

"<

}

3-6、递归函数反序输出数位。

#include

usingnamespacestd;

voidrev(intx)/*反向输出*/

{if(x>0)

{cout<

rev(x/10);

}

}

voidmain()

{intx;

cout<<"Pleaseinputaninteger:

\n";

cin>>x;

cout<<"reverse:

";

if(x<0)

{cout<<"-";

x=-x;

}

rev(x);

}

3-8、递归函数实现十进制到二进制转换。

#include

usingnamespacestd;

voidfun(inti)

{

if(i>1)

fun(i/2);

cout<

}

voidmain()

{intn;

cout<<"Pleaseinputthedecimalnumber:

";

cin>>n;

cout<<"thebinarynumber:

";

fun(n);

}

3-9、编写函数输出图形。

(略)

3-10、编写min函数模板和max函数模板。

#include

usingnamespacestd;

template

Tmin(T&var1,T&var2)

{if(var1

return(var1);

else

return(var2);

}

template

Tmax(T&var1,T&var2)

{if(var1

return(var2);

else

return(var1);

}

voidmain(void)

{intuserInt1,userInt2;

floatuserFloat1,userFloat2;

charuserChar1,userChar2;

cout<<"Pleaseinputtwointegarnumbers:

";

cin>>userInt1>>userInt2;

cout<<"theminis:

"<

cout<<"themaxis:

"<

cout<<"Pleaseinputtwofloatnumbers:

";

cin>>userFloat1>>userFloat2;

cout<<"theminis:

"<

cout<<"themaxis:

"<

cout<<"Pleaseinputtwocharnumbers:

";

cin>>userChar1>>userChar2;

cout<<"theminis:

"<

cout<<"themaxis:

"<

}

3-11、绝对值函数模板。

#include

usingnamespacestd;

template

TAbs(constTvar)

{if(var<0)

return(-var);

else

return(var);

}

voidmain(void)

{//测试整型量求绝对值

inttest1=12,test2=-34;

cout<<"测试整型量:

"<

cout<<"test1="<

"<

cout<<"test2="<

"<

//测试浮点型量求绝对值

floattest3=12.67f,test4=-34.43f;

cout<<"测试浮点型量:

"<

cout<<"test3="<

"<

cout<<"test4="<

"<

}

第4章习题:

4-1、编程实现由用户输入10个数据到数组,输出数组中的最大值和最小值及其相应的下标。

#include

usingnamespacestd;

#defineN10

voidmain()

{inti,array[N],max,maxid,min,minid;

for(i=0;i

cin>>array[i];

max=min=array[0];

maxid=minid=0;

for(i=1;i

{

if(array[i]>max)

{max=array[i];maxid=i;}

if(array[i]

{min=array[i];minid=i;}

}

cout<<"themaxofthearrayis"<

cout<<"theindexofthemaxis"<

cout<<"theminofthearrayis"<

cout<<"theindexoftheminis"<

}

4-2、编写函数实现将字符串中每个单词的首字母大写。

#include

usingnamespacestd;

voidWords(charstr[])

{inti;

charch='';//存放前一字符

for(i=0;str[i]!

='\0';i++)

{

if(ch==''&&str[i]!

='')//单词数首字母

{if(str[i]>='a'&&str[i]<='z')

str[i]-=32;

}

ch=str[i];

}

}

voidmain()

{charstr[100];

cout<<"Pleaseinputastring:

";

cin.getline(str,100);

Words(str);

cout<

}

4-4、编程实现线性查找账号,账号由用户输入,若找到,则输出合法信息,否则输出非法信息。

#include

usingnamespacestd;

#definearrSize5

intsearchList(intlist[],intnumElems,intvalue)

{for(inti=0;i

if(value==list[i])

returni;

return-1;

}

voidmain()

{inttests[arrSize]={5658845,4562555,3852085,4520125,5552012};

intresult,x;

cout<<"请输入账号:

";

cin>>x;

result=searchList(tests,arrSize,x);

if(result==-1)

cout<

"<

else

cout<

";

}

4-5、采用二分查找实现上述程序。

#include

#include

usingnamespacestd;

#definearrSize5

voidselectionSort(inta[],intn)//选择排序

{inti,j,t,minIndex;

for(i=0;i

{

minIndex=i;

for(j=i+1;j

if(a[j]

minIndex=j;

if(minIndex!

=i)

{t=a[minIndex];

a[minIndex]=a[i];

a[i]=t;

}

}

}

//二分查找函数,在a数组中查找value

intbinarySearch(inta[],intnumElems,intvalue)

{intlow=0,mid,hight=numElems-1;

while(low<=hight)

{

mid=(low+hight)/2;

if(value==a[mid])//查找成功

returnmid;

elseif(value

hight=mid-1;

else

low=mid+1;//位于数组的后一半

}

return-1;

}

voidmain()

{inttests[arrSize]={5658845,4562555,3852085,4520125,5552012};

intresult,x;

cout<<"请输入账号:

";

cin>>x;

selectionSort(tests,arrSize);

result=binarySearch(tests,arrSize,x);

if(result==-1)

cout<

"<

else

cout<

";

}

4-6、寻找二维数组中的鞍点(该位置的元素是该行上的最大元素,同时是该列上的最小元素)。

#include

#include

usingnamespacestd;

#defineM3

#defineN4

intq1=0,q2=0;//鞍点位置下标

intandian(inta[M][N],intp1,intp2)

{inti,j,k,m,f,w,max;

w=0;

for(i=0;i

{

k=0;

max=a[i][0];

for(j=0;j

if(a[i][j]>max)

{k=j;

max=a[i][j];}//第i行第k列为第i行的最大元素

for(m=0,f=1;m

if(a[m][k]

if(f)

{w=1;

q1=i;

q2=k;}

}

returnw;

}

voidmain()

{

inta[M][N]={1,2,3,4,4,5,3,6,3,5,6,7};/*{2,4,10,6,3,4,5,8,9,1,2,3};*/

intw;

w=andian(a,M,N);

if(w)

{cout<<"该二维数组存在鞍点:

"<

cout<<"其行标为:

"<

"<

}

elsecout<<"该二维数组没有鞍点。

";

}

4-7、编写函数求一个4×4二维数组中周边元素的和。

#include

usingnamespacestd;

intarrSum(intarr[][4])

{

inti,j,sum=0;

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

{

sum+=arr[i][0];

sum+=arr[i][3];

}

for(j=0;j<4;j++)

{

sum+=arr[0][j];

sum+=arr[3][j];

}

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

当前位置:首页 > 人文社科 > 法律资料

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

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