⑴ 怎么编写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);
因为那只是临时变量,函数调用完后,便释放空间,两个值并没有交换。