printf("%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;}
}
#defineN10
main()
{intx[N];
intn=N;
input(x,n);
output(x,n);
invert(x,n);
output(x,n);
}
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;
}
main()
{
charstr[]="thisisabook";
printf("%d\n",length(str));
}_
结果:
14
源程序8-lt2.c
intlength(char*s)
{
char*p=s;
while(*p)p++;
return(p-s);
}
char*gets(char*s)
main()
{
charstr[10];
gets(str);
printf("%d\n",length(str));
}
4、将字符串a复制到字符串b
源程序8-lt2-2.c
#include"stdio.h"
main()
{charb[15];
char*p2=b;
char*p1="Iamaboy.";
for(;*p1!
='\0';p1++,p2++)
*p2=*p1;
*p2='\0';
printf("strintais:
%s\n",*p1);
printf("strintbis:
%s\n",b);
}
5、已知存放在数组a中的数不相重复,在数组a中查找与值x相等的位置。
若找到,输出该值和该值在数组a中的位置;若没有找到,输出相应的信息。
查找技巧:
边界单元存放要查找的数,循环一定能结束,结束时的下标i就暗示着查找是否成功。
(边界单元:
最后元素之后的一个单元)。
本例采用顺序查找法进行数据查找。
源程序:
(指针形式8-lt3.c一般程序8-lt31.c)
#defineNUM20
intinput(int*a)
{inti,n;
printf("Enternumbertoelements,0",NUM);
scanf("%d:
",&n);
for(i=0;iscanf("%d",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;
}
main()
{inta[NUM],x,n,p;
n=input(a);
printf("enterthenumbertosearch:
x=");
scanf("%d",&x);
p=search(a,n,x);
if(p!
=-1)printf("%dindexis:
%d\n",x,p);
elseprintf("%dcannotbefound!
\n",x);
}
6、有n个数,使其前面各数顺序向后移m位置,最后m个数变成最前面的m个数。
写一个函数实现以上功能,在主函数中输入n个整数和输出调整后的n个数
源程序lt8-4.c
#include"stdlib.h"
#defineN10
main()
{voidmove(intarr[10],int,int);
intnum[N],n,m,i;
for(i=0;inum[i]=random(100);
printf("howmanynumbers");
printf("%d\n",n=N);
for(i=0;iprintf("%4d",num[i]);
printf("\nhowmanyplaceyouwantmove?
");
scanf("%d",&m);
move(num,n,m);
printf("\n");
for(i=0;i<10;i++)
printf("%4d",num[i]);
printf("\n");
}
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
#include"string.h"
voidmain()
{voidcopystr(char*,char*,int);
intm;
charstr1[20],str2[20];
printf("\ninputstring:
");
gets(str1);
printf("whichcharcterthatbegingocopy?
");
scanf("%d",&m);
if(strlen(str1)");
else{copystr(str1,str2,m);
printf("result:
%s\n",str2);}
}
voidcopystr(char*p1,char*p2,intm)
{intn=0;
while(n{n++;p1++;}
while(*p1!
='\0')
{*p2=*p1;
p1++;p2++;}
*p2='\0';
}
例9.8w数组中存放n个数,编写函数删除下标为k的元素中的值
程序ltp120.c
#include"stdlib.h"
#defineNUM15
intarrdel(int*,int,int);
voidarrout(int*,int);
intgetindex(intn);
main()
{intn,d,a[NUM]={21,13,24,15,26,27,28,29,30};
n=NUM;
printf("outputoldprimarydata:
\n");
arrout(a,n);
d=getindex(n);
n=arrdel(a,n,d);
printf("outputthedataafterprimary\n");
arrout(a,n);
}
voidarrout(intw[],intm)
{intk;
for(k=0;kprintf("%4d",w[k]));
printf("\n");
}
intarrdel(intw[],intn,intk)
{inti,;
for(i=k;iw[i]=w[i+1];
n--;
returnn;
}
intgetindex(intn)
{inti;
do
{printf("\nentertheindex[0<=i<%d]",n);
scanf("%d",&i);
}while(i<0||i>n-1);
returni;
}
编写函数,对具有10整数的数组进行如下操作:
从第n个元素开始直到最后一个元素,依次向前移一位,输出移动后的结果。
(不考虑移出的元素)
程序xt928.c
#include"stdlib.h"
#include"stdio.h"
#defineNUM15
intmoves(int*,int,int);
voidarrout(int*,int);
main()
{intn=NUM;
inta[NUM],d,i;
for(i=0;ia[i]=random(100);
printf("outputoldprimarydata:
\n");
arrout(a,n);
printf("howmovesthedata:
");
scanf("%d",&d);3
n=moves(a,n,d);
printf("outputthedataafterprimary\n");
arrout(a,n);
}
voidarrout(int*w,intm)
{inti;
for(i=0;iprintf("%4d",*(w+i));
printf("\n");
}
intmoves(int*w,intn,intm)
{inti;
for(i=m;i*(w+i)=*(w+i+1);
n--;
returnn;
}
如果将移出的元素存放在数组最后moves函数如下:
intmoves(int*w,intn,intm)
{inti,end=*(w+m);
for(i=m;i*(w+i)=*(w+i+1);
/*n--;*/
*(w+n-1)=end;
returnn;
}
22、写一函数,完成字符串逆序重放,要求主函数输入和输出字符串。
#include"stdio.h"
#include"string.h"
/*#include"ctype.h"*/
main()
{voidret(charx[],intm);
chars1[80];intn;
scanf("%s",s1);
n=strlen(s1);
ret(s1,n);
printf("%s",s1);
printf("\n");
}
voidret(charx[],intm)
{inti,j,t,k=(m-1)/2;
for(i=0;i{j=m-1-i;
t=x[i];x[i]=x[j];x[j]=t;}
return;
}