C语言习题及答案第十章Word格式.docx

上传人:b****3 文档编号:16556194 上传时间:2022-11-24 格式:DOCX 页数:14 大小:19.03KB
下载 相关 举报
C语言习题及答案第十章Word格式.docx_第1页
第1页 / 共14页
C语言习题及答案第十章Word格式.docx_第2页
第2页 / 共14页
C语言习题及答案第十章Word格式.docx_第3页
第3页 / 共14页
C语言习题及答案第十章Word格式.docx_第4页
第4页 / 共14页
C语言习题及答案第十章Word格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

C语言习题及答案第十章Word格式.docx

《C语言习题及答案第十章Word格式.docx》由会员分享,可在线阅读,更多相关《C语言习题及答案第十章Word格式.docx(14页珍藏版)》请在冰豆网上搜索。

C语言习题及答案第十章Word格式.docx

,&

a[i]);

9;

{

a[i];

for(j=i+1;

j<

j++)

if(a[j]>

*p)p=&

a[j];

t=*p;

*p=a[i];

a[i]=t;

}

排序后的数组为:

%d,"

a[i]);

}

指针变量的值可以由键盘输入确定吗?

它与其所指类型的变量值之间的关系如何?

10-4应用指针,求n个数的最小值和最大值。

#defineL100

inti,n,a[L],*max,*min;

请确定欲输入数据的个数(<

100):

"

n);

下面请依次输入%d的个数\n"

n);

n;

第%d的个数:

"

i+1);

max=min=&

a[0];

if(a[i]>

*max)max=&

a[i];

if(a[i]<

*min)min=&

}

最大值=%4d,最小值=%4d\n"

*max,*min);

指针也可以指向相同类型的数组元素,此题如用指针来表示来表示数组的各元素的值,程序应如何设计?

10-5应用指针,编写下列字符串处理函数:

(1)字符串的复制函数。

(2)字符串的连接函数。

voidcopy_string(char*from,char*to)

for(;

*from!

='

\0'

;

from++,to++)

*to=*from;

*to='

voidlink_string(char*from,char*to)

*to!

to++);

chara[16]="

Iamateacher."

charb[40]="

youareastudent."

复制与连接之前:

\nstring_a=%s\nstring_b=%s\n"

a,b);

copy_string(a,b);

复制之后:

link_string(a,b);

连接之后:

字符指针与字符数组的主要区别是什么?

字符数组名代表什么?

它与字符指针有何本质的区别?

此程序连接之后的输出结果是什么?

10-6应用指针,求一矩阵中行为最大,列为最小的元素。

#defineN5

inti,j,a[N][N],*p,(*q)[N],max_min,k,n,flag=0;

请输入数组的个元素的值:

N;

for(j=0;

a[i][j]);

i++)//输出数组元素的值

a[i][j]);

k=0;

a[i][0];

max_min=*p;

p=a[i]+N;

p++,j++);

if(max_min<

*p){max_min=*p;

k=j;

q=a;

n=0;

q<

a+N;

q++,n++)

if(max_min>

*(*q+k))break;

if(n==N)

flag=1;

\n满足条件的元素为第%d行第%d列的:

%d\n"

i+1,k+1,max_min);

if(flag!

=1)printf("

\n没有满足条件的元素!

);

此题与习题8-13类似,请比较这两种不同方式表示的程序,它们各有何特点?

10-7应用指针,完成复数的加,减运算。

(略,参见习题9-13。

10-8应用指针,求n个数的最大公约数和最小公倍数。

#defineN50

intgys(intx,inty)//求两个数的最大公约数

intt;

if(y>

x){t=x;

x=y;

y=t;

while(y!

=0)

t=x%y;

x=y;

y=t;

returnx;

intgbs(intx,inty)//求两个数的最小公倍数

t=gys(x,y);

returnx*y/t;

intn,i,a[N],*p=a;

intt1=*p,t2=*p;

//用t1记最大公约数,t2记最小公倍数

请确定数据的个数n(<

50):

请输入%d个数据的值:

//intt1=*p,t2=*p;

n-1;

t1=gys(t1,*(p+i+1));

t2=gbs(t2,*(p+i+1));

最大公约数为%d,最小公倍数为%d:

t1,t2);

“t1=gys(t1,*(p+i+1))”语句的功能是什么?

能否用数组小标元素直接处理?

试比较之。

10-9有N个人围成一圈,顺序编号,从第一个人开始按1、2、3顺序报数,凡报到3的人退出圈子,然后从出圈的下一个人开始重复此过程。

应用指针,输出出圈序列。

#defineN100

inta[N],i,k,n,m,*p;

请输入人数(<

100):

a[i]=i+1;

//为每个人编号

p=a;

i=0;

//小标计数标量

k=0;

//1,2,3报数时的计数变量

m=0;

//退出人数的计数器的变量

while(m<

n)

if(*(p+i)!

=0)k++;

if(k==3)

*(p+i));

*(p+i)=0;

//将退出的编号置为0

m++;

i++;

if(i==n)i=0;

//报数到尾后,i应恢复为0

此题不用指针也可以完成,应做哪些修改?

此题不用数组是否也可以实现其计算过程?

10-10应用指针,完成数组的关系运算。

对于数组a、b,a>

b成立定义为a数组中大于b数组中的分量个数大于b数组中大于a数组中的分量个数,a<

