當前位置:首頁 » 編程語言 » c語言怎麼將兩個數交換
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言怎麼將兩個數交換

發布時間: 2023-08-30 09:54:11

c語言,兩數是怎樣互換順序的

其實就是內存地址的內容互換了;
p1 = &a1,就是取了a1在內存中的地址給p1,這個指針,那麼p1就指向了a1的那塊內存。
同理p2指向a2的內存。
然後*p1是取p1內存中的內容,也就是a1,賦值給a;
然後把*p2把p2內存的內容給*p1指向的內存。然後把a的值給p2指向的內存,*p2 = a;完成值的互換。

⑵ 怎樣用c語言編寫兩值的交換


/*
編寫c語言程序,實現交換兩個變數值的操作。
要求:使用形參為指針的函數swap完成交換功能。
主函數中,使用整型指針從鍵盤輸入兩個整數,通過調用swap完成交換
輸出交換前後的變數值進行比較。
輸入輸出示例:
Input two number:3 4
Before change:a=3,b=4
After change:a=4,b=3

*/
//File: swap.c

#include <stdio.h>
#include <stdlib.h>

void swap(int *a, int *b)
{
int tmp;
tmp=*a;
*a=*b;
*b=tmp;
}

int main()
{
int *a=NULL,*b=NULL;
a=(int *)calloc(1,sizeof(int));
if(!a)
{
perror("calloc a err.");
}
b=(int *)calloc(1,sizeof(int));
if(!b)
{
perror("calloc b err.");
}

printf("Input two number:");
scanf("%d %d",a,b);
printf("Before change:a=%d,b=%d\n",*a,*b);
swap(a,b);
printf("After change:a=%d,b=%d\n",*a,*b);
return 0;
}
C:\mypro>gcc -g -Wall swap.c -o swap

C:\mypro>swap
Input two number:3 4
Before change:a=3,b=4
After change:a=4,b=3

C:\mypro>
程序已調好,直接運行即可。

⑶ 關於C語言交換兩個數(有關指針)

在C語言中,通過函數參數傳遞,進行兩個數的交換,必須採用傳遞指針的方式,同時,在函數中,一定要對兩個指針中的數據內容進行交換才能達到交換實參地址中數據的目的。

如:

//正確的交換函數
voidswap1(int*p1,int*p2)
{
intp;
p=*p1;//通過*引用地址中的數據,進行交換
*p1=*p2;
*p2=p;
}
//錯誤的交換函數
voidswap2(int*p1,int*p2)
{
int*p;
p=p1;//這里進行改變的是形參的值,而形參只是實參的一個副本,形參本身的變化,是不能改變實參的值的!!
p1=p2;
p2=p;
}

PS:要正確認識C語言中的實參與形參,形參在使用中只是實參的副本,若形參是指針,我們可以通過形參改變實參地址中的內容,但無法改變實參本身的值!

⑷ c語言函數的使用,定義一個交換函數 實現2個數字的交換。

void Swap(int&x,int&y)

{

int temp=0;

temp=x;

x=y;

y=temp;

}

int main()

{

int a=1;

int b=2;

Swap(a,b);

cout&lt;&lt;"a="&lt;&lt;a&lt;&lt;endl;

cout&lt;&lt;"b="&lt;&lt;b&lt;&lt;endl;

system("pause");

return 0;

}

運行結果:

(4)c語言怎麼將兩個數交換擴展閱讀:

用指針交換:

void Swap(int*x,int*y)

{

int temp=0;

temp=*x;

*x=*y;

*y=temp;

}

int main()

{

int x=1;

int y=2;

Swap(&x,&y);

printf("x=%d,y=%d ",x,y);

system("pause");

return 0;

}

運行結果:

X=2;Y=1

⑸ C語言.定義一個函數實現交換兩個整數的功能,(用指針做函數參數)。

C語言.定義一個函數實現交換兩個整數的功能,(用指針做函數參數)。 #include<stdio.h>
void swap(int *p,int *q)
{ int t;
t=*p; *p=*q; *q=t;
}
main()
{ int a=5,b=4,*p,*q;
p=&a; q=&b;
swap(p,q);
printf("a=%d b=%d",a,b);
return 0;
}
..
C語言 指針做函數參數 的優點
首先你要認悶跡識函數傳參是怎麼進行的
函數傳參是復制形的,舉個例子說:
void modify(int a)
{
a++;
}
void main()
{
int a=5;
modify(a);
printf("%d",a);
}
這個程序的答案還是5。為什麼?
因為當調用陪備modify(a)時,在執行modify函數時,是另外開辟了一個內存空間,將main中a的值復制過來,modify函數中所有的操作都是相對於這個新開辟的內存空間而言的,對原來的a沒有任何改變。
現在就來說說指針,如果用指針傳參的話那就完全不一樣了,指針(pointer),說白了即是指向變數內存地址。同樣上面的例子:
void modify(int * a)
{
(*a)++;
}
void main()
{
int a=5;
modify(&a);
printf("%d",a);
}
這個答案當然是6
因為你傳進去的是a的地址,所以在modify函數中的操作都是對a地址上的內容進行操作,即是操作a所以modify函數不用返回這個數,main中a的值也會改變。因為大家都是操作同一個內存空間,而上面不用指針,modify操作的是另一個新開辟的內存空間,只是這個內存空間初始值和a一樣。
現在來說說傳參,其實你「為什麼函數參數是字元串的多用指針?」 那句我不是很明白,C中的字元串傳參好像就指針一種形式(除非用結構體)。
何時用指針,何時用拷貝。當傳的參數是一個結構體,而這個結構體比較大,這時最好用指針,因為如果用拷貝的話,單單花在拷貝的時間就要浪費很多,而如果這個函數經常被調用,那麼這效率問題就出現了。
你在子函數中要對你的主調用函數中變數進行操作時也可以用指針做參數,這樣子函數就可以不用return 如果不是用指針的話,就要再子函數的未尾加上一條return x;把這個數返回當返回值。
多看點書,多寫點程序,剛開螞亂並始學都會對指針比較迷茫。寫多了,自然而然就懂了。
c語言中如果函數的參數不用指針而用整數能否實現值交換?
不能
解釋:
1.就像是 你復印了一份文件, 對復印的文檔進行修改 那麼你的原文檔上面能有改動嗎?
C語言; 編寫一個函數,用指針方法實現功能

