Unnamed :D Ответов: 3

Почему это показывает мне что-то из "printf"? что же мне делать?


#include <stdio.h>
#include <math.h>
#include <conio.h>

int main()
{
    double x;
    printf ("Enter degrees:__.");
    scanf ("%lf", &x);
    if ("%lf", &x, 0<=x<=90){
        printf("Everything is + ");
    }
     if ("%lf", &x, 90<=x<=180){
        printf("sin is + but cos,tg,ctg is - ");
    }
     if ("%lf", &x,180<=x<=270){
        printf("sin,cos is - but tg,ctg is + ");
    }
     if ("%lf", &x,270<=x<=360){
        printf("sin,tg,ctg is - but cos is + ");
    }
	getch();
	return 0;
}


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

Почему это показывает мне что-то из "printf"?? Что же мне делать??

k5054

if ("%lf", &x, 0<=x<=90)

Это не то, как вы пишете if заявление. Вернитесь назад и посмотрите на примеры утверждений if из вашего учебного материала. Вы должны быть в состоянии решить это.
Редактировать: В частности что делает 0 <= x <= 90 оцените это. Это не то, что ты думаешь.

Unnamed :D

@k5054 я читаю свою статью и действительно не знаю, что делать((
я пытаюсь найти ошибку в течение 2 часов и не могу..
(Введите Градусы:__.76
Все + грех + но Кос,тг,КТГ это - грех,потому что это - а тг,КТГ-это + грех,тг,КТГ - но ведь это + )
это моя проблема

Unnamed :D

как мне это сделать правильно?

Unnamed :D

если (x>=271 & & amp; x<=360){
printf("sin,tg,ctg есть - но cos есть + ");
}
правильно?

k5054

Правильно!

k5054

Кроме того, вы можете рассмотреть возможность использования else, например

if(condition1) {
  // do something
}
else if(condition2) {
  // do something
} else  {
   // do something if all other if's fail
}

Unnamed :D

Спасибо!)

3 Ответов

Рейтинг:
19

RickZeeland

Цитата:
Знак тригонометрической функции зависит от знаков координат точек на конечной стороне угла
SparkNotes: тригонометрия: тригонометрические функции: функции в квадрантах[^]

Вот бесплатный курс для изучения C++ https://www.sololearn.com/[^]


Unnamed :D

я не могу использовать эту ссылку((

RickZeeland

Ну это просто какая то математическая чушь о функциях дающих положительный или отрицательный результат :)

Unnamed :D

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

RickZeeland

Я думаю, что k5054 указал вам правильное направление, математические функции не нужны, это просто простая викторина с вводом и выводом текста.

Unnamed :D

Спасибо)!

Рейтинг:
1

CPallini

В вашем коде есть несколько проблем:
Серьезные недостатки

  1. он имеет недопустимый синтаксис:
    Цитата:
    если ("%lf", &x, 0<=x<=90)
    линия является ли незаконный код в C, как k5054 как уже отмечалось, это (хотя и не очень полезно) законно C код.
  2. В нем отсутствует проверка входных данных.

Незначительная проблема
  1. Несоответствие типов: 0, 90, .. являются целочисленными постоянными литералами, ваш код сравнивает их с double переменная (в то время как это будет работать из-за C введите правила продвижения, это неверно и вводит в заблуждение).
  2. Например, неправильная обработка диапазонов (угловые случаи)
    Цитата:
    если ("%lf", &x, 0<=x<=90){
    и
    Цитата:
    если ("%lf", &x, 90<=x<=180){
    было бы оба справляться x==90.
  3. Ваш код использует старый, нестандартный заголовок (conio.h).


Попробуй
#include <stdio.h>

int main()
{
  double x;

  printf ("Please enter the angle value in degrees:\n");

  // input validation 1:  always check the return value of the scanf function 
  if ( scanf("%lf", &x) != 1  )
  {
    printf("invalid entry, please enter the angle degrees\n");
    return -1;
  }

  // input validation 2: check that number is in the allowed range
  if ( x < 0.0 || x >= 360.0)
  {
    printf("out of range, please enter a number in [0,360) range\n");
    return -1;
  }

  // input interpretation 
  if ( x < 90.0 )
    printf("everything is positive\n");
  else if ( x <180 )
    printf("sin is positive while cos, tg, ctg are negative\n");
  else if ( x < 270 )
    printf("sin and cos are both negative while tg, ctg are both positive\n");
  else
    printf("sin, tg, ctg are negative while cos is positive\n");

  printf("please enter a character to exit\n");

  getchar();

  return 0;
}


k5054

Цитата:он имеет недопустимый синтаксис:
Цитата:
если ("%lf", &x, 0<=x<=90)
строка-это незаконный код В С.
Эта строка компилируется с GCC и clang в, Поэтому его не незаконный кодекс. То, что здесь происходит, - это Оператор Запятой[^] используется для оценки выражения. Оператор запятой принимает выражение типа (a, b, c, ...), вычисляет a, b, c, ... слева направо (включая любые побочные эффекты) и возвращает значение последнего члена. В этом случае "%lf" это просто указатель на а const char *, который выбрасывается, то у нас есть &x, который является double *, который снова выбрасывается. Тогда у нас есть 0<=x<=90. Хотя это выглядит так, как будто он проверяет, находится ли x между 0 и 90, то, что он на самом деле делает, оценивается как (0 <= x) <= 90 Выражение (0 <x) всегда будет иметь значение либо false (0), либо true (1), поэтому выражение expression (0 <= x <= 90) будет всегда вычислите значение true, независимо от значения x;

Однако, несмотря на всю педантичность, я должен согласиться, что код, по крайней мере концептуально, неверен. Я не уверен, о чем думал ОП, когда писал это письмо. if заявление, но ясно было некоторое непонимание того, как Ан if заявление должно быть написано. Должен признаться, мне потребовалось некоторое время, чтобы понять, почему 0 <= x <= 90 всегда верный. Это тонкая ошибка, и я уверен, что сам совершал ее в прошлом и могу повторить в будущем. И я готов поспорить, что я не единственный.

CPallini

Я виноват, спасибо, что указал на это.

Рейтинг:
1

KarstenK

Ты должен выучить этот язык. В операторе if лучше всего использовать только булевы выражения и некоторые булевы операторы (например,<,>, && и||). Компилятор (mis) интерпретирует ваши строки как логическое выражение. Это жучок.

И синтаксис printf вы можете прочитать в этом е ссылка Взгляните также на предоставленный пример кода.