Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Помогите разобраться с задачками


Автор: ask0Ld 20.3.2012, 19:49
Здравствуйте. Мне на завтра нужно сделать две задачки по Си, помогите пожалуйста разобраться. Я с компилировал их, результаты получил. Но мне нужно понять сам код, разобраться в нем, почему выходит такой результат и что за чем идет... 

1) В C-программе объявлен массив и переменную:
Код

int d[]={5,10,3,1,7}, k=8;

Какое значение будет иметь переменная k после выполнения указанного ниже оператора?
Код

k-=d[1]%2>0 ? k/3 : 10-d[4]/3;


2) В программе объявлены символьная строка и указатель:
Код

char sr[50]="The new text", *p=&sr[8];

Что будет напечатано после выполнения следующего фрагмента программы?
Код

while (*p!=' ' && *p!='\0') {
       *p=toupper (*p); p++; }
puts(sr);

Автор: mes 20.3.2012, 19:53
и что именно не понятно ?

Автор: ask0Ld 20.3.2012, 20:15
ну например этот код не понятен:
Код

k-=d[1]%2>0 ? k/3 : 10-d[4]/3;


и какие действия выполняет *р в цикле:
Код

while (*p!=' ' && *p!='\0') {
       *p=toupper (*p); p++; }
puts(sr);

Автор: mes 20.3.2012, 20:40
Цитата(ask0Ld @  20.3.2012,  19:15 Найти цитируемый пост)
ну например этот код не понятен


Код

k-=  // к уменьшить на
  d[1]%2>0 //  d[1] не делится без остатка ?
   ?  k/3            // если да к/3
   : 10-d[4]/3;  // иначе  10-d[4]/3


Код

while (*p!=' ' && *p!='\0')  // пока не пробел и не конец строки
{                                    
       *p=toupper (*p);  // привести к верхнему регистру
         p++;            //    перейти к следующему символу
}


Автор: Фантом 20.3.2012, 20:45
Цитата(ask0Ld @  20.3.2012,  21:15 Найти цитируемый пост)
ну например этот код не понятен:


Разбор "по порядку" из k вычитается значение, равное k/3, если d[1] при делении на 2 дает в остатке нечто, большее 0, или равное 10-d[4]/3 (в противном случае).
d[1] равно 10, оно делится на 2 нацело, поэтому нас интересует "противный случай", 10-d[4]/3=10-7/3=10-2=8. Итого k=k-8=8-8=0.

Цитата(ask0Ld @  20.3.2012,  21:15 Найти цитируемый пост)

и какие действия выполняет *р в цикле:

Это просто проход по строчке, указатель p на каждом шаге цикла указывает на очередной символ строки. Соответственно, вся конструкция имеет такой смысл: пока очередной символ не является пробелом или концом строки, переделываем его в заглавную букву и переходим к следующему символу.

Автор: ask0Ld 20.3.2012, 21:14
Спасибо! Тепер прояснилось все)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)