⑴ 怎麼編寫C程序:交換數據。對於輸入的兩個變數a和b,交換他們的值並輸出
你這個問題也太簡單了吧,看來你是初學者:
#include<stdio.h>
void main()
{
int a,b,t;
scanf("%d%d",&a,&b);
t=a;a=b;b=t;
printf("\n%d %d\n",a,b);
}
⑵ 求一個數據發送與接收的c語言代碼。在線等。望大神賜教。
#include<netinet/in.h>//forsockaddr_in
#include<sys/types.h>//forsocket
#include<sys/socket.h>//forsocket
#include<stdio.h>//forprintf
#include<stdlib.h>//forexit
#include<string.h>//forbzero
#include<iostream.h>//forC++
#defineSERVER_PORT51844
#defineBUFFER_SIZE1024
#defineFILE_NAME_MAX_SIZE512
intmain(intargc,char**argv)
{
if(argc!=2)
{
cout<<"Usage:./"<<argv[0]<<"ServerIPAddress ";
exit(0);
}
sockaddr_inclient_addr;//設置一個socket地址結構client_addr,代表客戶機internet地址埠
bzero(&client_addr,sizeof(client_addr));//把一段內存區的內容全部設置為0
client_addr.sin_family=AF_INET;//internet協議族
client_addr.sin_addr.s_addr=htons(INADDR_ANY);//INADDR_ANY表示自動獲取本機地址
client_addr.sin_port=htons(0);//0表示讓系統自動分配一個空閑埠
intclient_socket=socket(AF_INET,SOCK_STREAM,0);//用client_socket代表客戶機socket
if(client_socket<0)
{
cerr<<"CreateSocketFailed! ";
exit(1);
}
if(bind(client_socket,(structsockaddr*)&client_addr,sizeof(client_addr)))//把客戶機的socket和客戶機的socket地址結構聯系起來
{
cerr<<"ClientBindPortFailed! ";
exit(2);
}
structsockaddr_inserver_addr;//設置一個socket地址結構server_addr,代表伺服器的internet地址埠
bzero(&server_addr,sizeof(server_addr));
server_addr.sin_family=AF_INET;
if(inet_aton("127.0.0.1",&server_addr.sin_addr)==0)//伺服器的IP地址來自程序的參數
{
cerr<<"ServerIPAddressError! ";
exit(3);
}
server_addr.sin_port=htons(SERVER_PORT);
socklen_tserver_addr_length=sizeof(server_addr);
if(connect(client_socket,(structsockaddr*)&server_addr,server_addr_length)<0)//向伺服器發起連接,連接成功後client_socket代表了客戶機和伺服器的一個socket連接
{
cerr<<"CanNotConnectTo"<<argv[1]<<endl;
exit(4);
}
charfile_name[FILE_NAME_MAX_SIZE];
bzero(file_name,FILE_NAME_MAX_SIZE);
cout<<"PleaseInputFileNameOnServer: ";
cin>>file_name;
charbuffer[BUFFER_SIZE];
bzero(buffer,BUFFER_SIZE);
strncpy(buffer,file_name,strlen(file_name)>BUFFER_SIZE?BUFFER_SIZE:strlen(file_name));
send(client_socket,buffer,BUFFER_SIZE,0);//向伺服器發送buffer中的數據需要接受的文件名
FILE*fp=fopen(file_name,"wb");
if(fp==NULL)
{
cerr<<"File: "<<file_name<<"CanNotOpenToWrite ";
exit(5);
}
bzero(buffer,BUFFER_SIZE);//從伺服器接收數據到buffer中
intlength;
while(length=recv(client_socket,buffer,BUFFER_SIZE,0))
{
if(length<0)
{
cerr<<"RecieveDataFromServer"<<argv[1]<<"Failed! ";
break;
}
intwrite_length=fwrite(buffer,sizeof(char),length,fp);
if(write_length<length)
{
cerr<<"File: "<<file_name<<"WriteFailed ";
break;
}
bzero(buffer,BUFFER_SIZE);
}
cout<<"RecieveFile: "<<file_name<<"FromServer["<<argv[1]<<"]Finished ";
fclose(fp);//關閉文件
close(client_socket);//關閉socket
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語言 將變數A和B的值進行互換 的程序
代碼如下:#include<stdio.h>
#include <stdlib.h>
void swap1(int& a,int& b)//使用中間變數交換兩個值
{
int temp = a;
a = b;
b = temp;
}
void swap2(int& a, int& b) //只用加法、減法、乘法也可以交換兩個值
{
a = a + b;
b = a - b;
a = a - b;
}
void swap3(int& a, int& b) //使用位運算也可以交換兩個值
{
a = a^b;
b = a^b;
a = a^b;
}
void main1mianshiti7()
{
int a1 = 1, b1 = 2;
int a2 = 10, b2 = 15;
int a3 = 78, b3 = 90;
int a = 2147483647, b = 1;
printf("a1=%p,b1=%p", &a1, &b1);
swap1(a1, b1);
swap2(a2, b2);
swap3(a3, b3);
printf("swap after~~~~~~~~~~~~~
");
printf("a1=%d,b1=%d
", a1, b1);
printf("a2=%d,b2=%d
", a2, b2);
printf("a3=%d,b3=%d
", a3, b3);
swap2(a, b);
printf("a=%d,b=%d
", a, b);
system("pause");
}
源代碼截圖:
C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。
盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。
二十世紀八十年代,為了避免各開發廠商用的C語言語法產生差異,由美國國家標准局為C語言制定了一套完整的美國國家標准語法,稱為ANSI C,作為C語言最初的標准。[1]目前2011年12月8日,國際標准化組織(ISO)和國際電工委員會(IEC)發布的C11標準是C語言的第三個官方標准,也是C語言的最新標准,該標准更好的支持了漢字函數名和漢字標識符,一定程度上實現了漢字編程。
C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。
其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。
⑸ C語言程序;交換數值的,求改
int swap(int *q,int*p)//你定義了返回類型卻沒有return返回
{
int t;
t=*q;
*q=*p;
*p=t;
}
//修改方法 1.把int 改成 void;2.添加一個
返回值
比如 return 0;
⑹ 用C語言編寫程序實現兩個整數交換值
#include<stdio.h>
intmain()
{
intx,y,t;
printf("請輸入二個整數: ");
scanf("%d%d",&x,&y);
printf("輸入的二個數為:x=%d,y=%d ");
t=x;
x=y;
y=t;
printf("交換後的二個數為:x=%d,y=%d ");
return0;
}
⑺ 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] 下標後全部交換!
⑻ C語言交換元素程序
vc下新建一個空的win32控制台程序
新建4個文件,main.cpp,main.h,data.cpp,data.h
main.cpp內容如下:
#include<iostream>
usingnamespacestd;
#include"test.h"
ChangeData::ChangeData()//初始化,輸入測試的組數T
{
cout<<"請輸入測試實例的個數:";
cin>>T;
}
DATAChangeData::input()//輸入2行數據
{
DATAd1;
inti=0;
for(i=0;i<3;i++)
{
cin>>d1.rule[i];
}
for(i=0;i<d1.rule[0];i++)
{
cin>>d1.data[i];
}
returnd1;
}
DATAChangeData::change(DATAd2)//交換數據,根據輸入的第一行判斷
{
tf=1;
if(d2.rule[1]==d2.rule[2])
{
cout<<"數據輸入錯誤,第一行的第二個數和第三個數不能相等!"<<endl;
tf=0;
}
if(d2.rule[1]>d2.rule[0])
{
cout<<"數據輸入錯誤,第一行的第二個數不能大於第二個數!"<<endl;
tf=0;
}
if(d2.rule[2]>d2.rule[0])
{
cout<<"數據輸入錯誤,第一行的第三個數不能大於第二個數!"<<endl;
tf=0;
}
if(tf)
{
/*交換數據*/
inttmp=0;
tmp=d2.data[d2.rule[1]-1];
d2.data[d2.rule[1]-1]=d2.data[d2.rule[2]-1];
d2.data[d2.rule[2]-1]=tmp;
/*交換數據*/
}
returnd2;
}
voidChangeData::OutPut(DATAd3)
{
if(tf)//如果有錯誤,則不輸出
{
cout<<"交換後的數據為:"<<endl;
inti=0;
for(i=0;i<3;i++)
{
cout<<d3.rule[i]<<"";
}
cout<<endl;
for(i=0;i<d3.rule[0];i++)
{
cout<<d3.data[i]<<"";
}
cout<<endl;
}
else
{
cout<<"因為測試數據輸入不正確,所以數據沒有交換!"<<endl;
}
}
ChangeData::~ChangeData()
{
}
voidmain()
{
cout<<"**********************************************"<<endl;
cout<<"********"<<endl;
cout<<"********"<<endl;
cout<<"****數據交換元素程序****"<<endl;
cout<<"********"<<endl;
cout<<"********"<<endl;
cout<<"**********************************************"<<endl;
ChangeDatac;//定義一個ChangeData變數c
DATAdad;//定義一個DATA變數dad;
boolrun=1;//中間變數用於判斷是否繼續進行數據交換
charyesno;//中間變數,用於判斷是否繼續進行數據交換
cout<<"開始測試,共有"<<c.T<<"組需要測試"<<endl;
cout<<"請輸入測試的類容(第一行為數據信息,格式為:數字1數字2數字3)"<<endl
<<"數字1為第二行要輸入數字的個數,數字2和數字3為第二行數據需要交換數字的序號"<<endl
<<"第二行為數據的內容也以空格隔離"<<endl;
while(run)
{
for(inti=0;i<c.T;i++)
{
cout<<"第"<<i+1<<"組:"<<endl;
dad=c.input();
dad=c.change(dad);
c.OutPut(dad);
}
boolb=1;
while(b)
{
cout<<"繼續嗎?(Y/N):";//輸入'Y'或者'y'繼續程序
cin>>yesno;
switch(yesno)
{
case'y':
case'Y':
run=1;
b=0;
break;
case'n':
case'N':
run=0;
b=0;
break;
default:
cout<<"輸入錯誤,重新輸入!"<<endl;
cout<<"還";
break;
}
}
}
exit(1);
}
main.h內容如下:
#ifndefCHANGEDATA_H_H
#defineCHANGEDATA_H_H
#include"data.h"
#definetrueTRUE
#definefalseFALSE
classChangeData
{
public:
ChangeData();//構造函數,用於初始化
DATAinput();//輸入數據
voidOutPut(DATAd3);//輸出交換後的數據
DATAchange(DATAD2);//交換數據
~ChangeData();//析構函數
intT;//測試實例的個數
booltf;//用於判斷是否進行數據交換(根據第一行的3個數)
//DATAda;//實例化一個
};
#endif
data.cpp的內容如下:
#include"data.h"
DATA::DATA()//初始化數組rule和data
{
inti=0;
for(i=0;i<3;i++)
{
rule[i]=0;
}
for(i=0;i<100;i++)
{
data[i]=0;
}
}
DATA::~DATA()
{
}
data.h內容如下:
#ifndefDATA_H_H
#defineDATA_H_H
classDATA
{
public:
DATA();//構造函數,用於初始化
intrule[3];//第一行的數據
intdata[100];//第二行的數據
~DATA();//析構函數
};
#endif
⑼ 編寫c語言程序,實現交換兩個變數值的操作。
#include<stdio.h>
int main()
{int a,b,c;
a=5;
b=9;
printf("交換前a=%d,b=%d\n",a,b);
printf("交換後a=%d,b=%d\n",b,a);
return 0;
}
我這樣做可以換值,不過我總覺得有點怪怪的。
⑽ 求一個C語言程序題:編寫一個函數SWAP()實現交換兩個數位置的功能
#include <stdio.h>
void swap(int *p, int *q);//用傳地址的方法交換
void main()
{
int i, j;
scanf("%d%d", &i, &j);//從鍵盤輸入兩個交換的數
swap(&i, &j);//傳入i,j的地址
printf("i = %d, j = %d\n", i, j);//輸出交換後的兩個值
}
void swap(int *p, int *q)
{
int temp;//定義臨時變數 存放中間值
temp = *p;
*p = *q;
*q = temp;
}
注意:不能直接寫void swap(int i, int j);
因為那隻是臨時變數,函數調用完後,便釋放空間,兩個值並沒有交換。