C语言程序设计教程课后习题答案.docx

上传人:b****7 文档编号:8732401 上传时间:2023-02-01 格式:DOCX 页数:30 大小:22.07KB
下载 相关 举报
C语言程序设计教程课后习题答案.docx_第1页
第1页 / 共30页
C语言程序设计教程课后习题答案.docx_第2页
第2页 / 共30页
C语言程序设计教程课后习题答案.docx_第3页
第3页 / 共30页
C语言程序设计教程课后习题答案.docx_第4页
第4页 / 共30页
C语言程序设计教程课后习题答案.docx_第5页
第5页 / 共30页
点击查看更多>>
下载资源
资源描述

C语言程序设计教程课后习题答案.docx

《C语言程序设计教程课后习题答案.docx》由会员分享,可在线阅读,更多相关《C语言程序设计教程课后习题答案.docx(30页珍藏版)》请在冰豆网上搜索。

C语言程序设计教程课后习题答案.docx

C语言程序设计教程课后习题答案

第1章

1-3CAB

4.c.obj.exe

5/**/

6;

7算法

8①中级语言:

C语言具有高级语言的先进思想又能直接对存储器进行操作,能进行位运算,能实现汇编语言的大部分功能,生成目标代码质量高,程序执行效率高。

②结构化语言:

C语言用函数作为程序模块,以实现程序的模块化,语言简洁、紧凑,具有结构化的特点。

③可移植性好:

C语言不包含依赖硬件的输入输出机制,使C语言本身不依赖于硬件系统,可移植性好。

9#include<>

main(){;}

10#include“”

main()

{

printf(“ThisismyfirstCProgram!

”);

}

第2章

1.yes

2.-3

3.2,1

4.1)a!

=b||a<=c2)x>=4||x<=-4

5.x>20&&x<30||x<-100

6.#include<>

main()

{

intx;

printf(“pleaseinputanintegar:

”);

scanf("%d",&x);

if(x%5==0&&x%7==0)printf("yes\n");

elseprintf("no\n");

}

7.

#include<>

main()

