应用实践编程题答案new

更新时间:2024-01-01 19:02:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

类编程题

1.【题目】试定义一个类NUM,验证下列命题是否成立:任意一个正整数与其反序数相加,得到一个新的正整数,再对这个新正整数重复上述步骤,最终一定可以得到一个回文数。例如,正整数350的反序数为053(即53),350+53=403, 403+304=707,707是回文数,命题成立。又如,正整数2015的反序数为5102,2015+5102 =7117,7117是回文数,命题成立。具体要求如下: 私有数据成员

intnum:存放用于验证命题的正整数。 公有成员函数

NUM(int x):构造函数,用x初始化数据成员num。 void set(int a):将num的值设置为a。

intyn(int n):判断n是否回文数,若是,返回1;否则返回0。 void fun():使用num验证命题是否成立,并显示验证过程。 在主函数中对该类进行测试。 输出示例:

num=350的验证过程如下: 350+53=403 403+304=707 命题成立!

num=2015的验证过程如下: 2015+5102=7117

命题成立!

2.【题目】试定义一个实现计算学生课程成绩的类STU,对学生学期总评成绩进行计算并排序。具体要求如下: (1) 私有数据成员

int norm, ex, final,overall:分别表示平时成绩、实验成绩、期末考试和总评成绩。 char name[15]:学生姓名。 (2) 公有成员函数

void init(char *name1, int nor1, int ex1, int fin1):用参数name1,nor1,exp1,fin1分别初始化成员name,norm, ex, final。 void fun( ):计算学生的总评成绩。计算方法为:总评成绩=平时成绩占*20%+实验成绩占*25%+期末成绩占*55%。总评成绩计算时要求四舍五入,并且期末考试成绩不足50分时,则期末考试成绩即为总评成绩。

friend void sort(STU st[], int n):友元函数,对st按总评成绩进行从大到小排序。

void print( ):输出该学生信息。

(3) 在主函数中先定义一个有5个元素的对象数组,用循环语句输入学生信息,并根据这些信息利用成员函数init()更新学生信息,然后使用函数sort()对数组排序,最后输出排序后的学生信息。 输入/输出示例(下划线部分为键盘输入):

请输入姓名、平时成绩、实验成绩、期末成绩:AAA 82 75 58

请输入姓名、平时成绩、实验成绩、期末成绩:BBB 93 60 84 请输入姓名、平时成绩、实验成绩、期末成绩:CCC 67 82 81 请输入姓名、平时成绩、实验成绩、期末成绩:DDD 54 78 51 请输入姓名、平时成绩、实验成绩、期末成绩:EEE 91 52 41 按总评成绩排序后:

姓名平时成绩实验成绩期末成绩总评成绩 BBB 93 60 84 80 CCC 67 82 81 78 AAA 82 75 58 67 DDD 54 78 51 58 EEE 91 52 41 41

3.【题目】试定义一个类Array,首先求各列元素中的合数(非素数)之和,再将数组各列以其合数之和的大小从大到小排序,具体要求如下:

(1) 私有数据成员

int a[4][5]:需要排序的二维数组。 (2) 公有成员函数

Array(int t[][5], int n):构造函数,用参数t初始化成员数组a,n表示数组t的行数。

int comp(int n):判断整数n是否为合数,如果是合数,返回值为1,否则返回值为0。

intsum_comp(int j):求数组a第j列元素中所有合数之和。

void exch(int j1, int j2):交换数组a的第j1, j2列元素。 void fun():根据题意对二维数组进行列排序。 void print():以矩阵的形式输出成员数组。

(3) 在主函数中定义一个二维数组,并使用该数组对类Array进行测试。 输出示例: 原数组:

10 12 5 4 15 16 17 8 19 10 11 12 13 14 15 16 70 18 19 20 排序后的数组:

12 15 10 5 4 17 10 16 8 19 12 15 11 13 14 70 20 16 18 19

4.【题目】已知切线法求方程 f(x)=ax2+bx+c=0 在x附近的一个解的迭代公式为:x=x-f(x)/f’(x),其中f’(x)=2ax+b为函数f(x)的导数。试定义一个类EQU,用切线法求方程 f(x)=ax2+bx+c=0 在x附近的一个解。具体要求如下: (1) 私有数据成员

float a,b,c:保存方程的系数a,b和c。

