c++程序设计教程答案机械工业王珊珊跪求

如题所述

第1个回答  2013-06-12
实验1.1

#include "iostream.h"
#include "iomanip.h"
void main()
{
int x;
cin>>x;
int y;
y=x*x;
cout<<"x*x="<<hex<<y<<endl;
}

实验1.2
#include "iostream.h"
void main()
{
float x=1,y=2,h=3,s;
s=h*(x+y)/2.0;
cout<<"上底为1,下底为2,高为3的梯形面积为:"<<s<<endl;
}

实验1.3
#include "iostream.h"
void main()
{
float x,y,z,s;
cout<<"请输入三门成绩x,y,z:"<<endl;
cin>>x>>y>>z;
s=(x+y+z)/3;
cout<<"三门课平均成绩为:"<<s<<endl;
}

实验2.1
#include "iostream.h"
#include "iomanip.h"
void main()
{
float s1,s2,s3;
double aver;
cout<<"输入三个数据:"<<endl;
cin>>s1>>s2>>s3;
aver=(s1+s2+s3)/3;
aver=aver*100+0.5;
aver=(int)aver;
aver=aver/100;
cout<<"平均值="<<aver<<endl;
}

实验2.2
#include "iostream.h"
#include "math.h"
void main()
{
double x,y,z;
cout<<"请输入直角三角形的两直角边长:"<<endl;
cin>>x>>y;
z=sqrt(x*x+y*y);
cout<<"该直角三角形的斜边长为:"<<z<<endl;
}

实验2.4
#include "iostream.h"
void main()
{
double a,b,c,t,ave;
cout<<"请输入三个数"<<endl;
cin>>a>>b>>c;
if (a<b)
t=a;
else
t=b;
if (t<c)
t=t;
else
t=c;
ave=(a+b+c)/3;
cout<<"三个数的平均值为"<<ave<<",其中最小的数为:"<<t<<endl;
}

实验2.3
#include "iostream.h"
void main()
{
double x,y,r,t;
cout<<"请输入x y"<<endl;
cin>>x>>y;
r=x*x+y*y;
if (r<=16 && r>=4)
t=12*3.1415926;
else
t=0;
cout<<t<<endl;
}

实验2.5
#include "iostream.h"
void main()
{
char c1='f',c2='l',c3='y';
cout<<c1<<c2<<c3<<endl;
c1=c1+3;
c2=c2+3;
c3=c3+3;
if(c1>'z')
c1=c1-26;
if(c2>'z')
c2=c2-26;
if(c3>'z')
c3=c3-26;
cout<<c1<<c2<<c3<<endl;
}

实验3.1
#include "iostream.h"
void main()
{
int x,y;
float r1,r2;
cin>>x>>y;
if(x==0||y==0)
cout<<"input error"<<endl;
else
{
if(x>y)
{
r1=x/y;
r2=x%y;
}
else
{
r1=y/x;
r2=y%x;
}
cout<<"商= "<<r1<<" 余数= "<<r2<<endl;
}
}

实验3.2
#include "iostream.h"
void main()
{
int x,y;
cout<<"请输入上网时间x:"<<endl;
cin>>x;
if(x>=65)
y=130;
else if(x>=50)
y=x*2;
else if(x>=10)
y=x*2.5;
else
y=30;
cout<<"上网费用y为:"<<y<<endl;
}

实验3.3
#include "iostream.h"
void main()
{
float x,y1,y2;
int xp;
cout<<""<<endl;
cin>>x;
if(x>=3000)
y1=0.7*x;
else if(x>=2000)
y1=0.8*x;
else if(x>=1000)
y1=0.9*x;
else
y1=x;
xp=(int)x/1000

switch(xp)
{
case
}
}

