在c语言swap函数中 自定义函数不允许使用数组吗? 如下代码,输出的结果是1 2. swap函数并未起到任何作用,这是为何?

君,已阅读到文档的结尾了呢~~
电子科大10秋学期《C语言》在线作业答案(一,二,三)
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
电子科大10秋学期《C语言》在线作业答案(一,二,三)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer--144.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口博客访问: 369542
博文数量: 104
博客积分: 2110
博客等级: 大尉
技术积分: 954
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: C/C++
&&& #include
&&& void swap1(int x,int y)
&&& {&&&&&&&& //当传入的是整形变量的时候,在内存中另外分配了2个变量,复制了x,y的值
&&&&&&&&&&&&
&&& temp=x;
&&& void swap2(int *x,int *y)
&&& temp=x;
&&& void swap3(int *x,int *y)
&&& temp=*x;
&&& *x=*y;
&&& void swap4(int a[],int b[])
&&& temp=a[0];
&&& a[0]=b[0];
&&& void swap5(int a[],int b[])
&&& temp=*a;
&&& *a=*b;
&&& }&& void swap6(int *a, int *b)&& {&&&&& if(*a& !=& *b)&&&&& {&&&&&&&&&&& *a = *a ^ *b;&&&&&&&&&&&& //a = a ^ b ^如果两个相同数疑惑,将会清0,因此要提前坐下判断&&&&&&&&&&& *b = *a ^ *b;&&&&&&&&&&&& //传统的赋值写法可适用于多种类型,其正确性也是毋庸置疑的。而异或写法除了整型之外,不
敢&&&&&&&&&&& *a = *a ^ *b;&&&&&&&&&&&& //保证其疑惑操作符在作用与浮点或自定义类型时还能正确的工作。&&&&&& }&& }void swap7(int **x, int **y)
&&&&& int *
&&&&&& temp=*x;&&& &&&&&& *x=*y;
&&&&&& *y=
&&& int main()
&&& int x,y;
&&& y=3;&& int *ppx, *&& *ppx = 4;&&& *ppy = 3;
&&& swap1(x,y);
&&& printf("swap1: x:%d,y:%d\n",x,y);//形参传值,不能交换,实际传过去是拷贝的一份,没改变主函数中x,y
&&& swap2(&x,&y);
&&& printf("swap2: x:%d,y:%d\n",x,y);//不能交换,函数中只是地址交换了下,地址指向的内容没有交换
&&& swap3(&x,&y);
&&& printf("swap3: x:%d,y:%d\n",x,y);//能交换,地址指向的内容进行了交换
&&& swap4(&x,&y);
&&& printf("swap4: x:%d,y:%d\n",x,y);//能交换,地址指向的内容进行交换
&&& swap5(&x,&y);
&&& printf("swap5: x:%d,y:%d\n",x,y);//能交换,地址指向的内容进行交换&&& swap6(&x,&y);
&&& printf("swap6: x:%d,y:%d\n",x,y);//能交换,地址指向的内容进行交换&&& swap7(&ppx,&ppy);
&&& printf("swap7: ppx:%d,ppy:%d\n",*ppx,*ppy);//能交换,传入的是指针的地址,然后将指针的内容交换
&&& return 0;
&&& swap1: x:4,y:3
&&& swap2: x:4,y:3
&&& swap3: x:3,y:4
&&& swap4: x:4,y:3
&&& swap5: x:3,y:4&&& swap6: x:4,y:3&&& swap7:ppx:3,ppy:4
阅读(14170) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。排列组合总结:将结果进行输出的实现方法
字体:[ ] 类型:转载 时间:
本篇文章关于排列组合的总结,对结果进行输出做了介绍。需要的朋友参考下
全排列输出:
解法一: 代码如下:&SPAN style="COLOR: #333333"&#include &stdio.h&
/*&& 递归思想:&& 取出数组第一个元素放到最后一个元素 即a[0] 和a[n]交换& 然后一次递归a[n] 个元素的全排列& 1&& 如果数组只有一个元素 n=1 a={1} 则全排列就是{1}& 2& 如果有两个元素 n=2 a={1,2} 则全排列是&&&&&& {2,1}& a[1]与a[2]交换& 交换后求a[2-1]={2}的全排列& 归结到 1&&&&&& {1,2}& a[2]与a[2]交换& 交换后求a[2-1]={1}的全排列& 归结到 1& 3& 如果有三个元素 n=3& a={1,2,3} 则全排列是&&&& {{2,3},1}& a[1]和a[3]交换& 交换后求a[3-1]={2,3} 的全排列 归结到 2& {{1,3},2}& a[2]& a[3] 交换 交换后求 a[3-1]={1,3} 的全排列 归结到 2& {1,2},3}&& a[3]& a[3] 交换 交换后求 a[3-1]={1,2}& 的全排列 归结到 2*/void swap(int a[],int size){&int i,t;&if(size==0)&{&&for(i=0;i&5;i++)&&{&&&printf("%c ",a[i]);&&}&&printf("\n");&&&}&else&{&&for(i=0;i&=i++)& //元素 进行全部循环 &&{&& &&&//写在swap()之前,进行递归传值& 出口点要传入函数&&&t=a[i];a[i]=a[size];a[size]=t;& &&&swap(a,size-1);&&&//数组元素还原& 开始是什么 现在还是什么 位置改变后 变成原来位置& &&&// 便于从a[1] 到a[n] 和最后一个元素交换位置&&&t=a[i];a[i]=a[size];a[size]=t;&
&&}&}}int main(){&int a[5],i;&for(i=0;i&5;i++)&{&&a[i]=97+i;&}&swap(a,4);&//printf("\n%d",m);&return 0;}&/SPAN&
解法二: 代码如下:&SPAN style="COLOR: #333333"&#include &stdio.h&//思路& 分别求出以1 2 3 4 5 开头 剩下数字的全排列& 一直到简化为一个数字void swap(int a[],int k){&int i,m,t=0;&if(k==5)& &{&&for(i=0;i&5;i++)&&{&&&printf("%d ",a[i]);&&}&&//k++;&&printf("\n");&}&for(i=k;i&5;i++)&{&&{m=a[k];a[k]=a[i];a[i]=m;}&&swap(a,k+1);&&{m=a[k];a[k]=a[i];a[i]=m;}&}}
int main(){&int a[5]={1,2,3,4,5};& //进行递归运算的数值&swap(a,0);& //函数调用&&& return 0;}&/SPAN&
m个数中取n个进行排列: 代码如下:#include &stdio.h&void swap(int a[],int b[],int i,int size){&int k,j,&if(i==3)&{&&&for(k=0;k&3;k++)&&&{&&&&printf("%d ",b[k]);&&&}&&&printf("\n");&&&}&else&{&&for(j=0;j&j++)&&{&&&b[i]=a[j];&&&temp=a[j];a[j]=a[size-1];a[size-1]=&&&swap(a,b,i+1,size-1);&&&temp=a[j];a[j]=a[size-1];a[size-1]=&&}&}}
int main(){&int a[5]={1,2,3,4,5},b[3];//求5个数中三个数的全排列&&& swap(a,b,0,5);&return 0;}
m个数取n个进行组合:[10反转置换法]
算法思想:
&&&& (1)& 初始化一个m个元素的数组(全部由0,1组成),将前n个初始化为1,后面的为0。这时候就可以输出第一个组合序列了。&&&& (2)& 从前往后找,找到第一个10组合,将其反转成01,然后将这个10组合前面的所有1,全部往左边推 ,即保证其前面的1都在最左边。这时又可以输出一组组合序列了。&&&& (3)& 重复第(2)步,知道找不到10组合位置。这时已经输出了全部的可能 代码如下:#include &stdio.h&#include &stdlib.h&void putout(int * num,int m){&&for(i=0;i&m;i++)&{&&if(*(num+i))&&&printf("%d ",i+1);&}&printf("\n");}
int check(int *num,int m,int n){&int flag=1,i;//当flag=1时,继续while循环 反之,退出循环&&& for(i=0;i&m-n;i++)&{&&if(*(num+i))&&{&&&&&&&&& return& 1;&&}&}&return 0;}
void choseNum(int *num,int m,int n){&int i,j;&&& putout(num,m);& //输出第一个组合&while(1)&{&&int count=0;& //注意count位置& 就他调试了半天&&//找第一个1 0组合&&for(i=0;i&m-1;i++)&&{&&&if(*(num+i)==1&&*(num+i+1)==0)&&&{&&&&*(num+i)=0;&&&&*(num+i+1)=1;&&&&&&&}&&&if(*(num+i))& //统计前面出现出现1的次数&&&count++;&&&}&&for(j=0;j&i;j++)&&{&&&if(j&count)& //将前面几个数全为1&&&{&&&&*(num+j)=1;&&&}&&&else&&&&&& //后几个数为0&&&{&&&&*(num+j)=0;&&&}&&}&&putout(num,m);&&if(check(num,m,n)!=1)&&&&}&free(num);}
int main(){&int m,n;//从m个数中找n个求组合&printf("从m个数中n个数的组合:");&scanf("%d %d",&m,&n);&&& int *num,i;&//&num=(int *)malloc(sizeof(int)*m);&for(i=0;i&m;i++)&{&&if(i&n)&&&*(num+i)=1;&&else&&&*(num+i)=0;&}&choseNum(num,m,n);&&& return 0;}结果实例:
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具swap函数怎么定义
里面swap有问题
急!急!void quicksort(int c[],int m)
if(m==1){}//这个地方感觉比权哥写的好,因为一个数组不可能为0个元素,如果那样话数组无意思.
if(m==2){if(c[0]>c[1])swap(c[0],c[1]);}
int std=c[0];
int* L=c+1;
int* R=c+(m-1);
夏年已逝557
void swap(int a,int b){int c=a;a=b;b=c;}
为您推荐:
其他类似问题
扫描下载二维码定义数组并使用初始化方法给出数组初值
时间: 8:34:45
&&&& &&&& &&&& &&&&&&&&11-12学年第1学期&&&&&&&&语言程序设计程序设计》《C语言程序设计》实验指导书实验指导书&&&&&&&&1&&&&&&&&&&&&实验一、程序开发环境和数据处理开发环境和实验一、C程序开发环境和数据处理&&&&实验课程:课程学分:实验课程:C语言程序设计课程学分:4学分设课形式:项目类型:设课形式:非独立项目类型:基础项目学时:实验项目:项目学时:8学时实验项目:C程序开发环境和数据处理【实验目的实验目的】实验目的1.学会VisualC++的使用方法,掌握程序编辑、编译、连接、运行及查看运行结果的方法,掌握C程序的基本结构。2.掌握C语言基本数据类型的概念,理解数据类型与运算的关系。3.学会使用C语言的有关运算符,以及包含这些运算符的表达式。【实验内容实验内容】实验内容1.掌握VisualC++集成开发环境的安装、启动和退出的方法。熟悉VisualC++集成开发环境界面和有关菜单的使用方法。2.输入并运行简单C程序,了解C程序的特点和结构。3.编程计算表达式的值。4.编程计算5x2+2x+6的两个根。&&&&5.输入并运行给定程序,对照程序分析运行结果。【实验条件实验条件】实验条件装有MicrosoftVisualC++6.0软件的PC机【实验过程】实验过程实验过程1.安装并启动VisualC++集成开发环境,掌握File、Edit、Project、Build等菜单中常用功能的使用。2.输入并运行下面最简单的C程序。(1)输出HelloWorld字符串。#includestdio.hmian(){printf(HelloWorld!\n)}将输入的文件存盘。通过build菜单或相应的工具按钮对程序进行编译和连接。执行连接后的程序。(2)输入并运行求三个数之和的程序。#includestdio.hmian(){printf(\nsum=%d\n,23+50+46);}输入该程序并存盘,然后进行编译和连接,如果出错,进行调试,直到无错为止。运行程序,并查看运行结果,判断结果正确与否。修改输出格式和三个数据,重新编译、连接和运行程序,分析运行结果。3.编程计算表达式的值。&&&&&&&&2&&&&&&&&&&&&(1)&&&&&&&&&&&&&&&&(2)ln(2π13+e2)(3)2.5+2*7%2/4(4)3*(int)sqrt(34)-sin(6)*5+0x2AF(5)4.5+8%5*(int)(2.7+4.5)/2%44.编程计算5x2+2x+6的两个根。&&&&&&&&提示:对这个具体问题,可以先人工计算出判别式的值,以此作为已知信息就可以编程程序了。&&&&&&&&实验二结构化程序设计实验二、结构化程序设计&&&&实验课程:课程学分:实验课程:C语言程序设计课程学分:4学分设课形式:项目类型:设课形式:非独立项目类型:设计项目学时:实验项目:项目学时:12学时实验项目:结构化程序设计实验目的】【实验目的】1.学会变量和函数的定义及使用,掌握基本输入输出函数的使用。2.掌握赋值语句、关系、逻辑、条件等表达式的含义及使用方法。3.使用顺序结构解决简单的计算问题。4.掌握利用if语句和switch语句实现选择结构程序设计。5.掌握利用while语句、for语句、do_while语句实现循环结构程序设计。6.掌握控制语句break、continue、goto语句的使用方法。【实验内容实验内容】实验内容1.定义求圆球的体积、表面积,求圆柱体的体积、表面积的函数。2.定义函数:doubletmax(double,double,double),它返回三个参数中最大的一个。写一个主函数试验各种参数情况。3.请写一个程序,它打印出1到100之间被6或者7整除的所有的数;修改这个程序,使它打印出1到100之间只被6或者7之一整除的数(不包括同时被两者整除的那些数)。4.scanf函数输入一个百分制成绩,输出成绩等级A、B、C、D、E,其中90~100分为A,80~89分为B,70~79分为C,60~69分为D,60分以下分为E。要求百分制成绩用整数输入,在输入前要有提示,输入后要判断成绩的合理性,对不合理的成绩,应输出出错信息。输出结果中应包括百分制和等级成绩,并要有文字说明。使用if语句和switch语句分别实现。5.写函数计算1!+2!+...+k!。用主函数试验函数对一系列k值计算出的结果。你写出的函数对1到10计算结果都正确吗?如果出现错误,弄清楚是什么原因。这个程序能对k=30得到正确结果吗?(另外,你能只用一重循环完成函数的定义吗?)6.考虑不用函数(例如isprime)直接写出对6~200的偶数验证哥德巴赫猜想的程序(利用循环、条件、break语句等,不使用goto语句)。将这样写出的程序与用定义函数的方式写出的程序比较。例如考察两个函数的行数、字节数,其中各种控制结构的嵌套深度,控制结构使用的个数等。&&&&3&&&&&&&&&&&&实验三实验三、模块化程序设计&&&&实验课程:课程学分:实验课程:C语言程序设计课程学分:4学分设课形式:项目类型:设课形式:非独立项目类型:设计项目学时:实验项目:项目学时:8学时实验项目:模块化程序设计实验目的】【实验目的】1.掌握C语言中定义函数的方法2.掌握函数嵌套调用和递归调用的方法。3.掌握通过“值传递”调用函数的方法。4.理解变量作用域和存在期的概念,掌握全局变量和局部变量,动态变量和静态变量的定义、说明和使用方法。实验内容内容】【实验内容】1.编写程序,设计一个判别素数的函数,在主函数中输入一个整数,调用这个判别函数,并输出是否为素数的信息。2.编写程序,计算下面公式并输出结果。&&&&&&&&C&&&&&&&&mn&&&&&&&&=&&&&&&&&n!(n?m)!m!&&&&&&&&要求:(1)编写一个函数计算n!(2)编写主函数,由键盘输入n和m,调用(1)中的函数完成计算。(3)输入n和m要给出提示,并检查n和m的合理性,不合理的输入应输出错误信息,并不再进行计算。(4)运行程序并计算C8、C7、C8、C7、C8。3.将一个正整数n以相反的顺序输出的递归算法可以如下描述:如果要输出的整数只有一位则输出该整数否则输出整数的个位数字反向输出除个位以外的全部数字结束据此算法设计的递归算法如下:voidprintn(intn){if((n=0)(n=9))printf(%d,n);else{printf(%d,n%10);printn(n/10);}}请编写主程序,调用上述算法,反向输出正整数n。如输入123,则输出321。4.汉诺塔程序的设计。(1)估算所用计算机搬完64个盘子所需的时间;&&&&4&&&&52170&&&&&&&&&&&&(2)请首先人工模拟计算机写出结果,再同实际程序结果对照,理解参数及变量的作用和作用域参考程序如下:#includestdio.hvoidmove(chargetone,charputone){printf(%c---%c\n,getone,putone);}voidhano&&&&i(intn,charone,chartwo,charthree){if(n==1)move(one,three);else{hanoi(n-1,one,three,two);move(one,three);hanoi(n-1,two,one,three);}}main(){printf(Inputthenumberofdisks:);scanf(%d,m);printf(Thestepstomoving%3ddisks:\n,m);hanoi(m,A,B,C);}。(一个三位的十进制数,其三个数位的数字之立方和5.编程打印所有“水仙花数”等于这个数,称其为水仙花数)&&&&&&&&实验四、实验四、数组程序设计&&&&实验课程:课程学分:实验课程:C语言程序设计课程学分:4学分设课形式:项目类型:设课形式:非独立项目类型:综合项目学时:实验项目:项目学时:8学时实验项目:数组程序设计【实验目的】实验目的】1.掌握一维数组与二维数组的定义、使用及初始化方法。2.学习数组作为函数参数的用法。3.掌握字符数组和字符串函数的使用方法。4.掌握数组的一种排序算法,进一步理解模块化程序设计的方法。实验内容内容】【实验内容】1.设计程序按步骤完成下列任务:(1)编写函数sort,实现对整数数组排序的功能,具体排序方法自己选择。(2)主函数中,定义数组并使用初始化方法给出数组初值。测试数据为{16,5,8,12,1,17,3,6,10,2}。(3)主函数中调用sort函数实现对测试数据排序的功能。要求分别打印出排序前后数组元素的值。2.下面程序实现将一个字符串倒置的功能,编写程序,从键盘接受一个字符串,利用给出的函数daozhi判定输入的字符串是否为回文。&&&&5&&&&&&&&&&&&倒置是指将字符串中的字符按相反顺序排列,如abcde倒置后变为edcba。所谓回文是指正序和反序字符排列方式相同的字符串,如abcDcba是回文。字符串倒置的函数如下:voiddaozhi(charstr[]){inti,k,n;charc,*s=for(n=0;s[n]!=\0;n++);/*统计串长*/n--;/*最后一个字符位置*/printf(n=%d\n,n);for(i=0;i=n/2;i++){c=str[i];str[i]=str[n-i];str[n-i]=c;}}提示:使用字符串函数strcpy和strcmp。4.设有下列矩阵:&&&&&&&&&&&&A&&&&&&&&=&&&&&&&&101112&&&&&&&&&&&&&&&&编写程序,用二维数组存储矩阵元素,从键盘输入数据,将矩阵转置后按行输出。&&&&&&&&实验五、实验五、指针和结构体程序设计&&&&实验课程:课程学分:实验课程:C语言程序设计课程学分:4学分设课形式:项目类型:设课形式:非独立项目类型:综合项目学时:实验项目:项目学时:4学时实验项目:指针和结构体程序设计实验目的目的】【实验目的】1.深刻理解普通变量和指针变量、地址的概念,掌握使用指针变量的方法。2.掌握带有指针形参的函数的定义及调用方法。3.正确使用指针操作数组元素、字符串。4.正确使用函数指针调用函数。5.掌握结构类型变量与数组的定义和使用。6.掌握使用结构指针和结构变量名使用结构成员的方法。7.掌握链表的基本概念和操作。实验内容内容】【实验内容】1.编写函数printArray,使用指针实现打印一维整型数组中所有元素的操作。要求:每行打印5个整数。在main函数中定义一个整型数组并初始化,验证printArray函数。2.编写函数swap,实现交换调用函数中两个整型变量值的操作。要求:使用形参为指针的函数swap完成交换功能。3.编写函数strcopy,实现两个字符串拷贝。要求:不允许调用C的字符串函数strcpy。主程序中从键盘输入一个字符串。调&&&&6&&&&&&&&&&&&用strcopy函数实现字符串拷贝操作。输出拷贝后字符串的内容。4.编写函数sort,使用指针实现对一个整型数组从小到大进行排序。5.从键盘输入4个学生的学号、姓名、语文、数学、英语信息,然后计算出每个学生的平均成绩,最后按平均成绩从高到低的顺序输出。要求:学生的信息包括学号、姓名、语文、数学、英语、平均成绩。4个学生的成绩存放在一维数组中。6.下面的程序,构造一个如下图所示的三个结点的链表,并顺序输出链表中结点的数据。h&&&&&&&&10&&&&&&&&20&&&&&&&&30&&&&NULL&&&&&&&&abc7.利用共用体输出一个float类型数据的在计算机内部二进制形式。8.利用指向函数的指针作为参数,构造一个可以对字符串作不同处理的通用的函数要求:通用字符串处理函数名是voidstringHandler(char*,void(*p)(char*));写出两个具体的字符串处理函数:voidfirstUpper(char*);将字符串中每个单词的首字母大写。voidallUpper(char*);将字符串中所有字母大写。然后分别使用stringHandler调用这两个具体处理函数,分别输出结果进行验证。&&&&&&&&实验六、文件程序设计实验六、文件程序设计&&&&实验课程:C语言程序设计实验课程:课程学分:4学分课程学分:设课形式:项目类型:设课形式:非独立项目类型:基础项目学时:实验项目:项目学时:4学时实验项目:文件程序设计实验目的目的】【实验目的】1.掌握文件与文件指针的概念。2.学习使用文件打开、文件关闭、读写文件等基本的文件操作函数。实验内容内容】【实验内容】编写程序,从键盘输入某宿舍楼6家住户某月的水电消耗量及水费和电费标准,计算各户应交纳的水费和电费。数据及要求如下:(1)水费标准为:1.5元/吨,电费标准为:0.5元,6户人家的信息如下表:住户地址水耗(吨)电耗(度)105将表中信息按下面格式组织在文件input.dat中:1.50.378&&&&7&&&&&&&&&&&&5要求程序从文件input.dat中读取上述数据。(2)分别计算每户应交纳的电费、水费以及电费水费的总和。汇总全部住户水费、电费的总和。将计算结果按下面格式写入文件charge.dat中。表格线不必输出,第一行内容可,使用英文或拼音码表示。住户地址水耗(吨)水费(元)电耗(度)电费(元)合计(元)82.3.total.5342&&&&&&&&8&&&&&&&&&&&&&&&& &&&&}

我要回帖

更多关于 c语言swap头文件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信