Member 14682704 Ответов: 3

Что не так с моей программой, когда я запускаю ее, появляется "предупреждение D:\program.c 61: функция должна возвращать значение


#include<stdio.h>
main()
{
int nilaiN,nilaiK,nilaiNK,n,k,nk,i;
float kombinasi;
clrscr();
printf("masukkan nilai 1 : ");scanf("%d", &n);
printf("masukkan nilai 2 : ");scanf("%d", &k);

/*hitung fak untuk nilai n*/
nilaiN=1;
for(i=n;i>=1;i--)
{
nilaiN=nilaiN*i;
}

/*hitung fak untuk k */
nilaiK=1;
for(i=k;i>=1;i--)
{
nilaiK=nilaiK*i;
}

/*hitung fak untuk n-k*/
nk=n-k;
nilaiNK=1;
for(i=nk;i>=i;i--)
{
nilaiNK=nilaiNK*1;
}

/*hitung nilai kombinasi*/
kombinasi=nilaiN/(nilaiNK*nilaiK);

printf("hasil kombinasi=%0.1f",kombinasi);
getch();
}


Что я уже пробовал:

и где я могу найти подобную программу и объяснить ее для каждого процесса, чтобы лучше понять ее
Спасибо

3 Ответов

Рейтинг:
2

CPallini

Цитата:
главный()

То main должны вернуть int (видеть Основная функция - cppreference.com[^]). Отсюда пишем
int main()
и добавить
return 0;
в конце концов, main сама функция.


Цитата:
clrscr();
Цитата:
геч();
Пожалуйста, не используйте нестандартные функции (это всего лишь предложение).


Цитата:
для(i=nk;i>=я;я--)
Это ошибка: она должна быть 1, нет iКомпилятор предупредил бы вас, если бы вы установили правильный уровень предупреждения.



Обратите внимание, что факторное вычисление используется в вашей программе три раза, оно заслуживает специальной функции.
Попробуй
#include <stdio.h>

unsigned fact(unsigned n);

int main()
{
  unsigned n,k;
  unsigned factN, factK, factNK;

  printf("masukkan nilai 1 : ");scanf("%u", &n);
  printf("masukkan nilai 2 : ");scanf("%u", &k);

  factN = fact(n);
  factK = fact(k);
  factNK = fact(n-k);

  unsigned combinations = factN /(factK * factNK);
  printf("hasil kombinasi= %u\n", combinations);

  getchar();
  return 0;
}


unsigned fact(unsigned n)
{
  unsigned f;
  if (n<2) return 1;
  f = n;
  while (--n > 1 )
    f *= n;
  return f;
}


Рейтинг:
1

OriginalGriff

Добавь

return 0;
как раз перед финальным"} " в main

Но... сделайте себе пару одолжений:
1) отступ и Пробел вашего кода!
main()
    {
    int nilaiN, nilaiK, nilaiNK, n, k, nk, i;
    float kombinasi;
    clrscr();
    printf("masukkan nilai 1 : ");
    scanf("%d", &n);
    printf("masukkan nilai 2 : ");
    scanf("%d", &k);
    
    /* hitung fak untuk nilai n*/
    nilaiN = 1;
    for(i = n; i >= 1; i--)
        {
        nilaiN = nilaiN * i;
        }
    
    /*hitung fak untuk k */
    nilaiK = 1;
    for(i = k; i >= 1; i--)
        {
        nilaiK = nilaiK * i;
        }
Гораздо легче читать, чем "плоский" код. И когда вы доберетесь до даже немного сложного кода, это может иметь огромное значение.

2) прекратите использовать однобуквенные переменные - это может быть быстрее для ввода, но это подвержено ошибкам, и это делает ваш код более трудным для чтения. Имейте в виду, что вы печатаете его один раз, но вы смотрите на него в недоумении, пытаясь понять, почему он не делает то, что вы хотите, в течение нескольких часов, если вы не будете осторожны...


Рейтинг:
0

PIEBALDconsult

Компилятор ожидает, что main чтобы вернуть целое число, но вы еще не сказали ему об этом.


Member 14682704

так куда же мне его добавить

PIEBALDconsult

видишь ли https://www.programiz.com/c-programming/examples/print-sentence