c程序设计第十章答案武汉理工大学张晓勇版文档格式.docx

上传人:b****6 文档编号:21093381 上传时间:2023-01-27 格式:DOCX 页数:53 大小:26.85KB
下载 相关 举报
c程序设计第十章答案武汉理工大学张晓勇版文档格式.docx_第1页
第1页 / 共53页
c程序设计第十章答案武汉理工大学张晓勇版文档格式.docx_第2页
第2页 / 共53页
c程序设计第十章答案武汉理工大学张晓勇版文档格式.docx_第3页
第3页 / 共53页
c程序设计第十章答案武汉理工大学张晓勇版文档格式.docx_第4页
第4页 / 共53页
c程序设计第十章答案武汉理工大学张晓勇版文档格式.docx_第5页
第5页 / 共53页
点击查看更多>>
下载资源
资源描述

c程序设计第十章答案武汉理工大学张晓勇版文档格式.docx

《c程序设计第十章答案武汉理工大学张晓勇版文档格式.docx》由会员分享,可在线阅读,更多相关《c程序设计第十章答案武汉理工大学张晓勇版文档格式.docx(53页珍藏版)》请在冰豆网上搜索。

c程序设计第十章答案武汉理工大学张晓勇版文档格式.docx

p2=&

if(a<

b)

{p=p1;

p1=p2;

p2=p;

a=%d,b=%d\n"

max=%d,min=%d\n"

*p1,*p2);

10.3指针变量作为函数参数。

voidswap(int*p1,int*p2);

pointer_2=&

b)swap(pointer_1,pointer_2);

\n%d,%d\n"

voidswap(int*p1,int*p2)

inttemp;

temp=*p1;

*p1=*p2;

*p2=temp;

由于单向传送的值传递方式,形参值的改变不能使实参的值随之改变。

10.4输入a,b,c这三个整数,按大小顺序输出。

voidexchange(int*q1,int*q2,int*q3);

inta,b,c,*p1,*p2,*p3;

%d,%d,%d"

b,&

c);

p3=&

c;

exchange(p1,p2,p3);

\n%d,%d,%d\n"

a,b,c);

voidexchange(int*q1,int*q2,int*q3)

voidswap(int*pt1,int*pt2);

if(*q1<

*q2)swap(q1,q2);

*q3)swap(q1,q3);

if(*q2<

*q3)swap(q2,q3);

voidswap(int*pt1,int*pt2)

temp=*pt1;

*pt1=*pt2;

*pt2=temp;

注意这个交换过程,要理解一下,由于函数单向传送的值传递方式,除了这种方法(运用指针变量做参数)可以得到多个变化的值,还有就是借助全局变量如:

inta,b;

voidexchange(intx,inty);

b)exchange(a,b);

voidexchange(intx,inty)

a=y;

b=x;

这个地方要多理解一下。

引用一个数组元素,可以用:

(1)下标法,如啊a[i]形式;

(2)指针法,如*(a+i)或*(p+i)。

其中a是数组名,p是指向数组元素的指针变量,其初值p=a。

inta[10];

int*p,i;

for(i=0;

i<

10;

i++)

scanf("

%d"

a[i]);

\n"

);

for(p=a;

p<

(a+10);

p++)

%d"

*(p));

这是用指针法引用一个数组的元素。

p=a;

p++);

i++,p++)

*p);

第二个循环之前的p=a;

这个语句的作用。

10.7将数组a中的n个元素按相反的顺序存放。

voidinv(intx[],intn);

inti,a[10]={3,7,9,11,0,6,7,5,4,2};

Theoriginalarray:

printf("

a[i]);

inv(a,10);

Thearrayhasbeeninverted:

voidinv(intx[],intn)

inttemp,i,j,m=(n-1)/2;

=m;

{

j=n-1-i;

temp=x[i];

x[i]=x[j];

x[j]=temp;

}

return;

下面这个程序和上面的运行情况一致。

voidinv(int*x,intn);

voidinv(int*x,intn)

int*p,temp,*i,*j,m=(n-1)/2;

i=x;

j=x+n-1;

p=x+m;

for(;

=p;

i++,j--)

temp=*i;

*i=*j;

*j=temp;

全部用指针来编的意义相同的程序:

inti,arr[10]={3,7,9,11,0,6,7,5,4,2};

int*p=arr;

p=arr;

inv(p,10);

for(p=arr;

arr+10;

例10.9用选择法对10个整数按由大到小的顺序排序

voidsort(intx[],intn);

inti,a[10],*p;

sort(p,10);

Thearrayhasbeensorted:

for(p=a,i=0;

voidsort(intx[],intn)

inti,j,k,t;

n-1;

{

k=i;

for(j=i+1;

j<

n;

j++)

if(*(x+j)>

*(x+k))k=j;

if(k!

=i)

{

t=*(x+i);

*(x+i)=*(x+k);

*(x+k)=t;

}

这个程序里的数组元素引用和函数调用(用数组名做函数参数)都是通过指针来引用和调用的。

10.10输出二维数组有关的值。

#defineFORMAT"

inta[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};

printf(FORMAT,a,*a);

printf(FORMAT,a[0],*(a+0));

printf(FORMAT,&

a[0],&

a[0][0]);

printf(FORMAT,a[1],a+1);

a[1][0],*(a+1)+0);

printf(FORMAT,a[2],*(a+2));

a[2],a+2);

printf(FORMAT,a[1][0],*(*(a+1)+0));

例10.11用指针变量输出二维数组元素的值。

int*p;

for(p=*a;

a[0]+12;

if((p-a[0])%4==0)printf("

%4d"

注意一下这个程序的指针:

#include<

int(*p)[4],i,j;

%d%d"

i,&

j);

a[%d,%d]=%d\n"

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

10.13用指向数组的指针做函数参数。

voidaverage(float*p,intn);

voidsearch(float(*p)[4],intn);

floatscore[3][4]={{65,67,70,60},{80,87,90,81},{90,99,100,98}};

average(*score,12);

intn;

pleaseinputtheNO."

);

n);

