函数指针部分习题与解答文档格式.docx
- 文档编号:21124696
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:14
- 大小:24.35KB
函数指针部分习题与解答文档格式.docx
《函数指针部分习题与解答文档格式.docx》由会员分享,可在线阅读,更多相关《函数指针部分习题与解答文档格式.docx(14页珍藏版)》请在冰豆网上搜索。
}
1.2、在上例题的基础上,再求出超过平均值的人数(建议将数组中的数据用随机数)。
源程序如下(8-151.c):
#include"
stdlib.h"
intMax=0,Min=0,NUM=0;
{floataverage(intarray[],intn);
floatave;
intscore[10];
randomize();
score[i]=random(100);
%4d"
score[i]);
\n"
);
ave=average(score,10);
max=%5d\nmin=%5d\nnum=%4d\naverage=%6.2f\n"
Max,Min,NUM,ave);
floataverage(intarray[],intn)
Max=Min=array[0];
for(i=1;
{if(array[i]>
Max)Max=array[i];
elseif(array[i]<
Min)Min=array[i];
sum=sum+array[i];
if(array[i]>
aver)NUM++;
return(aver);
1.3、如果再将上例题改为:
在函数中使用指针,请编写程序(提示:
函数中用指针形式、数组中的数据用随机数产生)
源程序(8-153.c)
include<
{floataverage(int*p,intn);
floataverage(int*p,intn)
intsum=array[0];
{if(*(p+i)>
elseif(*(p+i)<
sum+=*(p+i);
if(*(p+i)>
2、输入10个整数,将其中最小数与第一个数交换,把最大数与最后一个交换。
写三个函数分别完成:
(1)输入10个整数;
(2)进行处理;
(3)输出10个数,用指针法处理。
源程序8-lt1.c(指针形式)
voidinput(int*a,intn)
{int*p;
for(p=a;
p<
a+n;
p++)
scanf("
%d"
p);
}
voidoutput(int*a,intn)
%5d"
*p);
voidinvert(int*a,intn)
{int*p1,*p2,*p;
inttemp;
p1=p2=a;
for(p=a+1;
p++)
if(*p>
*p1)p1=p;
elseif(*p<
*p2)p2=p;
if(p2==a+n-1&
&
p1==a)
{temp=*p1;
*p1=*p2;
*p2=temp;
else
{temp=*p2;
*p2=*a;
*a=temp;
temp=*p1;
*p1=*(a+n-1);
*(a+n-1)=temp;
#defineN10
main()
{intx[N];
intn=N;
input(x,n);
output(x,n);
invert(x,n);
源程序8-lt1.c(函数形式)
voidinput(intx[],intn)
{inti;
i<
i++)
&
x[i]);
voidoutput(intx[],intn)
x[i]);
voidinvert(intx[],intn)
{inti,m,s;
m=s=0;
if(x[i]>
x[m])m=i;
elseif(x[i]<
x[s])s=i;
%d,%d\n"
m,s);
if(s==n-1&
m==0)
{temp=x[m];
x[m]=x[s];
x[s]=temp;
else
{temp=x[s];
x[s]=x[0];
x[0]=temp;
temp=x[m];
x[m]=x[n-1];
x[n-1]=temp;
3、编写函数length(char*s),函数返回指针s所指字符串的长度。
源程序8-lt2.c
s指向字符串首地址
intlength(char*s)
{
intn=0;
while(*(s+n)!
='
\0'
)
n++;
/*当s+n没有指向串尾,n增1,直到s+n指向串尾*/
returnn;
charstr[]="
thisisabook"
;
%d\n"
length(str));
}_
结果:
14
char*p=s;
while(*p)p++;
return(p-s);
char*gets(char*s)
charstr[10];
gets(str);
4、将字符串a复制到字符串b
源程序8-lt2-2.c
stdio.h"
{charb[15];
char*p2=b;
char*p1="
Iamaboy."
for(;
*p1!
p1++,p2++)
*p2=*p1;
*p2='
strintais:
%s\n"
*p1);
strintbis:
b);
5、已知存放在数组a中的数不相重复,在数组a中查找与值x相等的位置。
若找到,输出该值和该值在数组a中的位置;
若没有找到,输出相应的信息。
查找技巧:
边界单元存放要查找的数,循环一定能结束,结束时的下标i就暗示着查找是否成功。
(边界单元:
最后元素之后的一个单元)。
本例采用顺序查找法进行数据查找。
源程序:
(指针形式8-lt3.c一般程序8-lt31.c)
#defineNUM20
intinput(int*a)
{inti,n;
Enternumbertoelements,0<
n<
%d:
"
NUM);
n);
a+i);
returnn;
intsearch(int*a,intn,intx)
{inti,p;
i=0;
a[n]=x;
while(x!
=a[i])i++;
if(i==n)p=-1;
elsep=i;
returnp;
{inta[NUM],x,n,p;
n=input(a);
enterthenumbertosearch:
x="
x);
p=search(a,n,x);
if(p!
=-1)printf("
%dindexis:
x,p);
elseprintf("
%dcannotbefound!
x);
6、有n个数,使其前面各数顺序向后移m位置,最后m个数变成最前面的m个数。
写一个函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数
源程序lt8-4.c
{voidmove(intarr[10],int,int);
intnum[N],n,m,i;
for(i=0;
N;
num[i]=random(100);
howmanynumbers"
n=N);
num[i]);
\nhowmanyplaceyouwantmove?
m);
move(num,n,m);
voidmove(intarr[],intn,intm)
{int*p,arr_end;
arr_end=*(arr+n-1);
for(p=arr+n-1;
p>
arr;
p--)
*p=*(p-1);
*arr=arr_end;
m--;
if(m>
0)move(arr,n,m);
7、有一字符串,包含n个字符。
写一函数,将此字符串中从第m个字符开始的全部字符复制成另一个字符串。
lt5.c
string.h"
{voidcopystr(char*,char*,int);
intm;
charstr1[20],str2[20];
\ninputstring:
gets(str1);
whichcharcterthatbegingocopy?
if(strlen(str1)<
m)printf("
inputerror!
else{copystr(str1,str2,m);
result:
str2);
voidcopystr(char*p1,char*p2,intm)
{intn=0;
while(n<
m-1)
{n++;
p1++;
while(*p1!
{*p2=*p1;
p2++;
例9.8w数组中存放n个数,编写函数删除下标为k的元素中的值
程序ltp120.c
#defineNUM15
intarrdel(int*,int,int);
voidarrout(int*,int);
intgetindex(intn);
{intn,d,a[NUM]={21,13,24,15,26,27,28,29,30};
n=NUM;
printf("
outputoldprimarydata:
arrout(a,n);
d=getindex(n);
n=arrdel(a,n,d);
outputthedataafterprimary\n"
);
arrout(a,n);
voidarrout(intw[],intm)
{intk;
for(k=0;
k<
m;
k++)
w[k]));
intarrdel(intw[],intn,intk)
{inti,;
for(i=k;
w[i]=w[i+1];
n--;
intgetindex(intn)
do
{printf("
\nentertheindex[0<
=i<
%d]"
n);
i);
}while(i<
0||i>
n-1);
returni;
编写函数,对具有10整数的数组进行如下操作:
从第n个元素开始直到最后一个元素,依次向前移一位,输出移动后的结果。
(不考虑移出的元素)
程序xt928.c
intmoves(int*,int,int);
voidarrout(int*,int);
{intn=NUM;
inta[NUM],d,i;
a[i]=random(100);
howmovesthedata:
"
d);
3
n=moves(a,n,d);
voidarrout(int*w,intm)
*(w+i));
intmoves(int*w,intn,intm)
for(i=m;
*(w+i)=*(w+i+1);
如果将移出的元素存放在数组最后moves函数如下:
intmoves(int*w,intn,intm)
{inti,end=*(w+m);
/*n--;
*/
*(w+n-1)=end;
22、写一函数,完成字符串逆序重放,要求主函数输入和输出字符串。
/*#include"
ctype.h"
{voidret(charx[],intm);
chars1[80];
intn;
scanf("
%s"
s1);
n=strlen(s1);
ret(s1,n);
voidret(charx[],intm)
{inti,j,t,k=(m-1)/2;
for(i=0;
k;
{j=m-1-i;
t=x[i];
x[i]=x[j];
x[j]=t;
return;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 指针 部分 习题 解答
![提示](https://static.bdocx.com/images/bang_tan.gif)