C语言习题答案Word文档下载推荐.docx
《C语言习题答案Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言习题答案Word文档下载推荐.docx(53页珍藏版)》请在冰豆网上搜索。
(2)a=3ㄩb=7x=8.5ㄩy=71.82c1=Aㄩc2=a?
3.编程题
(1)
intx,y;
%d%d"
x,&
y);
商数=%d,余数=%d"
x/y,x%y);
doublex,y,z,avg;
%lf%lf%lf"
y,&
z);
avg=(x+y+z)/3;
%.1f"
avg);
第4章
(1)~(10)CCAADCCABD
(1)①a>
0&
&
b>
0||a>
c>
0||b>
②a<
b||a<
c
③a>
5||-a>
5
④(a<
=0)&
((int)a)!
=a
⑤(a%b)!
=0
(2)①!
(x>
0)②1③!
=0&
x<
=5)
(3)3、2、2
(4)ch>
='
A'
ch<
Z'
ch=ch-32
(5)x<
=10&
x>
2x<
=2&
-1y=-1;
(6)a+b>
c&
a+c>
b&
b+c>
aa==b&
a==ca==b||a==c||b==c
(7)x<
0c=x/10y!
=-2
intx;
pleaseinputanumber:
%d"
x);
if(x%2==0)printf("
xisaevennumber"
elseprintf("
xisaoddnumber"
if(x>
-5&
x<
0){y=x;
y);
}
elseif(x==0){y=x-1;
}
elseif(x>
0&
10){y=x+1;
thenumberiserror"
(3)
{inta,m;
a);
switch(a/10)
{case0:
case1:
case2:
m=1;
break;
case3:
m=2;
case4:
m=3;
case5:
m=4;
default:
m=5;
m);
(4)
floatprice,tax;
pleaseinputthepriceofproduct:
price);
if(price>
=10000)tax=price*0.05;
elseif(price>
=5000)tax=price*0.03;
=1000)tax=price*0.02;
elsetax=0;
tax);
(5)
floatscore;
pleaseinputthescoreofstudent:
score);
if(score>
=85)printf("
VERYGOOD"
elseif(score>
=60)printf("
GOOD"
BAD"
(6)
#include<
main()
{
intx,y,z;
inputtwonumber:
if(x<
10||x>
99||y<
10||y>
99)
printf("
inputdataerror!
\n"
else
{z=(x/10)*1000+(y/10)*100+(x%10)*10+y%10;
%d\n"
z);
第5章
(1)d
(2)c(3)a(4)d(5)a(6)d(7)d(8)b(9)d(10)b
(11)c(12)a(13)d(14)d(15)c
(1)fahrcelsius=5.0/9*(fahr-32)fahr+=step
(2)5、4、6(3)3*i-2
(4)y--z*=x(5)8ㄩ5ㄩ2(6)j++i%j==0j>
=i(或j==i)
(7)sum<
ksum==kj-2(8)s=0p=1j<
=i
3.改错题
(1)第一处改正:
For改为for
第二处改正:
for(k=1;
k<
=4;
k++)或for(k=0;
4;
k++)
第三处改正:
ave=sum/4改为ave=sum/4.0
(2)第一处改正:
i++改为j++
m=100*i+10*j+k
(3)第一处改正:
temp=1
第二处改正:
temp>
=eps
第三处改正:
r*2
(4)第一处改正:
n
====
(5)第一处改正:
t=m/10改为t=m%10
t=0改为t==0
m=m%10改为m=/10
4.编程题
(1)分式累加和。
math.h>
ints;
floatn,t,sum;
t=1;
sum=0;
n=1;
s=1.0;
while(n<
=100)
{
sum=sum+t;
n=n+1;
s=-s;
t=s/n;
sum=%10.6f\n"
sum);
(2)1~10的阶乘
inti;
longintn=1;
for(i=1;
i<
=10;
i++)
n=n*i;
printf(i%5==0?
%2d!
=%-10ld\n"
:
=%-10ld"
i,n);
(3)由*组成的等腰三角形
intn,i,j;
n);
=n;
{for(j=1;
j<
=n+i-1;
j++)
if(j<
=n-i)printf("
"
*"
(4)完数
intm,s,i;
for(m=2;
m<
1000;
m++)
{s=0;
m;
if((m%i)==0)s=s+i;
if(s==m)
{printf("
%ditsfactorsare"
if(m%i==0)printf("
%d,"
i);
(5)打靶
inth10,h7,h5;
for(h10=0;
h10<
=8;
h10++)
for(h7=0;
h7<
h7++)
for(h5=0;
h5<
h5++)
if(h10+h7+h5==8&
h10*10+h7*7+h5*5==53)
printf("
h10=%d\th7=%d\th5=%d\n"
h10,h7,h5);
(6)猴子吃桃子问题。
采取逆向思维的方法,从后往前推断。
//代码一
main()
intday,x1,x2;
day=9;
x2=1;
while(day>
0)
{x1=(x2+1)*2;
/*第一天的桃子数是第2天桃子数加1后的2倍*/
x2=x1;
day--;
}
printf("
thetotalis%d\n"
x1);
//代码二
inti=9,sum=1;
for(;
i>
0;
sum=2*(sum+1),i--);
printf("
sum=%d\n"
(7)牛顿迭代法
一般地:
f(x)=a0xn+a1xn-1+….+an-1x+an=0
求f(x)在X0附近的根
计算公式:
Xn+1=Xn-f(Xn)/f’(Xn)
精度:
ε=|Xn+1-Xn|<
1.0e-m,m=5。
所求的根:
满足精度的Xn
#include<
{floatx,x0,f,f1;
x=1.5;
//可改为scanf("
do
{x0=x;
f=2*x0*x0*x0-4*x0*x0+3*x0-6;
f1=6*x0*x0-8*x0+3;
//f的导数,即它的切线
x=x0-f/f1;
//切线与x轴的交点
}while(fabs(x-x0)>
=1e-5);
Therootis%8.7f\n"
x);
(8)利用辗除法,直到b为0为止
{intp,r,n,m,temp;
inputtwointegern,m:
%d,%d"
n,&
m);
if(n<
m)
{temp=n;
n=m;
m=temp;
p=n*m;
while(m!
=0)
{
r=n%m;
m=r;
greatestcommondivisoris:
n);
//最大公约数
leasecommonmultipleis:
p/n);
//最小公倍数
第6章
1234567890
CCDCCAADBD
2.写出程序的运行结果
(1)sum=6
(2)Max=9,row=1,col=0
(3)
10
210
3210
(4)-5
3、填空
(1)i=j=k=0i<
4&
j==5j<
5&
i==4
(2)i=1&
j-1
(3)n>
0n%10+0x30或n%10+'
0'
s[j]='
\0'
(4)s[i]、s[0],s[1]、str,s[1]、s[2],str
4.改错题
n=strlen(str)
str[j]=='
'
str[j]!
(2)第一处改正:
ch=str[i]
(j>
=0)&
(ch<
str[j])
(3)第一处改正:
s1[i]!
j=0;
(4)第一处改正:
cnt=0
if(!
(m%i))
cnt
5.编程题
VC提供的intrand(void)产生的实际上是0~32767(short型的最大数)的伪随机数,伪随机数总是以一个相同的数为起始值(种子),运用递推的原理来生成的。
所以,如果只使用rand函数,每次运行所形成的伪随机数列也相同,失去了随机意义。
但这样便于程序调试。
VC的rand()函数默认以1为种子。
要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了。
VC提供的voidsrand(unsignedintseed)将seed作为种子,如果以time函数值(即当前时间)作为种子数,那么就可以保证随机性了,因为两次调用rand函数的时间通常是不同的。
也可以使用srand函数来人为指定种子数。
若要产生a~b之间的一个随机数,则可用a+rand()%(b-a+1)表示。
若要0~1的小数,则可以先取得0~10的整数,然后均除以10即可得到随机到十分位的10个随机小数;
若要得到随机到百分位的随机小数,则需要先得到0~100的整数,然后均除以100,其它情况依此类推。
stdlib.h>
time.h>
inta[12],count=0,i;
srand((unsigned)time(NULL));
for(i=0;
12;
a[i]=5+rand()%11;
for(i=0;
%5d"
a[i]);
count++;
if(count%4==0)printf("
);
#defineN5
inta[N],max,min,i,sum=0,count=0;
floatav;
i<
N;
i++)
scanf("
a[i]);
max=min=a[0];
sum+=a[i];
if(a[i]>
max)max=a[i];
if(a[i]<
min)min=a[i];
av=(float)sum/5;
av)count++;
max:
%d\nmin:
%d\nav:
%f\ncount:
max,min,av,count);
intscore[30];
/*={61,62,63,64,65,66,67,68,69,70,
71,72,73,74,75,76,77,78,79,80,
81,85,89,90,33,44,55,91,92,93};
//不必赋初值,这是为调试程序方便*/
inti,count90=0,count80=0,count70=0,count60=0;
30;
intputNO.%dstudent'
sscore:
i+1);
score+i);
if(score[i]>
=90)
{
count90++;
count80++;
count70++;
count60++;
}
elseif(score[i]>
=80)
=70)
=60)
0~59:
%d\n60~69:
%d\n70~79:
%d\n80~89:
%d\n90~100:
30-count60,count60-count70,count70-count80,count80-count90,count90);
\n60orhigher:
%d\n70orhigher:
%d\n80orhigher:
%d\n90orhigher:
count60,count70,count80,count90);
1、
chara[45];
inti,j,k;
45;
i++)a[i]='
;
5;
for(j=0;
i;
a[9*i+j]='
for(k=0;
a[9*i+j+k]='
*'
j=0;
%c"
j++;
if(j%9==0)printf("
2、
chara[5][9];
9;
a[i][j]='
a[i][j+k]='
printf("
a[i][j]);
(5)
#defineN4
inti,j,a[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10};
\nTheoriginalarray:
for(j=0;
%2d"
a[i][j]=a[i][j]+a[j][i];
a[j][i]=0;
\nTheresultis:
第7章
123456789012345
DADBDCADACBDDBD
2.填空
(1)函数
(2)main函数(3)函数首部、函数体(4)形式参数、实际参数、实参、形参(5)常量、变量、表达式(6)函数定义时函数值、返回值
(7)max(max(a,b),c))、(x>
y?
x:
y)
(8)
******
######
(9)str[]=abdef
(10)low<
=high(high+low)/2
3.改错题
(1)第一处:
void改为int
第二处:
=n&
(n%i==0)改为i<
(n%i!
=0)或i<
n&
第三处:
n!
=i改为n==i
(2)第一处:
删除;
for(j=1;
j<
=50;
i++)改为for(j=1;
j++)
returni
(3)第一处:
doublefun(doubleb,x0)改为doublefun(doubleb,doublex0)
if(abs(x1-x0)>
=1e-6)改为if(fabs(x1-x0)>
=1e-6)
4、编程题
(1)
longact(longn)
if(n==1||n==0)return1;
returnn*act(n-1);
intn=3;
=%ld"
act(n));
#in