{

intyear,month;

printf("pleaseinputtheyearandmonth:

");

scanf("%d%d",&year,&month);

switch(month)

{

case1:

case3:

case5:

case7:

case8:

case10:

case12:

printf("thismonthhave31days.");

break;

case4:

case6:

case9:

case11:

printf("thismonthhave30days.");

break;

case2:

if(year%4==0&&year%100!

=0||year%400==0)

{

printf("thismonthhave29days.");

break;

}

else

{

printf("thismonthhave28days.");

break;

}

}

}

8.

#include<>

main()

{

floatmoney;

intyear;

printf("\npleaseinputthemoneyandtheyear:

");

scanf("%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;

if(year>=8)money+=money**12*year;

printf("themoneyis:

%f",money);

}

第3章

1

#include""

main()

{floatx[10],sum=0;

inti=0;

printf("pleaseinput10numbers(-10e6

while(i<10)

{scanf("%f",&x[i]);

sum=sum+1/x[i];

i=i+1;

}

printf("thesumof10numbersis%.2f\n",sum);

}

2

#include""

main()

{intx[100],sum=0,aver,i=0;

printf("pleaseinputnumbersuntil0\n");

scanf("%d",&x[i]);

while(x[i]!

=0)

{sum=sum+x[i];

i=i+1;

scanf("%d",&x[i]);

}

printf("thesumis%d\n",sum);

printf("theaverageis%.2f\n",float(sum)/i);

}

3

#include""

#include""

main()

{inti=1,j,f;

longints=0;

while(i<=10)

{for(f=1,j=1;j<=i;j++)

f=f*j;

s=s+pow(-1,i-1)*f;

i=i+1;

}

printf("s=%ld\n",s);

}

4

#include""

#include""

main()

{inti=0;

floats=;

while(2*i+1<=101)

{s=s+pow(-1,i)/float(2*i+1);

i=i+1;

}

printf("s=%f\n",s);

}

5

#include""

#include""

main()

{inti,j,k,n=0;

for(i=1;i<=9;i++)

for(j=0;j<=9;j++)

for(k=0;k<=9;k++)

if(i*100+j*10+k==i*i*i+j*j*j+k*k*k)

printf("the%d:

%d\n",++n,i*100+j*10+k);

printf("theallis%d.\n",n--);

}

6

#include""

main()

{intn,i,j;

printf("pleaseinputn:

");

scanf("%d",&n);

for(i=0;i

{for(j=0;j

printf("*");

printf("\n");

}

}

7

#include""

main()

{chara[81];

inti,j=0,k=0,m=0;

printf("pleaseinputa$(length<=80)\n");

for(i=0;(a[i]=getchar())!

='\n';i++)

{if(a[i]>=65&&a[i]<=90)

j++;

elseif(a[i]==32)

k++;

elsem++;

}

printf("theupperletteris%d\n",j);

printf("theblankis%d\n",k);

printf("theotheris%d\n",m);

}

8

#include""

main()

{inti,j,k,m=0;

for(i=0;i<=20;i++)

{for(j=0;j<=50;j++)

for(k=0;k<=100;k++)

if(i*5+j*2+k==100)

printf("the%dwagis1:

%d,2:

%d,5:

%d\n",++m,k,j,i);

}

printf("thewagsis%d\n",m--);

}

9

#include""

main()

{inti,j,k,m=0;

for(i=0;i<=3;i++)

{for(j=0;j<=3;j++)

for(k=0;k<=6;k++)

if(i+j+k==8)

printf("the%dwagiswhite:

%d,red:

%d,black:

%d\n",++m,i,j,k);

}

printf("thewagsis%d\n",m--);

}

10

#include""

main()

{longintn;

inti,j,k;

printf("pleaseinpurn:

");

scanf("%ld",&n);

if(n%2==1||n<=1)

{printf("theinputiserror.\n");

return

(1);

}

for(i=2;i<=n/2;i++)

{for(j=2;j

if(i/j*j==i)

break;

if(j==i)

{for(k=2;k

if((n-i)/k*k==(n-i))

break;

if(k==n-i)

printf("%ld=%d+%d\n",n,i,n-i);

}

}

}

11

#include""

main()

{inti,j,k,m;

for(i=1;i<=9;i++)

for(j=0;j<=9;j++)

for(k=0;k<=9;k++)

for(m=0;m<=9;m++)

if((i*1000+j*100+k*10+m)*9==(i+j*10+k*100+m*1000))

printf("thenumberis:

%d\n",i*1000+j*100+k*10+m);

}

第4章

1-5ABDCB6-10BCBCA11-13ABA

14

#include""

main()

{

floata1,b1,a2,b2,re1,im1,re2,im2,re3,im3;

printf("Pleaseinputthefirstnumber:

");

scanf("%f%f",&a1,&b1);

printf("Pleaseinputthesecondnumber:

");

scanf("%f%f",&a2,&b2);

re1=a1+a2;

im1=b1+b2;

printf("(%f+j%f)+(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re1,im1);

re2=a1-a2;

im2=b1-b2;

printf("(%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;

printf("(%f+j%f)*(%f+j%f)=%f+j%f\n",a1,b1,a2,b2,re3,im3);

}

第5章

1-5CACCD6-7DA

8

#include""

main()

{

charstr[100];

intnum1=0,num2=0,i=0;

scanf("%s",str);

while(str[i]!

='\0')

{

if(str[i]>='A'&&str[i]<='Z'||str[i]>='a'&&str[i]<='z')

num1++;

elseif(str[i]>='0'&&str[i]<='9')

num2++;

i++;

}

printf("num1=%d,num2=%d",num1,num2);

}

9笔者在程序中直接给数组元素赋了值,读者可以修改为用scanf函数读入数值;另外,还可以用第7章宏定义的方法设定数组的长度,从而实现对元素个数不同的数组进行排序。

#include""

main()

{

inta[5]={2,4,1,3,0},i,j,temp;

for(i=0;i<=4;i++)

printf("%d,",a[i]);

printf("\n");

for(j=1;j<=4;j++)

for(i=j;i<=4;i++)

if(a[i]

{

temp=a[j-1];

a[j-1]=a[i];

a[i]=temp;

}

for(i=0;i<=4;i++)

printf("%d,",a[i]);

}

第6章

1-5AADBA6C

7024681012141618

024681012141618

8a+b=9

95+4+1=10

10+4+2=16

20+4+3=27

10

加密:

#include""

main()

{

charstring[100],i=0,number=0;

scanf("%s",string);

while(string[i++]!

='\0')

number++;

fun1(string,number);

printf("%s",string);

}

fun1(charstr[],intnum)

{

inti;

for(i=0;i<=num;i++)

if(str[i]>='A'&&str[i]<='V'||str[i]>='a'&&str[i]<='v'||str[i]>='0'&&str[i]<='5')

str[i]+=4;

elseif(str[i]>'V'&&str[i]<='Z')

str[i]-=22;

elseif(str[i]>'v'&&str[i]<='z')

str[i]-=22;

elseif(str[i]>'5'&&str[i]<='9')

str[i]-=6;

}

解密

#include""

main()

{

charstring[100],i=0,number=0;

scanf("%s",string);

while(string[i++]!

='\0')

number++;

fun2(string,number);

printf("%s",string);

}

fun2(charstr[],intnum)

{

inti;

for(i=0;i<=num;i++)

if(str[i]>='E'&&str[i]<='Z'||str[i]>='e'&&str[i]<='z'||str[i]>='4'&&str[i]<='9')

str[i]-=4;

elseif(str[i]>='A'&&str[i]<'E')

str[i]+=22;

elseif(str[i]>='a'&&str[i]<'e')

str[i]+=22;

elseif(str[i]>='0'&&str[i]<'4')

str[i]+=6;

}

第8章

一、下列语句是否合法

语句:

int*p=&x,x=13;

点评:

不合法,因为x变量没有定义。

在执行int*p=&x时,x变量的定义在后面。

参考:

intx=13,*p=&x;

语句:

int*p=&x=13;

点评:

不合法,因为x变量没有定义。

在执行int*p=&x=13时,x变量没有定义。

参考:

intx=13,*p;p=&x;

语句:

intx=13,*p=x;

点评:

不合法,不能把x变量的值赋给指针p。

应该把变量x的地址值赋给指针p。

参考:

intx=13,*p;p=&x;

语句:

inty[5]={1,2,3,4,5},*p=y[3];

点评:

不合法,不能把数组元素y[3]的值赋给指针p,应该把数组元素y[3]的地址值赋给指针p。

参考:

inty[5]={1,2,3,4,5},*p;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;p=y;或inty[5]={1,2,3,4,5},*p;p=&y[0];

语句:

int*c=&ch,ch="HelloWorld";

点评:

不合法,ch变量没有定义,字符串"HelloWorld"不能赋给变量ch。

参考:

char*ch="HelloWorld!

";或char*ch;ch="HelloWorld";

语句:

charch[12]="HelloWorld",*c=ch;

点评:

合法。

思考:

charch[12]="HelloWorld!

",*c=ch;该语句错误,字符个数超出数组ch定义的宽度。

语句:

char*c=ch[12]="HelloWorld"

点评:

不合法,数组ch没有定义。

数组ch没有第12个元素。

参考:

char*c,ch[12]="HelloWorld";c=ch;

语句:

char*c,c='X',c=&c;

点评:

不合法,不能把常量'X'的值赋给指针,不能把指针c的地址值赋给指针c自己。

参考:

char*c,ch;ch='X',c=&ch;

二、综合练习题参考答案

1.将一字符串复制到另一字符串中。

#include<>

voidmain()

{charstr1[128],str2[128]={"WelcometoCLanguage"};

char*cp1,*cp2;

cp1=str1;

cp2=str2;

while(*cp1++=*cp2++);

puts(str1);

}

2.将一字符串与另一字符串相连接。

#include<>

voidmain()

{charstr1[128]={"Welcome"},str2[128]={"toCLanguage"};

char*cp1,*cp2;

inti=0,n=0;

while(n++,str1[++i]!

=0);

cp1=str1+n;

cp2=str2;

while(*cp1++=*cp2++);

puts(str1);

}

3.将字符数组中大写字符改为小写字符,将小写字符改为大写字符。

#include<>

voidmain()

{charstr1[128]={"WelcometoCLanguage"};

char*cp1=str1;

while(*cp1)

{if(*cp1>='A'&&*cp1<='Z')

*cp1=*cp1+32;

elseif(*cp1>='a'&&*cp1<='z')

*cp1=*cp1-32;

else

*cp1=*cp1;

cp1++;

}

puts(str1);

}

4.从一字符串中取出部分字符串复制到另一字符串中。

#include<>

voidmain()

{charch[128],*cp,str[128],*sp;

intb,n,l=0,i;

cp=ch;

sp=str;

gets(cp);

scanf("%d%d",&b,&n);

while(l++,*(ch+l)!

=0);

if(n

{for(i=0;i

*(sp+i)=*(cp+b+i);

*(sp+i)='\0';

puts(str);

}

else

printf("无数据可以复制");

}

5.完成一整型数组的排序。

#include<>

#include<>

voidmain()

{intx[10],i,j,*p,t;

p=x;

for(i=0;i<10;i++)

x[i]=rand();

for(i=0;i<9;i++)

for(j=0;j<9;j++)

if(*(p+j)>*(p+j+1))

{t=*(p+j);

*(p+j)=*(p+j+1);

*(p+j+1)=t;

}

for(i=0;i<10;i++)

printf("%d\t",*p++);

}

6.将一个字符串中的字符反序排列。

#include<>

voidmain()

{charch[128],c,*cp1,*cp2;

inti,n=0;

gets(ch);

cp1=ch;

cp2=ch;

while(*cp2!

=0)

{n++;

cp2++;

}

cp2--;

n=n/2;

for(i=0;i

{c=*cp1;

*cp1=*cp2;

*cp2=c;

cp1++;

cp2--;

}

puts(ch);

}

7.编函数完成将一字符串中的字符全部改为大写。

#include<>

voidcove(char*cp)

{while(*cp!

=0)

{if(*cp>='a'&&*cp<='z')

*cp=*cp-32;

cp++;

}

}

voidmain()

{charch[128],*cp;

cp=ch;

gets(cp);

cove(cp);

puts(ch);

}

8.编函数完成从一字符串左边取若干字符复制到另一字符串中。

#include<>

voidlm(char*lcp,char*bcp,intn)

{inti;

for(i=0;i

*(bcp+i)=*(lcp+i);

*(bcp+i)='\0';

}

voidmain()

{charch[128],*cp,str[128];

intn,l=0;

gets(ch);

scanf("%d",&n);

while(l++,*(ch+l)!

=0);

if(n

{cp=ch;

lm(cp,str,n);

puts(str);

}

else

printf("无数据可以复制");

}

第9章

1

#include""

structdate

{intyear;

intmonth;

intday;

};

main()

{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

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1