实验3.5
#include "iostream.h"
void main()
{
double x,y,a;
char z;
cout<<"请输入您要计算的式子"<<endl;
cin>>x>>z>>y;
if(z==42)
{
a=x*y;
cout<<x<<"×"<<y<<'='<<a<<endl;
}
else if(z==43)
{
a=x+y;
cout<<x<<"+"<<y<<'='<<a<<endl;
}
else if(z==45)
{
a=x-y;
cout<<x<<"-"<<y<<'='<<a<<endl;
}
else if(z==47)
{
a=x/y;
cout<<x<<"÷"<<y<<'='<<a<<endl;
}
else
cout<<"你输入了非法的运算符。"<<endl;
}

图太多, 不截了。

实验3.6
#include "iostream.h"
#include "math.h"
void main()
{
int a,b,c;
double x1,x2;
cout<<"请输入一元二次方程的系数a、b、c:"<<endl;
cin>>a>>b>>c;
if((b*b-4*a*c)>0)
{
x1=(-b+sqrt(b*b-4*a*c))/(2*a);
x2=(-b-sqrt(b*b-4*a*c))/(2*a);
cout<<"方程的解为:"<<"x1="<<x1<<";x2="<<x2<<endl;
}
else if((b*b-4*a*c)==0)
{
x1=x2=(-b)/(2*a);
cout<<"方程的解为:"<<"x1="<<x1<<"=x2="<<x2<<endl;
}
else
cout<<"方程无解"<<endl;
}

实验 4.1
#include "iostream.h"
void main()
{
int n,sum(0);
for(n=1; ;n+=2)
{
sum=sum+n;
if(n==19) break;
}
cout<<"sum="<<sum<<endl;
}

实验 4.6
#include "iostream.h"
void main()
{
int i,j,k;
for(i=0;i<=9;i++)
{
for(j=0;j<=9;j++)
{
for(k=0;k<=9;k++)
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k && i*100+j*10+k>100)
cout<<i<<j<<k<<endl;
}
}
}

实验 4.9
#include "iostream.h"
#include "math.h"
void main()
{
double x1,x0,x;
int a;
cout<<"请输入a:"<<endl;
cin>>a;
x1=a;
do
{
x0=x1;
x1=2/3.0*x0+a/(3.0*x0*x0);
}
while (fabs(x1-x0)>1.0e-5);
cout<<"用迭代法算出a的立方根x为:"<<x1<<endl;
x=a;
x=pow(x,1/3.0);
cout<<"用pow(x,1/3)公式算出a的立方根x为:"<<x<<endl;
}

实验4.2
#include "iostream.h"
void main()
{
int a,b,c,d,e,f;
cout<<"请输入要逆序的数:"<<endl;
cin>>a;
b=a/1000;
c=a%1000/100;
d=a%100/10;
e=a%10;
if(b==0 && c!=0)
f=100*e+10*d+c;
else if(c==0 && d!=0)
f=10*e+d;
else if(d==0 && e!=0)
f=e;
else
f=1000*e+100*d+10*c+b;
if(b>9)
cout<<"你输入的数太大,请重新输入;"<<endl;
else
cout<<"所求得的逆序数为:"<<f<<";"<<endl;
}
图太多, 不截了。

实验4.3
#include "iostream.h"
void main()
{
int i;
double s(0),t(1);
for(i=0;(1.0/t)>0.0001;i++)
{
t+=i;
s+=(1/t);
}
cout<<s<<endl;
}

实验4.4
#include "iostream.h"
void main()
{
int n;
double s=2,a,i;
cout<<"请输入n值:"<<endl;
cin>>n;
for(i=1;i<n;i++)
{
a=((2*i)*(2*i))/((2*i-1)*(2*i+1));
s=s*a;
}cout<<s<<endl;
}

实验4.5
#include "iostream.h"
#include "iomanip.h"
void main()
{
int i,j;
for(i=1;i<10;i++)
{
cout<<setw(11-i);
for(j=0;j<2*i-1;j++)cout<<i;
cout<<endl;
}
cout<<endl;
char c;
for(i=0;i<9;i++)
{
c=i+'A';
cout<<setw(i+2);
for(j=0;j<2*(9-i);j++)
cout<<c;
cout<<endl;
}
}

