C语言程序设计(铁道出版社第二版)课后习题参考答案_第1页
C语言程序设计(铁道出版社第二版)课后习题参考答案_第2页
C语言程序设计(铁道出版社第二版)课后习题参考答案_第3页
C语言程序设计(铁道出版社第二版)课后习题参考答案_第4页
C语言程序设计(铁道出版社第二版)课后习题参考答案_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

第1章

一、选择题

1.C2.B3.A4.B5.D

二、填空题

1.main2.main3.有穷性、确定性、有零个或多个输入、有一个或多个输出、有效性

4.顺序、分支和循环5.自顶向下,逐步细化、模块化设计、限制使用got。语句

第2章

一、选择题

1.C2.C3.B4.C5.A

二、叙述题

1.向菜单或工具栏添加命令

(1)单击“工具”菜单中的“自定义”,或者右单击菜单栏(或工具栏),在弹出的快捷菜单中

选择“自定义”命令选项。

(2)在“命令”选项卡的“请选择要重排的菜单或工具栏”下,选择要更改的菜单或工具栏,

如选择工具栏,在其对应的下拉列表框中选择“调试”,然后单击“添加命令二

(3)在“添加命令”话柩中,从“类别”列表中选择类别名称,然后从“命令”列表中选择要

添加的命令。

(4)单击“确定”,再单击“关闭”。

2.项目和解决方案是VisualSludio2()l()提供的两类容器。项目是构成某个程序的所有项的容

器,该程序可能是控制台应用程序、基于窗口的应用程序或某种别的程序,构成项目的项可以是源

代码文件、窗体、类、资源文件等。一个解决方案可包含一个或多个项目,以及一些其他项。例如,

•个分布式系统可能由若干个不同的程序组成,而各个程序是作为同一个解决方案内的项目开发的。

源文件只有放在相关的项目中才可以生成可执行程序。

3.在解决方案资源管理中,首先移除该项目中的例1.1程序代码,然后右单击源文件,如果没

有建立例1.2的代码文件,则选择添加一新建项,并选择C++文件,输入文件名和后缀.c,之后输入

相关代码,就可生成项目、运行程序了;如果例1.2代码已存于某个源文件中,则选择添加一现有

项,添加该源文件,生成、运行即可。

4.在VC++2010的编译系统中,编译会从多个角度检测每个错误,如果从多个角度解释都有问

题,则系统会提示有多个错误。也就说,哪怕一个程序中只有一个错误,但生成项目时可能会出现

了一系列编译错误和警告信息。

5.选择“工具”一“选项”菜单命令,弹出“选项”对话框,在“选项”对话框的左侧导航窗格

中选择“环境”一“字体和颜色”,在“显示其设置”下拉列表中选择环境字体,可更改其字体及大

小,环境包含菜单;在“显示其设置”下拉列表中选择文本编辑器,可更改其字体及大小.

第3章

一、选择题

1.A2.C3.C4.D5.A6.D7.D8.B9.B10.A11.B12.B13.A14C.15.B

二、填空题

1.字母、数字、下划(画)线2.03.4、84.(a+b)*c/(a-b)5.-60

6.-167.98.6、4、29.010.10、6

11.12.412.5.50000013.014.1615.6.6

三、编程题

1.编写一个程序求各种类型数据的存储长度。

#include<stdio.h>

main()

