crossplatform.ru

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

2 страниц V   1 2 >  
Ответить в данную темуНачать новую тему
> Интересные и занимательные задачи по С/С++, и не только
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
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Sami
  опции профиля:
сообщение 11.2.2009, 12:03
Сообщение #2


Новичок


Группа: Новичок
Сообщений: 5
Регистрация: 28.4.2008
Пользователь №: 160

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




Репутация:   0  


1) Определенно д)

2) А вот почему? незнаю. сам так делал.
Можно предположить только из-за переполнения буфера. Ибо лучший вариант будет так:
printf("%s", str);

3) А ни чего код ни делает, template без класса-аргументов.
Скорее компилятор начнет ругатся.

4) Вариант D) однозначно. Так как доступ к конструктору закрыт.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 11.2.2009, 12:35
Сообщение #3


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

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

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




Репутация:   17  


В задаче 3 нужно таки использование.
Кроме того, возможны реализации С++ где sizeof char == sizeof int и в этом случае value будет всегда 1. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 11.2.2009, 17:46
Сообщение #4


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

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

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




Репутация:   3  


вроде все правильно, насчет 3-его сам еще не думал :)
1) тут все элементарно, undefined behaviour, т.к. нельзя больше одного раза изменять одну и ту же переменную в одной точке следования
2) опасность кроется в потенциальном наличии кусков типа %s в строке что приведет к ошибке
3) еще не разбирался
4) самая легкая задачка, естественно D
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Novak
  опции профиля:
сообщение 19.2.2009, 16:23
Сообщение #5


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

Группа: Участник
Сообщений: 319
Регистрация: 15.3.2008
Из: Замкадыш
Пользователь №: 121

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




Репутация:   6  


Цитата(void* @ 10.2.2009, 22:08) *
1)Каков результат вычисления следующего кода?

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

Сообщение отредактировал Novak - 19.2.2009, 16:23
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 5.3.2009, 15:58
Сообщение #6


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

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

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




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


чему будет равно z?

int z = 1. / 3 - 1;
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
AD
  опции профиля:
сообщение 5.3.2009, 16:13
Сообщение #7


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

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

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




Репутация:   17  


Цитата(kuler @ 5.3.2009, 15:58) *
чему будет равно z?

int z = 1. / 3 - 1;

нулю
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 5.3.2009, 17:51
Сообщение #8


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

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

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




Репутация:   3  


Цитата(kuler @ 5.3.2009, 14:58) *
чему будет равно z?

int z = 1. / 3 - 1;

думаю будет равно -1
:)

Сообщение отредактировал void* - 5.3.2009, 17:52
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kuler
  опции профиля:
сообщение 5.3.2009, 18:47
Сообщение #9


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

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

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




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


что и требовалось доказать
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
void*
  опции профиля:
сообщение 5.3.2009, 20:12
Сообщение #10


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

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

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




Репутация:   3  


так все-таки будет -1?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.3.2024, 0:35