С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C (СИ) Вычислить расстояние между двумя точками с заданными координатами Вычислить расстояние между двумя точками с координатами x1, y1 и x2, y2. Исходные данные и результат вывести в табличной форме. Добавлено через 42 минуты люди очень нужна помощь( https://www.cyberforum.ru/ c-beginners/ thread1267066.html C (СИ) Не считается произведение
Не считает произведение где ошибка? И если не сложно напишите вывод отсортированного массива. #include <stdio.h> #include <math.h> int main(void) { const int N = 5; double arr; for(int i = 0; i < N; i++) {
C (СИ) Cортировка Шелла / Древовидная, определить количество перестановок и присваиваний https://www.cyberforum.ru/ c-beginners/ thread1266985.html
Заданы 3 массива из 200 эл. 1 упорядоченный.2масссив 200,199,198 и тд. 3 рандомный( как задать массив рандомный без повторений?). Надо вычислить кол-во перестановок и присваиваний сл методами шейкер-сортировка. Метод Шелла Древовидная сортировка
C (СИ) Зашифровать слово данного предложения по принципу "сдвиг на 2 символа" С клавиатуры задаётся предложение.Зашифровать слово данного предложения по принципу "сдвиг на 2 символа": a-c;b-d;c-e; и тд. Подскажите пожалуйста как делать. https://www.cyberforum.ru/ c-beginners/ thread1266942.html
C (СИ) Запись в файл из нескольких потоков
Здравствуйте! Можно ли писать в один и тот же файл из нескольких потоков без синхронизации? Была идея завести переменную флаг на событие открыт ли файл, но можно ли сделать это штатными средствами (проверить открыт ли файл)? Заранее благодарен
C (СИ) Составить алгебраические выражения с помощью стандартных математических функций языка https://www.cyberforum.ru/ c-beginners/ thread1266881.html
Помогите решить задачу, если не трудно, пожалуйста) "Для приведенных ниже вариантов необходимо составить алгебраические выражения с помощью стандартных математических функций языка С." h - {a}^{3} + ({b}^{3} - c) a - 2 / x + {x}^{3} b - ln {x}^{2} - 4x c - tgx - 2 sin x Ой, извините, попутал ветку... Надо было в разделе C для начинающих =(
C (СИ) Реализация алгоритма base64 Я скачал реализацию алгоритма кодирования base64: static const char basis_64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; int Base64encode_len(int len) { return ((len + 2) / 3 * 4) + 1; } https://www.cyberforum.ru/ c-beginners/ thread1266834.html Не выводится на экран ответ программы, приложение вместо этого закрывается C (СИ)
#include <stdio.h> #include <stdlib.h> int main() { int age; printf("How old are you?"); scanf("%d", &age); if (age < 100) { printf("You are very young");
C (СИ) Нахождение чисел делящихся на 7 в интервале https://www.cyberforum.ru/ c-beginners/ thread1266787.html
Добрый вечер. Сразу прошу прощения, если не правильно оформил пост и/или написал не в том разделе. Помогите, пожалуйста, написать код программы. программа - курсовая работа. Нужно очень срочно. завтра идти на пересдачу. Кого из однокурсников не спрашивал никто не понимает как это реализовать (то, что желтым цветом в задании). Заранее огромное спасибо! Язык программирования: C Компилятор:...
C (СИ) Записи, содержащие данные о студентах-спортсменов института. Найти ошибку в цикле https://www.cyberforum.ru/ c-beginners/ thread1266689.html
С клавиатуры ввести последовательность записей, содержащих данные о студентах-спортсменов института: <Фамилия, имя>, <Год рождения>, <Вид спорта>, <Разряд>. Распечатать введенные данные в форме таблицы, сгруппировав их по видам спорта. Определить самого молодого спортсмена по каждому виду спорта (если таких несколько, то указать всех) Вот мой код #include "stdafx.h" #include "stdio.h"...
C (СИ) Сумма элементов последовательности
Даны целые числа а1,а2,...Известно что а1>0 и что среди а2,а3,... есть хотя бы одно отрицательное число. Пусть а1,...,аn-члены данной последовательности, предшествующие первому отрицательному члену (n заранее неизвестно ) Получить min(a1+a2,a2+a3,...,an-1 + an); Только при написании нужно использовать циклы,не использовать массивы и строки и данные должны вводиться с клавиатуры или с помощью...
C (СИ) Вычислить и отпечатать сумму четных элементов в массиве x после первого нечетного элемента В массив x из 15 элементов ввести следующие значения: -4, 2, 1, -1, 3, -6, 4, 5, 6, 2, -3, -4, -5, 8, 10 Отпечатать исходный массив x в строку. Вычислить и отпечатать сумму четных элементов, которые находятся в массиве x после первого нечетного элемента, а также отпечатать значение и номер первого нечетного элемента в массиве x. https://www.cyberforum.ru/ c-beginners/ thread1266672.html
Evg
Эксперт CАвтор FAQ
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
12.10.2014, 14:06 0

Распространенные ошибки - C (СИ) - Ответ 6711356

12.10.2014, 14:06. Показов 149321. Ответов 72
Метки (Все метки)

Ответ

10. "Неожиданное" целочисленное деление в арифметических выражениях.
Следует помнить, что результат деления целого на целое - тоже целое:
C
1
2
3
4
5
int n;double y;
n=2;
y = 1/n;// y будет равен нулю
y = pow(y, 1/3 ); // возведение в нулевую степень
z = y + n/(n+1); // прибавляется ноль
Рекомендации:
Все константы, которые явно не должны быть целыми, делайте действительными
(записывайте с точкой, первое время можете даже после точки ставить нуль 1.0 ):
C
1
2
3
4
5
int n;double y;
n=2;
y = 1./n;// y будет равен 0.5
y=pow(y, 1./3. ); //извлечение корня кубического
z=y + n/(n+ 1. ); // прибавляется 0.666666666666
Там, где в выражении нет констант, используйте оператор приведения
C
1
2
3
4
int n,m;
n=1;
m=2;
double y = (double)n/m;

Пояснения, почему так происходит.

Во всех двухаргументных арифметических операциях (кроме операций сдвига) оба аргумента должны иметь один и тот же тип. Если аргументы имеют разный тип, то компилятор строит неявное приведение типа для одного их аргументов, чтобы в конечном итоге выполнить арифметическую операцию над значениями одного и того же типа. Чтобы выяснить, который из двух аргументов нужно приводить к типу другого, в стандарте языка существуют правила, которые в отдельных тонких моментах даже различаются для Си и Си++. В общем виде они довольно сложные для восприятия начинающими, а потому сделаю лишь краткое пояснение.

В случае различных типов один из типов является более "широким", чем другое. А потому в двухаргументной операции всегда аргумент более "узкого" типа приводится к более "широкому" типу. Проверка идёт примерно в таком порядке:
  • Вещественный тип всегда считается более широким, чем целочисленный
  • Когда оба типа вещественные или оба целочисленные, то тип с большим размером всегда считается более широким, чем тип с меньшим размером
  • В случае равенства размеров для целочисленных типов беззнаковый тип считается более широким, чем знаковый

В итоге код

C
float f;
int i;
unsigned u;
long long ll;
x + f;
u + f;
i + u;
ll + u;
эквивалентен

C
int i;
unsigned u;
float f;
((float)x) + f; /* тип результата - float */
((float)u) + f; /* тип результата - float */
((unsigned)i) + u; /* тип результата - unsigned */
ll + ((long long)u); /* тип результата - long long */
Если мы вернёмся к делению, то следующий код

C
int a, b;
float f;
f = a / b;
эквивалентен

C
int a, b, tmp;
float f;
/* сначала выполняем целочисленное деление
 * (при котором отбрасывается остаток) */
tmp = a / b;
/* и только потом полученный результат (с утерянной
 * дробной частью) преобразуется в вещественный тип */
f = (float) tmp;
А потому, чтобы выполнить нормальное вещественное деление нужно хотя бы один из аргументов превратить в вещественный тип, после чего второй аргумент превратится в вещественный тип автоматически по выше описанным правилам. Т.е. явно написать

C
int a, b;
float f;
f = ((float)a) / b;
или

C
int a, b;
float f;
f = a / ((float)b);
что будет эквивалентно

C
int a, b;
float f;
f = ((float)a) / ((float)b);
Если один из аргументов является константой, то можно написать её в виде "3.0" (с вещественной дробной частью), что автоматически приведёт её тип к вещественному

Вернуться к обсуждению:
Распространенные ошибки C (СИ)
9
Заказать работу у эксперта
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.10.2014, 14:06
Готовые ответы и решения:

Распространенные ошибки
Оглавление Ошибки этапа компиляции Программа не компилируется или компилируется с...

безопасность и распространенные ошибки
Тут наткнулся на очень интересные тексты: http://werad.narod.ru/articles/programm6.html ...

Распространенные ошибки SEO и ASP.NET 2.0
Здравствуйте, существуют несколько СЕО проблем при использовании ASP.NET, ниже я опишу эти...

Самые распространенные строки
type Mytype = record name:string; surname:string; end; var Students:Mytype; ...

72
12.10.2014, 14:06
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.10.2014, 14:06
Помогаю со студенческими работами здесь

Самые распространённые фамилии
Здравствуйте! Для реализации автоподстановки фамилии нужно как-то выявить, например, 1 (10, 15,...

Вывести самые распространенные женские и мужские имена
Помогите решить задачу пожалуйста! Написать программу, которая формирует файл записей данной...

Вывести самые распространенные мужские и женские имена
Имеется массив записей о студентах, каждая из которых включает поля: фамилия, имя, отчество, пол,...

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

Найти и вывести самые распространенные женские те мужские имена
О каждом студенте факультета доступна следующая информация: фамилия, имя, отчество, пол, возраст,...

Вывести самые распространенные мужское и женское имена среди студентов
Во входном файле записана следующая информация о каждом из 20 студентов некоторого вуза: ...

0
Новые блоги и статьи
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Следует разобраться.
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала согласования+ стартер fast регистров. Файлы прилагаю. . . .
UserScript для подсветки кнопок языков программировани­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форм быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru