北航c语言11所有作业题目及答案文档格式.docx
《北航c语言11所有作业题目及答案文档格式.docx》由会员分享,可在线阅读,更多相关《北航c语言11所有作业题目及答案文档格式.docx(30页珍藏版)》请在冰点文库上搜索。
5.Determinedatatypesappropriateforthefollowingdata:
a.theaverageoffourgradesfloat
b.thenumberofdaysinamonthunsignedshort/short
c.thelengthoftheGoldenGateBridge4,200feet(1,280.16metres)int
d.thenumbersinastatelotteryunsignedlong
e.thedistancefrombeijingtohainan.long/float
f.thesingle-characterprefixthatspecifiesacomponenttypechar
4.
1.Giventhedeclarationinta=10,b=20,c;
Determinewhethereachofthefollowingstatementsaretrueorfalse.
A)Thestatementa=+10;
isvalid.T
B)Theexpressiona+4/6*6/2evaluatesto12.Fa=10
C)Theexpressionb+3/2*2/3evaluatesto20.T
D)Thestatementa+=b;
giventhevalue30toa.T
E)Thestatementa=1/b;
assignsthevalue0.05toa.Fa=0
2.Assumingfloatx=2.5,y=5.8;
inta=7;
calculatetheexpressionx+a%3*(int)(x+y)%2/4
2.500000
3.Determinethevalueofthefollowinglogicalexpressionsifa=5,b=10andc=-6
(a)a>
b&
&
a<
c0
(b)a<
a>
c1
(c)a==c||b>
a1
(d)b>
15&
c<
0||a>
01
(e)a/2.0==0.0&
b/2.0!
=0.0||c<
0.01
4.Giventhevaluesofthevariablesx,yandz,writeaprogramtorotatetheirvaluessuchthatxhasthevalueofy,yhasthevalueofz,andzhasthevalueofx.
#include<
stdio.h>
{
intx,y,z,t;
scanf("
%d%d%d"
&
x,&
y,&
z);
t=x;
x=y;
y=z;
z=t;
printf("
x=%d,y=%d,z=%d\n"
x,y,z);
5.P462-3
inthtoi(chars[])
inti,n;
i=0;
n=0;
if(s[i]==’0’)/*跳过0x或0X*/
{
i++;
if(s[i]==’x’||s[i]==’X’)i++;
}
for(;
s[i]!
='
\0'
;
i++)
if(s[i]>
0'
s[i]<
9'
)
n=n*16+s[i]-'
a'
f'
+10;
A'
F'
return(n);
}
6.Showtheoutputproducedbythefollowingprogramfragment.
inti=10,j=5;
printf("
%d"
i++-++j);
%d%d"
i,j)
4116
5.
1.Thefollowingisasegmentofaprogram:
x=1;
y=1;
if(n>
0)
x=x+1;
y=y-1;
printf(“%d%d”,x,y);
whatwillbethevaluesofxandyifnassumesavalueof(a)1and(b)0.
(a)n=1,x=2,y=0
(b)n=0x=1y=0
2.Writeaprogramthataskstheuserfora24-hourtime,thendisplaysthetimein12-hourform:
Entera24-hourtime:
21:
11
Equivalent12-hourtime:
9:
11PM
Becarefulnottodisplay12:
00as0:
00
voidmain()
inthour,minute;
do
printf("
pleaseentera24-hourtime(hr:
min):
"
);
scanf("
%d:
%d"
hour,&
minute);
}while(hour>
24||hour<
0||minute>
=60||minute<
0);
if(hour==24)
printf("
Equivent12-hourtime:
%2d:
%02dAM\n"
hour-24,minute);
elseif(hour>
=13)
%02dPM\n"
hour-12,minute);
elseif(hour==12)
hour,minute);
else
3.Writeaforstatementtoprinteachofthefollowingsequencesofintegers:
(a)1,2,4,8,16,32for(i=1;
i<
=32;
i*=2)printf(“%d,“,i);
(b)1,3,9,27,81,243for(i=1;
=243;
i*=3)printf(“%d,“,i);
(c)-4,-2,0,2,4for(i=-4;
=4;
i+=2)printf(“%d,“,i);
4.Changethefollowingforloopstowhileloops:
(a)for(m=1;
m<
10;
m=m+1)
printf(“%d,”,m);
m=1;
while(m<
10)
m=m+1;
(b)for(;
scanf(“%d”,&
m)!
=1;
while(scanf(“%d”,&
=1)
printf(“%d,”,m);
5.求1!
+2!
+3!
+4!
+…+20!
算法一:
用累加算法,累加项为term=term*i;
;
i=1,2,…10。
term初值为1,使用单重循环完成。
floatterm=1,sum=0;
inti;
for(i=1;
i<
=20;
i++)
term=term*i;
sum=sum+term;
1!
+2!
+...+20!
=%e\n"
sum);
算法二:
用内层循环求阶乘,外层循环控制累加的项数。
floatterm,sum=0;
inti,j;
term=1;
for(j=1;
j<
=i;
j++)
{
term=term*j;
+…+10!
=%e\n"
=2.56133e+18
6.
1.Writeafunctionthattakesthreeintegersasparametersandreturnstheminimumofthethree.
intmin(inta,intb,intc)
intmin;
min=a;
if(b<
min)min=b;
if(c<
min)min=c;
returnmin
OR
min=a<
b?
a:
b;
min=min<
c?
min:
c;
returnmin
2.求一元二次方程ax2+bx+c=0的根,用3个函数分别求当b2-4ac大于0、等于0和小于0时的根并输出结果。
从主函数输入a、b、c的值。
#include"
stdio.h"
math.h"
voidgreater_than_zero(floata,floatb,floatdelta)
floatx1,x2;
x1=(-b+sqrt(delta))/(2*a);
x2=(-b-sqrt(delta))/(2*a);
X1=%.2f\n\X2=%.2f\n"
x1,x2);
voidequal_to_zero(floata,floatb)
floatx;
x=-b/(2*a);
X1=X2=%.2f\n"
x);
voidsmaller_than_zero(floata,floatb,floatdelta)
floatp,q;
p=-b/(2*a);
q=sqrt(-delta)/(2*a);
X1=%.2f+%.2fi\n\X2=%.2f-%.2fi\n"
p,q,p,q);
floata,b,c,delta;
%f%f%f"
a,&
b,&
c);
theequationis:
%.2f*x*x+%.2f*x+%.2f=0\n"
a,b,c);
delta=b*b-4*a*c;
therootsare:
\n"
if(delta>
greater_than_zero(a,b,delta);
elseif(fabs(delta)<
1e-4)//实数计算有误差,不能写成delta==0
equal_to_zero(a,b);
else
smaller_than_zero(a,b,delta);
以下错误:
//x1,x2局部变量,仅在定义它的函数(即函数greater_than_zero)范围内有效
printf("
//x1,x2未定义
…
7.
1.Writethefollowingfunction’sprototype:
functionname
returntype
inputdatatype
prototype:
cubic
double
Twoinputofdoublevalues
doublecubic(double,double)
delete_blanks
none
voiddelete_blanks()
random
integer
intrandom()
2.设计一个函数,用来判断一个整数是否为素数。
设计一个函数,用来判断一个整数是否为素数。
方法分析:
按照素数的定义,可以用2到number-1的所有整数去除number,只要有能整除的,便说明不是素数。
不过对任意值的number,比其平方根大的整数都不可能被整除,所以程序如下
math.h>
/*
函数功能:
判断参数是否是素数
函数入口参数:
整型数,要求为正整数
函数返回值:
非0值表示是素数,否则不是素数
*/
intIsPrimeNumber(intnumber)
if(number<
=1)/*负数、0和1都不是素数*/
return0;
for(i=2;
i<
=sqrt(number);
if((number%i)==0)/*被整除,不是素数*/
return0;
return1;
P714-1/*strindex:
returnrightmostindexoftins,-1ifnone*/
intstrindex(chars[],chart[])
inti,j,k,pos;
pos=-1;
for(i=0;
for(j=i,k=0;
t[k]!
s[j]==t[k];
j++,k++)
;
if(k>
0&
t[k]=='
pos=i;
returnpos;
#include<
string.h>
inti,j,k;
for(i=strlen(s)-strlen(t);
i>
=0;
i--)
returni;
return-1;
8.
1.P734-2
ctype.h>
/*atof:
convertstringstodouble*/
doubleatof(chars[])
doubleval,power;
intexp,i,sign;
for(i=0;
isspace(s[i]);
i++)/*skipwhitespace*/
sign=(s[i]=='
-'
)?
-1:
1;
if(s[i]=='
+'
||s[i]=='
i++;
for(val=0.0;
isdigit(s[i]);
val=10.0*val+(s[i]-'
.'
for(power=1.0;
i++){
power*=10;
val=sign*val/power;
if(s[i]==’e’||s[i]==’E’
sign=(s[++i]==’-‘)?
-1:
1;
if(s[i]==’+’||s[i]==’-‘)
i++;
for(exp=0;
isdigit(s[i]);
exp=10*exp+(s[i]-‘0’);
if(sign==1)
while(exp--)0)/*positiveexponent*/
val*=10;
while(exp--)0)/*negativeexponent*/
val/=10;
returnval;
2.牛顿迭代法求方程的根,方程为ax3+bx2+cx+d=0,系数a,b,c,d的值依次为1,2,3,4,由主函数输入。
求x在1附近的一个实根。
求出根后由主函数输出。
牛顿迭代法又称牛顿切线法,是比二分法有更高的收敛速度的近似计算方法。
它的基本思想如图所示。
•图中设xk是方程f(x)=0的精确解x*附近的一个猜测解,过点Pk(xk,f(xk))作f(x)的切线。
该切线方程为:
y=f(xk)+f′(xk)(x-xk)
它与x轴的交点是方程
f(xk)+f′(xk)(x-xk)=0
的解,为
xk+1=xk-f(xk)/f′(xk)
•这就是牛顿迭代法的迭代公式。
可以证明,若猜测解xk取在单根x*附近,则它恒收敛。
这样,经过有限次迭代后,便可以求得符合误差要求的近似根。
•#include<
•floatnewton(floata,floatb,floatc,floatd)
•{
•floatx=1,x0,f,f1;
•do
•{
•x0=x;
•f=a*x0*x0*x0+b*x0*x0+c*x0+d;
/*f=((a*x0+b)*x0+c)*x0+d;
•f1=3*a*x0*x0+2*b*x0+c*;
•x=x0-f/f1;
•}while(fabs(x-x0)>
=1e-6);
•returnx;
•}
3.某人摘桃子,卖掉一半,又吃一只;
第二天卖掉剩下的一半,又吃一只;
第三天、第四天、第五天都如此办理,第六天一看,发现就剩下一只桃子了。
编写一递归程序,求此人共摘了多少只桃子。
N(n)=N(n-1)-(N(n-1)/2+1)
N(n-1)=(N(n)+1)*2
intfunc(intn)
{intf;
if(n<
=0)printf("
dataerror\n"
elseif(n==1)f=1;
elsef=(func(n-1)+1)*2;
returnf;
intn,num;
n);
num=func(n);
totalnumber=%d\n"
num);
6
totalnumber=94
或
if(n==6)f=1;
elsef=(func(n+1)+1)*2;
num=func
(1);
stdio