int Min(int* arr,int length)//從一個陣列里面找出最小的數
{
int tmp = 0;
int i = 0;
int j = 1;
for (int i = 0; i < length; i++)
{
if (arr[i] >= arr[i + 1])
{
tmp = arr[i + 1];
}
else
tmp = arr[i];
}
return tmp;
}
int main()
{
int a;
printf("輸入一個正整數n:");
scanf("%d", &a);
int b[a] ;
printf("再輸入n個整數:");
for (int i = 0; i < a; i++)
{
scanf("%d ", &b[i]);
}
int length = sizeof(b) / sizeof(b[0]);
printf("%d\n", Min(b, length));
}

uj5u.com熱心網友回復:
肯定不行,min函式里面應該先把tmp賦值arr[0],然后比較,用tmp去和當前的arr[i]比,比tmp小就賦值給tmpuj5u.com熱心網友回復:
問題1,找最小的邏輯不對int Min(int* arr,int length)//從一個陣列里面找出最小的數
{
int tmp = 0;
int i = 0;
int j = 1;
tmp = arr[0];
for (int i = 0; i < length; i++)
{
//if (arr[i] >= arr[i + 1])
if (arr[i] > tmp) 這里是比較tmp和arr[i],不是比較陣列的相鄰兩個元素,你想假設陣列{0,1,2},比較陣列相鄰的元素0和1是,tmp=0(取得最小),但是比較相鄰的元素1和2時,tmp又被改成1了,因為比較1和2時,你忘了比較0了,所以直接用tmp比較就好了
{
//tmp = arr[i + 1];
tmp = arr[i ];
}
//else
// tmp = arr[i];
}
return tmp;
}
問題2
int b[a] ; //不用變數宣告陣列的長度,改成int b[100]或者用動態申請記憶體 int *b=(int*)malloc(sizeof(int)*a)(記得結束后釋放記憶體)
另外,length不用重新計算,直接用int length=a
uj5u.com熱心網友回復:
#include <stdio.h>
int Min(int* arr, int length)//從一個陣列里面找出最小的數
{
int tmp = 0;
int i = 0;
int j = 1;
tmp = arr[i];//----------添加代碼-----------
//-------------以下代碼已修改-------------
for (int i = 0; i < length-1; i++)
{
if (arr[i+1] < tmp)
{
tmp = arr[i + 1];
}
}
return tmp;
}
int main()
{
int a;
printf("輸入一個正整數n:");
scanf("%d", &a);
int* b = new int[a];//--------改為動態分配記憶體---------
printf("再輸入n個整數:");
for (int i = 0; i < a; i++)
{
scanf("%d", &b[i]);//-------%d后面的空格去掉-------
}
printf("%d\n", Min(b, a));//-------將長度直接改為a----------
delete[] b;//---------釋放記憶體---------
return 0;
}
VS2015 C++環境運行結果
uj5u.com熱心網友回復:
int Min(int* arr,int length)//從一個陣列里面找出最小的數
{
int tmp=arr[0];
for(int j=1;j<length;j++)
{
if(tmp>arr[j])
tmp=arr[j];
}
return tmp;
}
int main()
{
int a;
printf("輸入一個正整數n:");
scanf("%d", &a);
int *b=(int *)malloc(sizeof(int)*a);
printf("再輸入n個整數:");
for (int i = 0; i < a; i++)
{
scanf("%d ", &b[i]);
}
printf("%d\n",Min(b,a) );
free(b);
}
謝謝指點,我覺得好像scanf那里還有錯誤,我把資料都輸入后點回車,還是沒反應,上面是我改了的代碼
uj5u.com熱心網友回復:
你這樣比較,比如1,2,3,4,第一次tmp=1.第二次tmp=2,已經就變了,應該for回圈上面tmp=arr[0];設定變數為陣列首個值,然后比較,如果后面的小于tmp就把小的那個值賦給tmp,你這樣寫,有沒有考慮到陣列越界?當i=length時,arr[i+1]是沒有這個值的uj5u.com熱心網友回復:
受教了,剛剛試了一下沒問題,謝謝指點
uj5u.com熱心網友回復:
嗯嗯,懂了懂了,我考慮的太淺了,謝謝指點
uj5u.com熱心網友回復:
嗯嗯,我想的太淺了,感謝解釋,我懂了
uj5u.com熱心網友回復:
scanf("%d ", &b[i]); 把這一句%d后面的空格洗掉,scanf("%d", &b[i]);就可正常運行了uj5u.com熱心網友回復:
嗯嗯,我剛剛懂了,謝謝指點
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/64598.html
標籤:C語言
上一篇:C語言求大佬
下一篇:關于父子行程問題
