C++程序设计_上机实践与学习辅导_王庆宝_朱红版的答案
实验一#include
void main(void)
{
int a, b, sum;
cout<<"请输入加数与被加数\n";
cin>>a>>b;
sum=a+b;
cout<<"sum="< } #include void main() { double f, c; cout<<"请输入华氏温度: "; cin>>f; c=5.0/9*(f-32); cout<<"摄氏温度="< } #include void main() { double r,s; cout<<"请输入圆的半径: "; cin>>r; s=3.14159*r*r; cout<<"圆的面积是: s="< } #include #include void main() { double a,b,c,s,area; cout<<"请输入三角形的三边: "; cin>>a>>b>>c; s=a+b+c; s=s/2; area=sqrt(s*(s-a)*(s-b)*(s-c)); cout< } 实验二 #include void main(void) { float a,b,c;//定义变量,存放三角形的三边数据 cout<<"input a b c\n"; //输入提示信息 cin>>a>>b>>c; //从键盘依次输入三边的值 if((a+b cout<<"Not Triangle\n"; //不满足三角形三边条件, 输出否定信息else cout<<"Triangle\n"; //满足三边构成条件,输出确认信息 } #include void main(void) { int year; //定义变量,存放将输入的年份 cout<<"Input year: "; //输出提示信息 cin>>year; //输入欲判断的年份 if(year%400==0||year%4==0&&year%100!=0) //判断该年份是否为闰年的条件cout< else cout< } #include void main() { float a1, a2;//定义两个操作数 char oper; //定义运算符 float result; //定义变量,存放结果 int flag=0; //? cout<<"请输入简单的运算式:\n"; //输出提示信息 cin>>a1>>oper>>a2; //从键盘键入运算式,如5+3 switch(oper)//利用开关语句结构判断进行何种运算 { case '+': //加法 result=a1+a2; break; case '-': //减法 result=a1-a2; break; case '*': result=a1*a2; break; default: cout<<"输入错误的运算符!\n"; flag=1; } if(flag==0) cout< #include #include void main() { double a,b,c; double x1,x2,disc; cout<<"请输入方程的系数a b c :"; cin>>a>>b>>c; disc=b*b-4*a*c; if(fabs(disc)<1e-5) { x1=(-b)/2/a; cout<<"方程有两个相等的实根: x="< } else if(disc<0) cout<<"方程无实根!\n"; else { x1=(-b+sqrt(disc))/2/a; x2=(-b-sqrt(disc))/2/a; cout<<"方程有两个不同的实根: "< cout<<"x1="< } } \\ #include void main() { float a1, a2;//定义两个操作数 char oper; //定义运算符 float result; //定义变量,存放结果 int flag=0; //? cout<<"请输入简单的运算式:\n"; //输出提示信息 cin>>a1>>oper>>a2; //从键盘键入运算式,如5+3 switch(oper)//利用开关语句结构判断进行何种运算 { case '+': //加法 result=a1+a2; break; case '-': //减法 result=a1-a2; break; case '*': result=a1*a2; break; case '/': if(a2==0) { cout<<"除数不能为0!\n"; flag=1; break; } result=a1/a2; break; default: cout<<"输入错误的运算符!\n"; flag=1; } if(flag==0) cout< } 实验三 #include void main() { int x,y;//定义变量,x代表鸡的数目,y代表兔子的数目 for( x=1;x<30;x++) //鸡的数目从1~30皆有可能,所以程序将所有可能的解循环验证一遍 for(y=1;y<30;y++) //同样兔子的数目从1~30皆有可能,所以程序将所有可能的解循环验证一遍 if(2*x+4*y==90&&x+y==30) //所有可能的解中将满足给定条件的解输出 { cout<<"鸡有: "< } } #include void main() { int a, a1, a2;//定义变量,a代表个位,a1代表十位,a2代表百位 int b; //b为由a2, a1, a所组成的百位数 for( a2=1;a2<=9;a2++) //百位的位值从1~9皆有可能,所以程序将所有可能的解循环验证一遍 for(a1=0;a1<=9;a1++) //同样十位的位值从0~9皆有可能,所以程序将所有可能的解循环验证一遍 for(a=0;a<=9;a++) { b=a2*100+a1*10+a; if(a*a*a+a1*a1*a1+a2*a2*a2==b) //所有可能的解中将满足给定条件的解输出 cout< } } #include void main(void) { int a0, a1,a2; //定义变量,a0代表个位,a1代表十位,a2代表百位 int b; //b为由a2, a1, a0所组成的百位数 for(b=100;b<=999;b++) //将数字b从100到999循环, 并将每个数拆开,看看是否符合水仙花数的条件 { a2=b/100; //剥出数字b的百位数 a1=b/10%10; //剥出数字b的十位数 a0=b%10; //剥出数字b的个位数 if(a0*a0*a0+a1*a1*a1+a2*a2*a2==b) //判断是否满足水仙花数的条件 cout< } cout< } #include void main(void) int man, woman, children;//定义变量,存放结果(男人、女人、小孩的个数) for(man=1;man<=9;man++) //男人从1人到9人循环,每种情况下计算满足条件的女人和小孩的人数 for(woman=1;woman<=18;woman++) //在男人人数确定的情况下,女人从1人到18人循环, 每种情况下计算满足条件的小孩人数 { children=36-man-woman;//男人女人人数确定后, 小孩的人数就可以根据条件求出 if((man+woman+children==man*4+woman*2+children/2)&&(children%2==0)) //看看每种条件下男人、女人、小孩的人数及搬的砖是否满足给定的条件, 因为小孩是每两人 //搬一块砖, 所以小孩人数必须是偶数 cout<<"man="< //输出满足if条件的结果,即男人、女人、小孩的人数 } } #include void main(void) { int i,j,k,n,t=0; //定义n为从1到599循环的数字, i,j,k分别为n的百位、十位、个位数字//t为控制输出格式的计数变量 for(n=1;n<=599;n++) //使n从1到599循环, 将满足条件的n摘出来 { i=n/100; //剥出n的百位数 j=n/10%10;//剥出n的十位数 k=n%10; //剥出n的个位数 if(n%3==0&&(i==5||j==5||k==5)) //当数字n满足给定的条件是 { cout< t++; if(t%5==0) //控制输出格式, 每5个为一行, 即输出5个数后输出回车 cout<<'\n'; } } cout< } #include void main(void) int a0, a1,a2; //定义变量,a0代表个位,a1代表十位,a2代表百位 int b; //b为由a2, a1, a0所组成的百位数 for(b=100;b<=999;b++) //将数字b从100到999循环, 并将每个数拆开,看看是否符合水仙花数的条件 { a2=b/100; //剥出数字b的百位数 a1=b/10%10; //剥出数字b的十位数 a0=b%10; //剥出数字b的个位数 if(a0*a0*a0+a1*a1*a1+a2*a2*a2==b) //判断是否满足水仙花数的条件 cout< } cout< } 实验四 #include void main(void) { int a,b; int t, x; cout<<"请输入两个正整数: "; cin>>a>>b; x=a*b; if(a { t=a; a=b; b=t;} while(t=a%b) { a=b; b=t; } cout<<"最大公约数: "< cout<<"最小公倍数: "< } #include void main(void) { int a,b,c; //定义存放输入的三个整数的变量空间 cout<<"Input three number: "; //提示信息 cin>>a>>b>>c; //从键盘输入三个整数 for(int i=a;i>=1;i--)//假设最大公约数为i, 使i从a(或b或c)到1逐次递减循环if(a%i==0&&b%i==0&&c%i==0) //当i满足公约数的条件时(同时能被a,b,c整除)时, 退出循环, 即这时的i即为最大公约数 break; cout< } #include void main(void) { int a; cout<<"请输入一个正整数: "; cin>>a; for(int i=2;i if(a%i==0) break; if(i>=a/2) cout< else cout< } #include void main(void) { int a,b,c; cout<<"请输入三个整数: "; cin>>a>>b>>c; for(int i=a;i<=a*b*c;i++) if(i%a==0&&i%b==0&&i%c==0) break; cout<<"最小公倍数为: "< } #include void main(void) { for(int i=100;i<=200;i++) //将i从100到200依次循环,以求出所有满足素数条件的i { for(int j=2;j 看是否有余数 if(i%j==0) //若i能被上述其中一个数整除, 即表示i不是素数, 后面的数就不必除了, 直接退出循环 break; if(j>=i/2) //出了循环后, 要判断i是中途退出的(不是素数)还是循环到i/2后再退出的(是素数) cout< } } #include void main(void) { int a; int s; for(int i=1;i<1000;i++) { a=i; s=0; for(int j=1;j { if(a%j==0) s=s+j; } if(a==s) cout< } } 实验五 #include void main(void) { int t=2; int s=0; for(int i=1;i<=7;i++) { s=s+t; t=t*10+2; } cout<<"2+22+222+...+2222222="< } #include void main(void) { float y=1,t=1; //t为通项,初值为1, 即1!,y为结果, 初值为1 int n; cout<<"Input n: "; //输出提示信息 cin>>n; //输入欲求的项数 for(int i=2;i<=n;i++) { t=t*i; //根据前一项求后一项 y=y+t; //通项累加和 } cout<<"1!+2!+3!+....+"< #include #include void main(void) { float x, y1,y2; cout<<"请输入x的值: "; cin>>x; y2=x; do { y1=y2; y2=2*y1/3+x/y1/y1/3; }while(fabs(y1-y2)>1e-5); cout<<"y="< } #include void main(void) { float x,y,t; //t为通项,x为未知数 int n; //n为通项个数,必须是整数 cout<<"Input n x: ";//输出提示信息 cin>>n>>x; //从键盘输入数据10 2.5 y=x; //结果的初始值,因为循环从第2项开始,所以第1项要先赋给结果y t=x; //通项的初始值 for(int i=2;i<=n;i++) //假设第1项已求出(初始值),从第2项开始计算 { t=-t*x*x/((2*i-1)*(2*i-2)); //首先计算通项, 计算方法是用前1项的值推算后1项的值 //即求出前后两项相除的结果, 这个结果是它们相差的倍数, 然后前1项的值乘以这个倍数即为后1项的值 y=y+t; //将当前的通项值累加起来 } cout<<"y="< } 实验六 #include float fun(float x) //函数fun求形参x的函数值, 并将结果返回 { float y; //定义x的函数值 y=2*x*x+3*x+5; //计算函数值 return y; //将结果返回 } void main(void) { float y1, y2; //定义x为1和1.2时的函数值 y1=fun(1.0); //将1.0作为实参调用fun函数,即赋给形参x,函数值即为所求的结果y2=fun(1.2); //将1.2作为实参调用fun函数,即赋给形参x,函数值即为所求的结果cout<<"y1="< cout<<"y2="< } #include #include float f(float x) //求形参x的多项式的值 { return x*x+3*x-4; } float f1(float x) //求形参x的多项式的导数值 { return 2*x+3; } void main(void) { float x1,x0; //定义存放新旧迭代值的变量 x1=0; //迭代变量赋初值 do { x0=x1; //迭代循环, 将新的迭代值变成旧的迭代值, 再去求新的迭代值 x1=x0-f(x0)/f1(x0); //用旧的迭代值求新的迭代值 }while(fabs(x1-x0)>1e-5); //不满足结束条件, 一直迭代循环 cout<<"x="< } #include #include float f(float x) //根据形参x求函数f(x)=x*x+3*x-4的值 { return x*x+3*x-4; } void main(void) { float x1,x2,x0; do //判断输入的初值是否满足要求 { cout<<"请输入初值x1和x2: "; cin>>x1>>x2; //输入初值 }while((f(x1)*f(x2))>0); //当解不在初值范围之内时,重新循环输入初值 do { x0=(x1+x2)/2; //根据初值求方程的新的根x0 if(f(x0)*f(x1)>0) //实际的根在x2和x0之间 x1=x0; //将x0作为新的x1 else //实际的根在x1和x0之间 x2=x0; //将x0作为新的x2 }while(fabs(f(x0))>1e-5); //判断x0是否是满足方程的解的精度 cout<<"x0="< } #include #include float f(float x) //根据形参x求函数f(x)=x*x+3*x-4的值 { return x*x+3*x-4; } void main(void) { float x1,x2,x0; do //判断输入的初值是否满足要求 { cout<<"请输入初值x1和x2: "; cin>>x1>>x2; //输入初值 }while((f(x1)*f(x2))>0); //当解不在初值范围之内时,重新循环输入初值do { x0=(x1*f(x2)-x2*f(x1))/(f(x2)-f(x1)); //根据初值求方程的新的根x0 if(f(x0)*f(x1)>0) //实际的根在x2和x0之间 x1=x0; //将x0作为新的x1 else //实际的根在x1和x0之间 x2=x0; //将x0作为新的x2 }while(fabs(f(x0))>1e-5); //判断x0是否是满足方程的解的精度 cout<<"x0="< } #include #include float f(float x) //求形参x的多项式的值 { return x*x+3*x-4; } float f1(float x) //求形参x的多项式的导数值 { return 2*x+3; } float ff(float x) { float y; if(fabs(f(x))<1e-5) y=x; else y=ff(x-f(x)/f1(x)); return y; } void main(void) { float x1; //定义存放新旧迭代值的变量 x1=0; //迭代变量赋初值 cout<<"x="< } 试验七 //B14: 设计一个程序,求出100~200之间的所有素数 #include //函数功能:判断x是否为素数,若是素数,函数返回值为1,否则,函数返回值为0 int prime(int x) { for(int i=2;i if(x%i==0) //x能被2~x/2整除,说明x不是素数 return 0; return 1; //执行完循环,x为素数,返回1 } void main(void) { for(int i=100;i<=200;i++) //将i从100到200依次循环,以求出所有满足素数条件的i { if(prime(i)==1) //利用函数判断循环变量i是否为素数 cout< } } // 输入一个整数n(2≤n≤10000),输出它的所有的素数因子。 //用函数int Prime(int num)来判断整数num是否为素数。例如,若输入2310,则输出:2,3,5,7,11。 #include int Prime(int num) //函数Prime判断形参num是否为素数, 若为素数, 函数返回1, 否则函数返回0 { for(int i=2;i if(num%i==0) //若上述数据有1个被num整除, 则num为非素数, 中止循环, 直接返回0 return 0; return 1; //当以上循环正常结束(即i循环到num/2结束), 说明没有数据被num整除, num 为素数, 返回1 } void main(void) { int n; cout<<"输入一个整数n: "; cin>>n; //从键盘输入一个整数 for(int i=2;i<=n/2;i++) //将i从2开始循环,判断i是否为n的因子 { if(n%i==0&&Prime(i)) //若i为n的因子且i为素数 cout< } cout< } #include int prime(int x) { for(int i=2;i if(x%i==0) return 0; return 1; } void main() { int x; cout<<"请输入一个大于6的偶数: "; cin>>x; for(int i=2;i { int t=x-i; if(prime(i)&&prime(t)) { cout< } } } #include int fun(int n) { int mul=1; while(n) { mul=mul*(n%10); n=n/10; } return mul; } void main(void) { int n, mul; cout<<"请输入一个整数(输入0结束): "; cin>>n; //从键盘输入整数 while(n) //因为要输入多个整数, 所以要判断输入的整数是否为0, 不为0,继续循环输入{ mul=fun(n); //用输入的整数n作为实参调用函数fun(),将函数值赋给变量mul cout< cout<<"请输入一个整数(输入0结束): "; cin>>n; //继续输入另一个整数, 直至输入为0, 结束循环 } } 实验八 #include void main() { int a[6]={9,8,7,6,5,4}; int i,j,t; int n=6; for (j=0; j for (i=0; i { if (a[i]>a[i+1]) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } } for(i=0;i cout< cout< } #include void main() { int a[6]={9,8,7,6,5,4}; int i,j,min,t; int n=6; for (j=0; j { min=j; for (i=j; i if (a[min]>a[i]) min=i; t=a[min]; a[min]=a[j]; a[j]=t; } for(i=0;i cout< cout< } #include void main() { int a[10]={2,5,78,4,6,3,89,12,15,34}; int max=a[0],maxindex=0; for(int i=1;i<10;i++) if(max { max=a[i]; maxindex=i; } cout<<"max="< #include void main() { int a[]={8,16,5,14,1}; int len=sizeof(a)/sizeof(a[0]); int temp; for(int i=0;i { temp=a[i]; a[i]=a[len-1-i]; a[len-1-i]=temp; } for(i=0;i cout< cout< } #include #define N 100 void main() { int a[N]; int i,j; for(i=0;i a[i]=i; for(i=2;i for(j=2;i*j { if(a[i]!=0) a[i*j]=0; } for(i=2;i if(a[i]!=0) cout< cout< } 实验九 #include void main() { int i,j,row=0,colum=0,max; int a[4][4]={{5,12,23,56},{19,28,37,46},{-12,-34,6,8},{4,6,34,1}}; max=a[0][0]; for(i=0;i<4;i++) for(j=0;j<4;j++) if(a[i][j]>max) { max=a[i][j]; row=i; colum=j; } cout<<"max="< #include void main() { int i,j,k; int colum,saddle,max,flag=0; int a[4][4]={{5,12,23,56},{19,28,37,46},{-12,-34,-6,8},{4,6,34,10}}; for(i=0;i<4;i++) { max=a[i][0]; for(j=0;j<4;j++) if(a[i][j]>max) { max=a[i][j]; colum=j; } for(k=0;k<4;k++) if(max>a[k][colum]) max=a[k][colum]; if(max==a[i][colum]) { flag=1; saddle=max; break; } } if(flag==1) cout<<"saddle="< else cout<<"No Saddle!\n"; } #include #define N 4 void main(void) { int a[N][N];//定义一个N×N的二维数组存放矩阵中的数值 int i, j; cout<<"请输入一个N×N的矩阵, 矩阵的数值之间用空格或回车间隔: \n"; for(i=0; i for(j=0; j cin>>a[i][j]; //从键盘向矩阵中的每一个元素输入数据 cout<<"输入的原始矩阵为: \n"; for(i=0; i { for( j=0; j cout< cout< } for(i=0; i for(j=0; j { int t=a[i][j]; a[i][j]=a[j][i]; a[j][i]=t; } cout<<"\n转置后的矩阵为: \n"; for(i=0; i { for( j=0; j cout<