2015-03-04 6 views
-3

может ли кто-нибудь помочь мне, что не так с моим кодом или что отсутствует в моем коде ... У нас есть эта деятельность, где мы должны найти наибольшее число, используя другую функцию.Найти наибольшее число с помощью другой функции

#include <stdio.h> 
#include <stdlib.h> 
#define p printf 
#define s scanf 
int high (int n1); 
int main(int argc, char *argv[]) 
{ 
    int i, num[10]; 
    p("Input 10 numbers\n"); 
    for (i=0; i<10; i++) 
    { 
    p("Enter Number: "); 
    s("%d",&num[i]); 
    } 
    p("Highest Number: %d",high(num[i])); 
    getch(); 
} 

int high (int n1) 
{ 
int l; 
for (l=0; l<n1; l++) 
{ 
    if (n1 > l) 
    return n1; 
} 
} 

Когда я ввести любое число, которое я всегда получал 37 ..

+0

Зачем это работает? Вам нужно передать массив функции и вернуть функцию наибольшему элементу. Вот учебник, который вы можете использовать: http://www.dreamincode.net/forums/topic/206002-finding-min-and-max-numbers-in-an-array/ – NathanOliver

+2

Это помечено 'C++' not 'C '. Если это действительно 'C++', вы должны использовать' 'вместо' 'и' std :: vector 'вместо' int [] ' – CoryKramer

ответ

1

int high (int n1); должен быть

int high (int *arr, int sz); /* You need to pass an array */ 

p("Highest Number: %d",high(num[i])); ш ульд быть

p("Highest Number: %d",high(num, 10)); /* Passing array now, not one element */ 

int high() должен быть переписан как:

int high (int *arr, int sz) 
{ 
int l, mx = INT_MIN; 
for (l=0; l<sz; l++) 
{ 
    if (mx < arr[l]) 
    { 
    /* Left as an excercise */ 
    } 
} 
return mx; 
} 

Как это помечено , я предложил бы использовать available C++ to find max in a range:

const int max = *std::max_element(&num[0], &num[10]); // #include <algorithm> 
0

Ну, дон Не знаю, нужен ли вам ответ, но я исправил ваш код. Вот ошибки я нашел

int high (int n1) 
{ 
int l; 
for (l=0; l<n1; l++) 
{ 
    if (n1 > l) 
    return n1; 
} 
} 

В этом для цикла, есть условие l<n1 и внутри контура для вас есть заявление if(n1 > l), которые никогда не будут достигнуты из-за l<n1. Вы сказали, что получаете 37 каждый раз, но вместо этого я получаю 10. Это показывает, что это было неопределенное поведение, потому что реальное значение не было возвращено. (Эта часть кода действительно не означала никакого смысла, так как эта функция даже не пытается найти наибольшее число).

Другой вопрос, который я нашел это вы использовали getch() без включения <conio.h> (также указывает на то, что <conio.h> не является стандартом в C++)

Ну, хотя этот вопрос помечено C++, так как код полностью с, я сделали фиксированный код в c. Я удалил getch() в код. Так вот код

#include<limits.h> 
#include <stdio.h> 
#include <stdlib.h> 
#define p printf 
#define s scanf 
int high (int *n1,int lar);  // now I have used *n1 to get the address of the array. 
int main(int argc, char *argv[]) 
{ 
    int i, num[10],lar=INT_MIN; // the variable lar is given the minimum value that can be held by an int 
    p("Input 10 numbers\n"); 
    for (i=0; i<10; i++) 
    { 
    p("Enter Number: "); 
    s("%d",&num[i]); 
    } 
    p("Highest Number: %d",high(num,lar)); // sending the entire array to the function by sending its address 

} 
int high (int *n1,int lar) 
{ 
int l; 
for (l=0; l<10; l++) // since the size you have taken for your array is 10, I have used 10 here. But if you don't know the size beforehand, pass the size as an argument to the function 
{ 
    if (n1[l] >lar) // Well, this is the simple part 
    lar=n1[l];   // Simply assigning the largest value to lar 
} 
return lar;   // Finally returning the value lar. 
} 

Надеюсь, это вам поможет.

+0

Спасибо большое! –

+0

спасибо! –

+0

Я должен признать, что это была моя ошибка, чтобы пометить C++ ... Я точно знаю, что это определенно c .. ну в любом случае Еще раз спасибо за вашу помощь .. –

Смежные вопросы