实验4.7
#include "iostream.h"
void main()
{
int i,j,k,t=0;
for(i=1;i<5;i++)
{
for(j=i+1;j<6;j++)
{
for(k=5;k<7;k++)
{
if(j<k)
{
cout<<i<<" "<<j<<" "<<k<<endl;
t++;
}
}
}
}
cout<<"满足条件的方案数为:"<<t<<endl;
}

实验4.8
#include "iostream.h"
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
void main()
{
int i,a,n,temp,s=0;
srand((unsigned)time(NULL));
a=rand()%9+1;
n=rand()%6+5;
temp=0;
for(i=1;i<=n;i++)
{
temp=temp*10+a;
s+=temp;
}
cout<<a<<" "<<n<<" "<<s<<endl;
}
不要问我为什么这么写随机函数,我也不知道为什么,我是上网找了一个很高级很高级的产生随机函数的方法,然后套进来的。

实验5.1
#include "iostream.h"
#include "stdlib.h"
void main()
{
int a[10],i,min,max;
double ave=0;
for(i=0;i<10;i++)
a[i]=int(rand()%71+30);
for(i=1,min=a[0];i<10;i++)
if(min>a[i])min=a[i];
for(i=1,max=a[0];i<10;i++)
if(max<a[i])max=a[i];
for(i=0;i<10;i++)
{
cout<<a[i]<<endl;
ave+=a[i];
}
ave=ave/10;
cout<<"最大值为:"<<max<<";最小值为:"<<min<<";平均值为:"<<ave;
}

实验5.8
#include "iostream.h"
#include "string.h"
#include "stdio.h"
void main()
{
char a[80],b[80];
int i;
gets(a);
for(i=0;*(a+i)!='\0';i++)
{
if(a[i]<='z' && a[i]>='a')
b[i]=a[i]-32;
else
b[i]=a[i];
}
b[i]='\0';
for(i=0;*(b+i)!='\0';i++)
cout<<b[i];
cout<<endl;
cout<<"用strupr函数求得:"<<strupr(a)<<endl;
}

实验5.2
#include "iostream.h"
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
void main( )
{
int i,j,t,s[20];
srand((unsigned)time(NULL));
for(i=0;i<20;i++)s[i]=rand()%100+1;
for(i=0;i<19;i++)
{
t=s[i];
for(j=i+1;j<20;j++)
{
if(s[j]>t)
{
s[i]=s[j];
s[j]=t;
t=s[i];
}
}
}
for(i=0;i<20;i++)cout<<s[i]<<endl;
}

实验5.3
#include "iostream.h"
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
void main()
{
int i,s1[10],s2[10],m;
srand((unsigned)time(NULL));
for(i=0;i<10;i++)
s1[i]=rand()%100+1;
cout<<"移动前数据"<<endl;
for(i=0;i<10;i++)
cout<<s1[i]<<" ";
cout<<endl<<"输入右移位数"<<endl;
cin>>m;
for(i=0;i<10;i++)
{
if(i+m<10)
s2[i+m]=s1[i];
else
s2[i+m-10]=s1[i];
}
cout<<"右移"<<m<<"位后数据"<<endl;
for(i=0;i<10;i++)
cout<<s2[i]<<" ";
cout<<endl;
}

实验5.4
这是我迄今为止做过的最麻烦的一道题

