注意:部分函数名我运用的是名字缩写(zxr),请自行更改。
1、编写子函数,对传送过来的三个数按由小到大的顺序排列,并通过形参传回调用函
数。
#include <stdio.h>
#include <stdlib.h>
void zxr(int* a,int* b,int* c)
{
int d;
if(*a>*b)
{
d=*a;
*a=*b;
*b=d;
}
if(*a>*c)
{
d=*a;
*a=*c;
*c=d;
}
if(*b>*c)
{
d=*b;
*b=*c;
*c=d;
}
}
int main()
{
int x,y,z;
printf("please input three numbers:");
scanf("%d %d %d",&x,&y,&z);
zxr(&x,&y,&z);
printf("%d<%d<%d",x,y,z);
return 0;
}
2、编写函数int find(int *p,int n,int x),在指针 p 所指的数组中查找整型数 x,
如果 x 在数组中,则该函数返回 1,否则返回 0。n 为数组的大小。
#include <stdio.h>
#include <stdlib.h>
int find(int* p,int n,int x)
{
int j;
for(j=0;j<n;j++,p++)
{
if(*p==x)
{
return 1;
}
}
return 0;
}
int main()
{
int t,m,i,a;
printf("please input a number 'n':");
scanf("%d",&m);
int s[m];
printf("please input an array:");
for(i=0;i<m;i++)
{
scanf("%d",&s[i]);
}
printf("please input a number 'x':");
scanf("%d",&a);
t=find(s,m,a);
printf("output:%d\n",t);
return 0;
}
3、编写一函数,将一个 3*3 的整型矩阵转置,用指针实现。
#include<stdio.h>
void zxr(int (*p)[3])
{
int i,j,temp;
for(i=0;i<3;i++)
{
for(j=0;j<i;j++)
{
temp=*(*(p+i)+j);
*(*(p+i)+j)=*(*(p+j)+i);
*(*(p+j)+i)=temp;
}
}
}
int main()
{
int a[3][3];
int (*p)[3],i,j,temp;
p=a;
printf("please input an array:");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
zxr(p);
printf("after zhuanzhi:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
printf("%d ",*(*(p+i)+j));
}
printf("\n");
}
return 0;
}
4、有 n 个整数,使前面各数顺序向后移 m 个位置,最后 m 个数变成最前 m 个数(如下
图所示)。写一函数实现以上功能,在主函数中输入 n 个整数和输出调整后的 n 个整数。
#include <stdio.h>
#include <stdlib.h>
void zxr(int a[],int q,int t)
{
int *p,end;
end=*(a+q-1);
for (p=a+q-1;p>a;p--)
*p=*(p-1);
*a=end;
t--;
if (t>0)
{
zxr(a,q,t);
}
}
int main()
{
int n,m,i;
printf("please input two numbers 'n' and 'm':");
scanf("%d %d",&n,&m);
int s[n];
printf("the input:");
for(i=0;i<n;i++)
{
scanf("%d",&s[i]);
}
zxr(s,n,m);
for (i=0;i<n;i++)
printf("%d ",s[i]);
printf("\n");
return 0;
}
5、在主函数中输入 10 个不等长的字符串。用另一个函数对它们按升序排序,然后在
主函数中输出这 10 个已排序的字符串。
#include <stdio.h>
#include <stdlib.h>
void zxr(char s[10][6])
{
int i,j;
char *p,t[10];
p=t;
for(i=0;i<9;i++)
{
for(j=0;j<9-i;j++)
{
if(strcmp(s[j],s[j+1])>0)
{
strcpy(p,s[j]);
strcpy(s[j],s[j+1]);
strcpy(s[j+1],p);
}
}
}
}
int main()
{
int i;
char a[10][6];
printf("input 10 strings:");
for(i=0;i<10;i++)
{
scanf("%s",&a[i]);
}
zxr(a);
for(i=0;i<10;i++)
{
printf("%s\n",a[i]);
}
return 0;
}