自己写代码的错误总结(持续更新)

来源:互联网 发布:linux引导win10 编辑:程序博客网 时间:2024/04/29 22:59

1. while循环常常忘了变量自增。

2. 字符串快速排序遇到的问题:

我遇到的问题:字符串排序直接调用的是整形数组的快速排序方法。
 字符串一个元素是一个字符类型的,只占有一个字节,如果调用的是整形的排序,每个元素是int型,要占用4个字节,对每个元素交换时会破坏元素的结构,可能导致乱码
 比如,本来交换一个字节长度的元素,而错误的交换了两个四字节的元素,导致了错误!!

字符串使用快速排序一定要注意排序函数中输入字符串的类型!!

3. 交换两个数时引入了中间变量,这个错误容易在排序时出现!

char a[]="abca";char temp;temp=a[0];swap(&a[1],&temp);puts(a);
输出的是aaca;

为什么呢?因为交换的是temp和a[1];而不是用a[0]与a[1]交换;

交换后,temp=a[1]=b;  a[1]=temp=a; a[0]并没有改变!

在选择排序中,

void SelectSort2(char *s, int n){int i,j,k;char temp;for(i=0;i<n-1;i++){temp = s[i];k = i + 1;for(j=i+2; j<n; j++)if(s[j]<s[k])k=j;if(s[k]<s[i]){swap(&s[k],&temp);}}}
以上代码因为在交换过程中引入了中间变量,不能达到交换s数组的效果;

应该把temp变量去掉,并改为swap(&s[k],&s[i]);

4. 

printf("%.1lf\n",100);
输出的是0.0


0 0
原创粉丝点击