2 回答

TA貢獻(xiàn)2019條經(jīng)驗 獲得超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]); //給數(shù)組a賦值
b[i]=a[i]; //保存數(shù)組以便排序后比對
}
//使用冒泡排序,獲得排序后的數(shù)組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;
}
}
}
//比對數(shù)組
for(i=0;i<5;i++){
if(a[i]==b[i]){
count++;
}
}
if(count!=5){
order();//遞歸調(diào)用函數(shù)。當(dāng)原數(shù)組和排序后數(shù)組元素順序不一樣時候調(diào)用
}
}
int main(){
order();
return 0;
}
你這個程序問題很多,我?guī)湍阈薷牧艘幌拢矣眠f歸做的
?

TA貢獻(xiàn)1998條經(jīng)驗 獲得超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]);
//應(yīng)是i<4。如果i<5,當(dāng)i等于4時,i+1會越界訪問,可能出現(xiàn)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;
}
另外說明一下,代碼有邏輯錯誤,當(dāng)輸入的5個數(shù)滿足a[3]>a[4]時,就會退出while,而此時a[0]到a[3]不一定是由大到小的。如輸入:2 3 4 5 1。應(yīng)改成:
#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;
}
添加回答
舉報