C语言快速排序问题程序第11行的j=j--;为什么改成j--就报错
#include<stdio.h>1#include<stdlib.h>2inta1[101],b1[101];3intn;4intkuaipai(intp,intq)5...
#include<stdio.h> 1
#include<stdlib.h> 2
int a1[101],b1[101]; 3
int n; 4
int kuaipai(int p,int q) 5
{
int k,t1=0,t2=1,temp,i,j; 6
if(p>=q) return 0; 7
k=a1[p];i=p;j=q; 8
while(i!=j) 9
{
if(t1==1) 10
{if(a1[i]>=k) {temp=a1[i];a1[i]=a1[j];a1[j]=temp;j=j--;t1=0;t2=1;} 11
else i++;}
if(t2==1)
{if(a1[j]<=k) {temp=a1[i];a1[i]=a1[j];a1[j]=temp;i++;t1=1;t2=0;}
else j--;}}
kuaipai(p,i-1);
kuaipai(i+1,q);
return 0;
}
int main()
{
FILE *fp,*fw;
fp=fopen("kuaipai.in","r");
fw=fopen("kuaipai.out","w");
int a,b,c,d,e,f,i,j,k;
fscanf(fp,"%d",&n);
for(i=1;i<=n;i++) fscanf(fp,"%d",&a1[i]);
kuaipai(1,n);
for(i=1;i<=n;i++) fprintf(fw,"%d ",a1[i]);
return 0;
}
j=j--;就是对的,运行有正确结果,但改成j--;就报错
报错为“已停止运行”
使用的是Dev-C++ 展开
#include<stdlib.h> 2
int a1[101],b1[101]; 3
int n; 4
int kuaipai(int p,int q) 5
{
int k,t1=0,t2=1,temp,i,j; 6
if(p>=q) return 0; 7
k=a1[p];i=p;j=q; 8
while(i!=j) 9
{
if(t1==1) 10
{if(a1[i]>=k) {temp=a1[i];a1[i]=a1[j];a1[j]=temp;j=j--;t1=0;t2=1;} 11
else i++;}
if(t2==1)
{if(a1[j]<=k) {temp=a1[i];a1[i]=a1[j];a1[j]=temp;i++;t1=1;t2=0;}
else j--;}}
kuaipai(p,i-1);
kuaipai(i+1,q);
return 0;
}
int main()
{
FILE *fp,*fw;
fp=fopen("kuaipai.in","r");
fw=fopen("kuaipai.out","w");
int a,b,c,d,e,f,i,j,k;
fscanf(fp,"%d",&n);
for(i=1;i<=n;i++) fscanf(fp,"%d",&a1[i]);
kuaipai(1,n);
for(i=1;i<=n;i++) fprintf(fw,"%d ",a1[i]);
return 0;
}
j=j--;就是对的,运行有正确结果,但改成j--;就报错
报错为“已停止运行”
使用的是Dev-C++ 展开
展开全部
经过测试j=j--相当于j没有作任何运算。你可以单独写一个程序验证一下。如
int j=1;
j=j--;
printf("%d\n",j);
你会发现输出值为1
至于为什么,我还不清楚。
另外,经过我的调试,你把j=j--和对应的i++去掉,这个程序也能输出正确结果。由于测试数据有限,不能保证你的程序是正确的。至于下面这两句
kuaipai(p,i-1);
kuaipai(i+1,q);
我觉得第一句应该改为kuaipai(p,j-1);
但是我的测试数据显示这两种都正确,可能是测试数据有限,碰巧正确的缘故吧。反正如果你的程序哪次的结果出错了,可以试着这样改一下。
int j=1;
j=j--;
printf("%d\n",j);
你会发现输出值为1
至于为什么,我还不清楚。
另外,经过我的调试,你把j=j--和对应的i++去掉,这个程序也能输出正确结果。由于测试数据有限,不能保证你的程序是正确的。至于下面这两句
kuaipai(p,i-1);
kuaipai(i+1,q);
我觉得第一句应该改为kuaipai(p,j-1);
但是我的测试数据显示这两种都正确,可能是测试数据有限,碰巧正确的缘故吧。反正如果你的程序哪次的结果出错了,可以试着这样改一下。
展开全部
如果你使用的是TC系统,这个程序里的错误在主函数,
定义语句应该移到操作语句之前,即int 变量定义语句 应该移动到fp文件打开语句之前。
11语句中,将j=j--;改为j--;是没有错误的。
j=j--;才是个含义不清楚的问题语句。
定义语句应该移到操作语句之前,即int 变量定义语句 应该移动到fp文件打开语句之前。
11语句中,将j=j--;改为j--;是没有错误的。
j=j--;才是个含义不清楚的问题语句。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
显然是因为没了;号。j=j--本身就包含了j--这个操作,它和{j=j;j--;}是一样的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不懂你意思啊,你这不是语法问题么,少了个分号肯定报错啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
把抱错信息帖出来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询