1. 输入3个整数,按由小到大的顺序输出
源代码:
#include <stdio.h>
void swap(int *p1,int *p2)
{
int t;
t=*p1;
*p1=*p2;
*p2=t;
}
void sort(int *a,int *b,int *c) //三整数排序,根据大小调用交换函数
{
if(*a>*b)
swap(a,b);
if(*b>*c)
swap(b,c);
if(*a>*b)
swap(a,b);
}
int main()
{
int a,b,c;
int *p1,*p2,*p3;
while(scanf("%d %d %d",&a,&b,&c)!=EOF)
{
p1=&a;
p2=&b;
p3=&c;
sort(p1,p2,p3);
printf("%d %d %d\n",*p1,*p2,*p3);
}
return 0;
}
程序截图:
2.输入3个字符串(串长不超过1000),按由小到大的顺序输出
源代码:
法一:通过改变指针变量指向完成排序
#include <stdio.h>
#include <string.h>
#define maxlen 1010
void swap(char *p1,char *p2)
{
char t[maxlen];
strcpy(t,p1);
strcpy(p1,p2);
strcpy(p2,t);
}
void sort(char *a,char *b,char *c)
{
if(*a>*b)
swap(a,b);
if(*b>*c)
swap(b,c);
if(*a>*b)
swap(a,b);
}
int main()
{
char s1[maxlen],s2[maxlen],s3[maxlen];
char *p1,*p2,*p3;
while(gets(s1)!=NULL)
{
gets(s2);
gets(s3);
p1=s1;
p2=s2;
p3=s3;
sort(p1,p2,p3);
puts(s1);
puts(s2);
puts(s3);
}
return 0;
}
法二:通过在主函数中调用strcmp函数完成排序:利用了“数组就是指针”的特点
#include <stdio.h>
#include <string.h>
#define maxlen 1010
void swap(char *p1,char *p2)
{
char t[maxlen];
strcpy(t,p1);
strcpy(p1,p2);
strcpy(p2,t);
}
void sort(char *a,char *b,char *c)
{
if(*a>*b)
swap(a,b);
if(*b>*c)
swap(b,c);
if(*a>*b)
swap(a,b);
}
int main()
{
char s1[maxlen],s2[maxlen],s3[maxlen];
while(gets(s1)!=NULL)
{
gets(s2);
gets(s3);
if(strcmp(s1,s2)>0)
swap(s1,s2);
if(strcmp(s2,s3)>0)
swap(s2,s3);
if(strcmp(s1,s2)>0)
swap(s1,s2);
puts(s1);
puts(s2);
puts(s3);
}
return 0;
}
程序截图:
3. 输入10个整数,将其中最小的数与第一个数对换,最大的数与最后一个数对换。用3个函数实现:①输入10个数 ②进行处理 ③输出10个数
※特别注意第一个数就是最大值的情况:将其与最小值交换后,最小值是第一个数,但max与min的指针指向未变,即max还是指向第一个数,接下来会将第一个数与最后一个数交换,出现错误。因此这里要加一步判断。