C++程序设计_上机实践与学习辅导_王庆宝_朱红版的答案.doc_第1页
C++程序设计_上机实践与学习辅导_王庆宝_朱红版的答案.doc_第2页
C++程序设计_上机实践与学习辅导_王庆宝_朱红版的答案.doc_第3页
C++程序设计_上机实践与学习辅导_王庆宝_朱红版的答案.doc_第4页
C++程序设计_上机实践与学习辅导_王庆宝_朱红版的答案.doc_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一#includevoid main(void)int a, b, sum;coutab; sum=a+b; coutsum=sumendl;#includevoid main()double f, c;coutf; c=5.0/9*(f-32);cout摄氏温度=cendl;#includevoid main()double r,s;coutr;s=3.14159*r*r;cout圆的面积是: s=sendl;#include#includevoid main()double a,b,c,s,area;coutabc;s=a+b+c;s=s/2;area=sqrt(s*(s-a)*(s-b)*(s-c);coutareaendl;实验二#includevoid main(void)float a,b,c;/定义变量,存放三角形的三边数据coutabc; /从键盘依次输入三边的值if(a+bc)|(a+cb)|(b+ca) /判断这三边是否能构成三角形coutNot Trianglen; /不满足三角形三边条件, 输出否定信息elsecoutTrianglen; /满足三边构成条件,输出确认信息#includevoid main(void)int year; /定义变量,存放将输入的年份coutyear; /输入欲判断的年份if(year%400=0|year%4=0&year%100!=0) /判断该年份是否为闰年的条件coutyear is a leap yearendl; /条件为真, 说明输入的年份为闰年, 输出确认信息else coutyear isnt a leap yearendl; /否则, 输出否定信息#includevoid main()float a1, a2;/定义两个操作数char oper; /定义运算符float result; /定义变量,存放结果int flag=0; /?couta1opera2; /从键盘键入运算式,如 5+3 4.5*7等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)couta1opera2=resultendl; /输出结果#include#includevoid main()double a,b,c;double x1,x2,disc;coutabc;disc=b*b-4*a*c;if(fabs(disc)1e-5)x1=(-b)/2/a;cout方程有两个相等的实根: x=x1endl;else if(disc0)cout方程无实根!n;elsex1=(-b+sqrt(disc)/2/a;x2=(-b-sqrt(disc)/2/a;cout方程有两个不同的实根: endl;coutx1=x1tx2=x2endl;#includevoid main()float a1, a2;/定义两个操作数char oper; /定义运算符float result; /定义变量,存放结果int flag=0; /?couta1opera2; /从键盘键入运算式,如 5+3 4.5*7等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)couta1opera2=resultendl; /输出结果实验三#includevoid main()int x,y;/定义变量,x代表鸡的数目,y代表兔子的数目for( x=1;x30;x+) /鸡的数目从130皆有可能,所以程序将所有可能的解循环验证一遍for(y=1;y30;y+) /同样兔子的数目从130皆有可能,所以程序将所有可能的解循环验证一遍if(2*x+4*y=90&x+y=30) /所有可能的解中将满足给定条件的解输出cout鸡有: xt兔有: yendl;#includevoid main()int a, a1, a2;/定义变量,a代表个位,a1代表十位,a2代表百位int b; /b为由a2, a1, a所组成的百位数for( a2=1;a2=9;a2+) /百位的位值从19皆有可能,所以程序将所有可能的解循环验证一遍for(a1=0;a1=9;a1+) /同样十位的位值从09皆有可能,所以程序将所有可能的解循环验证一遍for(a=0;a=9;a+)b=a2*100+a1*10+a;if(a*a*a+a1*a1*a1+a2*a2*a2=b) /所有可能的解中将满足给定条件的解输出coutbendl;#includevoid 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) /判断是否满足水仙花数的条件coutbt; /满足条件, 输出这个数coutendl;#includevoid 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)/看看每种条件下男人、女人、小孩的人数及搬的砖是否满足给定的条件, 因为小孩是每两人/搬一块砖, 所以小孩人数必须是偶数coutman=mantwoman=womantchildren=childrenendl;/输出满足if条件的结果,即男人、女人、小孩的人数#includevoid 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满足给定的条件是coutnt; /输出n的值t+;if(t%5=0) /控制输出格式, 每5个为一行, 即输出5个数后输出回车coutn;coutendl;#includevoid 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) /判断是否满足水仙花数的条件coutbt; /满足条件, 输出这个数coutendl;实验四#includevoid main(void)int a,b;int t, x;coutab;x=a*b;if(ab)t=a;a=b;b=t;while(t=a%b)a=b;b=t;cout最大公约数: bendl;cout最小公倍数: x/bendl;#includevoid main(void) int a,b,c; /定义存放输入的三个整数的变量空间 coutabc; /从键盘输入三个整数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; coutiendl;/输出结果#includevoid main(void)int a;couta;for(int i=2;i=a/2)couta是素数n;elsecouta不是素数n;#includevoid main(void)int a,b,c;coutabc;for(int i=a;i=a*b*c;i+)if(i%a=0&i%b=0&i%c=0)break;cout最小公倍数为: iendl;#includevoid main(void)for(int i=100;i=200;i+) /将i从100到200依次循环,以求出所有满足素数条件的ifor(int j=2;j=i/2) /出了循环后, 要判断i是中途退出的(不是素数)还是循环到i/2后再退出的(是素数)couti ; /如果除数大于等于i/2, 即表明i是循环完退出的,是素数, 输出结果 #includevoid main(void)int a;int s;for(int i=1;i1000;i+)a=i;s=0;for(int j=1;ji;j+)if(a%j=0)s=s+j;if(a=s)coutaendl;实验五#includevoid main(void)int t=2;int s=0;for(int i=1;i=7;i+)s=s+t;t=t*10+2;cout2+22+222+.+2222222=sendl;#includevoid main(void)float y=1,t=1; /t为通项,初值为1, 即1!,y为结果, 初值为1int n;coutn; /输入欲求的项数for(int i=2;i=n;i+)t=t*i; /根据前一项求后一项 y=y+t; /通项累加和cout1!+2!+3!+.+n!=yendl; /输出结果#include#includevoid main(void)float x, y1,y2;coutx;y2=x;doy1=y2;y2=2*y1/3+x/y1/y1/3;while(fabs(y1-y2)1e-5);couty=y2endl;#includevoid main(void)float x,y,t; /t为通项,x为未知数int n; /n为通项个数 ,必须是整数coutnx; /从键盘输入数据10 2.5y=x; /结果的初始值,因为循环从第2项开始,所以第1项要先赋给结果yt=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; /将当前的通项值累加起来couty=yendl; /输出结果实验六#includefloat 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,函数值即为所求的结果couty1=y1endl;couty2=y2endl;#include#includefloat 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; /迭代变量赋初值dox0=x1; /迭代循环, 将新的迭代值变成旧的迭代值, 再去求新的迭代值x1=x0-f(x0)/f1(x0); /用旧的迭代值求新的迭代值while(fabs(x1-x0)1e-5); /不满足结束条件, 一直迭代循环coutx=x1endl; /输出结果#include#includefloat 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 /判断输入的初值是否满足要求 coutx1x2; /输入初值while(f(x1)*f(x2)0); /当解不在初值范围之内时,重新循环输入初值dox0=(x1+x2)/2; /根据初值求方程的新的根x0if(f(x0)*f(x1)0) /实际的根在x2和x0之间x1=x0; /将x0作为新的x1else /实际的根在x1和x0之间x2=x0; /将x0作为新的x2while(fabs(f(x0)1e-5); /判断x0是否是满足方程的解的精度coutx0=x0endl; /输出x0#include#includefloat 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 /判断输入的初值是否满足要求 coutx1x2; /输入初值while(f(x1)*f(x2)0); /当解不在初值范围之内时,重新循环输入初值dox0=(x1*f(x2)-x2*f(x1)/(f(x2)-f(x1); /根据初值求方程的新的根x0if(f(x0)*f(x1)0) /实际的根在x2和x0之间x1=x0; /将x0作为新的x1else /实际的根在x1和x0之间x2=x0; /将x0作为新的x2while(fabs(f(x0)1e-5); /判断x0是否是满足方程的解的精度coutx0=x0endl; /输出x0#include#includefloat 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;elsey=ff(x-f(x)/f1(x);return y;void main(void)float x1; /定义存放新旧迭代值的变量x1=0; /迭代变量赋初值coutx=ff(x1)endl; /输出结果试验七/B14: 设计一个程序,求出100200之间的所有素数#include/函数功能:判断x是否为素数,若是素数,函数返回值为1,否则,函数返回值为0int prime(int x) for(int i=2;ix/2;i+)if(x%i=0) /x能被2x/2整除,说明x不是素数return 0;return 1; /执行完循环,x为素数,返回1void main(void)for(int i=100;i=200;i+) /将i从100到200依次循环,以求出所有满足素数条件的iif(prime(i)=1) /利用函数判断循环变量i是否为素数coutit; /若为素数,输出这个数/ 输入一个整数n(2n10000),输出它的所有的素数因子。/用函数 int Prime(int num)来判断整数num是否为素数。例如,若输入2310,则输出:2,3,5,7,11。#includeint Prime(int num) /函数Prime判断形参num是否为素数, 若为素数, 函数返回1, 否则函数返回0for(int i=2;inum/2;i+) /将num依次除以2, 3, ., num/2if(num%i=0) /若上述数据有1个被num整除, 则num为非素数, 中止循环, 直接返回0return 0;return 1; /当以上循环正常结束(即i循环到num/2结束), 说明没有数据被num整除, num为素数, 返回1void main(void)int n;coutn; /从键盘输入一个整数for(int i=2;i=n/2;i+) /将i从2开始循环,判断i是否为n的因子 if(n%i=0&Prime(i) /若i为n的因子且i为素数coutit; /输出icoutendl;#includeint prime(int x)for(int i=2;ix/2;i+)if(x%i=0)return 0;return 1;void main()int x;coutx;for(int i=2;ix/2;i+)int t=x-i;if(prime(i)&prime(t)coutx=i+tendl;#includeint fun(int n)int mul=1;while(n)mul=mul*(n%10);n=n/10;return mul;void main(void)int n, mul;coutn; /从键盘输入整数while(n) /因为要输入多个整数, 所以要判断输入的整数是否为0, 不为0,继续循环输入mul=fun(n); /用输入的整数n作为实参调用函数fun(),将函数值赋给变量mulcoutn 的各位数之积为 mulendl; /输出结果coutn; /继续输入另一个整数, 直至输入为0, 结束循环实验八#includevoid main()int a6=9,8,7,6,5,4;int i,j,t;int n=6;for (j=0; jn-1; j+)for (i=0; iai+1) t=ai; ai=ai+1; ai+1=t; for(i=0;in;i+)coutait;coutendl;#includevoid main()int a6=9,8,7,6,5,4;int i,j,min,t;int n=6;for (j=0; jn-1; j+)min=j;for (i=j; iai) min=i;t=amin;amin=aj;aj=t; for(i=0;in;i+)coutait;coutendl;#includevoid main()int a10=2,5,78,4,6,3,89,12,15,34;int max=a0,maxindex=0;for(int i=1;i10;i+)if(maxai)max=ai;maxindex=i;coutmax=maxtmaxindex=maxindexendl;#includevoid main()int a=8,16,5,14,1;int len=sizeof(a)/sizeof(a0);int temp;for(int i=0;ilen/2;i+)temp=ai;ai=alen-1-i;alen-1-i=temp;for(i=0;ilen;i+)coutait;coutendl;#include#define N 100void main()int aN;int i,j;for(i=0;iN;i+)ai=i;for(i=2;iN;i+)for(j=2;i*jN;j+)if(ai!=0)ai*j=0;for(i=2;iN;i+)if(ai!=0)coutait;coutendl;实验九#includevoid main()int i,j,row=0,colum=0,max;int a44=5,12,23,56,19,28,37,46,-12,-34,6,8,4,6,34,1;max=a00;for(i=0;i4;i+)for(j=0;jmax)max=aij;row=i;colum=j;coutmax=max,row=row,colum=columendl;#includevoid main()int i,j,k;int colum,saddle,max,flag=0;int a44=5,12,23,56,19,28,37,46,-12,-34,-6,8,4,6,34,10;for(i=0;i4;i+)max=ai0;for(j=0;jmax)max=aij;colum=j;for(k=0;kakcolum)max=akcolum;if(max=aicolum)flag=1;saddle=max;break;if(flag=1)coutsaddle=saddle,row=i,colum=columendl;elsecoutNo Saddle!n;#include#define N 4void main(void)int aNN;/定义一个NN的二维数组存放矩阵中的数值int i, j;cout请输入一个NN的矩阵, 矩阵的数值之间用空格或回车间隔: n;for(i=0; iN; i+) /行循环for(j=0; jaij; /从键盘向矩阵中的每一个元素输入数据cout输入的原始矩阵为: n;for(i=0; iN; i+)/输出刚输入的矩阵中的数值,行循环for( j=0; jN; j+) /列循环coutaijt; /输出一个数据,数据之间用制表符间隔coutendl; /每行输出结束, 输出回车间隔每行for(i=0; iN; i+) /转置矩阵, 主对角线以下的行列元素交换, for(j=0; ji; j+)int t=aij;aij=aji;aji=t;coutn转置后的矩阵为: n;for(i=0; iN; i+) /输出转置后的矩阵for( j=0; jN; j+)coutaijt;coutendl;#includevoid main()int a1111;int i,j;for(i=1;i10;i+)for(j=1;j=i;j+)aij=i*j;for(i=1;i10;i+)for(j=1;j=i;j+)coutaijt;coutendl;#includevoid main()int a1010;int i,j;for(i=0;i10;i+)ai0=1;aii=1;for(i=2;i10;i+)for(j=1;ji;j+)aij=ai-1j-1+ai-1j;for(i=0;i10;i+)for(j=0;j=i;j+)coutaijt;coutendl;实验十#includeint gys(int m,int n)/欧几里德算法求两整数m和n的最大公约数 int r; if(mn) r=m; m=n; n=r; while(r=m%n) m=n; n=r; return n;void main(void) int a8=26,1007,956,705,574,371,416,517; int b8=994,631,772,201,262,763,1000,781; int c8; for(int i=0;i8;i+) ci=gys(ai,bi);/对应元素的公约数 for(i=0;i8;i+)coutcit; coutendl;#includeint fun(int x)int sum=0;while(x)sum+=x%10;x=x/10;return sum;void main()int a10,b10;int sum=0;cout请输入10个整数: n;for(int i=0;iai;for(i=0;i10;i+)bi=fun(ai);sum+=ai;coutsum=sumendl;for(i=0;i10;i+)coutaitbiendl;/* 编写函数int fun(int s , int num),其功能是找出100至num(不大于1000)之间 三位数字之和为10的所有整数,并把这些整数放入数组s中,同时把整数的个数作为函数值返回。 在主函数中定义存放整数的数组a1000, 并从键盘输入num的值,将这两项作为实际参数调用函数fun。*/#includeint fun(int s, int num) /函数fun将满足条件的数据放入形参数组s中,由于是数组名作参数,实际上/也是将数据放入到实参数组定义的空间中,数组元素的个数作为函数值返回int sum,t,count=0; /sum是每个数值的累加和, count是满足条件的数据个数for(int i=100;i=num;i+)sum=0; /求每一个数据各位数的累加和,所以在每一个数循环的开始都要对sum清零t=i; /对i剥数,由于i同时也控制循环次数, 所以i不能改变, 将i赋给t,对t剥数while(t)sum+=t%10; /剥出t的个位数, 加入累加和t=t/10; /去掉t的个位数,t不为0继续循环if(sum=10) /累加和满足所要求的条件scount+=i; /将该数存入形参数组s,数组序号加1return count; /返回s中的实际数据个数void main(void)int num, a1000;/数组a存放满足条件的数据coutnum; /从键盘输入num的值int n; /n为满足条件的数据个数n=fun(a,num); /用数组名a及num作实参, 调用函数,将数据放入数字a中,数据的个数作为函数值赋给ncoutn=nendl;for(int i=0;in;i+)coutait; /输出满足条件的数据coutendl;#includeint prime(int x)for(int i=2;ix/2;i+)if(x%i=0)return 0;return 1;void main()int a=55,154,103,106,151,58,199,10,247,218,39,170,87,122,135;int num=0;for(int i=0;isizeof(a)/sizeof(int);i+)if(prime(ai)num+;coutait;coutendlnum=numendl;、实验十一#includeint binary(int array, int n, int number)int low=0, high=n-1, mid;while(low=high)mid=(low+high)/2;if(numberarraymid) low=mid+1;else return mid+1 ; return -1;void main()int a=2,4,6,8,10,12,14,16,18,20,22,24;int num;coutnum;int index=binary(a,sizeof(a)/sizeof(a0), num);if(index!=-1)cout该数在数组中的序号为: indexendl;elsecout数组中没有该元素n;#includeint del(int array, int n)for(int i=0;in-1;i+)if(arrayi=arrayi+1)for(int j=i+1;jn;j+)arrayj-1=arrayj;n-;i-;return n;void main()int a=2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10;int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论