#include "iostream.h"
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
#include "iomanip.h"
void main()
{
//建立A、B矩阵:
int i,j,k,s1[4][4],s2[4][4],s3[4][4],s4[4][4],s5[4][4],t[3];
srand((unsigned)time(NULL));
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
s1[i][j]=rand()%41+30;
}
}
cout<<"矩阵A为:"<<endl;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout<<setw(6)<<s1[i][j];
}
cout<<endl;
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
s2[i][j]=rand()%35+101;
}
}
cout<<endl<<"矩阵B为:"<<endl;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout<<setw(6)<<s2[i][j];
}
cout<<endl;
}
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
s3[i][j]=s1[i][j]+s2[i][j];
}
}
//拷贝一下矩阵A,方便做第四问:
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
s4[i][j]=s1[i][j];
s5[i][j]=s1[i][j];
}
}
//第一问:
cout<<endl<<"矩阵C为:"<<endl;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout<<setw(6)<<s3[i][j];
}
cout<<endl;
}
//第二问:
t[0]=s3[0][0];
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
if(s3[i][j]>t[0])
{
t[1]=i;
t[2]=j;
t[0]=s3[i][j];
}
}
}
cout<<endl<<"C矩阵中最大值为:"<<t[0]<<"其下标为"<<"("<<t[1]<<","<<t[2]<<")"<<endl;
//第三问之A的下三角:
for(i=0;i<3;i++)
{
for(j=i+1;j<4;j++)
{
for(k=0;k<4;k++)
{
s1[j][k]=s1[j][k]-s1[i][k]/s1[i][i]*s1[j][i];
}
}
}
cout<<endl<<"以下三角显示矩阵A得:"<<endl;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout<<setw(6)<<s1[i][j];
}
cout<<endl;
}
//第三问之B的上三角:
for(i=3;i>0;i--)
{
for(j=i-1;j>=0;j--)
{
for(k=0;k<4;k++)
{
s2[j][k]=s2[j][k]-s2[i][k]/s2[i][i]*s2[j][i];
}
}
}
cout<<endl<<"以下三角显示矩阵B得:"<<endl;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout<<setw(6)<<s2[i][j];
}
cout<<endl;
}
//第四问:
for(i=0;i<4;i++)
{
t[0]=s4[0][i];
s4[0][i]=s4[2][i];
s4[2][i]=t[0];
}
cout<<endl<<"1、3行互换后A矩阵得:"<<endl;
for(i=0;i<4;i++)
{
for(j=0;j<4;j++)
{
cout<<setw(6)<<s4[i][j];
}
cout<<endl;
}
//第五问:
t[1]=0;
t[2]=0;
for(i=0;i<4;i++)
{
t[1]+=s5[i][i];
t[2]+=s5[3-i][3-i];
}
t[0]=t[1]+t[2];
cout<<endl<<"两对角线之和为:"<<t[0]<<endl;
}

实验5.5
#include "iostream.h"
#include "iomanip.h"
void main()
{
int n,i,j,a[10][10];
for(i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
a[i][j]=1;
}
}
cout<<"输入行数n:";
cin>>n;
for(i=2;i<n;i++)
{
for(j=1;j<i;j++)
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<n;i++)
{
for(j=0;j<i+1;j++)
{
cout<<setw(5)<<a[i][j];
}
cout<<endl;
}

for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
{
cout<<" ";
}
for(j=0;j<i+1;j++)
{
cout<<setw(6)<<a[i][j];
}
cout<<endl;
}
}

实验5.6
#include "iostream.h"
#include "string.h"
void main()
{
char s1[]={"VISUAL C++ PROGRAM"},s2[]={"VISUAL C++ PROGRAM"},*p,*q,t;
int i,l;
cout<<"原数组为:"<<endl;
for(i=0;s1[i];i++)
cout<<s1[i];
cout<<endl;
l=strlen(s1);
for(i=0;i<l/2;i++)
{
t=s1[i];
s1[i]=s1[l-i-1];
s1[l-i-1]=t;
}
cout<<"用下标法倒置得:"<<endl;
for(i=0;s1[i];i++)
cout<<s1[i];
cout<<endl;
p=s2;
q=&s2[l-1];
for(;p<q;p++,q--)
{
t=*p;
*p=*q;
*q=t;
}
cout<<"用地址法倒置得:"<<endl;
for(i=0;s2[i];i++)
cout<<s2[i];
cout<<endl;
}

实验5.7
#include "iostream.h"
void main()
{
int i,j;
char s[40]={"asdfghjkloiIuuyVVYTFtcu"},t;
for(i=0;s[i];i++)
cout<<s[i];
cout<<endl;
cout<<"输入要删除的字符:"<<endl;
cin>>t;
for(i=0;s[i];i++)
{
if(s[i]==t)
{
for(j=i;s[j];j++)s[j]=s[j+1];
}
}
for(i=0;s[i];i++)
cout<<s[i];
cout<<endl;
}

