|
作者: kenter1643 [kenter1643] 论坛用户 | 登录 |
昨天有个C菜鸟来问我 #include<stdio.h> void main() {int i,b,c,a[]={1,10,-3,-21,7,13},*pf,*pe; b=c=1;pf=pe=a; for(i=0;i<6;i++) { if(b<*(a+i)){b=*(a+i);pf=&a[i];} if(c>*(a+i)){c=*(a+i);pe=&a[i];} } i=*a;*a=*pf;*pf=i;i=*(a+5);*(a+5)=*pe;*pe=i; printf("%d,%d,%d,%d,%d,%d\n",a[0],a[1],a[2],a[3],a[4],a[5]); 典型的条件交换程序;(在第一个if语句中指针pf指向最后一个地址&a[5],第二个*pe指向a[3],然后将a[0]和a[5]交换,再将a[5]和a[3]交换) 小弟是一个文盲,表达能力有限; 希望zzzaaa老先生写一个详细的解释(你的理论基础知识好点) |
地主 发表时间: 08/23 10:53 |
回复: 286 [unique] 版主 | 登录 |
#include<stdio.h> void main() { int i,b,c,a[]={1,10,-3,-21,7,13},*pf,*pe; b=c=1;//b存储的最小值,c存储最大值. pf=pe=a;//pf指向最小值,pe指向最大值. for(i=0;i<6;i++) { if(b<*(a+i)) {//如果有值小于当时最小值,就把它设为新的最小值.并让pf指向.b=最小值。 b=*(a+i); pf=&a[i]; } if(c>*(a+i)) {//最大值,原理同上. c=*(a+i); pe=&a[i]; } } //最小值的位置与第0个位置交换。 i=*a; *a=*pf; *pf=i; //最大值的位置与最后一个位置交换。 i=*(a+5); *(a+5)=*pe; *pe=i; //打印 printf("%d,%d,%d,%d,%d,%d\n",a[0],a[1],a[2],a[3],a[4],a[5]); } 该程序有几个不足之处: 1。b,c是多余的,不用也可。 2。b,c前面的假设都等于1是危险的,如果数组中的数都大于1或都小于1,将造成最后数据出错。 当然,作为自己练习的小程序,是没什么问题的。 |
B1层 发表时间: 08/25 13:06 |
回复: kenter1643 [kenter1643] 论坛用户 | 登录 |
哈哈~~~~~~~~编程老手就是老手,连严密性都考虑的这么周到! 这是一个菜鸟从练习中找来问我的题,他妈的他也太菜了,我解释半天他都不明白,286你的解释也详细。不过我要的是那些通俗易懂的口语来解释的。因为那家伙刚学编程,逻辑思维差到死。我虽然会,但语文极差,很难表达出意思。无论如何我都多谢286你的好意!! |
B2层 发表时间: 08/28 10:18 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号