C++课程实践报告试题及答案
时间:2021-09-24 来源:博通范文网 本文已影响 人
任务一 一、实践任务 1.试建立一个类 PP,求出下列多项式的前 n 项的值。
n x P n x xP nx x Pnn/ )) ( ) 1 ( ) ( ) 1 2 ((1) (2 n 1 -
110nnn 二、详细设计 1、类的描述与定义 (1)私有数据成员 int n:前若干项的项数。
double
x:存放 x 的值。
double *p:根据 n 的大小动态申请存放 P n (x) 前 n 项的数组空间。
(2)公有成员函数 PP(int num,double x1):构造函数,初始化数据成员 n 和 x,使 p 指向动态申请的数组空间。
~PP():析构函数,释放 p 指向的动态内存空间。
double fun(int n1,double x):递归函数,用于求多项式 ) (x P n 的第 n1 项。注意:将递归公式中的 n 用作函数参数。本函数供 process 函数调用。
void process( ):完成求前 n 项的工作,并将它们存放到 p 指向的动态数组中。
void show( ):输出 n 和 x,并将前 n 项以每行 4 个数的形式输出到屏幕上。
2、主要函数设计
在主函数中完成对该类的测试。先输入 num 和 x1,并定义一个 PP 类的对象 items,用 num 和 x1 初始化 items 的成员 n 和 x,调用 items 的成员函数,求出并输出多项式前 num 项的值。
三、源程序清单 #include
int n;
double x;
double*p; public:
PP(int num,double x1)
{
n=num;
x=x1;
p=new double[n];
}
~PP()
{
if(p) delete []p;
}
double fun(int n1,double x);
void process();
void show(); }; double PP::fun(int n1,double x) {
if(n1==0) return 1;
else if(n1==1) return x;
else if(n1>1) return ((2*n1-1)*x*fun(n1-1,x)-(n1-1)*fun(n1-2,x))/n1; } void PP::process() {
for(int i=0;i { p[i]=fun(i,x); } } void PP::show() { cout<<"n="< for(int i=0;i { cout< if((i+1)%4==0) cout< } } void main() { int num; double x1; cout<<"请输入 num 和 x1:"; cin>>num>>x1; PP items(num,x1); items.process(); items.show(); } 任务二 一、实践任务 2.试建立一个类 SP,求k k k kn k n f ....3 2 1 ) , ( ,另有辅助函数 power(m,n)用于求nm 。 二、详细设计 1、类的描述与定义 (1)私有数据成员 int n,k:存放公式中 n 和 k 的值; (2)公有成员函数 SP(int n1,int k1):构造函数,初始化成员数据 n 和 k。 int power(int m, int n):求 m n 。 int fun( ):求公式的累加和。 void show( ):输出求得的结果。 2、主要函数设计 在主程序中定义对象 s,对该类进行测试。 三、源程序清单 #include private: int n,k; public: SP(int n1,int k1) { n=n1; k=k1; } int power(int m,int n); int fun(); void show(); }; int SP::power(int m,int n) { int s=1; for(int i=0;i { s*=m; } return s; } int SP::fun() { int s=0; for(int i=1;i<=n;i++) { s+=power(i,k); } return s; } void SP::show() { cout<<"f("< int n1,k1; cout<<"请输入 n1,k1:"; cin>>n1>>k1; SP s(n1,k1); s.fun(); s.show(); } 任务三 一、实践任务 3.建立一个类 MOVE,不进行排序,将数组中小于平均值的元素放到数组的左边,大于平均值的元素放到数组的右边。 二、详细设计 1、类的描述与定义 (1)私有数据成员 float array[20]:一维整型数组。 int n:数组中元素的个数。 (2)公有成员函数 MOVE(float b[],int m):构造函数,初始化成员数据。 void average():输出平均值,并将数组中的元素按要求重新放置。 void print():输出一维数组。 2、主要函数设计 在主程序中用数据{1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}对该类进行测试。 三、源程序清单 #include float array[20]; int n; public: MOVE(float b[],int m) { for(int i=0;i { array[i]=b[i]; } n=m; } void average(); void print(); ~MOVE() {}; }; void MOVE::average() { float ave=0; int i,j; for(i=0;i { ave+=array[i]; } ave/=n; cout< float turn[20]; j=0; for(i=0;i { if(array[i]<=ave) { turn[j]=array[i]; j++; } } j=0; for(i=0;i { if(array[i]>ave) { turn[n-1-j]=array[i]; j++; } } for(i=0;i { array[i]=turn[i]; } } void MOVE::print() { for(int i=0;i cout< float b1[]={1.3,6.2,3,9.1,4.8,7.4,5.6,9.2,2.3}; int num; num=sizeof(b1)/sizeof(float); MOVE s(b1,num); s.average(); s.print(); } 任务四 一、实践任务 4.建立一个类 MOVE,将数组中最大元素的值与最小元素的值互换。 二、详细设计 1、类的描述与定义 (1)私有数据成员 int *array:一维整型数组。 int n:数组中元素的个数。 (2)公有成员函数 MOVE(int b[],int m):构造函数,初始化成员数据。 void exchange():输出平均值,并将数组中的元素按要求重新放置。 void print():输出一维数组。 ~MOVE():析构函数。 2、主要函数设计 在主程序中用数据{21,65,43,87,12,84,44,97,32,55}对该类进行测试。 三、源程序清单 #include int *array; int n; public: MOVE(int b[],int m) { array=new int[m]; n=m; for(int i=0;i { array[i]=b[i]; } } void exchange(); void print(); ~MOVE() { if(array) delete array; } }; void MOVE::exchange() { float ave=0; for(int i=0;i { ave+=array[i]; } ave/=n; cout<<"平均值为"< int max,min; max=min=array[0]; int m; for(i=0,m=0;i { if(array[i]>=max) m=i,max=array[i]; } int l; for(i=0,l=0;i { if(array[i] } i=array[m],array[m]=array[l],array[l]=i; } void MOVE::print() { for(int i=0;i cout< { int text[]={21,65,43,87,12,84,44,97,32,55}; int num; num=sizeof(text)/sizeof(int); MOVE s(text,num); s.print(); cout< s.exchange(); s.print(); } 任务五 一、实践任务 定义一个类 Palindrome,实现绝对回文数。设计一个算法实现对任意整型数字判断是否为绝对回文数。所谓绝对回文数,是指十进制数和二进制数均对称的数。 二、详细设计 1、类的描述与定义 (1)私有数据成员 int n:整型数字。 int y: 标记是否为回文数。 (2)公有成员函数 Palindrome (int x) :构造函数,根据 x 参数初始化数据成员 n,y 初始化为 0。 void huiwen () :判断数 n 是否为绝对回文数。 void show( ) :若该数为回文数,则在屏幕显示。 2、主要函数设计 在主程序中定义 int a,由键盘输入数字。定义一个 Palindrome 类对象 p,用 a 初始化 p,完成对该类的测试。 三、源程序清单 #include int n; int y; public: Palindrome(int x) { n=x; y=0; } void huiwen(); void show(); }; void Palindrome::huiwen() { int i=0,j=0; int m; m=n; while(m) { m/=10; i++; } m=n; while(m) { m/=2; j++; } int*s10=new int[i]; int*s2=new int[j]; m=n; for(int k=0;k { s10[i-1-k]=m%10; m/=10; } m=n; for(k=0;k { s2[j-1-k]=m%2; m/=2; } int num10=0; for(k=0;k { if(s10[i-1-k]==s10[k]) num10++; else break; } int num2=0; for(k=0;k { if(s2[j-1-k]==s2[k]) num2++; else break; } if(num10==(i/2)&&num2==(j/2)) y=1; } void Palindrome::show() { int i=0,j=0; int m; m=n; while(m) { m/=10; i++; } m=n; while(m) { m/=2; j++; } int*s10=new int[i+1]; int*s2=new int[j+1]; m=n; for(int k=0;k { s10[i-1-k]=m%10; m/=10; } m=n; for(k=0;k { s2[j-1-k]=m%2; m/=2; } if(y) { cout<<"该数为绝对回文数!:"< cout<<"十进制表示为:"; for(k=0;k cout< cout<<"二进制表示为:"; for(k=0;k cout< } else { cout<<"该数不是绝对回文数!:"< cout<<"十进制表示为:"; for(k=0;k cout< cout<<"二进制表示为:"; for(k=0;k cout< } cout< int a; cout<<"请输入一个数字:"; cin>>a; Palindrome p(a); p.huiwen(); p.show(); } 任务六 一、实践任务 6.定义一个字符串类 String,实现判断该字符串是否为回文字符串。所谓回文字符串,是 指该字符串左右对称。例如字符串“123321”是回文字符串。 二、详细设计 1、类的描述与定义 (1)私有数据成员 char *str; int y:标记是否为回文字符串。 (2)公有成员函数 String (char *s) :构造函数,用给定的参数 s 初始化数据成员 str。y 初始化为 0。 void huiwen () :判断 str 所指向的字符串是否为回文字符串。 void show( ) :在屏幕上显示字符串。 2、主要函数设计 在主程序中定义字符串 char s[]=”ababcedbaba”作为原始字符串。定义一个 String 类对象 test,用 s 初始化 test,完成对该类的测试。 三、源程序清单 #include char*str; int y; public: String(char*s) { int n=strlen(s); str=new char[n+1]; strcpy(str,s); y=0; } void huiwen(); void show(); ~String() { if(str) delete []str;} }; void String::huiwen() { int n,judge=0; n=strlen(str); for(int i=0;i<(n/2);i++) { if(str[i]==str[n-1-i]) judge++; } if(judge==i) y=1; } void String::show()//输出; { if(y==1) cout<<"y=1,¸该字符串是回文数"< else cout<<"y=0,该字符串不是回文数"< char s[]="ababcedbaba"; String test(s); test.huiwen(); test.show(); } 任务七 一、实践任务 7.建立一个类 PHALANX,生成并显示一个折叠方阵。折叠方阵如下图所示。折叠方阵的生成过程为:起始数置于方阵的左上角,然后从起始数开始递增,依次折叠构成方阵。 二、详细设计 1、类的描述与定义 (1)私有数据成员 1 2 4 3 … 1 1 2 5 10 4 3 6 11 9 8 7 12 16 15 14 13 int (*p)[20]:指向按照折叠规律存放方阵的二维整型数组。 int startnum:折叠方阵的起始数。 int n:存放方针的层数。 (2)公有成员函数 PHALANX (int s, int m ):构造函数,初始化成员数据。 void process():生成起始数为 startnum 的 n 行方阵。 void print():输出折叠方阵。 ~ PHALANX( ):析构函数。 2、主要函数设计 在主程序中对该类进行测试。 三、源程序清单 #include int (*p)[20]; int startnum; int n; public: phalanx(int s[20][20],int m) { startnum=1; p=s; n=m; } void process() { p[0][0]=startnum; for(int i=0;i for(int j=0;j {if(i>j){p[i][j]=1+i*i+i+i-j;} else{p[i][j]=1+j*j+i;}} } void print() { for(int i=0;i { for(int j=0;j cout<<"\n"; } } ~ phalanx() { } }; void main() { int m; int s[20][20]; cout<<"请输入折叠层数:"; cin>>m; cout<<"\n"; phalanx pp(s,m); pp.process(); pp.print(); } 这是一篇无可置疑的好范文。 有感染力! 一、单选题 1.在C语言中,下列类型属于构造类型的是( D ) A.整型 B.字符型 C.实型 D.数组类型 2.下列字符串不是标识符的是( D ) A.sum B.Average C.Day_night D.M.D.JOHN 3.在C语言中,回车换行符是( A ) A.n B.t C.v D.b 4.在C语言中,语句和数据定义是用( C )作为结束标记的 A.句号 B.逗号 C.分号 D.括号 5.设有如下定义: int x=10,y=5,z; 则语句printf(“%dn”,z=(x+=y,x/y)); 的输出结果是( C ) A.0 B.1 C.3 D.4 6.10.以下程序的输出结果是( B ) main( ) {char c1=’8’,c2=’2’; printf(“%c,%c,%d,%dn”,c1,c2,c1-c2,c1+c2); } A.因输出格式不合法,输出出错信息 B.8,2,6,106 C.8,2,6,10 D.8,2,5,9 7.两次运行下面的程序,如果从键盘上分别输入6和4,则输出结果是( A ) main( ) {int x; scanf(“%d”,&x); if(x++>5) printf(“%dn”,x); else printf(“%dn”,x--); } A.7和5 B.7和4 C.6和4 8.表达式(int)2.1416的值时( A ) A.2 B.2.1 C.0 D.3 9.下列运算符优先级最高的是( B ) A.> B.+ C.&& D.!= 10.C语言容许函数值类型缺省定义,此时该函数值隐含的类型时( B ) A.float型 B.Int型 C.Long 型 D.Double型 11、C程序的基本构成单位是( C) A、子程序 B、过程 C、函数 D、文件 12、C语言中要求操作数都为整型数据的算术符是(C ) A、/ B、! C、% D、= = 13、若int x=1,y=1;则表达式(!x||y--)的值是(B )。 A、0 B、1 C、2 D、-1 14、能正确表示逻辑关系:a≥10或a≤0的C语言表达式(D ) A、a>=10 or a=0|a=10 && a=10||a 15、double x,y;表达式x=1,y=x+3/2的值是(C )。 A、1 B、2 C、2.0 D、2.5 16、运行C源程序的命令是( D ) A、ALT+F5 B、ALT+F9 C、CTRL+F5 D、CTRL+F9 17、运行完C程序后,查看C程序运行结果的命令是( A ) A、ALT+F5 B、ALT+F9 C、CTRL+F5 D、CTRL+F9 18.若有程序段:int i=2,j; j=i++; printf(“%d,%d”,++i,j); 该程序段的输出结果是:(D) A、3,2 B、4,3 C、3,3 D、4,2 19设 int a=12; 表达式a+=a-=a*=a的值是(C )。 A 12 B 144 C 0 D 132 20、若给定条件表达式(M)?(a++):(a--),则其中表达式M和( D )等价。 A M==0 B M=1 C M!=1 D M!=0 21、在C语言中,if语句后的一对圆括号中,用以决定分支流程的表达式为( D )。 A 只能是逻辑表达式 B只能是关系表达式 C 只能是逻辑表达式或关系表达式 D可以是任意表达式 22、下列选项中,(A )给变量赋初值是错误的。 A int a=b=3; B int a,b,c=5; C int a=3,b,c=a; D float f=3.56; 23、在C语言中,一个字符变量在内存中占用( A )个字节。 A 1 B 2 C 3 D 4 24、int a=12,b=13,c; c=(a 25、设有int i;则表达式i=1,++i,++i||++i,i的值为(C ) A.1 B.2 C.3 D.4 30以下程序段中与语句k=a>b?(b>c?1:0):0;功能等价的是(A) A)if((a>b)&&(b>c)) k=1; B) if((a>b)||(b>c)) k=1 else k=0; C)if(ab) k=1; else if(bc) k=1; else k=0; 31、算法具有五个特性,以下选项中不属于算法特性的是(A)有穷性 (B)简洁性 (C)可行性 (D)确定性 32以下选项中可作为C语言合法常量的是 (A ) (A)-80.(B)-080 (C)-8e1.0 (D)-80.0e 33、以下叙述中正确的是 (C ) (A)用C语言实现的算法必须要有输入和输出操作 (B)用C语言实现的算法可以没有输出但必须要有输入 (C)用C程序实现的算法可以没有输入但必须要有输出 (D)用C程序实现的算法可以既没有输入也没有输出 33、以下选项中,不能作为合法常量的是 (B) (A)1.234e04 (B)1.234e0.4 (C)1.234e+4 (D)1.234e0 34、有以下程序 B ) ( main() { int i=1,j=2,k=3; if(i++==1&&(++j==3||k++==3)) printf("%d %d %dn",i,j,k); } 程序运行后的输出结果是 (D) (A)1 2 3 (B)2 3 4 (C)2 2 3 (D)2 3 3 35、判断变量ch中的字符是否为数字字符,正确表达式是____D___。 A)ch>=0&&ch=’0’||ch=’0’&&ch 36、若执行以下程序时从键盘上输入9,则输出结果是__B_____ A)11 B)10 C)9 D)8 main( ) { int n; scanf("%d",&n); if(n++ 37、若w=1,x=2,y=3,z=4;则条件表达式w>x?w:y 38、以下非法的赋值语句是( C ) A) n=(i=2,++i); B)j++; C) ++(i+1); D)x=j>0; 39、设a和b均为double型变量,且a=5.5、b=2.5,则表达式(int)a+b/b的值是(D) A)6.500000 B)6 C) 5.500000 D) 6.000000 40、已知i、j、k为int型变量,若从键盘输入:1,2,3,使i的值为 1、j的值为 2、k的值为3,以下选项中正确的输入语句是(C) A) scanf(“---”,&i,&j,&k); B) scanf(“%d %d %d”,&i,&j,&k); C) scanf(“%d,%d,%d”,&i,&j,&k); D) scanf(“i=%d,j=%d,k=%d”,&i,&j,&k); 41、若有以下程序: main() { int k=2,i=2,m; m=(k+=i*=k);printf(“%d,%dn”,m,i); } 执行后的输出结果是(C) A) 8,6 B) 8,3 C) 6,4 D) 7,4 42、已有定义:int x=3,y=4,z=5;,则表达式!(x+y)+z-1 && y+z/2的值是(D) A) 6 B) 0 C) 2 D) 1 43 以下选项中,与k=n++完全等价的表达式是(A) A) k=n,n=n+1 B) n=n+1,k=n C) k=++n D) k+=n+1 39、若有说明:int i,j=7, *p=&i;,则与i=j;等价的语句是B A)i= *P; B)*P=*&J; C)i=&j; D)i=* *p; 40、若有以下说明: int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a; 则数值为6的表达式是C A)*p+6 B)*(p+6) C)*p+=5 D)p+5 二、填空题 1.C语言是通过 库函数 来进行输入和输出的。 2.C语言的数据类型有四大类,他们是 基本类型、构造类型、指针类型和 空类型 。 4.下面程序的运行结果是 3.600000,3 main( ) {float x; int i; x=3.6;i=(int)x; printf(“x=%f,i=%d”,x,i); } 5.数组名定义规则和变量名相同,遵守 标识符 命名规则。 6、main( ) {char c1,c2,c3; c2=’c’; c1=c2-1; c3=c2+1; printf(“%c,%d,%cn”,c1,c2,c3); } 程序的运行结果是: b,99,d 7、main( ) {int a=5,b=6,c; c=a; if(a>b) c=1; else if(a= =b) c=0; else c=-1 ; printf(“c=%dn”,c); } 程序的运行结果是: -1 11.设x的值为15,n的值为2,则表达式x%=(n+=3)运算后,x的值为 0 。 12.设 int a=7,b=9,t;执行完表达式t=(a>b)?a:b后,t的值是 9 。 14.求100~200间的全部素数。 # include main() { int m,k,i,n=0; for(m=101;m 15、main() { int x,y=1,z=10; if(y!=0) x=5; printf(“x=%dt”,x); x=1; if(z0) x=3; else x=5; printf(“x=%dn”,x); if(z=y 16、百马百担问题:有100匹马,驮100担货,大马驮3担,中马驮2担,两匹小马驮1担,问大、中、小马各多少匹? main( ) { int hb,hm,hl,n=0; for(hb=0;hb 17、写出程序运行结果,并简述功能(运行结果5分,功能描述3分,共8分) #include main() { int i,t; int a[10]={2,4,6,8,10,1,3,5,7,9}; for(i=0;i 9 7 5 3 1 10 8 6 4 2 功能描述: 将整型数组a以逆序形式显示出来 18、有以下语句段 int n1=10,n2=20; printf(“ n1=%dnn2=%d ”,n1,n2); 要求按以下格式输出n1和n2的值,每个输出行从第一列开始,请填空。 n1=10 n2=20 19、有以下程序 main( ) { int n=0,m=1,x=2; if(!n) x-=1; if(m) x-=2; if(x) x-=3; printf(“%dn”,x); } 执行后输出结果是 -4 。 21、.以下程序运行后的输出结果是____ main() { int a,b,c; a=10;b=20;c=(a%b1); printf("%d %d %dn",a,b,c); } 答案:10 20 0 22、任意输入三条边(a,b,c)后,若能构成三角形且为等腰、等边和直角,则分别输出DY、DB和ZJ,若不能构成三角形则输出NO。 main() { float a,b,c,a2,b2,c2 scanf("%f%f%f%,&a,&b,&c); printf("%5.1f,%5.1f,%5.1f",a,b,c); if(a+b>c&&b+c>a&&a+c>b) { if(a==b || b==c || a==c)printf("DY"); if(a==b && b==c)printf("DB"); a2=a*a;b2=b*b;c2=c*c; if((a2+b2==c2) || (a2+c2==b2) || (b2+c2==a2)) printf("ZJ"); printf("n"); } else printf("NOn"); } 23、当a=1,b=3,c=5,d=4时,执行完下面一段程序后x的值是___x=2______ if (a 24、以下程序运行后的输出结果是 20,0 。 main() { int x=10,y=20,t=0; if(x==y)t=x;x=y;y=t; printf(“%d,%d n”,x,y); } 三、程序题 1、在购买某物品时,若所花的钱x在下述范围内,所付钱y按对应折扣支付: x x 2、编一程序根据上网时间计算上网费用,计算方法如下: 费用= 30元基数 同时为了鼓励多上网,每月收费最多不超过150元。 3、已知输入某课程的百分制成绩mark,要求显示对应五级制的评定,评定条件如下: 等级= 优 mark≥90 良 80≤mark<90 中 70≤mark<80 及格 60≤mark<70 不及格 mark<60 第一题答案: #include void main() { float y; int x; scanf("%d",&x); if(x=1000 && x=2000 && x=3000) y=0.7*x; printf("%f",y); } 第二题答案: #include void main() { float y; int x; scanf("%d",&x); if(x=10 && x=50) y=2.5*x; if(y>150) y=150; printf("%f",y); } 第三题答案: #include void main() { int mark; scanf("%d",&mark); if(mark>=90) printf("优"); else if(mark>=80) printf("良"); else if(mark>=70) printf("中"); else if(mark>=60) printf("及格"); else printf("不及格"); }