实验6.1
#include "iostream.h"
bool isprime(int m)
{
int i,j;
for(i=1,j=0;i<m;i++)
{
if(m%i!=0)continue;
j++;
}
if(j==1)
return true;
else
return false;
}
void main()
{
int i,count=0;
for(i=3;count<10;i++)
{
if(isprime(i) && isprime(i+2))
{
cout<<"("<<i<<","<<i+2<<")"<<endl;
count++;
}
}
}

实验6.2
#include "iostream.h"
int reverse(int x)
{
int s;
if(x>=10000 && x<=99999)
s=x/10000+x/1000%10*10+x/100%10*100+x/10%10*1000+x%10*10000;
if(x>=100000 && x<=999999)
s=x/100000+x/10000%10*10+x/1000%10*100+x/100%10*1000+x/10%10*10000+x%10*100000;
return s;
}
void main()
{
int x,i;
for(i=10000,x=0;x<10;i++)
{
if(i==reverse(i))
{
cout<<i<<endl;
x++;
}
}
}

实验6.3
#include "iostream.h"
#include "stdio.h"
int palindrome(char s[])
{
char s1[40];
int i,n;
for(i=0,n=-1;s[i];i++)n++;
for(i=0;s[i];i++)
{
s1[i]=s[n-i];
}
for(i=0,n=0;s[i];i++)
if(s[i]!=s1[i])n++;
if(n==0)
return 1;
else
return 0;
}
void main()
{
char s[40];
cout<<"请输入字符串:"<<endl;
gets(s);
if(palindrome(s))
cout<<"该字符串回文。"<<endl;
else
cout<<"该字符串不回文。"<<endl;
}

实验6.4(1)
#include "iostream.h"
int fun(int s[],int n,int *x)
{
int i,j,t,imax,n1,x1;
n1=n;x1=*x;
n=0;*x=0;
for(i=0;i<n1-1;i++)
{
imax=i;
for(j=i+1;j<n1;j++)
if(s[j]>s[imax])imax=j;
t=s[i];
s[i]=s[imax];
s[imax]=t;
}
for(i=0;i<n1;i++)
{
if(s[i]<x1)
(*x)++;
if(s[i]>=90)
n++;
}
return n;
}
void main()
{
int n,x,i,n1;
cout<<"请输入学生数:"<<endl;
cin>>n;
n1=n;
int *s=new int[n1];
cout<<"请输入"<<n1<<"个同学的成绩:"<<endl;
for(i=0;i<n1;i++)
cin>>s[i];
cout<<"请输入及格分:"<<endl;
cin>>x;
n=fun(s,n,&x);
for(i=0;i<n1;i++)
cout<<s[i]<<" ";
cout<<endl;
cout<<"优秀成绩的人数为:"<<n<<endl;
cout<<"不及格人数为:"<<x<<endl;
}

实验6.4(2)
#include "iostream.h"
void fun(int s[],int n,int &x,int &y)
{
int i,j,t,imax,n1,x1;
x1=x;x=0;
for(i=0;i<n-1;i++)
{
imax=i;
for(j=i+1;j<n;j++)
if(s[j]>s[imax])imax=j;
t=s[i];
s[i]=s[imax];
s[imax]=t;
}
for(i=0;i<n;i++)
{
if(s[i]<x1) x++;
if(s[i]>=90) y++;

}
}

void main()
{
int n,x,i,y(0);
cout<<"请输入学生数:"<<endl;
cin>>n;
int *s=new int[n];
cout<<"请输入"<<n<<"个同学的成绩:"<<endl;
for(i=0;i<n;i++)
cin>>s[i];
cout<<"请输入及格分:"<<endl;
cin>>x;
fun(s,n,x,y);
for(i=0;i<n;i++)
cout<<s[i];
cout<<endl;
cout<<"优秀成绩的人数为:"<<y<<endl;
cout<<"不及格人数为:"<<x<<endl;
}

