❶ c語言數值的交換
樓上的這個
a
=
a+b;
b
=
a-b;
a
=
a-b;
是個方法,是符合我們數學思維的方法,也是最初接觸C語言的人可能想到的方法。
但是這樣編程很不直觀,不如t=a;a=b;b=t;來得快。
似乎在C++中有swap(a,
b)模板函數,直接實現a,b交換。
想玩高級一點的話,可採用「換標不換值」的方法,用數組元素作為數組的下標,這種方法換邏輯不換存儲。
#include
<stdio.h>
void
main()
{
int
a=10,b=20;
int
array1[2]
=
{10,20};
//存a、b值
int
array2[2]
=
{0,1};
//存下標
b
=
array1[array2[0]];
a
=
array1[array2[1]];
printf("a=%d,
b=%d\n",a,b);
}
這個方法在對結構體數組值交換中非常好用!因為結構體數組一般每個成員都有很多個值,如:
struct
student
{
int
num;
double
score;
char
name[20];
}stu[5]={{1,98,"ziguowen"},{2,88,"dongda"},{3,78,"haha"}};
//交換stu[0]和stu[1],需要
int
n;
double
s;
char
n[20];
n
=
stu[0].num;
stu[0].num
=
stu[1].num;
stu[1].num
=
n;
s
=
stu[0].score;
stu[0].score
=
stu[1].score;
stu[1].score
=
s;
strcpy(n,
stu[0].name);
strcpy(stu[0].name,
stu[1].name);
strcpy(stu[0].name,s);
//而用下標的話,一個賦值語句即可,直接交換stu[0]
和
stu[1]
下標後全部交換!
❷ 5、使用C語言編寫一個函數,用於交換兩個變數的值(地址傳遞)。
不知道你要交換的兩個變數類型,所以這里以整型數據交換為例,以下swap函數實現了交換兩個整型變數值的功能:
#include<stdio.h>
//交換給定指針指向整型變數的值。
//參數:
// a->指向第一個變數的指針
// b->指向第二個變數的指針
voidswap(int*a,int*b);
intmain(intargc,intargv)
{
inta=3,b=5;
printf_s("交換前:a=%d,b=%d ",a,b);
swap(&a,&b);
printf_s("交換後:a=%d,b=%d ",a,b);
return0;
}
//交換給定指針指向整型變數的值。
//參數:
// a->指向第一個變數的指針
// b->指向第二個變數的指針
voidswap(int*a,int*b)
{
//聲明一個臨時變數,保存第一個指針指向變數
//的值。
//其中*a是取出a指針指向變數的值
inttemp=*a;
//將b指針指向的值賦值給a指針指向變數
(*a)=(*b);
//將臨時變數temp中保存的a指針指向變數的值賦值給
//b指針指向的變數。
(*b)=temp;
}
以上代碼運行結果如下:
❸ 字元交換C語言
實現字元交換可以藉助一個中間字元變數,比如要把字元變數a和b裡面的內容交換,可以藉助一個中間變數c,代碼如下:
intmain()
{chara='O',b='J',c;
c=a;a=b;b=c;}
這樣a和b裡面的內容就會交換了。
當然,如果你需要寫成一個函數,那必須傳地址,否則函數裡面的值換了,對函數外的變數沒有影響。如果是寫成函數要這樣:
intswap(char*a,char*b)
{charc;
c=*a;
*a=*b;
*b=c;}
然後在主函數里可以這么調用:
intmain()
{chara='O',b='J';
swap(&a,&b);}
❹ c語言如何編寫兩個數字數值交換
我們用C語言的時候,經常需要將兩個數字交換,那麼如何實現呢?下面小編給大家分享一下。
工具/材料
Dev C++
01
首先我們在Dev C++軟體中新建一個C語言項目,如下圖所示
02
接下來我們在C語言文件中聲明兩個數字並輸出,如下圖所示
03
然後用一個中間變數對他們進行交換,如下圖所示
04
最後運行編寫好的C語言文件,我們就可以看到如下圖所示的交換結果了
❺ C語言編程,如何做兩數交換程序
現設一個變數a
int
a;
a=m;把m的值賦給a,此時a=3,m=3,n=5;
m=n;把n的值賦給m,此時a=3,m=5,n=5;
n=a;把a的值賦給n,此時a=3,m=5,n=3;
就完成m和n的兩數交換
❻ 在C語言中如何將兩個數進行互換
方法1: 使用一個臨時變數來進行保存,這應該也是大家最容易想到的方法,話不多說,直接上代碼。
參考代碼:
#include<stdio.h>
intmain()
{inta=4;
intb=5;
intnTemp;
printf("交換前a,b的值為: ");
printf("a=%d ",a);
printf("b=%d ",b);
printf(" ");
nTemp=a;
a=b;
b=nTemp;
printf("----------------------------------我是分割線------------------------------------ ");
printf("交換前a,b的值為: ");
printf("a=%d ",a);
printf("b=%d ",b);
return0;
}
運行結果:
❼ C語言交換變數值的幾種方法
方法一:三變數交換。
#include<stdio.h>
intmain(void)
{
inta,b;
scanf("%d%d",&a,&b);
intt=a;a=b;b=t;
printf("%d%d ",a,b);
return0;
}
方法二:加減交換
#include<stdio.h>
intmain(void)
{
inta,b;
scanf("%d%d",&a,&b);
a=a+b;
b=a-b;
a=a-b;
printf("%d%d ",a,b);
return0;
}
方法三:異或交換
#include<stdio.h>
intmain(void)
{
inta,b;
scanf("%d%d",&a,&b);
a=a^b;b=b^a;a=a^b;//可寫成a^=b^=a^=b;
printf("%d%d ",a,b);
return0;
}
方法四(黑盒測試下):不交換
#include<stdio.h>
intmain(void)
{
inta,b;
scanf("%d%d",&a,&b);
printf("%d%d ",b,a);
return0;
}
❽ C語言交換兩個數字的代碼
首先要捋順一下,先看第一段程序。這段程序的目的就是為了將兩個變數的數值進行交換。此時要明白指針的使用方法,這里的交換函數是void swap(int &x, int &y),即無返回值的函數,函數傳遞的參數是int &x和int &y,這兩個東西是什麼呢?這兩個東西是定義的引用,而這個我們就可以理解為是兩個用來存儲傳遞進來的參數的地址的變數(這么說可能有點亂,其實就是將調用該函數是時傳遞進來的變數的地址給這兩個參數),所以如果在這個swap函數中對這兩個參數操作時,實際上就是對傳遞進來的那兩個變數進行操作。至於你問的關於整型的問題,這個也很好理解,在c語言里地址就是整型的,而這兩個變數定義的時候也是int整型的,所以無論是地址還是值都是整型的,而又因為*a和*b是一個指針指向的值,所以*a、*b是整型,而&a、&b是指針的地址,所以也是整型。
接下來看你第二段程序(你自己寫的這個):
看程序前請仔細查看關於函數方面的資料,至於你這個return為什麼是錯的這個問題其實很簡單,首先要了解一個函數的定義,定義函數簡單的可以分為有返回值和無返回值的,有返回值的定義類似這樣
int abc();
float bcd();
如上所示,函數名什麼的都好理解,函數名前面的"int"和"float"是指函數返回的類型,即你這個函數在執行完之後需要用return語句返回一個值,而這個返回類型就是指這個返回值的類型。
還有一種是不需要返回值的,即
void abc();
void cde();
這類函數在執行完成後不需在最後添加return語句來返回值,如果添加了也用不了。
而你寫的這個函數定義的是
int swap(int x,inty)
這里聲明的是一個需要返回整型變數的函數,而這個函數里你的返回值語句return後沒有跟任何變數或值,程序不知道你返回的是什麼東西,所以會報錯,這里一般都會填寫return 0;表示程序執行完成。當然這個0也可以換成整型的變數。
最後說一下你這個程序,你這個程序在執行完成後是不會將需要交換的變數a和b的值進行交換的。這個關繫到形參和實參的概念,請仔細查看書籍或看一些例子,你這個只是將形參的值交換了,真正的需要交換的值不會改變,也就是說你只是將a和b的兩個值復制了一份,然後將復制了的那個交換了,當swap函數完成後又將復制了的那份刪除掉了,所以說,不管怎樣最初的a和b都沒有受到任何影響。
❾ 怎樣用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語言 交換 問題
#include<stdio.h>
voidswap(int*a,int*b){
intt=*a;
*a=*b;
*b=t;
}
intmain(){
inta,b,c,t;
printf("請輸入三個整數:");
scanf("%d%d%d",&a,&b,&c);
if(a<b)swap(&a,&b);
if(a<c)swap(&a,&c);
if(b<c)swap(&b,&c);
printf("從大到小的順序是:%d>%d>%d ",a,b,c);
return0;
}