C++教材练习题(作业)参考答案

C++教材练习题(作业)参考答案
C++教材练习题(作业)参考答案

教材练习题参考答案

第一章

1、

#include

void main()

{

cout<<"**************************\n";

cout<<" 科技大学欢迎您! \n";

cout<<"**************************\n";

}

2、

(1)#include

void main()

{

int a=4,b=5,c=6,z;

z=a+b>c&&b==c||++b>++a ;

cout<<" 表达式的值为: "<

cout<<" a="<

cout<<" a="<

cout<<" a="<

cout<<" a="<

cin>>a;

cout<

cout<

}

4、

#include

void main()

{

int a,b,c,v,aver;

cout<< " 输入三个数: "<

cin>>a>>b>>c;

v=a*a+b*b+c*c;

aver=(a+b+c)/3;

cout<<" 三个数的平方和是: "<

cout<<" 三个数的平均值是: "<

第二章

1、

#include

void main()

{

int a,b,c,t;

cout<< " 输入三个数: "<

cin>>a>>b>>c;

if(a>b){t=a;a=b;b=t;}

if(a>c){t=a;a=c;c=t;}

if(b>c){t=b;b=c;c=t;}

cout<

}

2、

#include

void main()

{

float x,sum=0.0;

int i=1;

while(i<=10)

{

cin>>x;

sum=sum+x;

i=i+1;

}

cout<<"平均值是: "<

3、

#include

void main()

{

double y=0.0,t=1.0;

int n;

cin>>n;

for(int i=1;i<=n;i++)

{ t=t*i;

y=y+t;

}

cout<<" n= "<

cin>>a;

n=a;

do

{

sum+=n%10;

n/=10;

c++;

}while(n);

cout<

cout<

}

6、

#include

void main()

{ int a,b,i;

for(i=1;i<=999;i++)

{

a=i%10;

b=i%100;

if(i==a*a || i==b*b)

cout<

}

}

7、

#include

#include

void main()

{ double a,b,n;

for(n=10000;n<=99999;n++)

{

a=n*10+6;

b=6*100000+n;

if(fabs(b-4*a)<1e-5) { cout<

}

}

第三章

//1. 一维数组的输入和输出

#include

void main()

{

int a[10],k=1;

for(int i=0;i<10;i++)

{

cout<<"请输入第"<

cin>>a[i];

}

cout<<"数组a为:\n";

for(i=0,k=0;i<10;i++)

{

k++;

cout<

if(k%5==0)cout<<'\n';

}

cout<<'\n';

}

//2. 通过指针输出一维数组中值为奇数元素

#include

void main()

{

int a[10]={3,4,5,8,9,11,14,16,19,21},*p=a,k=0;

cout<<"数组a中的奇数有:\n";

for(int i=0;i<10;i++)

if(p[i]%2)

{

k++;

cout<<*(p+i)<<'\t';

if(k%5==0)cout<<'\n';

}

cout<<"\n";

}

//3. 产生一个随机的二维数组b[4][5],并按矩阵的方式输出#include

#include

void main()

{

int b[4][5];

cout<<"产生的数组为:\n";

for(int i=0;i<4;i++)

{

for(int j=0;j<5;j++)

{

b[i][j]=rand();

cout<

}

cout<<'\n';

}

cout<

}

//4. 二维数组的平方赋值

#include

void main()

{

int a[3][4]={3,1,5,2,4,1,7,5,3,6,9,8},b[3][4];

cout<<"数组a为:\n";

for(int i=0;i<3;i++){

for(int j=0;j<4;j++)

{

cout<

b[i][j]=a[i][j]*a[i][j];

}

cout<

}

cout<

cout<<"数组b为:\n";

for(i=0;i<3;i++){

for(int j=0;j<4;j++)

cout<

cout<

}

cout<

}

//5. 小写字母改写为大写字母

#include

void main()

{

char str[100];

cout<<"请输入一个含空格字符的字符串。\n";

cin.getline(str,100);

for(int i=0;str[i];i++)

if(str[i]>='a'&&str[i]<='z')

str[i]-='a'-'A';

cout<<"转换后的字符串为:\n";

cout<

}

//6. 通过指针将字符串逆序

#include

#include

void main()

{

char str[]="abc321",*s1=str,*s2,ch;

cout<<"原字符串为:\n"<

s2=str; //A

while(*s2)s2++;

s2--; //B

while(s1

ch=*s1;

*s1=*s2;

*s2=ch;

s1++;

s2--;

}

cout<<"逆序后的字符串为:\n"<

/*其中A到B行可改为:

s2=str+strlen(str)-1;

*/

第四章习题答案

4-1

#include

void swap(int *p1,int *p2)

{

int t;

t=*p1;*p1=*p2;*p2=t;

}

void main()

{

int a,b,c;

int *s1,*s2,*s3;

cout<<"输入三个数a,b,c:";

cin>>a>>b>>c;

s1=&a;

s2=&b;

s3=&c;

if(a>b)swap(s1,s2);

if(a>c)swap(s1,s3);

if(b>c)swap(s2,s3);

cout<<"输出排好序的三个数:";

cout<

}

4-2

#include

void trans(int,int);

void main()

{

int n,sel;

cout<<"输入一个整数:";

cin>>n;

do

{

cout<<"\n输出进制:2,8,16,32(输入0时退出):";

cin>>sel;

switch (sel)

{

case 2:trans(n,2);break;

case 8:trans(n,8);break;

case 16:trans(n,16);break;

case 32:trans(n,32);break;

case 0:break;

default:cout<<"进制输入错误!"<

}

}while(sel!=0);

}

void trans(int n,int base)

{

int c;

if(n==0)return;

c=n%base;

trans(n/base,base);

if(c<=9)

cout<

else

cout<

}

4-3

#include

#include

#include

void fun(int b[],int n)

{

for(int i=0;i

{

if(b[i]!=0&&b[j]!=0)

if(b[j]%b[i]==0)

b[j]=0;

}

}

void main()

{

int a[210]={0},n=0,k=5;

for(int i=0;i<48;i++) //给数组赋初值

a[i]=k,k+=2;

fun(a,48);

for(i=0;i<49;i++)

{

if(a[i]!=0)

{

cout<

n++;

if(n%5==0)

cout<

}

}

cout<

}

4-4

#include

int gcd(int,int);

int lcm(int,int);

void main()

{

int num1,num2,den1,den2,a,l,g;

cin>>num1>>den1>>num2>>den2;

cout<

cout<<"求分母的最小公倍数: ";

l=lcm(den1,den2);

cout<

cout<<"两分数的和为:";

a=(l/den1)*num1+(l/den2)*num2;

cout<

cout<<"求分子分母的最大公约数:";

g=gcd(a,l);

cout<

cout<<"输出最简分数:";

cout<

}

int gcd(int a,int b)

{

int i;

for(i=a;i>=1;i--)

if(!((a%i)||(b%i)))

break;

return (i);

}

int lcm(int a,int b)

{

int i;

i=b;

while(i%a)i+=b;

return(i);

}

4-5

#include

#include

double sin(double x,double eps)

{

double term,sum,y;

int n=1; //n=0

y=x*x;

term=x;

sum=0;

while(fabs(term)>=eps)

{

sum+=term;

n++;

term=term*y/((2*n-2)*(2*n-1)); //((2*n)*(2*n-1))

term*=-1;

}

return sum;

}

void main()

{

double x,y;

cout<<"输入x的值(角度):";

cin>>x;

while(x>360)x-=360;

y=3.1415926*x/180;

cout<<"度数为:"<

4-6

#include

#include

float solut(float a,float b,float c,float d)

{

float x=1,x0,f,f1;

do{

x0=x;

f=((a*x0+b)*x0+c)*x0+d;

f1=(3*a*x0+2*b)*x0+c; //对f函数的导数

x=x0-f/f1;

}while(fabs(x-x0)>=1e-3);

return x;

}

void main()

{

float a,b,c,d;

cout<<"input a,b,c,d:";

cin>>a>>b>>c>>d;

cout<

cout<<"x="<

}

4-7

#include

#include

prime(int n)

{ int i=2;

int flag=1;

for(;i

if (n%i==0)

flag=0;

return(flag);

}

void main()

{

int m,j,k,n=0;

for(m=6;m<=100;m+=2)

{for(j=3;j<=m/2;j+=2)

if (prime(j))

{ k=m-j;

if (prime(k))

{

cout<

if (++n%5==0) cout<

if(m==j+k)break;

} }

}

cout<

}

4-8

#include

void f1(int n)

{

int j=n%10;

if(n/10)f1(n/10);

cout<

}

void f2(int n)

{

cout<

if(n/10)f2(n/10);

}

void main()

{

int x;

cout<<"输入一个整数:";

cin>>x;

cout<<"输入的整数为:"<

cout<<"该整数的反序输出为:";

f2(x);

cout<<'\n';

cout<<"该整数的正序输出为:";

f1(x);

cout<<'\n';

}

第五章习题参考解答

1.

1 3 1

2 3 1

1 3 2

2 3 2

1 3 3

2 3 3

1 2 3

2.

正确程序之一为:

#include

#define SQR(x) ((x)*(x))

void main(){

int counter;

for(counter=0;counter<5;++counter){

cout<<"x="<<(counter+1)<<" "<<"x的平方为"<

}

}

3.

#define true 1

#define false 0

#define ok 2

#define error –1

#define overflow -2

4.

#define IFF(x) if(x%10==0)return true;else retrue false;

5.

#define EXCHANGE(x,y) x=x+y;y=x-y;x=x-y;

第六章

1.[程序如下]

#include

struct student

{

float CPPscore;

float eng;

};

void main()

{

student s1; float sum;

cin>>s1.CPPscore>>s1.eng;

sum=s1.CPPscore+s1.eng;

cout<

}

2.[程序如下]

# include

# include

struct score

{

char name[8] ;

int no ;

float c, english, maths, average ;

} ;

score input(score st) ;

float average( float a, float b, float c ) ;

void sort(score st[], int n) ;

void print (score st[], int n) ;

void main()

{

score student[30] ;

for (int i=0 ; i<5 ; i++)

student[i]=input(student[i]) ;

sort(student, 5) ;

print(student, 5) ;

}

score input(score st)

{

cout<<"请输入学生:" ; cin>>https://www.360docs.net/doc/cc6081768.html, ;

cout<<"请输入学生学号:" ; cin>>st.no ;

cout<<"请输入C++成绩:" ; cin>>st.c ;

cout<<"请输入英语成绩:" ; cin>>st.english ;

cout<<"请输入数学成绩:" ; cin>>st.maths ;

cout<

st.average=average(st.c, st.english, st.maths) ;

return st ;

}

float average( float a, float b, float c )

{ return (a+b+c)/3 ; }

void sort(score st[], int n)

{ score temp ;

for ( int i=0 ; i

for ( int j=i ; j

if (st[i].average < st[j].average )

{ temp=st[i] ; st[i]=st[j] ; st[j]=temp ; } }

void print (score st[], int n)

{

cout<<"No. "<<" "<<" 平均 "<<" C++ "<<" 英语 "<<" 数学"<

for ( int i=0 ; i

{

cout<

cout<<'\t'<

cout<<'\t'<

cout<<'\t'<

cout<<'\t'<

cout<<'\t'<

}

}

3.[程序如下]

#include

struct student

{

long int num;

float CPPmid;

float CPPend;

float ave;

};

void main()

{student s[3];

student *p;

for(p=s;p

{

cout<<"请输入学生学号:" ; cin>>p->num;

cout<<"请输入C++期中成绩:" ; cin>>p->CPPmid;

cout<<"请输入C++期末成绩:" ; cin>>p->CPPend;

p->ave=(p->CPPmid+p->CPPend)/2;

}

cout<<"No. "<<" 平均 "<<" C++期中 "<<" C++期末 "<

for(p=s;p

{

cout<num ;

cout<<'\t'<ave;

cout<<'\t'<CPPmid ;

cout<<'\t'<CPPend;

cout<

}

4.[程序如下]

struct link

{

int data;

link*next;

};

int sum(link *head)

{

link *p;

int s=0;

p=head->next;

while(p)

{

s+=p->data;

p=p->next;

return s;

}

}

5.[程序如下]

#include

struct node

{

int data;

node *next;

};

node *create( )

{

node *head ; //头指针

node *p , *pend ;

int a;

cout<<"请输入数据(为零表示结束输入):" ; cin>>a;

head=0 ;

while(a!=0)

{

p=new node ;

p->data=a ;

if(head==0)

{

head=p ;

pend=p ;

}

else {

pend->next=p ;

pend=p ;

}

cout<<"请输入数据(为零表示结束输入):" ;

cin>>a;

}

if(head) pend->next=0 ;

return head ;

}

node * invert(node *head)

{

node *p,*q;

p=head->next;

if(p!=NULL)

{

head->next=NULL;

do

{

q=p->next;

p->next=head;

head=p;

p=q;;

}while(p!=NULL);

}

return head;

}

void print(node *head )

{

if(head==0) { cout<<" 链表为空!\n" ; return ; } node *p=head ;

cout<<"链表上各个结点的值为:\n";

while(p!=0)

{

cout < data<<'\t' ;

p=p->next ;

}

}

void release(node *head )

{

if(head==0) { cout<<" 链表为空!\n" ; return ; }

node *p ;

while( head )

{

p=head;

head=head->next ;

delete p;

}

cout<<"\n结点空间释放完毕!";

}

void main( )

{

node *head;

head=create( );

print(head);

head=invert(head);

cout<<"\n逆置后";

print(head);

release(head);

}

6.[程序如下]

#include

struct Node

{

int x; //围成一圈时,人的序号

Node *next;

};

Node * DelNode(Node *head, int m) //依次输出环形链表中凡报到m者的序号{ Node *p;

int count;

if(head==NULL) return head;;

while( head != head->next) //直到链表上只有一个结点为止

{

count=0;

while(count < m-2)

{

count++;

head = head->next;

}

p=head->next; //删除p所指向的结点

head->next = p->next;

head = head->next ;

cout<x<

delete p;

}

return head;

}

void main(void)

//在主函数中,构造环形链表,调用DelNode函数依次输出报到m的人的序号{ Node *head, *p; //最后输出留在圈中最后的人的序号int i;

head = new Node;

head->x = 1;

head->next = NULL;

p=head;

for(i=2; i<=10; i++)

{

p->next = new Node; //新结点加入链尾

p =p->next;

p->x = i;

}

p->next =head; // 构成循环链

head = DelNode(head, 5);

cout << "最后的一个人为: " << head->x << endl;

}

7.[程序如下]

node *Merge(node *h1, node *h2)

{

node *newHead,*p1,*p2;

if(h1->datadata)

{

newHead=h1;

p=h2;

}

else

{ newHead=h2;

p=h1;

}

node *q= newHead

while(q->next)

{

if(q->next->datadata)

q=q->next;

相关主题
相关文档
最新文档