实验6.8
#include "iostream.h"
#include "math.h"
double dish(int x1,int x2,int y1, int y2)
{
double s;
s=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return s;
}
double dish(double x1,double x2,double y1,double y2)
{
double s;
s=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
return s;
}
void main()
{
double x1,x2,y1,y2;
cout<<"请输入A点横坐标x1:"<<endl;
cin>>x1;
cout<<"请输入A点纵坐标y1:"<<endl;
cin>>y1;
cout<<"请输入B点横坐标x2:"<<endl;
cin>>x2;
cout<<"请输入B点纵坐标y2:"<<endl;
cin>>y2;
if(x1==(int)x1 && x2==(int)x2 && y1==(int)y1 && y2==(int)y2)
cout<<""<<dish((int)x1,(int)x2,(int)y1,(int)y2)<<endl;
else
cout<<""<<dish(x1,x2,y1,y2)<<endl;
}

实验6.5
#include "iostream.h"
#include "stdio.h"
void freq(char s[],int p[],char &chmax,int &max)
{
int i,t;
for(i=0;s[i];i++)
{
if(s[i]>='a' && s[i]<='z')
{
t=s[i]-'a';
p[t]++;
}
if(s[i]>='A' && s[i]<='Z')
{
t=s[i]-'A';
p[t]++;
}
}
max=p[0];
for(i=1;i<26;i++)
{
if(p[i]>max)
{
max=p[i];
chmax=i+'a';
}
}
}
void main()
{
char s[80],chmax='a';
int p[26],max=0,i;
cout<<"请输入字符串:"<<endl;
gets(s);
for(i=0;i<26;i++)
{
p[i]=0;
}
freq(s,p,chmax,max);
for(i=0;i<26;i++)
{
if(p[i]!=0)
{
cout<<char('a'+i)<<"————"<<p[i]<<endl;
}
}
cout<<"频率出现最高的字母:"<<chmax<<"————"<<max<<endl;
}

实验6.6
#include "iostream.h"
#include "stdio.h"
char *max(char s[])
{
char t;
int i,t1;
t=s[0];
for(i=0;s[i];i++)
{
if(s[i]-t>0)
{
t=s[i];
t1=i;
}
}
return &s[t1];
}
void main()
{
char s[80],*p;
cout<<"请输入字符串:"<<endl;
gets(s);
for(p=max(s);*p;p++)
{
*p-=32;
}
for(p=s;*p;p++)
{
cout<<*p;
}
cout<<endl;
}

实验6.7
#include "iostream.h"
#include "math.h"
double fun(double x,double eps=1e-6)
{
double s=0,t,i,j;
for(i=1;fabs(t)>eps;i++)
{
for(j=2*i-1,t=1;j>0;j--)
{
t=x*t/j;
}
t=t*(-1);
s-=t;
}
return s;
}
void main()
{
double x;
cout<<"请输入x:"<<endl;
cin>>x;
x=fun(x);
cout<<"所求得的级数为:"<<x<<endl;
}

实验7.1
#include "iostream.h"
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
struct student
{
char *num;
int score;
struct student *next;
};
struct student *max(struct student *head)
{
int t;
struct student *p,*max;
p=head->next;
do
{
if(p->score > t)
{
max=p;
t=p->score;
}
p=p->next;
}while(p);
return max;
}
void main()
{
struct student *head,*newstu,*tail,*p;
char s[20];
int i;
for(i=0;i<20;i++)
s[i]=char('A'+i);
head=new student;
tail=head;
for(i=0;i<20;i++)
{
newstu=new student;
newstu->num=new char;
newstu->num=&s[i];
newstu->score=rand()%100+1;
tail->next=newstu;
tail=newstu;
}
tail->next=NULL;
p=head->next;
while(p!=NULL)
{
cout<<"num: "<<*(p->num)<<" score: "<<p->score<<endl;
p=p->next;
}
p=max(head);
cout<<endl<<"max num:"<<*(p->num)<<endl<<"max score:"<<p->score<<endl<<endl;
}