crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

void*
  опции профиля:
сообщение 10.2.2009, 22:08
Сообщение #1


Программист-самоучка
***

Группа: Участник
Сообщений: 429
Регистрация: 4.6.2008
Пользователь №: 193

Спасибо сказали: 28 раз(а)




Репутация:   3  


Вот собственно предлагаю скидывать сюда интересные задачи по С/С++. Желательно не слишком простые и не требующие написания программы, а только касательно понимания кода и знания стандартов. Начну сам:

1)Каков результат вычисления следующего кода?
int i = 2;
i = i++ + i++;
printf("%d", i);

а) 4
б) 5
в) 6
г) 7
д) Любое число ввиду неопределенности данной конструкции

2) Почему в C нельзя выводить текстовую информацию таким способом?
char* str;
str = some_function(...); // память выделяется в функции(ну или статик), возвращается нормальная строка(массив чаров с 0 на конце)
printf(str);


3) Что делает следующий С++ код? (Matt Marcus)
struct A {
A(const volatile void*);
};

char f(A);
int f(...);

template 
struct Test {
static const int value = (sizeof(f(*(T*)0)) == sizeof(char));
};


4)Выбрать результат выполнения программы.

#include <iostream>
class A
{
private:
A() { cout<<"A"; }
};
int main(int argc, char* argv[])
{
A a;
A b;
return 0;
}


A. AA
B. A
C. Пустой экран
D. Программа не скомпилируется
E. Программа не запустится
F. Свой вариант (написать в комментариях)

Сообщение отредактировал void* - 10.2.2009, 22:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V  < 1 2  
Начать новую тему
Ответов (10 - 15)
AD
  опции профиля:
сообщение 5.3.2009, 23:08
Сообщение #11


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(void* @ 5.3.2009, 20:12) Link
так все-таки будет -1?

Нет. Правильный ответ 0!
1./3 = 0.667
0.667 - 1 = -0.333
(int)-0.333 = 0

Сообщение отредактировал AD - 5.3.2009, 23:09
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 6.3.2009, 0:21
Сообщение #12


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(AD @ 5.3.2009, 23:08) Link
1./3 = 0.667

эт как?

2/3~=0.667
1/3 ~=0.332
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 6.3.2009, 1:55
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Цитата(kwisp @ 6.3.2009, 0:21) Link
Цитата(AD @ 5.3.2009, 23:08) Link
1./3 = 0.667

эт как?

2/3~=0.667
1/3 ~=0.332

Да, виноват, ошибся в вычислениях. Но ответ все-таки 0.

Сообщение отредактировал AD - 6.3.2009, 1:56
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 6.3.2009, 9:58
Сообщение #14


Профессионал
*****

Группа: Участник
Сообщений: 2003
Регистрация: 4.2.2008
Из: S-Petersburg
Пользователь №: 84

Спасибо сказали: 70 раз(а)




Репутация:   17  


Ответ 0! :)
В этом и штука: правильный ответ по правилам математики (с округлением к целому, конечно) - -1 (признаю, в вычислениях я действительно непростительно ошибся)! Но компилятор не умеет самостоятельно корректно округлять числа. Компилятор тупо отбрасывает часть после запятой. Для этого следует либо самому написать функцию, либо использовать библиотечную.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 6.3.2009, 13:19
Сообщение #15


Танцор диско
***

Группа: Участник
Сообщений: 441
Регистрация: 11.9.2008
Из: Москва
Пользователь №: 289

Спасибо сказали: 6 раз(а)




Репутация:   -1  


все таки это тупой момент языка, все должно быть по нормальному а не абы как
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 7.3.2009, 15:25
Сообщение #16


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


В языке всё последовательно.
Ежели тебе нужно округление то явно вызывай соответствующую функцию.
Их имеется несколько штук - в зависимости от того что именно ты хочешь получить. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 11.8.2025, 19:56