double x:x为所求得的解。 (2) 公有成员函数

EQU(float a1, float b1, float c1):构造函数,用参数a1, b1, c1分别初始化成员a,b,c。

void fun(double x0, double e ):求方程在x0附近的一个解,所采用的算法是:依次计算

x1=x0-f(x0)/f’(x0),

x2=x1-f(x1)/f’(x1),…, xn=xn-1-f(xn-1)/f’(xn-1),直到|f(xn)|

void print( ):输出所求得的解。

(3) 在主函数中建立EQU对象,并求出方程 f(x)=2x2+6x-7=0 在x=5.0附近的一个解,要求最终误差|f(x)|<10-5,最后调用print()函数输出所求得的解。

正确程序的输入/输出结果如下(下划线部分为键盘输入): 请输入方程的系数(a,b,c):2 6 -7 请输入预估的初始解x0: 5 请输入误差要求(e):0.00001 该方程的解是:0.897916

5.【题目】试定义一个类Array,将二维数组各行按其各行元素中所有素数之和从大到小排序,具体要求如下: (1) 私有数据成员

int a[5][4]:待处理的数组。 (2) 公有成员函数

EQU(float a1,float b1,float c1); void fun(double x0,double e); void print(); };

EQU::EQU(float a1,float b1,float c1){ a=a1;b=b1;c=c1; x=0.0; }

void EQU::fun (double x0,double e){

double f;

double f0=a*x0*x0+b*x0+c; doubleff=2*a*x0+b; while(fabs(f0)>e)

{ x0=x0-f0/ff; f0=a*x0*x0+b*x0+c;

ff=2*a*x0+b;

}

x=x0; }

