C上机作业答案Word文档格式.docx
《C上机作业答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《C上机作业答案Word文档格式.docx(27页珍藏版)》请在冰豆网上搜索。
(a+c>
b))
{p=(a+b+c)/2.0;
area=sqrt(p*(p-a)*(p-b)*(p-c));
area="
area<
}
elsecout<
inputerror!
4.输入a,b,c的值,求一元二次方程:
的解。
{floata,b,c,p,x1,x2;
p=b*b-4*a*c;
if(p>
=0)
{x1=(-b+sqrt(p))/(2*a);
x2=(-b-sqrt(p))/(2*a);
x1="
x1<
x2="
x2<
NOrealroot!
运行结果
第二章作业答案
1.输入一个整数,计算该数的阶乘。
{inti,n,p=1;
n;
for(i=1;
i<
=n;
i++)
p=p*i;
n<
!
="
p<
2.连续输入若干个整数,输入0结束。
统计其正整数的个数,并计算其中正整数的总和、平均值并输出。
{inta,n=0;
floatavg,sum=0;
do
{cin>
a;
if(a>
0){n++;
sum+=a;
}while(a!
=0);
avg=sum/n;
n="
avg="
avg<
sum="
sum<
3.输出所有的水仙花数。
所谓“水仙花数”是一个三位数,其各位数字的立方和等于该数本身。
如153=13+53+33
程序代码:
{inta,b,c,n;
for(n=100;
1000;
n++)
{a=n%10;
b=n%100/10;
c=n/100;
if(n==a*a*a+b*b*b+c*c*c)
cout<
第3章作业答案
1.
编写程序输出两个数的最大公约数和最小公倍数。
2.
计算100---300之内所有素数的和。
3.
计算s=1-1/3+1/5-1/7+…1/99
4.N是一个四位数,它的9倍恰好是其反序数(例如:
123的反序数是321),求N的值。
第一题:
//用辗转相除法求最大公约数;
{intm,n,r,temp;
m>
temp=m*n;
while(r=m%n)
{m=n;
n=r;
最大公约数="
最小公倍数="
temp/n<
第二题:
{intn,i,s=0;
300;
{for(i=2;
if(n%i==0)break;
if(i==n)s+=n;
s="
s<
第三题:
{intn=1;
floats=0,f=1,p;
for(n=1;
100;
n+=2)
{p=f/n;
s=s+p;
f=-f;
第四题:
{intn,a,b,c,d;
for(n=1000;
10000;
{a=n/1000;
//千位
b=n%1000/100;
//百位
c=n%100/10;
//十位
d=n%10;
//个位
if(9*n==d*1000+c*100+b*10+a)
第四次作业答案
编写两个函数,分别计算两个整数的最大公约数和最小公倍数,并在主函数中调用该函数,并输出结果。
编写一个判断素数的函数,函数原型为:
intisprime(intn),在主函数中调用该函数,计算100—1000之间所有素数的和。
编写一个函数,f(n)=,并在主函数中输出f(10)的值。
(说明自然对数ln的函数原型为doublelog(floatx).
4.
编写一个计算阶乘的函数,函数原型为intfac(intn),在主函数中调用该函数,计算:
S=M!
+N!
.
//求最大公约数
intgcd(intm,intn)
{intr;
{
m=n;
n=r;
returnn;
//求最小公倍数
intlcd(intm,intn)
{returnm*n/gcd(m,n);
{inta,b;
b;
最大公约数为:
gcd(a,b)<
最小公倍数为:
lcd(a,b)<
//判断素数的函数,若n为素数,函数返回1,否则返回0;
intisprime(intn)
{inti;
for(i=2;
if(n%i==0)return0;
return1;
{inti,s=0;
for(i=100;
if(isprime(i))s=s+i;
doublef(intn)
doubles=0;
s=s+log(i);
returnsqrt(s);
{
f(10)<
//用递归编写计算阶乘的函数
intfac(intn)
{if(n==0||n==1)return1;
elsereturnn*fac(n-1);
{intM,N,s;
M>
N;
s=fac(M)+fac(N);
M<
+"
N<
第五章
第六次上机内容
1、
定义一个3行4列的数组,计算所有数据的平均值,并输出最大值和最小值和它的行号和列号。
2、
编写程序,实现一个一维数组的反序存放。
3、
用选择排序法实现10整数由小到大排序。
4、
用冒泡法实现10整数由大到小排序。
iostream.h>
{inta[3][4]={{12,6,25,10},{14,9,20,16},{30,22,5,21}};
inti,j,m,n,k,l,max,min;
max=min=a[0][0];
m=n=0;
for(i=0;
3;
for(j=0;
j<
4;
j++)
if(a[i][j]>
max){max=a[i][j];
m=i;
n=j;
elseif(a[i][j]<
min){min=a[i][j];
k=i;
l=j;
max="
max<
行号:
m<
列号:
min="
min<
k<
l<
#defineN6
{inta[N]={12,10,20,21,30,25};
inti,t;
N/2;
{t=a[i];
a[i]=a[N-i-1];
a[N-i-1]=t;
a[i]<
"
#defineN10
//选择排序
{inta[N]={30,21,15,38,25,35,18,28,45,20};
inti,j,t,k;
N-1;
{k=i;
for(j=i+1;
if(a[j]<
a[k])k=j;
if(k!
=i){t=a[i];
a[i]=a[k];
a[k]=t;
//冒泡排序,由大到小排序
{k=0;
N-i-1;
a[j+1])
{t=a[j];
a[j]=a[j+1];
a[j+1]=t;
k=1;
if(k==0)break;
第七次作业
1.定义一个二维数组inta[3][4],分别用指针法和下标法输出其内容。
2.用数组作为函数参数,并通过函数调用还回最大值,最小值和平均值。
函数原型维:
voidfun(inta[10],int*max,int*min,float*avg)
3.编写一个函数voidfun(inta[],intn),将a[]中的n个元素按反序存放,在main函数中调用该函数,分别用数组和指针作为实参。
4.用冒泡法或选择法编写一个排序的函数,然后在主程序中调用该函数实现10个整数的排序。
第一题
stdio.h>
{inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
inti,j;
int*p;
int(*pp)[4];
//用下标法实现;
{for(j=0;
printf("
%3d"
a[i][j]);
printf("
\n"
);
//用列指针实现;
p=&
a[0][0];
12;
*(p+i));
//用行指针实现;
pp=a;
*(*(pp+i)+j));
运行结果截图:
voidfun(inta[10],int*max,int*min,float*avg)
*max=*min=a[0];
10;
{if(*max<
a[i])*max=a[i];
elseif(*min>
a[i])*min=a[i];
s+=a[i];
*avg=s/10.0;
{inta[10]={10,21,8,22,40,23,32,26,30,12};
intmax,min;
floatavg;
fun(a,&
max,&
min,&
avg);
max=%d\n"
max);
min=%d\n"
min);
avg=%6.2f\n"
avg);
运行结果截屏:
voidfun(inta[],intn)
{inti,t;
n/2;
a[i]=a[n-i-1];
a[n-i-1]=t;
{inta[6]={20,12,6,21,29,15};
int*p,i;
//用数组作为函数的实参;
原先数组的序列:
6;
%4d"
a[i]);
用数组作为实参,交换后的序列:
fun(a,6);
//用指针作为函数的实参
用指向数组的指针作为实参,再次交换后的序列:
p=a;
fun(p,6);
//用选择法编写数组排序函数,按从小到大顺序排序
voidsort1(inta[],intn)
{inti,j,k,t;
n-1;
if(a[k]>
a[j])k=j;
if(k!
//用冒泡法排序,按从小到大顺序排序
voidsort2(inta[],intn)
{inti,j,t,f;
{f=1;
n-i-1;
if(a[j]>
f=0;
if(f==1)break;
{inta[10]={40,23,26,20,35,55,12,43,37,45};
inti;
printf("
排序前的序列:
for(i=0;
选择排序后的序列:
sort1(a,10);
\n冒泡排序后的序列:
sort2(a,10);
第八次作业
设数组a[N]中已经有n个数并已按从小到大顺序排序。
要求输入一个数x,将其插入到数组中,使数组仍然有序。
{inta[10]={4,6,8,10,20};
inti,j,x;
x;
9;
{if(a[i]>
x)//寻找插入点;
for(j=9;
j>
i;
j--)//将元素向后移动一位;
a[j]=a[j-1];
a[i]=x;
//空出位置,插入元素x;
break;
编写函数intff(char*s),判断s所指字符串是否为“回文串”,即前后对称。
如abcba为回文串,若是返回1,否则返回0,并在主程序中调用该函数,对输入的字符串进行判断。
string.h>
intff(char*s)
{intn,i;
n=strlen(s);
if(s[i]!
=s[n-i-1])return0;
{charss[20];
ss;
if(ff(ss))cout<
YES!
NO!
编写一个函数voidstrcp(char*s1,char*s2),将字符数组s1中下标为偶数的元素复制到另一个字符数组s2中。
在主程序中调用该函数,输出这个字符串。
//将字符串s1中下标为偶数的字符复制到s2中。
voidstrcp(char*s1,char*s2)
{inti=0,j=0;
s1[i]!
='
\0'
if(i%2==0)s2[j++]=s1[i];
s2[j]='
intmain()
{chars[]="
Nanchang!
charss[10];
strcp(s,ss);
ss<
return0;
输入一行字符,统计其中字母,数字,空格和其他字符的个数。
{chars[100];
intB=0,L=0,D=0,S=0,T=0,i;
cin.getline(s,100,'
\n'
s[i]!
if(s[i]>
A'
s[i]<
Z'
)B++;
elseif(s[i]>
a'
z'
)L++;
elseif(s[i]>
0'
9'
)D++;
elseif(s[i]=='
'
)S++;
elseT++;
大写字符个数:
B<
小写字符个数:
L<
数字字符个数:
D<
空格字符个数:
S<
其他字符个数:
T<
return0;
第九次作业
1、编写一个程序,采用类计算n!
并输出10!
的值.
classJS
{public:
JS(inta)//构造函数;
{n=a;
intfac()//计算N的阶乘;
{inti,p=1;
p=p*i;
returnp;
private:
intn;
};
{JSobj(10);
//定义对象;
ints;
s=obj.fac();
//调用对象的方法计算阶乘;
2、定义并实现一个矩形类,有长宽两个属性,定义一个构造函数初始化对象,用成员函数GetS()、GetL分别计算其