(

printf("int:%dbyte\n",sizeof(int));

printf(Hshortint:%dbyte\n,,,sizeof(shortint));

printf(*1ongint:%dbyte\nM,sizeof(longint));

printf(ufloat:%dbyte\n'\sizeof(float));

printf(adouble:%dbyte\nH,sizeof(double));

printf('1ongdouble:%dbyte\n',,sizeof(longdouble));

printf(Hchar:%dbyte\n'\sizeof(char));

)

2.

#include<stdio.h>

#defineRAT1.60934

main()

(

floatk;

printfCinputthekm:H);

scanf("%f',&k);

printf("mile:%f\n”,k/RAT);

)

第4章

一、选择题

1.D2.D3.C4.D5.D6.D7.C8.D9.C10.C

二、解析题

1.X=170,X=LJLJM170,X=UUU252,X=MMUUaa.x=uuLj170

x=170,x=170UMM,X=UMU170,x=%6d

a=513.789185,a=uu513.79,a=513.78918457,a=513.78918457

2.a=3ub=7x=8.5口y=71.82c1=Auc2=az

三、编程题

1.

main()

(

intx,y;

scanf("%d%d",&x,&y);

printf("商数=%5余数=%d”,x/y,x%y);

)

2.

main()

(

doublex,y,z,avg;

scanf("%lf%lf%ir,&x,&y,&z);

avg=(x+y+z)/3;

printf("%.1f',avg);

)

第5章

一、选择题

1.C2.C3.A4.A5.D6.C7.C8.A9.B10.D

二、填空题

1.®a>0&&b>0||a>0&ac>0||b>0&ac>0

@a<b||a<c

③a>5"-a>5或a>5||a<-5

@(a<0)&&((int)a)==a

⑤(a%b)!=0

2.①!(x>0)②1③!(x>=0&&x<=5)

3.3、2、2

4.ch>='A'&&ch<='Z'ch=ch-32

include<stdio.h>

main()

(

floatprice,tax;

printf("pleaseinputthepriceofproduct:");

scanf("%f,,&price);

if(price>=10000)tax=price*0.05;

elseif(price>=5000)tax=price*0.03;

elseif(price>=1000)tax=price*。.02;

elsetax=0;

printf(H%r,tax);

)

5.

include<stdio.h>

main()

(

floatscore;

printf("pleaseinputthescoreofstudent:'*);

scanf("%r,&score);

if(score>=85)printf("VERYGOOD");

elseif(score>=60)printf("GOODM);

elseprintf("BAD");

)

6.

#include<stdio.h>

main()

(

intx,y,z;

printf("inputtwonumber:");

scanff'%d%d",&x,&y);

if(x<10||x>99||y<10||y>99)

printf("inputdataerror!\nH);

else

{z=(x/10)*1000+(y/1C)*100+(x%10)*10+y%10;

',

printf("%d\n1z);

)

)

第6章

一、选择题

1.D2.C3.A4.D5.A6.D7.D8.B9.D10.B11.C12.A13.D14.A15.0

二、填空题

1.fahrcelsius=5.0/9*(fahr-32)fahr+=step

2.5、4、63.3*i-24.y—z*=x5.8M5u2

6.j++说j==0j>=i(或j=i)

7.sum<ksum==kj-28.s=0p=lj<=i

三、改错题

1.第一处改正:For改为for(注:出版社将For改成了for,所以教材上没错)

第二处改正:for(k=l;kv=4;k++)或for(k=0;k<4;k++)

第三处改正:ave=sum/4改为ave=sum/4.0

2.第一处改正:i++改为j++

第二处改正:m=100*i+1O*j+k

3.第一处改正:temp=1

第二处改正:temp>:eps

第三处改正:产2

4.第一处改正:&n

第二处改正:====

5.第一处改正:t=m/10改为I=m%10

第二处改正:t=0改为t=0

第三处改正:m=m%10改为m=/10

四、编程题

1.分式累加和。

include<math.h>

main()

(

ints;

floatn,t,sum;

t=1;sum=0;n=1;s=1.0;

whilA(n<=100)

(

sum=sum+t;

n=n+1;

s=-s;

t=s/n;

)

printf("sum=%10.6f\n",sum);

)

2.1~10的阶乘

include<stdio.h>

main()

(

inti;

longintn=1;

for(i=1;j<=10;i++)

(

n=n*i;

printf(i%5==0?"%2d!=%-10ld\nM:"%2d!=%-10ld,,,i,n);

)

)

3.由*组成的等腰三角形

include<stdio.h>

main()

(

intn,i,j;

scanf("%dn,&n);

for(i=1;i<=n;i««)

{for(j=1;j<=n+i-1;j++)

if0<=n-i)printf("");

elseprintf("*");

printf("\n");

)

)

4.完数

main()

(

intm,s,i;

for(m=2;m<1000;m++)

{s=0;

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

if((m%i)==0)s=s+i;

if(s==m)

{printf("%ditsfactorsare",m);

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

if(m%i==0)printf("%d,",i);

printf(H\n");

}

)

)

5.打靶

include<stdio.h>

main()

inth10,h7,h5;

for(h10=0;h10<=8;h10++)

for(h7=0;h7<=8h7++)

for(h5=0;h5<=8;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);

)

〃代码二

main()

(

inti=9,sum=1;

for(;i>0;sum=2*(sum+1),i-);

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

)

7.牛顿迭代法

一般地:

f(x)=aoxn+aixn_1+....+an-ix+an=O

求f(x)在Xo附近的根

计算公式:Xn+1=Xn-f(Xn)/f'(Xn)

精度:£=|Xn+i-Xn|<1.0e-m,m=5o

所求的根:满足精度的Xn

include<stdio.h>

#include<math.h>

main()

{floatx,x0,f,f1;

x=1.5;〃可改为scanf("%f',&x);

do

{xO=x;

f=2*x0*x0*x0-4*x0*x0+3*x0-6;

f1=6*x0*x0-8*x0+3;〃f的导数,即它的切线

x=xO-f/f1;//切线与x轴的交点

}while(fabs(x-xO)>=1e-5);

printf("Therootis%8.7f\n",x);

)

8.利用欧几里德算法求两个正整数的最大公约数。欧几里德算法又称辗转相除法,非常有名。该算

法的要领是:假设两个正整数为a和b,先求出前者除以后者的余数,存放到变量r中,若「不为0,

则将b的值得赋给a,将•r的值得赋给b:再求出a除以b的余数,仍然存放到变量「中,”,如此反

复,直至r为。时终止,此时b中存放的即为原来两数的最大公约数。

两个正整数a和b的最小公倍数二axb/最大公约数

main()

(

inta,b,r,p;

do

(

scanf(',%d%d",&a,&b);

}while(a<=0||b<=0);/*确保a和b为正整数*/

p=a*b;

r=a%b;〃若a<b,则—a,经过下面第一次辗转后,a^b进行了交换,使a>b

while(r!=0)

{a=b;

b=r;

r=a%b;

)

printf("greatestcommondivisoris:%d\nH,b);//最大公约数

printf(Hleasecommonmultipleis:%d\n",p/b);〃最小公倍数

)

第7章

一、选择题

1.C2.C3.D4.C5.C6.A7.A8.D9.B10.D

二、写出程序的运行结果

1.sum=6

2.Max=9,row=1,col=0

3.

0

10

210

3210

5.-5

三、填空

1.i=j=k=Oi<4&&j==5j<5&&i==4

2.i=1&&j-1

3.n>0n%10+0x303cn%10+'0'sO]='\0'

4.s[i]s[0],s[1]str,s[1]s[2],str

四、改错题

1.第一处改正:n=strlen(str)

第二处改正:str[j]==''

第三处改正:strU]!="(注:该错误产生警告,运行时如果不修改,有时结果不正确,如输

入aubeduudefuuuqwe)

2.第一处改正:ch=str[i]

第二处改正:(j>=0)&&(ch<strO])

3.第一处改正:s1[i]!='\C

第二处改正:j=0;

4.第一处改正:cnt=0

第二处改正:if(!(m%i))

第三处改正:i<cnt

五、编程题

1.VC提供的intrand(void)产生的实际上是0〜32767(short型的最大数)的伪随机数,伪随机数

总是以一个相同的数为起始值(种子),运用递推的原理来生成的。所以,如果只使用rand函数,每

次运行所形成的伪随机数列也相同,失去了随机意义。但这样便于程序调试。VC的rand()函数默认

以1为种子。要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的

随机序列就不会完全相同了。VC提供的voidsrand(unsignedintseed)将seed作为种子,如果以

time函数值(即当前时间)作为种子数,那么就可以保证随机性了,因为两次调用rand函数的时间通

常是不同的。也可以使用srand函数来人为指定种子数。

若要产生a〜b之间的一个随机数,则可用2+r2代()%8、+1)表示。若要0~1的小数,则可

以先取得0T0的整数,然后均除以10即可得到随机到十分位的10个随机小数;若要得到随机到

百分位的随机小数,则需要先得到0700的整数,然后均除以100,其它情况依此类推。

include<stdio.h>

#include<stdlib.h>

include<time.h>

main()

(

inta[12],count=0,i;

srand((unsigned)time(NULL));

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

a[i]=5+rand()%11;

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

(

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

count++;

if(count%4==0)printf("\n");

)

)

2.用一维数组a表示一组数,假定为整数。

include<stdio.h>

#defineN5

main()

(

inta[N],max,min,i,sum=0,count=0;

floatav;

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

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

max=min=a[0];

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

(

sum+=a[i];

if(a[i]>max)max=a[i];

if(a[i]<min)min=a[i];

}

av=(float)sum/5;

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

if(a[i]>av)count++;

printf(,'max:%d\nmin:%d\nav:%f\ncount:%d,',max,min,account);

)

3.

include<stdio.h>

main()

(

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;

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

(

printf("intputNO.%dstudent'sscore:'1,i+1);

scanf("%d",score+i);

)

for(i-0,i<30,i++)

(

if(score[i]>=90)

(

count90++;

count80++;

count70++;

count60++;

}

elseif(score[i]>=80)

count80++:

count70++;

count60++;

)

elseif(score[i]>=70)

(

count70++;

count60++;

)

elseif(score[i]>=60)

count60++;

)

printf("0-59:%d\n60-69:%d\n70-79:%d\n80~89:%d\n90~100:%d",30-count60,count60-

count70,count70-count80,count80-count90,count90);

printf("\n60orhigher:%d\n70orhigher:%d\n80orhigher:%d\n90or

higher:%d\n",count60,count70,count80,count90);

}、

4.

方法1:使用一维数组。共输出5行,第1行靠左端输出,第2行空1个字符输出,第3行空

2个字符输出,……,笫5行空4个字符输出。第5行共有6个字符(含空格),为方便起见,每行

按9个字符输出,即输出9个字符后换行。每行的一串*前可能有空格,*后面也可能有空格。共5

行,每行9个字符,所以定义数组大小为45.

include<stdio.h>

main()

(

chara[45];

inti,j,k;

for(i=0;i<45;i++)a[i]='

for(i=0;i<5;i++)〃i代表行,从0开始计数

(

forC=0;j<i;j-+)〃每行下标从9*j开始,第i行前面有i个空格

a[9*i+j]='

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

a[9*i+j+k]=w;

}

j=0;

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

(

M

printf(%c"Ja[i]);

j++;

ifO%9==0)printf("\n");

)

)

方法2:

#include<stdio.h>

main()

chara[5][9J;

inti,j,k;

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

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

尸';

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

{

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

afiirjl='r;

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

}

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

{

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

printf("%c",a[i][j]);

printf("\n,');

}

)

5.

#include<stdio.h>

#defineN4

main()

(

inti,j,aD[N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10);

printf("\nTheoriginalarray:\n");

for(l=0;i<N;l++)

(

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

printf("%2dM,a[i][j]);

printf("\n");

)

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

(

forO=0;j<i;j++)

(

a[i][j]=a[i]O]+aU][i];

aO]U]=0;

)

}

printf("\nTheresultis:\n");

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

forG=0;j<N;j++)

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

printf("\n");

)

)

第8章

一、选择题

1.D2.A3.D4.B5.D6.C7.A8.D9.A10.C11.B12.D13.D14.B15D

二、填空

1.函数2.main函数3.函数首部、函数体4.形式参数、实际参数、实参、形参

5.常量、变量、表达式6.函数定义时函数值、返回值

7.max(max(a,b),c))^(x>y?x:y)

8.

******

ITIIIIIITTIT

iiitii11ri11

******

i»ii11iiTi11

TTTTTTTTTTTT

******

******

aititiiiiii

TTJTTTJTTTTT

******

9.str[]=abdef

10.Iow<=high(high+low)/2

三、改错题

1.第•处:void改为int

第二处:i〈=n&&(n%i==0)改为i<=n&&(n%i!=0)或i<n&&(n%i!=0)

第三处:n!=i改为n==i

2.第一处:删除;

第二处:for(j=1;j<=50;i++)改为for(j=1;j<=50;j++)

第三处:returni

3.第一处:doublefun(doubleb,x0)改为doublefun(doubleb,doublexO)

第二处:if(abs(x1・x0)>=1e-6)改为if(fabs(x1-x0)>=1e-6)

四、编程题

1.

include<stdio.h>

longact(longn)

(

if(n==1||n==0)return1;

else

(

returnn*act(n-1);

)

)

main()

(

intn=3;

printfC'n!=%ld",act(n));

)

2.

/include<stdio.h>

voidmmax(floata[],intn);

main()

(

floata[6];

inti;

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

scanf("%f',&a[i]);

a[0]=1;

mmax(a,5);

printf("%f%d\n",a[(int)a[0]],(int)a[0]);

)

voidmmax(floata[],intn)

(

if(n<=0)

return;

else

if(a[n]>a[(int)a[O]])

a[0]=n;

mmax(a,n-1);

)

3.

include<stdio.h>

#include<string.h>

intstart;

intfun(charstrfl);

main()

chara[40];

inti,num;

gets(a);

num=fun(a);

if(num==-1)

printf("inputstringerrorornohave'A'\n");

else

(

printf("%d'n",num);

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

printf(R%c",a[i]);

printf("\n");

)

)

intfun(charstr[])

(

intcount=0,i=0,len,flag=0;

len=strlen(str);

while((!flag)&&i<len)

(

if(str[i]=='A')flag=1;

i++;

)

if(flag==O)return-1;

start=i;

while(flag&&i<len)

(

if(str[i++]=='A')flag=0;

elsecount++;

)

if(flag==1)return-1;

returncount;

)

4.

my_strcpy(chardst[],charsrc[])

(

inti=0;

while(src[i]!='\0')

{dst[i]=src[i];

i++;

)

dst[i]=>\0';

)

intmain()

chara[12];charb[12];

gets(b);

my_strcpy(a,b);

puts(a);

)

5.

/include<stdio.h>

#include〈string.h>

voidfun(charstrOJnta。)//不使用数组时,可使用全局变量保存统计结果

(

inti=0;

a[0]=a[1]=a[2]=a[3]=0;

while(str[i]!='\O')

(

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

a[0]++;

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

a[1]++;

elseif(str[i]=='')

a[2]++;

else

a[3]++;

i++;

)

)

intmain()

(

chars[80];

inta[4];

gets(s);

fun(s,a);

printf("letters:%d\tdigits:%d\tspaces:%d\totherthecharacter:%d\nM,a[0],a[1],a[2],a[3]i;

)

第9章

一、选择题:

1.D2.A3.B4.A5.D

二、编程题

1.

习题9_2_1

#defineISALPHA(a)(((a)>='A,&&(a)<='Z')||((a)>='a,&&(a)<=,z,))

main()

{charc;

scanf("%c",&c);

printf("%d\n”,ISALPHA(c));

)

2.

习题9.2.2

#defineSWAP(t,x,y){tw;w=x;x=y;y=w;}

main()

{doublea=99.99,b=11.11;

SWAP(double,a,b);

printf("%f,%f\n",a,b);

)

3.

习题9.2.3

include"stdio.h"

#defineMAX80

#defineCHANGE1

main()

{charstr[MAX];

inti;

printf("lnputtext:\n");

gets(str);

#if(CHANGE)

{for(i=0;i<MAX;i++)

{if(str[i]!='\O')

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

str[i]+=1;

elseif(str[i]=='z'||str[i]=='Z')

str[i]-=25;

)

)

#endif

printf("output:\n%s',,str);

)

4.

习题9.2.4

#defineLEAP_YEAR(y)(y%4==0)&&(y%100!=0)||(y%400==0)

main()

{intyear;

printf("lnputyear:");

scanf("%d",&year);

if(LEAP_YEAR(year))

printf("%disaleapyear.\n",year);

else

printf("%disnotaleapyear.\n",year);

)

5.

x9_2_5.h如下:

#ifndef_X9_2_5_H

#define_X9_2_5_H

#defineAVER(a,b,c)(a<b»c)/3.0

#endif

x9_2_5.c如下:

include"x9-2-5.hH

main()

{inta,b,c;

printf("lnputthreeintegersa,b,c:");

scanf(H%d,%d,%d",&a,&b&c);

printf("Averageis%f.\n",AVER(a,b,c));

)

第10章

一、选择题

二、

1.A2,D3.C4.D5.B6.B7.C8.D9.D10.C11.B12.B

二、填空题

1.指针或者地址2.110

3.Cchar*p;匚p=&ch;Escanf("%c",p);□*p='a,;匚printf("%c"Jp);

4.105.0.76.ab7.abcdcd8.7u1

9.void(*p)(int*jnt*);10.r+b[k]11.'\0'、n++;12.aegi

三、改错题

1.第一处改正:*sub=x-y

第二处改正:scanf(,'%f%f',&x,&y);

第三处改正:calc(x,y,&add,&sub);

2.第一处:charswap(char*pl,char*p2)改为voidswap(char*pl,char*p2)

第二处:strcpy(p,pl)改为strcpy(p,p2)

3.第一处:pl=pl+m改为p1=pl+m-l

第二处:*pl=*p2改为*p2=*pl

第三处:*p2="\0"改为*p2='\0'

4.第一处:char*fun(char*str.chart)改为char*fun(char*str,char*t)

第二处:s=NuLL改为s=NULL;

第三处:if(r==p)改为if(*r==*p)

5.第一处:voidfun(int*b[N],intvoidfun(int(*b)[N],intn)

第二处:b(j][k]=k*j改为b[j][k]=(k+l)"j+l)

四、编程题

1.

习题10.4.1

voidmove(intarray[20],intn,intm);

main()

{intnumber[20],n,m,i;

printf(MHowmanynumbers?,1);/*共有多少个数7

scanf("%d",&n);

printf(Mlnput%dnumbers:\nM,n);/*输入n个数7

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

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

printf("Howmanyplaceyouwanttomove?");/*后移多少个位置7

scanf(H%d",&m);

move(number,n,m);/*调用move函数*/

printf("Now,theyare:\n");

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

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

)

voidmove(intarray[20],intn,intm)/*循环后移函数*/

{int*p,array_end;

array_end=*(array+n-1);

for(p=array+n-1;p>array;p-)

*P=*(P-1);

*array=array_end;

m-;

if(m>0)move(array,n,m);/*递归调用,当循环次数m减至0时,停止调用*/

)

2.

习题10.4.2

#include<stdio.h>

#include<string.h>

#defineTOTAL6

intmseek(char*str[],charn)

{inti;

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

{if(strcmp(str[i],xstr)==O)

return1;

)

return0;

)

main()

{char*name[TOTAL]={"Lining","LinsharT,"Tianyuarr,"Zhangqiang","Haipo","Fangbing"};

charxname[20];

printf("enteraname:");

gets(xname);

if(mseek(name,xname,TOTAL))

printf("Found!\n");

else

printf("Notfound!\n");

)

3.

习题10.4.3

include<stdio.h>

include<string.h>

voidfun(char*str,intnum[4])

{inti;

for(i=0;i<4;i++)num[i]=0;

while(*str!='\0')

{if(*str>='a'&&*str<='z"||*str>='A'&&*str<='Z')

num[0]++;

elseif(*str=='*)

num[1]++;

elseif(*str>='0'&&*str<='9')

num[2]++;

else

num[3]++;

str++;

)

)

#defineN80

main()

{intstring[N];

intn[4],i;

gets(string);

fun(string,n);

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

printf("%d\t",n[i]);

)

4.

习题10.4.4

I*调试时,可这样输入数据:*/

/*1112131415

2122232425

3132333435

4142434445

5152535455*/

include<stdio.h>

main()

{inta[5][5],*p,i,j;

voidchange(int*p);

printf("lnputmatrix:\n");

for(i=0;i<5;i»«)/*输入矩阵*/

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

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

P=&a[0][0];〃使p指向0行0列元素*/

change(p);〃调用函数,实现交换*/

printf("Now,matrix:\nu);

for(i=0;i<5;i++)/*输出已交换的矩阵*/

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

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

printf("\nH);

)

)

voidchange(int*p)/*交换函数7

{inti.j.ternp;

int*pmax,*pmin;

pmax=p;

pmin=p;

for(i=0;i<5;i++)〃找最大值和最小值的地址,并赋给pmax.pmin*/

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

{if(*pmax<*(p+5*i+j))pmax=p+5*i+j;

if(*pmin>*(p+5*i+j))pmin=p+5*i+j;

)

temp=*(p+12);〃将最大值换给中心元素*/

*(p+12)=*pmax;

*pmax=temp;

temp=*p;/*将最小值换给左上角元素*/

"p="pmm;

*pmin=temp;

pmin=p+1;

for(i=0;i<5;i++)/*找第二最小值的地址赋给pmin7

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

if(((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))pmin=p+5*i+j;

temp=*pmin;/*将第二最小值换给右上角元素7

*pmin=*(p+4);

*(p+4)=temp;

pmin=p+1;

for(i=0;i<5;i++)/*找第三最小值的地址赋给pmin*/

forO=0;j<5;j++)

if(((p+5*i+j)!=(p+4))&&((p+5*i+j)!=p)&&(*pmin>*(p+5*i+j)))

pmin=p+5*i+j;〃将第三最小值换给左下角元素*/

temp=*pmin;

*pmin=*(p+20);

*(p+20)=temp;

pmin=p»1;

for(i=0;i<5;i++)/*找第四最小值的地址赋给pmin*/

forG=0;j<5;j++)

if(((p+5*i+j)!=p)&&((p+5*i+j)!=(p+4))&&((p+5*i+j)!=(p+20))&&(*pmin>*(p+5*i+j))i

pmin=p+5*i+j;

temp=*pmin;/*将第四最小值换给右下角元素7

*pmin=*(p+24);

*(p+24)=temp;

)

5.

习题10.4.5

〃可以专门编写一个函数求各学生的平均分,存到aver[4]数组*/

#include<stdio.h>

voidavcourl(floatscore[][5]);

voidfali2(intnum[4],floatscore[4][5]);

voidgood(intnum[4],floatscore[4][5]);

main()

(

int数组num代表学号

floatscore[4][5];

printf("lnputNO.andscores:\n");

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

{printfCNO.*1);

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

printf("scores:");

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

scanf("%r,&score[i][j]);

)

printf("\n\n");

avcourl(score);/*求出第一门课的平均成绩*/

printf("\n\n");

fali2(num,score);〃找出2门课不及格的学生*/

printfC'\n\n");

good(num,score);〃找出成绩好的学生*/

)

voidavcourl(floatscore口[5])/*第一门课的平均成绩的函数7

{inti;

floatsum,average1;

sum=0.0;

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

sum=sum+score[0][i];/*累计每个学生的得分*/

average1=sum/4;〃计算平均成绩*/

printf("course1averages:%6.2f.\nH,average1);

)

voidfali2(intnum[4],floatscore[4][5])

/*找两门以上课程不及格的学生的函数*/

{inti,j,k,label;

floatsum=0;

printf("========Studentwhoisfail============\n");

printf("NO.");

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

printf(,'%1Od",i+1);

printf("average\n");

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

{label=0;

for(j=0;j〈5;j++)

if((score[i][j])<60.0)label++;

if(label>=2)

{printf(',%5d",num[i]);

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

{printf("%10.2r,score[i][k]);

sum+=score[i][k];

)

printf("%10.2f\n',sum/5);

)

}

}

voidgood(intnum[4],floatscore[4][5])

/*找成绩优秀的学生(各门85分以上或平均90分以上)的函数7

{inti,j,k,n;

floatsum=0,aver[4];

printf("========Studentwhosescoreisgood========\n");

printf("NO.");

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

printf("%10d",i+1);

printf("average\n");

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

{n=0;

sum=0;

forO=0;j<5;j++)

(

if((score[i][j])>85.0)n++;

sum+=score[i][j];

}

aver[i]=sum/5;

if((n==5)||(aver[i]>=90))

{printf("%5d",num[i]);

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

printf("%10.2f,,score[i][k]);

printf("%10.2f\n;aver[i]);

)

)

)

6.

习题10.4.6

#include<math.h>

doublesigma(double(*fn)(double),doubleI,doubleu)

{doublesum=0,d;

for(d=l;d<u;d+=0.1)

sum+=fn(d);

returnsum;

)

voidmain()

{doublesum;

sum=sigma(sin,0.1,1.0);

printf("sumofsinfrom0.1to1.0is:%f\n",sum);

sum=sigma(cos,0.5,3.0);

printf("sumofcosfrom0.5to3.0is:%f\n",sum);

)

7.

习题10.4.7

main()

{inti;

char*month_name(intn);

printf(MinputMonthNo.:\n");

scanf("%d",&i);

printf("MonthNo.:%2d—>%s\n",i,month_name(i));/*调用指针函数month_name()*/

)

char*month_name(intn)

〃定义一个指针函数month_name(),返回一个指向字符串的指针*/

{staticchar*name[]={,'lllegalMonth",

•'January","February1',"March","April",

"May",Pune","July","August';

"September","October","November","December"};

return((n<1||n>12)?name[0]:name[n]);

)

8.

习题10.4.8

include<stdio.h>

include<string.h>

#defineN10

main()

{voidsort(charAp[]);

inti;

char*p[N],str[N][20];

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

p[i]=str[i];/"将第i个字符串的首地址赋予指针数组p的第i个元素*/

printf("lnputstrings:\n");

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

scanf("%s",p[i]);

sort(p);

printf("Now,thesequenceis:\n");

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

printf("%s\n",p[i]);

)

voidsort(char*p[])

{inti,j;

char*temp;

for(i=0;i<N-1;i++)

for(j=0;j<N-1-i;j++)

if(strcmp(*(p+j),*(p+j+1))>0)

{temp=*(p+j);

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

*(p+j+1)=temp;

)

)

9.

习题10.4.9

include<stdio.h>

#defineLINEMAX20/*定义字符串的最大长度*/

main()

{voidsort(char**p);

inti;

char**p,*pstr[5],str[5][LINEMAX];

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

pstr[i]=str[i];/*将第i个字符串的首地址赋予指针数组pstr的第i个元素*/

printf("lnput5strings:\n");

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

scanf("%su,pstr[i]);

p=pstr;

sort(p);

printf("stringssorted:\n");

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

printf("%s\nH,pstr[i]);

)

voidsort(char**p)〃冒泡法对5个字符串排序的函数*/

{inti,j;

char*temp;

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

{forO=i+1;j<5;j++)

{if(strcmp(*(p+i),*(p+j))>0)/*比较后交换字符串地址7

{temp=*(p+i);

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

*(p+j)=temp;

)

)

)

)

10.

voidStrOR(charxx[][80],intmaxline)

{inti,righto,j,s,k;

chartemp[80];

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

for(j=strlen(xx[i])-1;j>=0;j-)

{k=0;memset(temp,0,80);

if(xx[i]0]=='o')

{righto=j;

for(s=righto+1;s<strlen(xx[i]);s++)

temp[k++]=xx[i][s];

for(s=0;s<righto;s++)

if(xx[i][s]!=*o')temp[k++]=xx[i][s];

strcpy(xx[i],temp);

}elsecontinue;

)

)

第11章

一、选择

1.D2.C3.C4.D5.A6.C7.A8.B

二、填空

1.structstudent

strcmp(str,stu[i].name)==O

break;

2.p=person

p-person<3

old=p->age;

q->name,q->age

3.p!=NULL

C++

p->next

4.&per[i].body.eye

&per[i].body.f.height

&per[i].body.f.weight

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论