所以這是函式:
int VerifTri(int t[], int g[], int n, int m)
{ int k, l; int sorted, sorted2;
sorted = 1; sorted2 = 1;
for (k=0; k<n; k )
{
if( t[k] > t[k 1] )
sorted=0;
}
for (l=0; l<m; l )
{
if (g[l] > g[l 1])
{
sorted2=0;
}
}
if ((sorted == 1) && (sorted2 == 1))
return 1;
else
return 0;
}
沒有語法錯誤,只是代碼錯了:我在一個程式中使用了它,我輸入了兩個已排序的陣列,它仍然回傳0。
uj5u.com熱心網友回復:
假設這n是一個長度t并且m是g你可以放置的長度
int VerifTri(int t[], int g[], int n, int m)
{
int k;
for (k = 0; k < n - 1; k )
if ( t[k] > t[k 1] )
return 0;
for (k = 0; k < m - 1; k )
if ( g[k] > g[k 1] )
return 0;
return 1;
}
請注意范圍:k == [0 .. n - 1)否則最后的比較將是不正確的
t[n - 1] > t[n]
g陣列相同
當我們發現任何陣列未排序時,我們可以return 0:如果陣列未排序,則它們都無法排序
uj5u.com熱心網友回復:
我寫的這個函式有什么問題,看看兩個陣列是否在 C 中按升序排序?
獨立于函式體的函式最初是錯誤的,因為定義這樣的函式而不是定義檢查陣列是否已排序的函式沒有多大意義。
有了這樣的函式,您可以在呼叫者中檢查兩個陣列是否按以下方式排序
int sorted = VerifTri( t, n ) && VerifTri( g, m );
或者您甚至可以檢查三個陣列是否排序為
int sorted = VerifTri( a1, n1 ) && VerifTri( a2, n2 ) && VerifTri( a3, n3 );
此外,表示陣列的函式引數應該有限定符,const因為傳遞的陣列在函式內沒有改變。并且表示陣列大小的引數應該具有型別size_t.
在 for 回圈中,嘗試訪問這些 if 陳述句中陣列之外的記憶體
if( t[k] > t[k 1] )
和
if (g[l] > g[l 1])
何時k等于n-1或何時l等于m-1。
并且只要陣列的前一個元素大于陣列的下一個元素,就應該中斷回圈。
因此,您的函式應按以下方式查找示例
int VerifTri( const int a[], size_t n )
{
size_t i = 0;
if ( i != n )
{
while ( i < n && !( a[i] < a[i-1] ) );
}
return i == n;
}
如果你想檢查兩個陣列是否排序,那么你可以像上面的運算式那樣寫
VerifTri( t, n ) && VerifTri( g, l )
如果要檢查陣列之一是否已排序,則可以撰寫運算式
VerifTri( t, n ) || VerifTri( g, l )
使用您的原始函式,您將無法做到這一點,必須再撰寫一個函式。
uj5u.com熱心網友回復:
您的代碼中存在一些問題,一些是良性的,一些是主要的:
代碼縮進嚴重:這使得它難以閱讀,有更多的地方可以隱藏錯誤。
回圈不正確:假設
n是 的長度t和m是 的長度g,最后一次比較將參考超出陣列末尾的元素。代碼效率低下:只要任何比較評估為假,您就可以回傳 0。
l變數的名稱是有風險的,因為它看起來與1常見的固定寬度字體非常相似。原型可以改進:應該定義陣列指標,
const因為函式不會修改它們的內容。你的函式太具體了:呼叫一個更簡單的函式來檢查單個陣列更簡單,更容易混淆。
這是一個修改后的版本:
int VerifTri(const int t[], const int g[], int n, int m) {
for (int i = 1; i < n; i ) {
if (t[i - 1] > t[i])
return 0;
}
for (int i = 1; i < m; i ) {
if (g[i - 1] > g[i])
return 0;
}
return 1;
}
為了說明,這里有一個更簡單的函式來測驗單個陣列:
int VerifTri(const int *t, size_t n) {
for (; n --> 1; t ) {
if (t[0] > t[1])
return 0;
}
return 1;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/370322.html
下一篇:在C中逐行從檔案中讀取整數和字符
