写法一、(交换指针指向的地址中存放的数据):
#include<iostream>
using namespace std;
int main()
{
int a,b,c;
intp1,p2,p3;
int temp;
cout<<"输入3个整数:"<<endl;
cin>>a>>b>>c;
p1=&a;
p2=&b;
p3=&c;
if(p1>p2)
{
temp=p1;
p1=p2;
p2=temp;
}
if(p1>p3)
{
temp=p1;
p1=p3;
p3=temp;
}
if(p2>p3)
{
temp=p2;
p2=p3;
p3=temp;
}
cout<<'\n'
<<"按由小到大顺序输出:"<<'\n'
<<a<<'\n'
<<b<<'\n'
<<c<<'\n';
return 0;
}
写法二、(交换指针指向的地址):
#include<iostream>
using namespace std;
int main()
{
int a,b,c;
intp1,p2,p3;
inttemp;
cout<<"输入3个整数:"<<endl;
cin>>a>>b>>c;
p1=&a;
p2=&b;
p3=&c;
if(p1>p2)
{
temp=p1;
p1=p2;
p2=temp;
}
if(p1>p3)
{
temp=p1;
p1=p3;
p3=temp;
}
if(p2>p3)
{
temp=p2;
p2=p3;
p3=temp;
}
cout<<'\n'
<<"按由小到大顺序输出:"<<'\n'
<<p1<<'\n'
<<p2<<'\n'
<<p3<<'\n';
return 0;
}
写法三、用函数指针
#include<stdioh>
#include<stdlibh>
int main()
{
int a,b,c,p1,p2,p3;
printf("请输入三个整数:");
scanf("%d%d%d",&a,&b,&c);
p1=&a;
p2=&b;
p3=&c;
exchange(p1,p2,p3);
printf("%d%d%d",a,b,c);
return 0;
}
void swap(intx,inty)
{
int temp;
if(x>y)
{
temp=x;
x=y;
y=temp;
}
}
void exchange(p1,p2,p3)
{
swap(p1,p2);
swap(p1,p3);
swap(p2,p3);
}
大体这样,不太好看,不过能用
如果你的输入3个数是要分别输入而不是用argument那还得加几行去分别promt3个数。
void order(char argv[])
{
double values[3];
values[0]=atof(argv[1]);
values[1]=atof(argv[2]);
values[2]=atof(argv[3]);
double min=&values[0];
double max=&values[0];
double mid;
if(values[1]<min)
{
min=&values[1];
}
if(values[2]<min)
{
min=&values[2];
}
if(values[1]>max)
{
max=&values[1];
}
if(values[2]>max)
{
max=&values[2];
}
mid=(values[0]+values[1]+values[2])-min-max;
cout<<min<<" "<<mid<<" "<<max<<endl;
cin>>mid;
}
int main(int argc, char argv[])
{
order(argv);
return 0;
}
Private Sub Command1_Click()
Dim intArray(2) As Integer, strArray(2) As String
Print "您输入的三个数为:";
For i = LBound(intArray) To UBound(intArray)
intArray(i) = InputBox(Chr(120 + i) & "=",,100)
strArray(i) = Chr(120 + i)
Print Chr(120 + i) & "=" & CInt(intArray(i)) & Space(1);
Next i
Call Sort(intArray, strArray)
Print "由小到大依次是:";
For i = LBound(intArray) To UBound(intArray)
Print strArray(i) & "=" & intArray(i) & Space(1);
Next i
End Sub
Private Sub Sort(ByRef a() As Integer, ByRef b() As String)
Dim t1 As Integer, t2 As String
For i = LBound(a) To UBound(a) - 1
For j = i + 1 To UBound(a)
If a(j) < a(i) Then
t1 = a(i)
a(i) = a(j)
a(j) = t1
t2 = b(i)
b(i) = b(j)
b(j) = t2
End If
Next j
Next i
End Sub
#include <iostream>
using namespace std;
void max_min(int p); //声明函数
int main()
{
int array[3] = {0}; //初始化
cout<<"请输入3个整数:";
for(int i = 0;i < 3;i++)
cin>>array[i];
cout<<"三个整数按大到小排列为:";;
max_min(array); //调用函数按大到小排列个数
return 0;
}
void max_min(int p)
{
int max = 0;
if((p+1) > (p+0)) //如果第个数大于第个数
{
max = (p+0);
(p+0) = (p+1);
(p+1) = max;
} //交换第个和第个数
if((p+2) > (p+1)) //如果第个数大于第个数
{
max = (p+1);
(p+1) = (p+2);
(p+2) = max;
} //交换第个和第个数
if((p+1) > (p+0)) //执行以上两段语句后
{ //如果第个数大于第个数
max = (p+0);
(p+0) = (p+1);
(p+1) = max;
}
for(int j = 0;j < 3;j++)//用循环语句输出
cout<<(p+j)<<" ";
cout<<endl;
}
代码没有用C++的string类, *** 作目标还是C的char 型数组,所以不能用>和<来判断字符串的大小,要用库函数strcmp比较两个字符串的大小。
拷贝到sort函数中的指针只是实参指针的“值”,所以在函数中改变那些指针的值在函数中有用,效果返回不到主函数中去,就是说在sort中输出结果是有效的,在主函数中字符串的大小还是原样子,不会有排序结果。这问题用3个办法解决:一是就按目前结构写sort,在sort中输出比较结果;二是在sort中通过指针直接交换主函数中的数组内容;三是有网友提出的用二级指针来交换主函数中的指针。
如果用C++的string类,那就十分简单了, *** 作字符串就像 *** 作普通变量一样。
下面提供一个拷贝数组内容的代码供参考,并可续问。
代码文本:
//#include "stdafxh"//vc++ 60 Maybe should add this line
#include <string>
#include <iostream>
using namespace std;
int main(int argc,char argv[]){
void sort(char,char,char);
char s1[255],s2[255],s3[255];
//char p1,p2,p3;
cout << "Enter the 3 strings(Separated by ' ')\n";
cin>>s1>>s2>>s3;
//p1=s1;p2=s2;p3=s3;
sort(s1,s2,s3);
cout << "After the sorting:\n";
cout<<s1<<endl<<s2<<endl<<s3<<endl;
return 0;
}
void sort(char p1,char p2,char p3){
char r[255],t;
if((t=strcmp(p1,p2))>0)
strcpy(r,p1),strcpy(p1,p2),strcpy(p2,r);
if((t=strcmp(p1,p3))>0)
strcpy(r,p1),strcpy(p1,p3),strcpy(p3,r);
if((t=strcmp(p2,p3))>0)
strcpy(r,p2),strcpy(p2,p3),strcpy(p3,r);
}
#include <iostream> //头文件
using namespace std;
void swap(int p1,int p2); //用于交换2个变量的功能函数
int main()
{
int n1,n2,n3;
int p1,p2,p3;
cout<<"请依次输入3个整数:";
cin>>n1>>n2>>n3;
p1=&n1;
p2=&n2;
p3=&n3;
if(n1>n2)
swap(p1,p2);
if(n1>n3)
swap(p1,p3);
if(n2>n3)
swap(p2,p3);
cout<<"排序后结果为:"<<n1<<" "<<n2<<" "<<n3<<endl;
return 0;
}
void swap(int p1,int p2)
{
int p;
p=p1;
p1=p2;
p2=p;
}
指针法:
#include<stdioh>
#define N 3
void main()
{
int i,j;
int k,a[N]={0},p=a;
printf("please input a[N]:",N);
for(i=0;i<N;i++)scanf("%d",&a[i]);
for(i=0;i<N;i++)
for(j=i;j<N;j++)
if((p+i)>(p+j))
{
k=(p+i);
(p+i)=(p+j);
(p+j)=k;
}
for(i=0;i<N;i++)
printf("%d ",(p+i));
printf("\n");
}
/运行结果:
please input a[N]:6 3 7
3 6 7
/
#include<stdioh>
void main()
{
int i,j;
int k,a[3]={0};
printf("please input a[3]:");
for(i=0;i<3;i++)scanf("%d",&a[i]);
for(i=0;i<3;i++)
for(j=i;j<3;j++)
if(a[i]>a[j])
{
k=a[i];
a[i]=a[j];
a[j]=k;
}
for(i=0;i<3;i++)
printf("%d ",a[i]);
printf("\n");
}
/运行结果:
please input a[5]:5 9 6
5 6 9
/
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)