search(score,n-1);

voidaverage(float*p,intn)

float*p_end=p+n-1;

floatsum=0,aver;

=p_end;

sum=sum+(*p);

aver=sum/n;

average=%5.2f\n"

aver);

voidsearch(float(*p)[4],intn)

inti;

thescoreofNO.%dare\n"

n);

4;

%5.2f"

*(*(p+n)+i));

}

10.14查找有一门以上不及格的学生。

floatscore[3][4]={{65,57,70,60},{58,87,90,81},{90,99,100,98}};

search(score,3);

inti,j,flag;

for(j=0;

flag=0;

if(*(*(p+j)+i)<

60.00)flag=1;

if(flag==1)

printf("

NO.%dfails,hisscoresare:

j+1);

for(i=0;

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

在该程序中要注意其中蕴含的那个算法。

在函数search中,flag是最为标志不及格的变量。

先将flag=0若发现某一学生有一门不及格,则使flag=1.

10.19用函数调用实现字符串的复制。

(1)用字符数组作参数

voidcopy_string(charfrom[],charto[]);

char*a="

Iamateacher."

;

char*b="

youareastudent."

\nstringa:

%s\nstringb:

%s\n"

copystringatostringb:

copy_string(a,b);

stringa:

voidcopy_string(charfrom[],charto[])

inti=0;

while(from[i]!

='

\0'

to[i]=from[i];

i++;

to[i]='

(2)形参用字符指针变量

voidcopy_string(char*from,char*to);

char*a;

a="

charb[]="

voidcopy_string(char*from,char*to)

*from!

=0;

from++,to++)

*to=*from;

*to='

1,指针变量的值是可以改变的。

2,若定义了一个指针变量,并使它指向一个字符串,就可以用下标形式引用指针变量所指的字符串中的字符。

程序如下:

Ilovechina!

"

thesixthcharecteris%c\n"

a[5]);

a[i]!

%c"

10.5.1用函数指针变量调用函数

intmax(int,int);

int(*p)(int,int);

inta,b,c;

p=max;

c=(*p)(a,b);

a=%d,b=%d,max=%d\n"

intmax(intx,inty)

intz;

z=(x>

y)?

x:

y;

returnz;

10.5.2用指向函数的指针作函数参数。

intmin(int,int);

intadd(int,int);

voidprocess(int,int,int(*fun)(int,int));

pleaseenteraandb:

max="

process(a,b,max);

min="

process(a,b,min);

add="

process(a,b,add);

intmin(intx,inty)

if(x<

y)z=x;

elsez=y;

intadd(intx,inty)

z=x+y;

return(z);

voidprocess(intx,inty,int(*fun)(int,int))

intresult;

result=(*fun)(x,y);

%d\n"

result);

注:

有了以上基础,就可以编写出较为复杂的程序。

如下面这个程序:

math.h>

floatintegral_f1(floatx,floaty);

floatintegral_f2(float,float);

floatintegral_f3(float,float);

floatintegral_f4(float,float);

floatintegral_f5(float,float);

floatintegral(float,float,float(*fun)(float,float));

floata,b;

%f,%f"

\ntheintegralof1+xbetween%fand%f=%f"

a,b,integral(a,b,integral_f1));

\ntheintegralof3+2xbetween%fand%f=%f"

a,b,integral(a,b,integral_f2));

\ntheintegralofexp(x)+1between%fand%f=%f"

a,b,integral(a,b,integral_f3));

\ntheintegralof(1+x)^2between%fand%f=%f"

a,b,integral(a,b,integral_f4));

\ntheintegralofx^3between%fand%f=%f"

a,b,integral(a,b,integral_f5));

floatintegral_f1(floatx,floaty)

floatz;

z=(y+y*y/2)-(x+x*x/2);

 

floatintegral_f2(floatx,floaty)

z=(y*y+3*y)-(x*x+x*3);

floatintegral_f3(floatx,floaty)

z=(y+exp(y))-(x+exp(x));

floatintegral_f4(floatx,floaty)

z=(pow((y+1),3)-pow((x+1),3))/3;

floatintegral_f5(floatx,floaty)

z=(pow(y,4)-pow(x,4))/4;

floatintegral(floatx,floaty,float(*fun)(float,float))

floatresult;

return(result);

这个程序是和前面的10.5.2这个程序(用指向函数的指针作函数参数)大致相同的,只有较小的差别,注意观察和思考。

10.6返回指针值的函数。

程序为:

floatscore[][4]={{60,70,80,90},{56,89,67,88},{34,78,90,66}};

float*search(float(*pointer)[4],intn);

float*p;

inti,m;

pleaseenterthenumberofthestudent:

m);

Thescoresof

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

当前位置:首页 > 解决方案 > 学习计划

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

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