b、a=b类似定义。

#defineN2

inta[2][N],t[2]={0,0};

inti,j,*p1,*p2;

2;

请输入第%d个数组的元素\n"

if(i==0)p1=a[0],p2=a[1];

elsep1=a[1],p2=a[0];

if(*(p1+j)>

*(p2+j))

t[i]++;

if(t[0]>

t[1])

第一个数组大于第二个数组\n"

elseif(t[0]==t[1])

第一个数组等于第二个数组\n"

else

第一个数组小于第二个数组\n"

思考:

程序中t数组起什么作用/若两个数组的元素个数不相等,应如何处理?

在程序中使用了一个二维数组来表示数组a,b,如果使用两个一位数组,应该如何设计程序?

10-11应用指针编写程序,判断空间中的一个点是否在一立方体内。

structpoint

floatx;

floaty;

floatz;

intflag(floatx,intlz,floaty)

if(x<

y&

&

y<

x+lz)

return1;

return0;

structpointpld,yp;

//pld、yp分别表示立方体左下角和空间中的任一点

int(*p)(float,int,float),lch;

请输入立方体左下角坐标和棱长:

%f,%f,%f,%d"

pld.x,&

pld.y,&

pld.z,&

lch);

请输入空间中的一点坐标:

%f,%f,%f"

pld.z);

p=flag;

//建立函数指针关联

if((*p)(pld.x,lch,yp.x)&

(*p)(pld.y,lch,yp.y)&

(*p)(pld.z,lch,yp.z))

此点在立方体内\n"

此点不在立方体内\n"

函数flag()的功能是什么?

若要判断空间中的点是否在一长方体内,程序应如何修改?

10-12应用指针,定义一个函数strcmp(),实现两个字符串s1和s2的比较。

如果s1=s2,则返回值为0;

如果s1!

=s2,则返回它们它们第一个不同字符ASCII码差值,并且若s1>

s2,则输出正值,是s1<

s2,则输出负值。

inti,resu;

voidstrcmp(char*p1,char*p2);

char*s1,*s2;

请输入字符串1:

gets(s1);

请输入字符串2:

gets(s2);

strcmp(s1,s2);

%s与%s比较的结果是%d\n"

s1,s2,resu);

voidstrcmp(char*p1,char*p2)

*p1==*p2&

(*p1!

p1++,p2++);

if(*p1=='

*p2=='

)resu=0;

resu=*p1-*p2;

在主函数main()中,为何要加语句“voidstrcmp(char*p1,char*p2);

”?

指针增加、减少及其它运算从理论上讲一般是可行的,但在指针运算从理论运算时,应注意哪些情况的发生?

10-13输入10个国家的名称,排序输出。

(1)用指针数组的实现。

(2)用指向指针的指针实现。

(1)/*用指针数组实现*/

string.h"

malloc.h"

inti,j;

char*cm[10],*t=(char*)malloc(20);

请输入各个国家的名称(<

20个字符):

cm[i]=(char*)malloc(20);

gets(cm[i]);

if((strcmp(cm[i],cm[j]))>

0)

strcpy(t,cm[i]);

strcpy(cm[i],cm[j]);

strcpy(cm[j],t);

排序后为:

\n"

%s\n"

cm[i]);

(2)/*用指向指针的指针实现*/

#defineN10

char*cm[N],**p=cm;

//p借用cm的第一个存储单元

char*t=(char*)malloc(20);

//交换时的中介指针变量

N-1;

{

*p=cm[i];

*p=cm[0];

p++;

*p++);

指针数组在处理哪些问题时更有效?

指向指针的指针有何特点?

在使用时应注意哪些问题?

在字符串输入语句“gets(cm[i]);

”前加“cm[i]=(char*)malloc(20);

”语句的作用是什么?

10-14定义一个用二分法解下列方程通用的函数。

(1) 1−x+x3=0。

(2) sin(x)−x=0。

(3) ex −=0。

math.h"

floatf1(),f2(),f3();

floatinit();

floata,b,e;

请输入函数f1(x)的求解区间与精度要求(a,b,e):

%f,%f,%f,"

a,&

b,&

e);

init(f1,a,b,e);

请输入函数f2(x)的求解区间与精度要求(a,b,e):

init(f2,a,b,e);

请输入函数f3(x)的求解区间与精度要求(a,b,e):

init(f3,a,b,e);

floatf1(x)

floatx;

floatf;

f=x*x*x-x+1;

returnf;

floatf2(x)

f=sin(x)-x;

floatf3(x)

f=exp(x)-sqrt(x);

floatinit(fun,a,b,e)

float(*fun)(),a,b,e;

intk=0;

charsig;

floatc,d;

if(fun(a)*fun(b)>

此区间无解!

return0;

次数区间a断点区间b断点近似解c函数值符号\n"

d=fabs(b-a);

while(d>

e)

c=(a+b)/2.0;

if(fun(c)<

0)sig='

-'

;

elsesig='

+'

%3d%15.6f%15.6f%15.6f%c\n"

k,a,b,c,sig);

if(fun(c)*fun(a)<

b=c;

a=c;

d=fabs(b-a);

k++;

returnc;

在函数floatinit(fun,a,b,e)中,参数fun是什么类型?

函数名是否也具有变量的特性?

它存放着什么?

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

当前位置:首页 > 小学教育 > 小升初

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

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