C语言程序设计教程课后习题答案Word格式文档下载.docx
《C语言程序设计教程课后习题答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教程课后习题答案Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。
no\n"
7.
#include<
intyear,month;
printf("
pleaseinputtheyearandmonth:
"
%d%d"
year,&
month);
switch(month)
{
case1:
case3:
case5:
case7:
case8:
case10:
case12:
printf("
thismonthhave31days."
break;
case4:
case6:
case9:
case11:
thismonthhave30days."
case2:
if(year%4==0&
year%100!
=0||year%400==0)
{
printf("
thismonthhave29days."
break;
}
else
{
thismonthhave28days."
}
8.
floatmoney;
intyear;
\npleaseinputthemoneyandtheyear:
%f%d"
money,&
year);
if(year==1)money+=money**12*year;
if(year==2)money+=money**12*year;
if(year==3||year==4)money+=money**12*year;
if(year>
=5&
year<
=7)money+=money**12*year;
=8)money+=money**12*year;
themoneyis:
%f"
money);
第3章
1
#include"
{floatx[10],sum=0;
inti=0;
pleaseinput10numbers(-10e6<
10e6)\n"
while(i<
10)
{scanf("
x[i]);
sum=sum+1/x[i];
i=i+1;
thesumof10numbersis%.2f\n"
sum);
2
#include"
{intx[100],sum=0,aver,i=0;
pleaseinputnumbersuntil0\n"
while(x[i]!
=0)
{sum=sum+x[i];
thesumis%d\n"
theaverageis%.2f\n"
float(sum)/i);
3
{inti=1,j,f;
longints=0;
=10)
{for(f=1,j=1;
j<
=i;
j++)
f=f*j;
s=s+pow(-1,i-1)*f;
s=%ld\n"
s);
4
{inti=0;
floats=;
while(2*i+1<
=101)
{s=s+pow(-1,i)/float(2*i+1);
s=%f\n"
5
#include"
{inti,j,k,n=0;
for(i=1;
i<
=9;
i++)
for(j=0;
for(k=0;
k<
k++)
if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)
the%d:
%d\n"
++n,i*100+j*10+k);
theallis%d.\n"
n--);
6
{intn,i,j;
pleaseinputn:
n);
for(i=0;
n;
{for(j=0;
*"
\n"
7
{chara[81];
inti,j=0,k=0,m=0;
pleaseinputa$(length<
=80)\n"
(a[i]=getchar())!
='
\n'
;
{if(a[i]>
=65&
a[i]<
=90)
j++;
elseif(a[i]==32)
k++;
elsem++;
theupperletteris%d\n"
j);
theblankis%d\n"
k);
theotheris%d\n"
m);
8
{inti,j,k,m=0;
=20;
=50;
=100;
if(i*5+j*2+k==100)
the%dwagis1:
%d,2:
%d,5:
++m,k,j,i);
thewagsis%d\n"
m--);
9
=3;
=6;
if(i+j+k==8)
the%dwagiswhite:
%d,red:
%d,black:
++m,i,j,k);
10
{longintn;
inti,j,k;
pleaseinpurn:
%ld"
if(n%2==1||n<
=1)
{printf("
theinputiserror.\n"
return
(1);
for(i=2;
=n/2;
{for(j=2;
i;
if(i/j*j==i)
break;
if(j==i)
{for(k=2;
n-i;
if((n-i)/k*k==(n-i))
if(k==n-i)
%ld=%d+%d\n"
n,i,n-i);
11
{inti,j,k,m;
for(m=0;
m<
m++)
if((i*1000+j*100+k*10+m)*9==(i+j*10+k*100+m*1000))
thenumberis:
i*1000+j*100+k*10+m);
第4章
1-5ABDCB6-10BCBCA11-13ABA
14
floata1,b1,a2,b2,re1,im1,re2,im2,re3,im3;
Pleaseinputthefirstnumber:
%f%f"
a1,&
b1);
Pleaseinputthesecondnumber:
a2,&
b2);
re1=a1+a2;
im1=b1+b2;
(%f+j%f)+(%f+j%f)=%f+j%f\n"
a1,b1,a2,b2,re1,im1);
re2=a1-a2;
im2=b1-b2;
(%f+j%f)-(%f+j%f)=%f+j%f\n"
a1,b1,a2,b2,re2,im2);
re3=a1*a2-b1*b2;
im3=a1*b2+a2*b1;
(%f+j%f)*(%f+j%f)=%f+j%f\n"
a1,b1,a2,b2,re3,im3);
第5章
1-5CACCD6-7DA
8
charstr[100];
intnum1=0,num2=0,i=0;
%s"
str);
while(str[i]!
\0'
)
if(str[i]>
A'
str[i]<
Z'
||str[i]>
a'
z'
)
num1++;
elseif(str[i]>
0'
9'
num2++;
i++;
num1=%d,num2=%d"
num1,num2);
9笔者在程序中直接给数组元素赋了值,读者可以修改为用scanf函数读入数值;
另外,还可以用第7章宏定义的方法设定数组的长度,从而实现对元素个数不同的数组进行排序。
inta[5]={2,4,1,3,0},i,j,temp;
=4;
%d,"
a[i]);
for(j=1;
for(i=j;
if(a[i]<
a[j-1])
temp=a[j-1];
a[j-1]=a[i];
a[i]=temp;
第6章
1-5AADBA6C
7024681012141618
024681012141618
8a+b=9
95+4+1=10
10+4+2=16
20+4+3=27
加密:
charstring[100],i=0,number=0;
string);
while(string[i++]!
number++;
fun1(string,number);
fun1(charstr[],intnum)
inti;
=num;
V'
v'
5'
str[i]+=4;
'
str[i]-=22;
str[i]-=6;
解密
fun2(string,number);
fun2(charstr[],intnum)
E'
e'
4'
str[i]-=4;
str[i]+=22;
str[i]+=6;
第8章
一、下列语句是否合法
语句:
int*p=&
x,x=13;
点评:
不合法,因为x变量没有定义。
在执行int*p=&
x时,x变量的定义在后面。
参考:
intx=13,*p=&
x;
x=13;
x=13时,x变量没有定义。
intx=13,*p;
p=&
intx=13,*p=x;
不合法,不能把x变量的值赋給指针p。
应该把变量x的地址值赋給指针p。
inty[5]={1,2,3,4,5},*p=y[3];
不合法,不能把数组元素y[3]的值赋給指针p,应该把数组元素y[3]的地址值赋給指针p。
inty[5]={1,2,3,4,5},*p;
y[3];
int*p=y,y[5]={1,2,3,4,5};
不合法,因为数组y没有定义。
inty[5]={1,2,3,4,5},*p;
p=y;
inty[5]={1,2,3,4,5},*p=&
y;
不合法,不能把数组y的地址值赋給指针p。
数组名y本身是数组y的地址常量值。
或inty[5]={1,2,3,4,5},*p;
y[0];
int*c=&
ch,ch="
HelloWorld"
不合法,ch变量没有定义,字符串"
不能赋給变量ch。
char*ch="
HelloWorld!
或char*ch;
ch="
charch[12]="
*c=ch;
合法。
思考:
HelloWorld!
!
该语句错误,字符个数超出数组ch定义的宽度。
char*c=ch[12]="
不合法,数组ch没有定义。
数组ch没有第12个元素。
char*c,ch[12]="
c=ch;
char*c,c='
X'
c=&
c;
不合法,不能把常量'
的值赋給指针,不能把指针c的地址值赋給指针c自己。
char*c,ch;
ch='
ch;
二、综合练习题参考答案
1.将一字符串复制到另一字符串中。
#include<
voidmain()
{charstr1[128],str2[128]={"
WelcometoCLanguage"
};
char*cp1,*cp2;
cp1=str1;
cp2=str2;
while(*cp1++=*cp2++);
puts(str1);
2.将一字符串与另一字符串相连接。
{charstr1[128]={"
Welcome"
},str2[128]={"
toCLanguage"
inti=0,n=0;
while(n++,str1[++i]!
=0);
cp1=str1+n;
3.将字符数组中大写字符改为小写字符,将小写字符改为大写字符。
char*cp1=str1;
while(*cp1)
{if(*cp1>
='
&
*cp1<
*cp1=*cp1+32;
elseif(*cp1>
*cp1=*cp1-32;
else
*cp1=*cp1;
cp1++;
4.从一字符串中取出部分字符串复制到另一字符串中。
{charch[128],*cp,str[128],*sp;
intb,n,l=0,i;
cp=ch;
sp=str;
gets(cp);
b,&
while(l++,*(ch+l)!
=0);
if(n<
l)
{for(i=0;
*(sp+i)=*(cp+b+i);
*(sp+i)='
puts(str);
else
printf("
无数据可以复制"
5.完成一整型数组的排序。
{intx[10],i,j,*p,t;
p=x;
for(i=0;
10;
x[i]=rand();
9;
for(j=0;
if(*(p+j)>
*(p+j+1))
{t=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=t;
%d\t"
*p++);
6.将一个字符串中的字符反序排列。
{charch[128],c,*cp1,*cp2;
inti,n=0;
gets(ch);
cp1=ch;
cp2=ch;
while(*cp2!
=0)
{n++;
cp2++;
cp2--;
n=n/2;
{c=*cp1;
*cp1=*cp2;
*cp2=c;
cp2--;
puts(ch);
7.编函数完成将一字符串中的字符全部改为大写。
voidcove(char*cp)
{while(*cp!
{if(*cp>
*cp<
*cp=*cp-32;
cp++;
{charch[128],*cp;
cp=ch;
cove(cp);
8.编函数完成从一字符串左边取若干字符复制到另一字符串中。
voidlm(char*lcp,char*bcp,intn)
{inti;
*(bcp+i)=*(lcp+i);
*(bcp+i)='
{charch[128],*cp,str[128];
intn,l=0;
{cp=ch;
lm(cp,str,n);
第9章
1
structdate
{intyear;
intmonth;
intday;
{structdatere;
intday[2][12]={{31,29,31,30,31,30,31,31,30,31,30,31},{31,28,31,30,31,30,31,31,30,31,30,31}};
inti,da