习题答案C++程序设计教程第三版朱红清华大学出版社.docx
- 文档编号:24495320
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:83
- 大小:35.90KB
习题答案C++程序设计教程第三版朱红清华大学出版社.docx
《习题答案C++程序设计教程第三版朱红清华大学出版社.docx》由会员分享,可在线阅读,更多相关《习题答案C++程序设计教程第三版朱红清华大学出版社.docx(83页珍藏版)》请在冰豆网上搜索。
习题答案C++程序设计教程第三版朱红清华大学出版社
练习题
(1)
一、选择题
(1)D
(2)C(3)A(4)C(5)A
(6)B(7)D(8)B(9)D(10)D
一、问答题
略
练习题
(2)
一、选择题
(1)C
(2)D(3)D(4)D(5)D
(6)A(7)A(8)B(9)A(10)C
(11)D(12)C(13)D(14)B(15)A
(16)D(17)A(18)C(19)A(20)A
二、填空题
(1)22
(2)2(3)1(4)101(5)float
(6)double(7)true或1(8)1(9)n%10n/10%10n/100%10n/1000%10
(10)(a)sin(x)/(x-y)(b)sqrt(s*(s-a)*(s-b)*(s-c))(c)(a-b)*(a+b)(d)(x+y)/fabs(x-y)
练习题(3)
一、选择题
(1)A
(2)D3.C4.A5.C
6.A7.C8..D9.B10.D
11.D12.B13.A14.C
二、填空题
(1)5(4).133(3)235(4)1//1//3//default(5)20
三、编程题
//1.根据下面函数表达式编写一个程序,实现输入x的值后,能计算并输出相应的函数值y:
#include
usingnamespacestd;
intmain()
{doublex,y;
cout<<"请输入x:
";
cin>>x;
if(x<0)
y=x*x;
elseif(x>=0&&x<1)
y=2.5*x-1;
else
y=3*x+1;
cout<<"x="< return0; } //2.设计一个程序,要求: 对从键盘输入的一个不多于5位的正整数,能输出它的位数并输出它的各位数字之和。 #include usingnamespacestd; intmain() { intx,count=0,sum=0; cout<<"请输入x: "; cin>>x; cout< while(x) { sum=sum+x%10; x=x/10; count++; } cout< "< return0; } //编程计算s=1! +2! +3! +...+n! ,n的值从键盘输入,要求输出n和s的值。 #include usingnamespacestd; intmain() { intn; doublet=1,s=0; cout<<"请输入n: "; cin>>n; for(inti=1;i<=n;i++) { t=t*i; s=s+t; } cout<<"n="< return0; } //4.编程求之值,其中是一个数字,n表示的项数和其最后一项的位数。 例如: 2+22+222+2222+22222(此时n=5)。 #include usingnamespacestd; intmain() { intn,a; doubles=0,t=0; cout<<"请输入a和n: "; cin>>a>>n; for(inti=1;i<=n;i++) { t=t*10+a; s=s+t; } cout<<"s="< return0; } //5.利用公式: 编程计算的近似值,要求计算到最后一项的绝对值小于为止。 #include #include usingnamespacestd; intmain() { intn=1,flag=1; doublepi=1,t=1; while(fabs(t)>1e-5) { flag=-flag; t=flag*1.0/(2*n+1); pi=pi+t; n++; } cout<<"pi="<<4*pi< return0; } //6.编程求出所有的"水仙花数"。 所谓"水仙花数"是指一个3位数,其各位数字立方和等于该数本身。 例如,153是水仙花数,因为。 #include usingnamespacestd; intmain() { inta,b,c; for(inti=100;i<1000;i++) { a=i/100; b=i/10%10; c=i%10; if(i==a*a*a+b*b*b+c*c*c) cout< } return0; } //7.编程求满足以下条件的三位整数n,它除以11所得到的商等于n的各位数字的平方和,且其中至少有两位数字相同。 例如,131除以11的商为11,各位数字的平方和为11,所以它是满足条件的三位数。 #include usingnamespacestd; intmain() { inta,b,c; for(inti=100;i<1000;i++) { a=i/100; b=i/10%10; c=i%10; if(i/11==a*a+b*b+c*c&&(a==b||b==c||a==c)) cout< } return0; } //8.设计一个求两正整数m和n的最大公约数的程序。 m和n的值由键盘输入。 #include usingnamespacestd; intmain() { intm,n; cout<<"请输入两个整数: "; cin>>m>>n; for(inti=m;i>=1;i--) if(m%i==0&&n%i==0) break; cout< "< return0; } 练习题(4) 一、选择题 (1)C2.B3.B4.B5.C 6.C7.B8.C9.D10.D 二、填空题 (1)23572.答案: theresultis: 365 3.cmathfabs(term)(-1)*x*x/(n)/(n+1) 4.答案: x=x/10n<=0n! =invert(n) 5.first: 33//second: 515//third: 1815 6.答案: 37..-9//-18 三、编程题 //1.设计一个程序,要求输入三个整数,能求出其中的最大数并输出。 程序中必须用函数实现求两数中大数的功能 #include usingnamespacestd; intmax(inta,intb) { returna>b? a: b; } intmain() { inta,b,c,maxnumber; cout<<"请输入三个整数: "; cin>>a>>b>>c; maxnumber=max(a,b); maxnumber=max(maxnumber,c); cout< "< return0; } //2.设计一个程序,求出100~200之间的所有素数,要求每行输出5个素数。 判断一个整数是否为素数用一个函数来实现。 #include usingnamespacestd; intprime(intx) { for(inti=2;i<=x/2;i++) if(x%i==0) return0; return1; } intmain() { intk=0; for(inti=100;i<=200;i++) if(prime(i)) { cout< k++; if(k%5==0) cout< } return0; } //3.回文数是指其各位数字左右对称的整数,例如12321是回文数。 定义一个判断回文数的函数,并打印1000~2000之间的所有回文数。 #include usingnamespacestd; intfun(intx) { ints=0; inti=x; while(i) { s=s*10+i%10; i=i/10; } if(s==x) return1; elsereturn0; } intmain() { intk=0; for(inti=1000;i<=2000;i++) if(fun(i)) {cout< k++; if(k%5==0) cout< } return0; } //4.用函数实现求两正整数的最大公约数的功能,并在主函数中调用该函数求出两正整数的最小公倍数。 #include usingnamespacestd; intgys(inta,intb) { for(inti=a;i>=1;i--) if(a%i==0&&b%i==0) returni; returni; } intmain() { inta,b,t; cout<<"请输入两个正整数: "; cin>>a>>b; t=gys(a,b); cout< "<<(a*b/t)< return0; } //5.用递归函数实现Hermite多项式求值。 当x>1时,Hermite多项式定义为输入实数x和整数n后,求出Hermite多项式前n项的值 #include usingnamespacestd; doublehermite(doublex,intn) { doubley; if(n==0) y=1; elseif(n==1) y=2*x; else y=2*x*hermite(x,n-1)-2*(n-1)*hermite(x,n-2); returny; } intmain() { doublex,y; intn; cout<<"请输入n和x: "; cin>>n>>x; y=hermite(x,n); cout<<"y="< return0; } //6.分别设计两个函数,一个实现整数的正序输出,另一个则实现反序输出。 如输人一个整数3456,则输出3456和6543。 #include usingnamespacestd; voidfun1(intn) { if(n==0) return; else fun1(n/10); cout< } voidfun2(intn) { if(n==0) return; else { cout< fun2(n/10); } } intmain() { intn; cout<<"请输入n: "; cin>>n; fun1(n); cout< fun2(n); cout< return0; } 练习题(5) 一、选择题 1.D2.C3.D4.C5.B6.B7.B8.C 二、填空题 (1)cb (2)3(3)9(4)3 三、编程题 //1.编写一个宏MAX(a,b,c),求a,b,c中的最大值。 a,b,c从键盘输入。 #include usingnamespacestd; #definemax(a,b,c)(a>b? a: b)>c? (a>b? a: b): c intmain() { inta,b,c; intmaxnumber; cout<<"请输入三个数: "; cin>>a>>b>>c; maxnumber=max(a,b,c); cout<<"最大数为: "< return0; } //2.已知三角形的三条边a,b,c,则三角形的面积为 #include #include usingnamespacestd; #defines(a,b,c)((a+b+c)/2) #definearea(a,b,c)s(a,b,c)*(s(a,b,c)-a)*(s(a,b,c)-b)*(s(a,b,c)-c) intmain() { doublea,b,c; doubless; cout<<"请输入三角形的三边: "; cin>>a>>b>>c; ss=area(a,b,c); ss=sqrt(ss); cout<<"三角形的面积为: "< return0; } 练习题(6) 一、选择题 1.C2.C3.A4.D5.B6.B7.D 8.B(D未有'\0'结束)9.A10.D11.D12.B 二、填空题 (1).182215 (2)3040(3)123//456 (4)321678(5)3,6,9,(6)GDABC(7)62(8)13001101 三、完善程序 1.答案: n/10i 2.答案: ! (n%i)或n%i==0m*10+n%10p(convert(i)) 3.答案: a>0(或a)r<10i-1 四、编程题 //1.求一个4×4矩阵两对角线元素之和。 #include usingnamespacestd; intmain() { inta[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; inti,j,s=0; for(i=0;i<4;i++) { for(j=0;j<4;j++) cout< cout< } for(i=0;i<4;i++) s=s+a[i][i]+a[i][3-i]; cout<<"s="< return0; } //2.输出以下的杨辉三角形(要求输出8行) #include usingnamespacestd; intmain() { inta[10][10]; inti,j; for(i=0;i<8;i++) { a[i][0]=1; a[i][i]=1; } for(i=2;i<8;i++) for(j=1;j { a[i][j]=a[i-1][j-1]+a[i-1][j]; } for(i=0;i<8;i++) { for(j=0;j<=i;j++) cout< cout< } return0; } //3.找出二维数组中的鞍点,即该位置上的元素在该行上最大、在该列上最小。 也可能没有鞍点。 #include usingnamespacestd; intmain() { inta[4][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; inti,j,k,mini,maxj,flag=0,max; for(i=0;i<4;i++) { max=a[i][0]; maxj=0; for(j=1;j<4;j++) { if(max { max=a[i][j]; maxj=j; } } mini=i; for(k=0;k<4;k++) { if(max>a[k][maxj]) { max=a[k][maxj]; mini=k; } } if(mini==i) {flag=1; cout<<"鞍点是: "<<"a["< break; } } if(flag==0) cout<<"没有鞍点! "< return0; } //4.从键盘输入一个字符串,删除字符串中的所有空格后输出。 #include #include usingnamespacestd; intmain() { charstr[80]; inti,j; cout<<"请输入一行带空格的字符串: "; cin.getline(str,80); i=0; while(str[i]) { if(str[i]=='') { j=i; while(str[j]) { str[j]=str[j+1]; j++; } i--; } i++; } cout<<"删除空格的字符串为: "; cout< return0; } //5.从键盘将一个字符串输入到字符数组中,按反序存放。 如,输入"Abcde",则输出"edcbA"。 #include #include usingnamespacestd; intmain() { charstr[80],ch; inti,j; cout<<"请输入一行字符串: "; cin.getline(str,80); intn=strlen(str)-1; for(i=0,j=n;i { ch=str[i]; str[i]=str[j]; str[j]=ch; } cout<<"反序的字符串为: "< return0; } //6.编写一个函数把一个10进制数转换成16进制数。 #include #include usingnamespacestd; voidchange(intn,charstr[]) { inti=0,j; intx; charch; while(n) { x=n%16; if(x<10) str[i]=x+'0'; else str[i]=x-10+'A'; n=n/16; i++; } str[i]='\0'; for(i=0,j=strlen(str)-1;i { ch=str[i]; str[i]=str[j]; str[j]=ch; } } intmain() { intn; charstr[80]; cout<<"请输入一个十进制整数: "; cin>>n; change(n,str); cout< "< return0; } //7.编写一个函数: voidstrcpy(chara[],charb[]);将b中的字符串拷贝到数组a中。 (要求不使用C++的库函数strcpy())。 #include usingnamespacestd; voidstrcpy(chara[],charb[]) { inti=0,j=0; while(a[i++]=b[j++]); } intmain() { chara[80],b[80]; cout<<"请输入一个字符串: "; cin.getline(b,80); strcpy(a,b); cout<<"字符串b为: "< cout<<"字符串a为: "< return0; } //8.编写一个函数: voidstrcat(chara[],charb[]);将b中的字符串拼接到数组a中的字符串的后面,构成一个字符串。 (要求不使用C++的库函数strcat())。 #include usingnamespacestd; strcat(chara[],charb[]) { inti=0,j=0; while(a[i]) i++; while(a[i++]=b[j++]); } intmain() { chara[80],b[80]; cout<<"请输入两个字符串: "; cin.getline(a,80); cin.getline(b,80); cout<<"字符串a为:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 习题 答案 C+ 程序设计 教程 第三 朱红 清华大学出版社