1、软件技术基础习题答案(新教材)练习1(p26)1、见教材相关内容2、错误的:yy、a25+36、05693、错误的:int、36A、a+b、c/dab、static、do、class4、(1)5 (2)2 (3)1 (4)0 (5)1 (6)1 (7)9 (8)13 (9)1 (10)2 (11)5 (12)05、选择题(1)D (2)D (3)B、C (4)C (5)C (6)C6、手写心算写出正确结果(如上机只是为了验证)7、(1) #includevoid main()int a; cina; couta*10endl;(2) #includevoid main()int a, b; c
2、inab; coutb? b: a)endl;(3) #includevoid main()float radius; cinradius; coutradius*radius*3.1416endl;(4) #includevoid main()int t=1000; cout“1000s=”t/360“:”t%360/60“:”t%360% 60endl;(5) #includevoid main()int a; cina; couta/100endla%100/10endla%10endl;或者:#include void main()int a,b=985; for(int i=1;i=
3、100;i*=10) a=b/(100/i)%10;coutaendl;练习2(p48)1、见教材相关内容2、手写心算写出正确结果(如上机只是为了验证)3、#includevoid main()int n,y;cinn;coutendl=0?(n0?n+1:0):n*n)endl;return;4、#includevoid main()int i;float s11;coutPlease Enter 0 100endl;for(i=1;isi;for(i=1;i=90)couti Aendl;else if(si=80)couti Bendl;else if(si=60)couti Cendl
4、;else if(si60)couti Dendl;5、#include void main()char ch;cinch;for(;)if(ch=0&ch=9) coutits a number character.=a&ch=z) coutits a small character.=A&ch=Z) coutits a capital character.endl;return; else coutits a other character.endl;return;6、#includevoid main()int i,s=1;float sum=1.0;for(i=3;1.0/i1E-6;
5、i+=2)s*=(-1);sum=sum+(1.0/i)*s;cout4*sumendl;7、斐波纳契数列中的前两个数是0和1,从第三个数开始,每个数等于前两个数之和,即0、1、1、2、3、5、8、13、.等。编程序求斐波纳契数列的前n个数。(自己加换行)(1)一般算法:/Compute the fibrachi squence#includevoid main()long n,middle,a50=0,1;coutn;for(int i=0;in-2;i+)middle=ai+ai+1;coutmiddle ;ai+2=middle;coutendl;return;(2)递归算法:#incl
6、udelong fib(int n)if(n=0)return 0;elseif(n=1)return 1;elsereturn (fib(n-2)+fib(n-1);void main()int n;cinn;for(int i=0;in;i+)coutfib(i) ;coutendl;return;8、用switch语句编写程序,统计输入的一串字母中元音字母(a、e、i、o、u)的总个数和每个元音字母出现的次数。#include#includevoid main()int a,e,i,o,u;char c50;a=e=i=o=u=0;coutc;for(int j=0;cj!=0;j+)s
7、witch(ai)case a:;case A:a+;break;case e:;case E:e+;break;case i:;case I:i+;break;case o:;case O:o+;break;case u:;case U:u+;break;coutsum=a+e+i+o+uendl;couta=asetw(3)e=esetw(3)i=isetw(3)o=osetw(3)u=uendl;return;9、摄氏温度和华氏温度的转换公式为:c=(5/9)*(F-32)编程序输出华氏-30度到100度,间隔为5度的华氏温度和摄氏温度对照表。#includevoid main()flo
8、at c,f=-30;for(;f=100;)c=(f-32)*5/9;/Dont use c=(5/9)*(f-32)coutDegree Fahrenheit Degree Centigradeendl;coutsetw(8)fsetw(22)cendl;f=f+5;return;10、编程序计算5!+6!+7!。#includevoid main()int a,s=0;for(int i=1;i4;i+)a=1;for(int j=0;j5+i;)a*=j+;s+=a;cout5!+6!+7!=sendl;return;11、编程序,求从2开始连续100个素数。#includevoid
9、main()int i,j,n=0;for(i=2;n100;i+)j=2;for(;i%j!=0;j+);if(i=j) couti ; n+;12、includevoid main()int x,y,z;for(x=1;x=20;x+)for(y=1;y=33;y+)for(z=3;z=99;z+=3)if(5*x+3*y+z/3=100)&(x+y+z=100)/满足百钱和百鸡的条件?coutcock=xendlhen=yendlchicken=zendl;13、#include#includevoid main( ) int n; do coutn;while(n=0);int m,k
10、,j,l,i;j=n*n*n;for (m=1; m=j;m+=2) l=0;i=0;dol+=m+i*2;i+;while(lj);if(l=j)coutsetw(5)n*n*n=j=;for(k=0;ki-1;k+) coutm+k*2+;coutm+k*2endl;14、#includevoid main()int i,j;for (i=1;i6;i+)for(j=1;j=5-i;j+)cout ;for(j=1;j=2*i-1;j+)cout* ;coutendl;for (i=1;i5;i+)for(j=1;j=i;j+)cout ;for(j=1;j=9-2*i;j+)cout*
11、;coutendl;或者#includevoid main()int i,j,k;for(i=-1,j=-1;j=17;j+=2)if(j9)i+=2;elsei-=2;for(k=1;k=9-i;k+)cout ;for(k=1;k=i;k+)cout* ;coutendl;练习3(p75)1、见教材相关内容2、手写心算写出正确结果(如上机只是为了验证)3、(1) #includevoid main()int a10,max,min;float sum;for(int i=0;iai;max=min=sum=a0;for(i=1;imax) max=ai;if(aimin) min=ai;s
12、um+=ai;cout最大值=maxendl最小值=minendl平均值=sum/10endl;(3) #includevoid main()int a=0,i=0;char *p;cinp;for(int j=0;pj!=0;j+)if(pj=a)a+;elseif(pj=i)i+;couta个数为:a i个数为:i pendl;(4) #includevoid main()int a33,sumz=0,sumc=0;for(int i=0;i3;i+)for(int j=0;jaij;sumz+=aii;sumc+=aij-i-1;cout主对角线元素和=sumzendl次对角线元素和=s
13、umcendl;(7)#includevoid main()char str=students,*p=teachers,temp;coutstrendlpendl;for(int i=0;i=8;i+)temp=stri;stri=pi;pi=temp;coutstrendlpendl;11#includevoid delchar(char *s1,char s2);void main()char s180,s2; coutInput a string and a chars1s2;delchar(s1,s2);couts1endl;void delchar(char *a1,char a2)
14、for(int i=0,j=0;*(a1+i)!=0;i+,j+)if(*(a1+j)=a2) while(*(a1+j)!=0) *(a1+j)=*(a1+j+1);j+;j=i;elsecontinue;练习4(p115)1、见教材相关内容2、写出结果(必要时上机验证)4、#includelong fact1(int i)long a=1;for(int j=1;j=i;j+)a*=j;return(a);long fact2(int j)long s=0;for(int i=1;i=j;i+)s+=i;return s;void main()int m,n;long result1,re
15、sult2;coutn):;cinmn;result1=fact1(m)/(fact1(n)*fact1(m-n);result2=fact2(m)-fact2(n);coutendlresult1=result1endlresult2=result2endl;8、#include templateT abs(T x)return(x=0)?x:-x;void main()int a=-12;float b=-12.01;double c=-12.563637;cout整型:a 绝对值abs(a)endl;cout浮点:b 绝对值abs(b)endl;cout双精度:c 绝对值abs(c)en
16、dl;9、#includeint abs(int x)return(x0)? x:-x;float abs(float x)return(x0)? x:-x;double abs(double x)return(x0)? x:-x;void main()int a=-12;float b=-12.01;double c=-12.563637;cout整型:a 绝对值abs(a)endl;cout浮点:b 绝对值abs(b)endl;cout双精度:c 绝对值abs(c)endl;11、#include void delstr(char *s1,char *s2)for(int i=0;s1i;
17、i+)for(int j=0;s2j&s1i;j+)if(s1i=s2j)for(int k=i;s1k;k+)s1k=s1k+1;j-;void main() char str1=tjuniversitychemicalengineering,str2=tgi;coutstr1endl;coutstr2endl;delstr(str1,str2);coutstr1endl;12、#include#includetemplatevoid sort(T *x,int n)int i,j,k;T temp;for(i=0;in-1;i+)k=i;for(j=i+1;jxj) k=j;if(k!=i
18、)temp=xi;xi=xk;xk=temp;for(i=0;in;i+)coutxi ;cout0;n1/=10) i+;if(ki | k1) j*=10;n/=j;while(n10)n-=10;/花括弧内也可写成long j=1; while(j+k) n/=10; n%=10; return n; 15#include#include#includeint find(char a, char b);void main()cout请输入字符串endl;char str80,k;cin.getline(str,80);cout输入字符k;cout出现的位置是find(str,k)endl
19、;int find(char a, char b)int i,j;i=strlen(a);for(j=0;ji) return 0;else return j+1;17、#includeconst int N=5;void sort(int a,int bN)int i,j,k,temp;for(i=0;iN-1;i+)k=i;for(j=i;jN;j+)if(akaj)k=j;if(k!=i)temp=ai;ai=ak;ak=temp;temp=bi;bi=bk;bk=temp;for(i=0;iN;i+)coutbi aiendl;void main() int xN=85,72,98,5
20、6,85;int bN=1,2,3,4,5;sort(x,b);练习5p1611、回答以下问题:1. 类是具有共同属性和操作的对象的一种抽象,是一种用户自定义的数据类型。对象是封装了描述其属性的数据及对这些数据所加的操作而构成的统一体。2. 面向对象程序设计方法的基本特征有抽象性,封装性,继承性和多态性。3. 用privite说明的成员他们只能被该类的成员函数直接访问,其成员函数也称为工具函数。而用public说明的为公有成员,可以被该类对象直接访问,这部分中的函数也称为操作接口。4. 构造函数主要为对象分配存储空间和对对象数据成员的初始化,而析构函数主要用于执行各语句和释放对象所占用的存储空
21、间。构造函数有以下特点:(1)不允许有任何返回值;(2)函数名必须与本类的类名相同;(3)其参数个数可以为0,也可以有多个,故而函数可以重载;(4)构造函数可以带有一个数据成员初始化表,它必须写在形式参数表的右边圆括号之后,函数体的左花括号之前,并且有一个冒号开始。析构函数特点为:(1)函数名为本类的类名前面加上“”符号;(2)不允许带有任何参数;(3)不允许有任何返回值。具有用一个已定义的对象初始化一个被创建的同类对象作用的函数叫做拷贝函数。自动调用拷贝函数的条件是:(1)在遇到用一个已定义的对象初始化一个被创建的同类对象时;(2)在遇到一个函数时,要把实参对象按值传递给相应的形参对象时;(
22、3)在遇到把对象作为返回值时5. A类中包含有B类对象作为私有数据成员时,B类对象就是A的子对象。初始化时,首先按照各子函数对象的定义顺序调用他们个子所属类的构造函数并对其进行初始化,然后再执行对本类基本类型数据成员初始化以及执行本类的构造函数体。6. C是通过this指针的当前值来感知当前对象的。*this就表示当前对象。7. 友元函数可以访问其他定义类中的全体数据成员。使用友元函数破坏了类的封装性,引入他的目的是加强简化同类对象之间的操作和提高面向对象程序的执行速度。8. 类模版是C中支持参数多态性的工具。一个类模版允许用户为定义一种模式,使得类中的某些数据成员,某些成员函数的参数,某些成
23、员函数内部所需要的局部变量以及某些成员函数的返回值能取任何形式。类模版说明本身并不产生代码,只是指定了一个类族。2、单项选择题AADCAA3、写出以下程序的输出结果:(1)constructing(1,2)constructing(5,6)1,25,6destructed(1,2)destructed(5,6)(2)0,2,14、程序填空(1)jp0line%10=1(或者line%11=0)200obj.Run()(2)long myclass:sum=0ob3(或者ob1, ob2)5、#includeclass dateprivate:int year,month,day,k;publi
24、c:date(int y,int m,int d)year=y;month=m;day=d;void numberofdays()int *p,*j,a13=0,31,28,31,30,31,30,31,31,30,31,30,31,0,31,29,31,30,31,30,31,31,30,31,30,31;p=a0;if(year%4=0)|(year%400=0&year%100!=0)p+=13;j=p+month;while(pj)day+=*p;p+;void print()cout是第day天endl;void main()int y,m,d;cout输入年月日ymd;date a
25、(y,m,d);a.numberofdays();a.print();6、#includeclass Integer int d;public: int GetD()return d; void SetD(int x)d=x; void Isodd() if(d%2=0) coutd为偶数endl; else coutd非偶数endl;void IsPrime()int i; for(i=2;id;i+) if(d%i=0) break; if(i=d) coutd为素数endl; else coutd非素数endl;void main()Integer ob1, ob2;ob1.SetD(1
26、5);ob1.GetD();ob1.Isodd();ob1.IsPrime();ob2.SetD(31);ob2.GetD();ob2.Isodd();ob2.IsPrime();7、/Factorial of N#includeclass factlong n;public:fact(long x)n=x;void mul()for(long f,i=f=1;i=n;i+)f*=long (i);coutN!=fendl;void main()long i;couti;fact ob(i);ob.mul();8、设计一个平面直线类line,采用友元函数判断两条直线是平行还是相交,并采用友元函
27、数计算二直线相交时的交点坐标。再编写一个主函数进行测试。#include classlinedouble A,B,C; static int n;public:void friend Is (line &l1,line &l2);void friend crosspoint (line &l1,line&l2);line(double a=1.0,double b=1.0,double c=1.0)A=a;B=b;C=c;void print()cout直线A=0.0) cout+; coutB=0.0) cout+; coutC=0;int n=0;void Is (line&l1,line
28、 &l2)if (l1.A*l2.B=l1.B*l2.A)cout两直线平行endl;else cout两直线相交endl;n+=1;void crosspoint(line &l1,line &l2)if (n=0 ) cout两直线平行;else double x=(-l2.B*l1.C+l1.B*l2.C)/(l1.A*l2.B-l2.A*l1.B);double y=(-l2.A*l1.C+l1.A*l2.C)/(l2.A*l1.B-l1.A*l2.B);cout相交点为x=x y=yendl;void main()line l1(1,2,3), l2(3,4,5);l1.print(
29、); l2.print();Is(l1,l2);crosspoint(l1,l2);练习 6 (p184)1、见教材相关内容2、选择题(1)B(2)D(3)C(4)B(5)D3、写出结果(必要时上机验证)4、填空题(1) person、(n,s)、person、(n,s)(2) table、circle、charstrlen(c)+1、strcpy、getheight()、getarea()、getcolor()练习7 (p210)1、见教材相关内容2、选择题(1)D(2)C(3)A(4)C(5)C3、写出结果(必要时上机验证)4、填空题(1)const point &p、friend6、成员
30、函数:#include#includeclass stringprivate:char s30;public:string(char *p=0)strcpy(s,p);char *print()return s;string operator+=(string str);string string:operator+=(string str)strcat(s,str.s);return s;void main()string ob1(Tianjin),ob2(University);coutob1ob1.print()endl;coutob2ob2.print()endl;ob1+=ob2;c
31、outob1+=ob2ob1.print()endl;友元函数:#include#includeclass stringprivate:char s30;public:string(char *p=0)strcpy(s,p);char *print()return s;friend string operator+=(string str1,string str2);string operator+=(string str1,string str2)strcat(str1.s,str2.s);return str1;void main()string ob1(Tianjin),ob2(Univ
32、ersity);coutob1ob1.print()endl;coutob2ob2.print()endl;coutob1+=ob2(ob1+=ob2).print()endl;练习8(p228)1、见教材相关内容2、选择题(1)B (2)B (3)C (4)A (5)B3、写出结果(必要时上机验证)4、填空题(1)ofstream outfile、!outfile、outfile、outfile.close()(2)“data.dat”、outfile5、6、#include#include#include void main() char *s1,ch;cins1;fstream file
33、(c:filel.txt,ios:in|ios:out); file.write(s1,strlen(s1);file.seekp(0,ios:beg);while(file.get(ch)coutnext、head-next(3)len-i-1、A.ClearList()4、算法设计题(1)templatevoid Seqlist:Reverse()T temp;for(int i=0;ilength/2;i+)temp= element i;element i= element length-i-1;element length-i-1=temp;(2) void Seqlist:Del_Item(T item)int i;while(i=Search(item)!=-1)Delete(i,item); length-; (3)vo