int find(char* source/*源串*/, char* target/*子串*/)找到返回在源串中的位置,未找到返回-1,如果要改為找到返回1,把return i改為return 1;{ int i,j; int s_len=strlen(source); int t_len=strlen(target); if(t_len>s_len) { return -1; } for(i=0;i<=s_len-t_len;i++) { j=0; int flag=1; if(source[i]==target[j]) { int k,p=i; for(k=0;k<t_len;k++) { if(source[p]==target[j]) { p++; j++; continue; } else { flag=0; break; } } } else { continue; } if(flag==1) { return i; } } return -1;}

C語言,用指向函數指針的知識實現兩個函數求和的功能
兩個函數求和?是兩個數求和的函數吧!
int add(int a, int b){ return a+ b;}
int main()
{
int sum;
int (*fn)(int , int );
fn = add;
sum = fn(3,5);
}
利用指針作函數參數,設計一函數實現將n個元素進行排序
將這n個元素存在數組里,然後用指針類型參數接收即作為形參,然後採用排序演算法對這些元素進行排序即可
C語言,編寫一函數,其功能是求一個長整數各位數字之和。要求使用指針函數實現
其功能是求一個長整數各位數字之和:
int function(long l){
int sum = 0;
String s = l+"";把長整數轉成字元串
for(int i=0;i<s.length();i++){
sum +=Integer.ValueOf(s.charAt(i));
}
return sum;
}
c程序,使用指針作為函數參數,編寫函數實現兩個字元串連接

char *mycat(char *a,const char *b){ char *t; if(!a || !b) return NULL; t=a; while(*a) a++; while(*a++=*b++); return t;}

編一個函數sort,使10個整數按升序排列,在main函數中輸入這10個數,並輸出排好序的數,函數參數用指針實現
#include<stdio.h>
void sort(int *a,int n)
{
int i,j,temp;
for(j=0;j<n;j++)
for (i=0;i<n-j-1;i++)
if (a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
void main()
{
int i,j,temp;
int a[10];
for(i=0;i<10;i++)
scanf ("%d,",&a[i]);
sort(a,10);
for(i=0;i<10;i++)
printf("%d ",a[i] );
printf("\n");
}
c語言編程:用指針變數作函數參數求三個數和

#include "stdafx.h"#include "process.h"double getsum(double *a, double *b, double *c);聲明函數 參數為double類型的指針int main(int argc,char* argv[]){double *sum=new double;*sum = 0;double x = 1.33332;double y = 2.1;double z = 6.4;*sum=getsum(&x, &y, &z);用變數地址做參數調用函數printf("%g\n",*sum);delete sum;釋放空間sum = NULL;system("pause");return 0;}double getsum(double *a, double *b, double *c){ return (*a +*b+ *c );}

⑹ C語言交換兩個變數數值的幾種方法

int 類型為例, 可以用兩種

安全交換: 使用中間變數(無論直接用,還是用指針或者引用, 都一樣)

inta=1,b=2;
intt;
t=a;
a=b;
b=t;

不安全交換: 不使用中間變數,可能會溢出

inta=1,b=2;
a=a+b;
b=a-b;
a=a-b;

⑺ 在C語言中如何將兩個數進行互換

將兩個數進行互換的方法有兩種形式:
1、藉助中間變數完成,此方法直觀,易理解,使用最多
2、不需要中間變數,通過變數身的運算完成交換。
參考代碼:
方法1:
int a=2,b=3,t;
t=a; //先將a存儲到臨時變數t中
a=b; //將b存儲到a中
b=t; //將臨時變數中的原a值存儲到b中
printf("a=%d b=%d\n", a,b );
方法2:
int a=2,b=3,t;
a += b ; //把兩數之和存到a中
b= a-b ; //用兩數和減去b可得原a,存儲到b中
a= a-b ; //因為b現在是原a值,所以,用兩數和減去b(原a)可得 原b,存儲到a中
此方法,還可以用異或運算來實現,原理相同。