2 回答
TA贡献2019条经验 获得超9个赞
#include<stdio.h>
void order(){
int i,j,a[5],b[5],temp,count=0;
printf("enter data:\n");
for(i=0;i<5;i++){
scanf("%d",&a[i]); //给数组a赋值
b[i]=a[i]; //保存数组以便排序后比对
}
//使用冒泡排序,获得排序后的数组b
for(i=0;i<5;i++){
for(j=0;j<4-i;j++){
if(b[j]<b[j+1]){
temp=b[j];
b[j]=b[j+1];
b[j+1]=temp;
}
}
}
//比对数组
for(i=0;i<5;i++){
if(a[i]==b[i]){
count++;
}
}
if(count!=5){
order();//递归调用函数。当原数组和排序后数组元素顺序不一样时候调用
}
}
int main(){
order();
return 0;
}
你这个程序问题很多,我帮你修改了一下,我用递归做的
TA贡献1998条经验 获得超6个赞
#include<stdio.h>
int main()
{
int a[5],i,flag=0;
while(flag==0)
{
printf("enter data:\n"); for(i=0;i<5;i++)
scanf("%d",&a[i]);
//应是i<4。如果i<5,当i等于4时,i+1会越界访问,可能出现a[4]<a[5]的情况,从而使flag=0;
for(i=0;i<4;i++)
{
if(a[i]>a[i+1])
flag=1;
else
flag=0;
}
}
return 0;
}
另外说明一下,代码有逻辑错误,当输入的5个数满足a[3]>a[4]时,就会退出while,而此时a[0]到a[3]不一定是由大到小的。如输入:2 3 4 5 1。应改成:
#include<stdio.h>
int main()
{
int a[5],i,flag=0;
while(flag==0)
{
flag=1;
printf("enter data:\n"); for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(i=0;i<4;i++)
{
if(a[i]<a[i+1])
flag=0;
break;
}
}
return 0;
}
添加回答
举报