《C上机作业复习资料讲解.docx》由会员分享,可在线阅读,更多相关《C上机作业复习资料讲解.docx(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 第一章作业答案1. 编写程序,将华氏温度转化为摄氏温度:公式:C=(5/9)*(F-32)程序代码:#includeusing namespace std;void main()float F,C; coutF; C=5*(F-32)/9.0; coutC=Cendl;运行结果:2.编写程序,输入圆柱体的半径r与高h,计算圆柱体的体积。程序代码:#includeusing namespace std;void main()float r,h,v; coutrh; v=PI*r*r*h; coutv=vendl;运行结果:3.输入三角形的三条边a,b,c,利用海伦公式计算三角形的面积area.
2、若 则area= 程序代码:#include#includeusing namespace std;void main()float a,b,c,p,area; coutabc; if(a+bc)&(b+ca)&(a+cb) p=(a+b+c)/2.0; area=sqrt(p*(p-a)*(p-b)*(p-c); coutarea=areaendl; else coutinput error!endl;运行结果:4.输入a,b,c的值,求一元二次方程: 的解。程序代码:#include#includeusing namespace std;void main()float a,b,c,p,x
3、1,x2; coutabc; p=b*b-4*a*c; if(p=0) x1=(-b+sqrt(p)/(2*a); x2=(-b-sqrt(p)/(2*a); coutx1=x1endl; coutx2=x2endl; else coutNO real root!;运行结果第二章作业答案1. 输入一个整数,计算该数的阶乘。程序代码:#includeusing namespace std;void main()int i,n,p=1; cinn; for(i=1;i=n;i+) p=p*i; coutn!=pendl;运行结果:2. 连续输入若干个整数,输入0结束。统计其正整数的个数,并计算其中
4、正整数的总与、平均值并输出。程序代码:#includeusing namespace std;void main()int a,n=0; float avg,sum=0; do cina; if(a0)n+;sum+=a; while(a!=0); avg=sum/n; coutn=nendl; coutavg=avgendl; coutsum=sumendl;3. 输出所有的水仙花数。所谓“水仙花数”是一个三位数,其各位数字的立方与等于该数本身。如153=13+53+33程序代码:#includeusing namespace std;void main()int a,b,c,n; for(
5、n=100;n1000;n+) a=n%10; b=n%100/10; c=n/100; if(n=a*a*a+b*b*b+c*c*c) coutnendl; 运行结果:第三章 作业答案1. 编写程序输出两个数的最大公约数与最小公倍数。2. 计算100-300之内所有素数的与。3. 计算s=1-1/3+1/5-1/7+1/994. N是一个四位数,它的9倍恰好是其反序数(例如:123的反序数是321),求N的值。第一题:程序代码:/用辗转相除法求最大公约数;#includeusing namespace std;void main()int m,n,r,temp; cinmn; temp=m*
6、n; while(r=m%n) m=n; n=r; cout最大公约数=nendl; cout最小公倍数=temp/nendl;运行结果:第二题:程序代码:#includeusing namespace std;void main()int n,i,s=0; for(n=100;n300;n+) for(i=2;in;i+) if(n%i=0)break; if(i=n)s+=n; couts=sendl;运行结果:第三题:程序代码:#includeusing namespace std;void main()int n=1; float s=0,f=1,p; for(n=1;n100;n+=
7、2) p=f/n; s=s+p; f=-f; couts=sendl;运行结果:第四题:程序代码:#includeusing namespace std;void main()int n,a,b,c,d; for(n=1000;n10000;n+) a=n/1000; /千位 b=n%1000/100;/百位 c=n%100/10; /十位 d=n%10; /个位 if(9*n=d*1000+c*100+b*10+a) coutnendl; 运行结果:第四次作业答案1. 编写两个函数,分别计算两个整数的最大公约数与最小公倍数,并在主函数中调用该函数,并输出结果。2. 编写一个判断素数的函数,函
8、数原型为: int isprime(int n),在主函数中调用该函数,计算1001000之间所有素数的与。3. 编写一个函数,f(n)= ,并在主函数中输出f(10)的值。(说明自然对数 ln的函数原型为 double log(float x) .4. 编写一个计算阶乘的函数,函数原型为 int fac(int n),在主函数中调用该函数,计算:S=M!+N! .第一题:程序代码:#includeusing namespace std;/求最大公约数int gcd(int m,int n)int r; while(r=m%n) m=n;n=r; return n;/求最小公倍数int lcd
9、(int m,int n)return m*n/gcd(m,n);void main()int a,b; cinab; cout最大公约数为:gcd(a,b)endl; cout最小公倍数为:lcd(a,b)endl;运行结果:第二题:程序代码:#includeusing namespace std;/判断素数的函数,若n为素数,函数返回1,否则返回0;int isprime(int n)int i; for(i=2;in;i+) if(n%i=0)return 0; return 1;void main()int i,s=0; for(i=100;i1000;i+) if(isprime(i
10、)s=s+i; couts=sendl;运行结果:第三题:程序代码:#include#includeusing namespace std;double f(int n)int i; double s=0; for(i=2;i=n;i+) s=s+log(i); return sqrt(s);void main()coutf(10)endl;运行结果:第四题:程序代码:#includeusing namespace std;/用递归编写计算阶乘的函数int fac(int n)if(n=0|n=1)return 1; else return n*fac(n-1);void main()int
11、M,N,s; cinMN; s=fac(M)+fac(N); coutM!+N!=sendl;运行结果:第五章第六次上机内容1、 定义一个3行4列的数组,计算所有数据的平均值,并输出最大值与最小值与它的行号与列号。2、 编写程序,实现一个一维数组的反序存放。3、 用选择排序法实现10整数由小到大排序。4、 用冒泡法实现10整数由大到小排序。第一题:程序代码:#includevoid main()int a34=12,6,25,10,14,9,20,16,30,22,5,21; int i,j,m,n,k,l,max,min; max=min=a00; m=n=0; for(i=0;i3;i+)
12、 for(j=0;jmax)max=aij;m=i;n=j; else if(aijmin)min=aij;k=i;l=j; coutmax=maxendl; cout行号:m列号:nendl; coutmin=minendl; cout行号:k列号:lendl;运行结果:第二题:程序代码:#include#define N 6void main()int aN=12,10,20,21,30,25; int i,t; for(i=0;iN/2;i+) t=ai;ai=aN-i-1;aN-i-1=t; for(i=0;iN;i+) coutai ; coutendl;运行结果:第三题:程序代码:
13、#include#define N 10/选择排序void main()int aN=30,21,15,38,25,35,18,28,45,20; int i,j,t,k; for(i=0;iN-1;i+) k=i; for(j=i+1;jN;j+) if(ajak)k=j; if(k!=i)t=ai;ai=ak;ak=t; for(i=0;iN;i+) coutai ; coutendl;运行结果:第四题:程序代码:#include#define N 10/冒泡排序,由大到小排序void main()int aN=30,21,15,38,25,35,18,28,45,20; int i,j,
14、t,k; for(i=0;iN-1;i+) k=0; for(j=0;jN-i-1;j+) if(ajaj+1) t=aj;aj=aj+1;aj+1=t;k=1; if(k=0)break; for(i=0;iN;i+) coutai ; coutendl;运行结果:第七次作业1.定义一个二维数组int a34,分别用指针法与下标法输出其内容。2.用数组作为函数参数,并通过函数调用还回最大值,最小值与平均值。函数原型维: void fun(int a10, int *max,int *min,float *avg)3.编写一个函数void fun(int a,int n),将a中的n个元素按反
15、序存放,在main函数中调用该函数,分别用数组与指针作为实参。4.用冒泡法或选择法编写一个排序的函数,然后在主程序中调用该函数实现10个整数的排序。第一题程序代码:#includevoid main()int a34=1,2,3,4,5,6,7,8,9,10,11,12; int i,j; int *p; int (*pp)4;/用下标法实现; for(i=0;i3;i+) for(j=0;j4;j+) printf(%3d,aij); printf(n); /用列指针实现; p=&a00; for(i=0;i12;i+) printf(%3d,*(p+i); printf(n); /用行指针
16、实现; pp=a; for(i=0;i3;i+) for(j=0;j4;j+) printf(%3d,*(*(pp+i)+j); printf(n);运行结果截图:第二题:程序代码:#includevoid fun(int a10, int *max,int *min,float *avg)int i,s=0; *max=*min=a0; for(i=0;i10;i+) if(*maxai) *min=ai; s+=ai; *avg=s/10.0;void main()int a10=10,21,8,22,40,23,32,26,30,12; int max,min; float avg; f
17、un(a,&max,&min,&avg); printf(max=%dn,max); printf(min=%dn,min); printf(avg=%6.2fn,avg);运行结果截屏:第三题:程序代码:#includevoid fun(int a,int n)int i,t; for(i=0;in/2;i+) t=ai;ai=an-i-1;an-i-1=t;void main()int a6=20,12,6,21,29,15; int *p,i; /用数组作为函数的实参; printf(原先数组的序列:n); for(i=0;i6;i+) printf(%4d,ai); printf(n)
18、; printf(用数组作为实参,交换后的序列:n); fun(a,6); for(i=0;i6;i+) printf(%4d,ai); printf(n); /用指针作为函数的实参 printf(用指向数组的指针作为实参,再次交换后的序列:n); p=a; fun(p,6); for(i=0;i6;i+) printf(%4d,ai); printf(n);运行结果截屏:第四题:程序代码:#include/用选择法编写数组排序函数,按从小到大顺序排序void sort1(int a,int n)int i,j,k,t; for(i=0;in-1;i+) k=i; for(j=i+1;jaj)
19、k=j;if(k!=i)t=ai;ai=ak;ak=t; /用冒泡法排序,按从小到大顺序排序void sort2(int a,int n)int i,j,t,f; for(i=0;in;i+) f=1; for(j=0;jaj+1) t=aj;aj=aj+1;aj+1=t;f=0; if(f=1)break; void main()int a10=40,23,26,20,35,55,12,43,37,45; int i;printf(排序前的序列:n);for(i=0;i10;i+) printf(%4d,ai); printf(n); printf(选择排序后的序列:n); sort1(a,
20、10); for(i=0;i10;i+) printf(%4d,ai); printf(n冒泡排序后的序列:n); sort2(a,10); for(i=0;i10;i+) printf(%4d,ai); printf(n);运行结果截屏:第八次作业1. 设数组aN中已经有n个数并已按从小到大顺序排序。要求输入一个数x,将其插入到数组中,使数组仍然有序。#includeusing namespace std;void main()int a10=4,6,8,10,20; int i,j,x; cinx; for(i=0;ix)/ 寻找插入点;for(j=9;ji;j-)/将元素向后移动一位;a
21、j=aj-1;ai=x; /空出位置,插入元素x;break; for(i=0;i10;i+) coutai ;2. 编写函数int ff(char *s),判断s所指字符串是否为“回文串”,即前后对称。如abcba为回文串,若是返回1,否则返回0,并在主程序中调用该函数,对输入的字符串进行判断。#include#includeint ff(char *s)int n,i; n=strlen(s); for(i=0;iss; if(ff(ss)coutYES!endl; else coutNO!endl;3. 编写一个函数 void strcp(char *s1,char *s2),将字符数组
22、s1中下标为偶数的元素复制到另一个字符数组s2中。在主程序中调用该函数,输出这个字符串。#include/将字符串s1中下标为偶数的字符复制到s2中。void strcp(char *s1,char *s2)int i=0,j=0; for(i=0;s1i!=0;i+) if(i%2=0)s2j+=s1i; s2j=0;int main()char s=Nanchang!; char ss10; strcp(s,ss); coutsendl; coutssendl;return 0;4. 输入一行字符,统计其中字母,数字,空格与其他字符的个数。#includeint main()char s1
23、00; int B=0,L=0,D=0,S=0,T=0,i; cin.getline(s,100,n); for(i=0;si!=0;i+) if(si=A&si=a&si=0&si=9)D+; else if(si= ) S+;else T+; cout大写字符个数:Bendl; cout小写字符个数:Lendl; cout数字字符个数:Dendl; cout空格字符个数:Sendl; cout其他字符个数:Tendl; return 0;第九次作业1、编写一个程序,采用类计算n! ,并输出10!的值.#includeclass JSpublic:JS(int a)/构造函数;n=a;int
24、 fac()/计算N的阶乘;int i,p=1; for(i=1;in;i+) p=p*i; return p;private:int n;int main()JS obj(10);/定义对象; int s; s=obj.fac();/调用对象的方法计算阶乘; coutsendl; return 0;2、定义并实现一个矩形类,有长宽两个属性,定义一个构造函数初始化对象,用成员函数GetS()、GetL分别计算其面积与周长。#includeclass Rectpublic:Rect(int x,int y)/定义构造函数用于初始化对象;a=x;b=y;int GetS()/计算面积的成员函数;r
25、eturn a*b;int GetL()/计算周长的成员函数;return 2*(a+b);private:int a,b; /矩形的长与宽;;int main()Rect obj(5,2);/定义一个矩形对象; int S,L; S=obj.GetS();/调用矩形对象的成员函数计算面积; L=obj.GetL();/调用矩形对象的成员函数计算周长; coutS=Sendl; coutL=Lendl; return 0;3、定义一个Circle类,有数据成员R (半径),定义构造函数,用成员函数GetArea()计算面积,构造一个Circle对象进行测试。#includeclass Circ
26、lepublic:Circle(float r) /构造函数R=r;double GetArea()return PI*R*R;private:float R;/圆的半径;;void main()Circle C(2.0); double s; s=C.GetArea(); coutS=sendl;4、定义一个圆柱体类,有数据成员底面半径R与高H,用成员函数GetV计算其体积,定义构造函数,在主函数中定义一个对象进行测试。#includeclass Cylinderpublic:Cylinder(float r,float h)/构造函数R=r;H=h;double GetV()/计算圆柱体的
27、体积;return PI*R*R*H;private:float R,H;/声明圆柱体的半径与高;;void main()Cylinder yzt(3,5); double v; v=yzt.GetV(); cout圆柱体的体积为=vendl;5、设计一个点类Point,有两个数据成员x与y,定义一个构造函数初始化对象。为这个点类增加一个友元函数,通过该友元函数计算两个点之间的距离。#include#includeclass Point public:Point(float a,float b)/构造函数;x=a;y=b;friend double js(Point A,Point B);/声
28、明友元函数;private:float x,y;/声明点的坐标;;/计算两点之间的距离double js(Point A,Point B)double xx=A.x-B.x; double yy=A.y-B.y; double s=sqrt(xx*xx+yy*yy); return s;void main()Point A(2,5),B(6,9);/定义两个点对象; double ss; ss=js(A,B); cout距离=ssendl;期中考试1、输入三角形的三条边a,b,c,利用海伦公式计算三角形的面积。若 p=(a+b+c)/2 , 则S= 。要求判断a,b,c能否组成一个三角形。#i
29、nclude#includevoid main()float a,b,c,p,area; cout请输入三角形的三条边:abc; if(a+bc)&(a+cb)&(b+ca) p=(a+b+c)/2.0; area=sqrt(p*(p-a)*(p-b)*(p-c); coutS=areaendl; else cout不能构成三角形!n; 2、输入一个日期,计算该日期是该年的第几天。#includeint main()int a12=31,28,31,30,31,30,31,31,30,31,30,31; int year,month,day,i,s=0; coutyearmonthday; f
30、or(i=0;i2)&(year%4=0&year%100!=0)|(year%400=0) s=s+1; cout该日期为该年的第s天endl; return 0;3、编写一个判断素数的函数,函数原型为:int isprime(int n),若参数n为素数,函数的返回值为1,否则返回值为0;要求在主函数中调用该函数,判断101-300之间有多少个素数,并输出所有的素数。#includeint isprime(int n)/判断素数的函数int i; for(i=2;in;i+) if(n%i=0)return 0; return 1;int main()int i,n=0; for(i=10
31、1;i300;i+) if(isprime(i)couti ;n+; coutn素数的个数=nendl; return 0;4、一个数如果恰好等于它的因子之与,这个数就称为“完数”。如6=1+2+3,请编写程序,找出1000以内所有的完数。#includeint main()int i,j,s; for(i=2;i1000;i+) s=0;for(j=1;ji;j+)if(i%j=0)s+=j;if(s=i) couti:; for(j=1;ji;j+) if(i%j=0)coutj,; coutendl; return 0;5、用递归法编写一个计算阶乘的函数,函数原型为:long Fac(int n),在主函数中调用该函数计算组合数 ,其中m,n的值从键盘输入。#includelong Fac(int n)if(n=0|n=1)return 1; else return n*Fac(n-1);int main()int m,n,cc; coutn):; cinmn; cc=Fac(m)/(Fac(n)*Fac(m-n); cout组合数为:ccendl; return 0;
限制150内