void EQU::print (){ cout<

void main(){ floata,b,c; double x0,e;

cout<<\请输入方程的系数(a,b,c):\cin>>a>>b>>c;

cout<<\请输入预估的初始解x0:\cin>>x0;

cout<<\请输入误差要求(e):\cin>>e;

cout<<\该方程的解是:\ EQU t(a,b,c); t.fun (x0,e); t.print(); }

5.#include

class Array{ private: int a[5][4]; public: Array(int t[][4],int n); int prime(int n);

intsum_prime(inti); voidexch(int i1,int i2); void fun(); void print(); };

Array::Array(int t[][4],int n){ for(inti=0;i

int Array::prime (int n){ for(inti=2;i

int Array::sum_prime (inti){ int s=0;

for(int j=0;j<4;j++) if(prime(a[i][j])) s+=a[i][j]; return s; }

void Array::exch(int i1,int i2){ for(int j=0;j<4;j++) { int d=a[i1][j]; a[i1][j]=a[i2][j]; a[i2][j]=d; } }

void Array::fun (){ for(inti=0;i<4;i++) for(int j=i+1;j<5;j++) if(sum_prime(i)

void Array::print(){ for(inti=0;i<5;i++) { for(int j=0;j<4;j++) cout<

void main(){

int b[5][4]={10,12,5,4,15,16,17,8,19,10,11,12,13,14,15,16,70,18,19,20}; Array arr(b,5); cout<<\原数组:\ cout<

6.#include #include class ID{private: char * id; inty,m,d, yes; char *sex; public:

ID(char * s); void fun(); void print(); ~ID(); };

ID::ID(char * s){ id=new char [strlen(s)+1]; strcpy(id,s); y=0; m=0; d=0; sex=new char[5]; sex[0]='\\0'; yes=0; }

void ID::fun( ){ inti=6; while(i<10) y=y*10+id[i++]-'0'; while(i<12) m=m*10+id[i++]-'0'; while(i<14) d=d*10+id[i++]-'0'; if((id[16]-'0')%2==1) strcpy(sex,\男\ else strcpy(sex,\女\int age=2015-y; if(age<=40&&strcmp(sex,\女\ yes=1;

if(age<=35&&strcmp(sex,\男\ yes=1; }

void ID::print( ){

cout<<\身份证号:\

cout<<\出生日期:\ cout<<\性别:\ cout<<\是否青年:\ if(yes==1) cout<<\是\ else cout<<\不是\}

ID::~ID(){

if(id) delete []id; if(sex) delete []sex; }

void main(){

char card1[100]=\ //char card2[100]; //321102198103011213 cout<<\:\ // cin>>card2; ID person(card1); person.fun(); person.print(); }

7.#include #include

class Array{private: double a[5],b[5]; public: Array(double t[], int n); doubleave(); doubledat(); void fun(); void print(); };

Array::Array(double t[], int n){ for(inti=0;i

double Array::ave(){ double s=0; for(inti=0;i<5;i++) s+=a[i]; return s/5;

}

double Array::dat(){ double s=0; for(inti=0;i<5;i++) s+=(a[i]-ave())*(a[i]-ave()); return s/5; }

void Array::fun(){

double pi=3.1415926,e=2.71828; double t=sqrt(2*pi*dat()),s;

for(inti=0;i<5;i++){ s=-(a[i]-ave())*(a[i]-ave())/(2*dat()); b[i]=pow(e,s)/t; }} void Array::print(){

cout<<\原数组a:\ for(inti=0;i<5;i++) cout<

void main(){ double t[5]={6.1,2.6,15.8,4.3,1.72}; Array arr(t,5); arr.fun();

arr.print();

}

8.#include #include class EQU{ private:

floata,b,c; double x1,x2,x; int k; public:

EQU(float a1,float b1,float c1);

void fun(double xx1,double xx2,double e); void print(); };

EQU::EQU(float a1,float b1,float c1){ a=a1;b=b1;c=c1; } void EQU::fun(double xx1,double xx2,double e){ x1=xx1;x2=xx2; double f1=a*x1*x1+b*x1+c,f2=a*x2*x2+b*x2+c;

double f; if(f1*f2>0)k=0; else k=1; x=(x1+x2)/2; f=a*x*x+b*x+c; while(fabs(f)>=e&&k) {

if(f1*f>0)

x1=x; else x2=x; x=(x1+x2)/2; f=a*x*x+b*x+c; } } };

void EQU::print(){ if(k)cout<

else cout<<”无解”<

void main(){ floata,b,c;

double x1,x2,e;

cout<<\请输入方程的系数(a,b,c):\ cin>>a>>b>>c;

cout<<\请输入区间([x1,x2])边界:\0 10 cin>>x1>>x2;

cout<<\请输入误差要求(e):\0.00001 cin>>e; EQU s(a,b,c); s.fun(x1,x2,e);

cout<<\该方程在区间[0,10]中的解是:\0.701561 s.print (); }

函数编程题答案

1.答案

#include void print(int b[]){ for(inti=0;i<8;i++) cout<

void sort(int b[],int n){ for(inti=0;i

void main(){ int a[8];

cout<<\请输入8个数存放到一维数组a:\for(inti=0;i<8;i++) cin>>a[i]; print(a); sort(a,8); print(a); }

2.答案

#include #include

void insert(char s1[],char s2[],int m){ char *p=s1+m-1,*q=s2; char *r=s1+strlen(s1); int a=strlen(s2); while(p<=r){ *(r+a)=*r; r--; }

while(*q!='\\0') *p++=*q++; }

void print(char s1[],char s2[]){ cout<<\ cout<<\ s2:\}

void main(){ char s1[100]=\ int m; cout<<\初始状态:\print(s1,s2);

cout<<\输入插入字符串的位置:\cin>>m;

insert(s1,s2,m);

cout<<\目标状态:\ print(s1,s2); }

3.#include void swap(int&t1, int&t2) { int t=t1; t1=t2; t2=t; }

void adjust(int p[], int n) { inti=0, j=n-1; while(1) { while(p[i]>0) i++;

while(p[j]<0) j--; if(i

swap(p[i], p[j]); else break; i++; j--; } }

void main( ) {

int a[12]= {-1,2,-3,-4,5,-6,7,8,-9,-10,11,12}; cout<<\处理前的数组为:\for(int k=0; k<12; k++) cout<

cout<<\处理后的数组为:\for(k=0; k<12; k++) cout<

4.#include

voiddtor(intn,int r){ inti=0,s[10]; while(n!=0){ s[i]=n%r; n=n/r; i++; } for(int j=i-1;j>=0;j--) cout<

void main(){ intn,r;

cout<<\从键盘输入一个十进制整型数n和要转换的进制r \cin>>n>>r; dtor(n,r);}

本文来源:https://www.bwwdw.com/article/3ldx.html

Top