亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

幫忙看看在c語言中 if else函數的問題?

幫忙看看在c語言中 if else函數的問題?

慕沐林林 2021-07-08 11:07:20
讓輸入由大到小的五個數,為什么如下寫輸入5 4 3 2 1會讓重新輸入呢,但是去掉else flag=0這一語句輸入5 4 3 2 1 就正確了,想了半天不懂錯在哪,希望大神指點一下愚蠢的我?!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]); for(i=0;i<5;i++) {if(a[i]>a[i+1]) flag=1; else flag=0;} } return 0;}
查看完整描述

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;
}
你這個程序問題很多,我幫你修改了一下,我用遞歸做的
?



查看完整回答
反對 回復 2021-07-11
?
米琪卡哇伊

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;
}



查看完整回答
反對 回復 2021-07-11
  • 2 回答
  • 0 關注
  • 405 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號