C++程序作业答案(共22页).doc
精选优质文档-倾情为你奉上计算机应用专业“C+语言程序设计”课程作业第一次作业一、填空题1C+语言中的每条基本语句以 ; 作为结束符,每条复合语句以 作为结束符。2用于输出表达式值的标准输出流对象是 cout ,用于从键盘上为变量输入值的标准入流对象是 cin 。3当不需要函数返回任何值时,则应把该函数类型定义为 void 。4执行“cout<<143<<+<<18<<=<<143+18<<endl;”语句后得到的输出结果为 143+18=161 。5执行“cout<<“ning”<<“chen”<<38<<endl;”语句后得到的输出结果为 ningchen38 。6在每个C+程序中都必须包含有这样一个函数,该函数的函数名为 main 。7C+源程序文件的缺省扩展名为 cpp ,由C+源程序文件编译而成的目标文件的缺省扩展名为 obj ,由C+目标文件连接而成的可执行文件的缺省扩展名为 exe 。8程序运行中需要从键盘上输入多于一个数据时,各数据之间应使用 空格 或 逗号 符号作为分隔符。9十进制数25表示成符号C+语言规则的八进制和十六进制数分别为 31 和 19 符号。10在C+语言中,用转义字符序列 n 或操纵符 endl 表示输出一个换行符。11执行“cout<<char(b+2)<<endl;”语句后得到的输出结果为 d 。12执行“cout<<char(K-3)<<endl;”语句后得到的输出结果为 H 。13已知AZ的ASCII码为6590,当执行“int x=H+5;”语句后x的值为 77 。14已知AZ的ASCII码为6590,当执行“char ch=16*5+2;cout<<ch<<endl;语句序列后,得到的输出结果为 R 。15假定一个枚举类型的定义为“enum RAxa,xb,xc,xd;”,则执行“cout<<”xc=”<<xc<<endl;”语句得到的输出结果为 xc=2 。16假定一个枚举类型的定义为“enum RBab,ac=3,ad,aex=ad;”则x的值为 4 。17Char、short和int类型的大小分别为 1字节 、 2字节 和 4字节 。18float和double类型的大小分别为 4字节 和 8字节 。19十进制数128和-3.26的类型分别为 整型 和 双精度型 。20若需要定义一个标识符常量,并且使C+能够进行类型检查,则应在定义语句的开始用保留字 define 。21使用const语句定义一个标识符常量时,则必须对它同时进行 初始化 。22执行“int x=45,y=16;cout<<x/y<<<<x%y<<endl;”语句序列后得到的输出结果为 2 13 。23假定x=10,y=6,则表达式2+x+ +和+ +y*3的值分别为 12 和 21 。24算术表达式(x2+y2)/(2-xy)对应C+表达式为 (x*x+y*y)/(2-x*y) 。25算术表达式xy2/(3a+4b-1)对应的C+表达式为 x*y*y/(3*a+4*b-1) 。26表达式float(25)/4和int(14.6)%5的值分别为 6.25 和 4 。27表达式a=a+b表示成复合赋值表达式为 a+=b 。28表达式a=a+1表示成增量表达式为 a+ 。29增量表达式+ +y表示成赋值表达式为 y=y+1 。30关系表达式(x= =0)的等价表达式为 !x 。31关系表达式(x! =0)的等价表达式为 x 。32关系表达式x+y>z的相反表达式为 x+y<=z 。33逻辑表达式x>5&& x<10的相反表达式 x<=5|x>=10 。34逻辑表达式a>b | | b= =5的相反表达式为 a<=b&&b!=5 。35若x=15,y=40,则x>y 和x<=y的逻辑值分别为 false 和 true 。36假定x=5,则执行“a=(x? 10:4*2);”语句后a的值为 10 。37假定a=5,则条件表达式“a= =0? 10:20”的值为 20 。38执行“typedef int Data Type;”语句后,在使用int定义整型变量的地方都可以使用 DataType 定义整型变量。39设x和y均为bool量,x & & y为真的条件是 x=true y=true 。40设x和y均为bool量,则x | | y为假的条件是 x、y都为false 。二、写出下列程序运行后的输出结果1#include <iostream.h> void SB (char ch) switch (ch) case A :case a: cout <<”well”!” ; break; case B: case b: cout <<”good!” ;break; case C: case c: cout <<”pass!” ;break; default : cout << “bad!” ; break;void main () char al=b,a2=c,a3=f; SB(al);SB(a2);SB(a3);SB(A); Cout <<endl;good!pass!bad!well!2、#clude <stream.h>#include<stdlib.h>double SD(int a,int b,char op) double x; switch (op) case x:x=double(a) + b; break; case -: x=double (a) b; break; case * x=double (a) * b;break; case /:if (b) x=double (a)/b; else exit(1); break; default:exit(1); return x; void main ()int x=20 ,y=12;cout <<SD(x,y,-)<< ;cout <<SD(x,y,*)<< ;cout <<SD(x+y,y-2,/)<<endl;8 240 3.23、#include <iostream.h>void main () int s=0; for (int I=1;I<6;I+) s+=I*I; cout <<”s=”<<s<<endl;s=554、# include <iostream.h>void main () int s=0; for (int I=1;I+) if (s>50) break; if (I%3= =0) s+=I; cout <<”I,s=”<<I<<”,”<<s<<endl;I,s=19,635、# include <iostream.h> void main ()int s1=0,s2=0;for (int I=0;I<10;I+) if (I%2) s1+=I; else s2 +=I;cout <<s1<< <<s2<<endl;25 206、# include <iostream.h> void main ()int n=10,y=1;while (n-)y+;+y;cout <<”y*y=”<<y*y<<endl;y*y=441三、写出下列每个函数的功能1include<iostream.h> int SA(int a,int b) if(a>b) return 1; else if(a= =b) return 0; else return 1;比较两个整数a和b,如果a大于b则返回1;如果a等于b则返回0;如果a小于b则返回-1。2int SC(int a,int b,int c) if(a>=b && a>=c) return a;if(b>=a && b>=c) return b;if(c>=a && c>=b) return c;返回a、b、c三个数中的最大数。3int SE(int n) / /n为大于等于1的整数int x;cin>>x;if(n= =1) return x;int m=x;while(n) cin>>x; m+=x;return m;求输入的n个数之和。4double SF (double x,int n) / /n为大于等于0的整数 double p=1,s=1; for(int i=1;i<=n;i+ +) p* =x;s+ =p/(i+1); return s; 计算1+x/2+x2/3+x3/4+xn/(n+1)5include<math.h>bool SG(int x) / /x为大于等于2的整数 int a=int(sqrt(x);/ /取x的平方根 int i=2; while(i<=a) if(x%i= =0) break; i+ +; if(i<=a)return 0;else return 1;判断整数x是否为质数,若为质数返回true,若不是则返回false。6float FH( ) float x,y=0,n=0; cin>>x; while(x!= 100) n+ +;y+=x; cin>>x; if(n= =0) return y;else return y/n; 求键盘输入的数的平均值,输入-100结束(不计在平均值内),若没有数输入则返回0。计算机应用专业“C+语言程序设计”课程作业第二次作业一、 填空题1假定一个一维数组的定义为“char * a5;”,则该数组所含元素的个数为 5 ,所占存储空间的字节数为 20 。2假定一个二维数组的定义为“int a46;”,则该数组所含元素的个数为 24 ,所占存储空间的字节数为 96 。3假定一个二维数组的定义为“char a88;”,则该数组所含元素的个数为 64 ,所占存储空间的字节数为 64 。4执行“typedef float ABC10;”语句把ABC定义为具有10个单精度元素的 数组 。5在函数外定义的变量称为 全局 变量,若没有被初始化则系统隐含对它赋初值 0 。6函数中的形参变量的初值由 调用 该函数时获得。7函数调用时,实参向形参的传送分为 传值 和 传址 两种传送方式。8变量分为全局和局部两种, 局部 变量没有赋初值时,其值是不确定的。二、 给出下列程序运行后的输出结果1include<iostream.h>void mian() int a10= 12,39,26,41,55,63,72,40,83,95; int i0=0,i1=0,i2=0; for(int i=0;i<10;I+) switch(ai%3) case 0 : i0+ +;break; case 1 : i1+ +;break; case 2 : i2+ +; cout<< i0<< <<i1<< <<i2<<endl;4 2 42include<iostream.h>include<string.h>void main() char * a5 = ”student”,”worker”,”cadre”,”apple”,”peasant”; char * p1,*p2; p1=p2= a0;for(int i=0;i<5;i+ +) if(strcmp(ai,p1)>0)p1= ai; if(strcmp(ai,p2)<0)p2= ai;cout<<p1<< <<p2<<endl;worker apple3include<iostream.h>void main() int a8= 36,73,48,14,55,40,32,66; int b1,b2; b1=b2= a0; for(int i=1;i<8;I+ +) if(ai>b1) if(b1>b2)b2=b1; b1= ai; cout<<b1<< <<b2<<endl;73 364include<iostream.h>void main() char a = ”aabcdaabacabfgacd”; int i1=0, i2=0, i=0; while(ai) if(ai = = a)i1+ +; if(ai = = b)i2+ +; i + +; cout<<i1<< <<i2<<endl;7 35include<iostream.h>void main() char a = ”abcdabcdbdaeaf”; int b5= 0 ,i=0; while(ai) switch(ai) case a : b0 + +;break; case b : b1 + +;break; case c : b2 + +;break; case d : b3 + +;break; default : b4 + +; i + +; for(i=0;i<5;i + +)cout<<bi<< ; cout<<endl;4 3 2 3 26include<iostream.h> void main() int a10 = 73,83,54,62,40,75,80,92,77,84;int b4 = 60,70,90,101;int c4 = 0;for(int i=0;i<10;i + +) int j = 0; while(ai > =bj)j + +; cj + +;for(i =0;i <4;i + +)cout<<ci<< ;cout<<endl; 2 1 6 17include<iostream.h>void main() int a3 4 = 1,2,7,8,5,6,11,12,24,10,3,4; int m = a0 0; int ii =0,jj =0; for(int i =0;i<3;i + +) for(int j =0;j<4;j + +) if(ai j >m)m= ai j;ii=i;jj=j;cout<< ii << << jj << << aii jj<<endl;2 0 248include<iostream.h>void main() int a =10,b =20; cout<< a << << b << endl; a * = 4; int b = a +35; cout<< a << << b << endl; cout<< a << << b << endl;10 2040 7540 20三、 写出下列每个函数的功能1int WC(int a ,int n,int k)int c = 0;for(int i = 0;i<n;i + +) if(ai > = k)c + +;return c;返回有n个元素的整型数组a中大于等于整数k的元素个数。2include<iostream.h>void WA(int a ,int n) for(int i = 0;i<n;i + +) int k = i; for(int j = i+1;j<n;j + +) if(aj<ak)k = j; int x = ai;ai = ak;ak = x;函数功能是将有n个元素的整型数组从小到大排列。3include<iosteram.h>template<class TT>int WG(TT a,TT b) if(a>b)return 1; else if(a = = b)return 0; else return 1;比较两个任意类型的数a和b,若a大于b则返回1,若a等于b则返回0,若a小于b否则返回1。4include<iostream.h>template<class Type>Type WD(Type a ,int n) Type m= a0; for(int i = 0;i<n;i + +) if(ai > m)m = ai; return m;返回有n个元素的任意类型数组中最大的数。5Template<class Type>void WE(Type a ,Type b ,int n) for(int i = 0;i<n;i + +) bi = ai * 2;将有n个元素的任意类型数组a中的每个元素乘以2后放到数组b中的相应位置中。计算机应用专业“C+语言程序设计”课程作业第三次作业一、 填空题1假定p所指对象的值为28,p+1所指对象的值为62,则* p + +的值为 28 。2假定p所指对象的值为28,p+1所指对象的值为62,则* + + p的值为 62 。3假定p所指对象的值为25,p+1所指对象的值为50,则执行“(*p)+ +;”语句后,p所指对象的值为 26 。4假定p所指对象的值为25,p+1所指对象的值为50,则执行“*(p+ +);”语句后,p所指对象的值为 50 。5假定a是一个指针数组,则a+i所指对象的地址比a地址大 未知 字节。6假定a是一个一维数组,则ai的指针访问方式为 *(a+i) 。7假定a是一个二维数组,则ai j的指针访问方式为 *(*(a+i)+j) 。可能不正确8假定a是一个一维数组,则ai对应的存储地址(以字节为单位)为 (char *)a+i*sizeof(a0) 。9假定一个二维数组为aM N,则ai j对应的存储地址(以字节为单位)为 (char *)a+(i*N+j)*sizeof(a00) 。10假定一个二维数组aM N,则ai的地址值(以字节为单位)为 (char *)a+i*N*sizeof(a00) 。11假定p是一个指向float型数据的指针,则p+1所指数据的地址比p所指数据的地址大 4 字节。12假定a为一个字符数组名,则元素a8的字节地址为 8 。13假定a为一个整型数组名,则元素a4的字节地址为 16 。14假定一个结构类型的定义为“struct Aint a,b;short c;A*d;”,则该类型的大小为 14 字节。15假定一个结构类型的定义为“struct Bint a8;char* b;”,则该类型的大小为 36 字节。16假定一个结构类型的定义为“struct Dint a;unionint b;double c;D*d3;”,则该类型的大小为 24 字节。17假定要动态分配一个类型为Worker的具有n个元素的数组,并由r指向这个动态数组,则使用的语句为 r=new Workern; 。18假定要访问一个结构x中的由a指针成员所指向的对象,则表示方法为 *(x.a) 。19假定要访问一个结构指针p所指对象中的b指针成员所指的对象,则表示方法为 *(p->b) 。二、 给出下列程序运行后的输出结果以下结果中空格以表示1include<iomanip.h>void main()int a8=7,9,11,13,3,8,15,17;int *p = a;for(int i =0;i<8;i + +)cout<<setw(5)<< * p + +;if(i +1)%4 = =0)cout<<endl;7911133815172include<iomanip.h>void main()int a5=3,6,15,7,20;int *p = a;for(int i = 0;i<5;i + +)cout<<setw(5)<< * p + +;cout<<endl;for(i =0;i<5;i + +)cout<<setw(5)<< * p;cout<<endl;361572020715633include<iomanip.h>void main()int a8 =4,8,12,16,20,24,28,32;int *p = a;docout<< *p << ;p + =3;while(p<a+8);cout<<endl;4 16 284include<iomanip.h>void main()int x =20,y =40, * p;p =&x;cout<< * p<< ;* p= x +10;p =&y;cout<< * p<<endl;* p = y +20;cout<< x << << y <<endl;20 4030 605include<iomanip.h>int LA(int * a,int n)int s = 0;for(int i =0;i<n;i + +)s + = ai;return s;void main()int a =5,10,15,20,25,30;int b =LA(a,5);int c =LA(a+3,2);cout<< b << << c << << b +2 * c<<endl;75 45 1656include<iomanip.h>void LC(int a,int b)int x = a;a = b;b = x;cout<< a << << b <<endl;void main()int x =15,y =36;LC(x,y);cout<< x << << y <<endl;36 1515 367include<iomanip.h>void LF(int & x, int y)x = x + y;y = x + y;cout<<”x =”<< x <<”,y =”<< y <<endl;void main()int x =5,y =8;cout<<”x =”<< x <<”,y =”<< y <<endl;LF(x,y);cout<<”x =”<< x <<”,y =”<< y <<endl;x=5,y=8x=13,y=21x=13,y=88include<iomanip.h>void LG(int * & a, int & m)a = new intm;int * p = a;for(int i = 0;i<m;i + +)* p + + =2 * i +1;void main()int * p, n =5;LG(p,n);for(int i = 0;i<n;i + +)cout<< pi<< ;cout<<endl;delete p;1 3 5 7 9 9include<iomanip.h>void LH(int * a, int n)int * p = a + n1;whlie(a<p)int x = * a;* a = * p;* p = x;a + +;p ;void main()int * d = new int5;int i;for(i = 0;i<5;i + +)di=2 * i +3;cout<<setw(5)<<di<< ;cout<<endl;LH(d,5);for(i = 0;i<5;i + +)cout<<setw(5)<<di<< ;cout<<endl;delete d;35791111975310include<iostream.h>struct Workerchar name15;/ /姓名int age;/ /年龄float pay;/ /工资;void main()Worker x =”weirong”,55,640;Worker y, * p;y = x;p =&x;cout<< y. name<< <<y. age<< <<y. pay<<endl;cout<< p>name<< << p>age+5<< << p>pay10<<endl;weirong 55 640weirong 60 63011include<iostream.h>include<string.h>struct Workerchar name15;/ /姓名int age;/ /年龄float pay;/ /工资;void main()Worker x;char * t =”liouting”;int d =46;float f =725;strcpy(x. name, t);x. age = d;x. pay = f;cout<< x. name<< <<x. age<< <<x. pay<<endl;liouting 46 725三、 写出下列每个函数的功能1include<iostream.h>void LI(int n)int * a = new intn, * p = a + n;for(int i =0;i<n;i + +)cin>> ai;for(i = n1;i> =0;i )cout<< *( p)<< ;cout<< n;delete a;输入n个数并以相反的顺序显示出来。2include<iostream.h>void LK(int a , int n, int * & b, int& m)float s =0;int i;for(i =0;i<n;i + +)s + = ai;s/= n;m = 0;for(i =0;i<n;i + +)if(ai> = s)m + +;b = new intm;int * p = b;for(i =0;i<n;i + +)if(ai> = s)* p + + = ai;将数组a中大于平均数的元素存放到动态申请的数组b中,数组b的大小由m返回。3/ /struct Worker/ / char name15;/ /姓名/ / int age;/ /年龄/ / float pay;/ /工资/ /;istream & operator>>(istream& istr,Worker& x)cout<<”请输入一个职工记录:姓名、年龄、工资”<<endl;istr>> x. name>> x. age>> x. pay;return istr;重载istream的>>操作符以输入Worker结构对象。4/ / struct StrNode/ / char name15;/ /字符串域/ / StrNode * next;/ /指针域/ /;void QB(StrNode * & f, int n)if(n = = 0)f =NULL;return;f =new StrNode;cin>>f>name;StrNode * p = f;whlie( n)p = p>next= new StrNode;cin>>p>name;p>next=NULL;创建有n个结点的StrNode类型的链表,并从键盘输入每个结点的name值。5/ / struct StrNodechar name15;StrNode * next;void QC(StrNode * f)whlie(f)cout<< f>name<< ;f = f>next;遍历链表并输出所有结点的name数据成员计算机应用专业“C+语言程序设计”课程作业第四次作业一、 填空题1. 在定义类对象的语句执行时,系统在建立每个对象的过程中将自动调用该类的_构造函数_使其初始化。2. 当一个类对象被撤消时将自动调用该类的_析构函数_。3. 对基类数据成员的初始化是通过执行派生类构造函数中的_初始化表_来实现的。4. 对一个类中的数据成员的初始化可以通过构造函数中的_初始化表_实现,也可以通过构造函数中的_赋值语句_实现。5. 在一个派生类中,对基类成员、类对象成员和非类对象成员的初始化次序的先基类成员,后类对象成员,最后非对象成员。6. 当撤消一个含有基类和类对象成员的派生类对象时,将首先完成派生类本身的析构函数定义体的执行,接着完成类对象成员的析构函数定义体的执行,最后完成基类成员的析构函数定义体的执行。7. 设PX是指向一个类动态对象的指针变量,则执行“delete px;”语句时,将自动调用该类的析构函数。8. 当一个类对象离开它的作用域时,系统将自动调用该类的析构函数。9. 假定一个类对象数组为AN,当离开它的作用域时,系统自动调用该类析构函数的次数为N次。10. 假定AB为一个类,则执行“AB a10;”语句时,系统自动调用该类构造函数的次数为10次。11. 假定拥护没有给一个名为AB的类定义构造函数,则系统为其隐含定义的构造函数为空构造函数。12. 假定用户没有给一个名为AB的类定义析构函数,则系统为其隐含定义的析构函数为空析构函数。13. 若需要把一个函数“void f(); ”定义为一个类AB的友元函数,则应在类AB的定义中加入一条语句:friend void f();。14. 若需要把一个类AB定义为一个类CD的友元类,则应在类CD的定义中加入一条语句:friend class AB;。15. 假定一个类AB中有一个静态整型成员bb,在类外为它进行定义并初始化为0时,所使用写法为AB:bb = 0;。16. 假定类AB中有一个公用属性的静态数据成员bb,在类外不通过对象名访问该成员 bb