编写一个c程序,用指针的方法成功处理,输入3个整数,按由小到大的顺序输出

编写一个c程序,用指针的方法成功处理,输入3个整数,按由小到大的顺序输出,第1张

写法一、(交换指针指向的地址中存放的数据):

#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

  Print "由小到大依次是:";

  For i = LBound(intArray) To UBound(intArray)

    Print strArray(i) & "=" & intArray(i) & Space(1);

  Next i

  Print

  Print

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

/

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/12185777.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存