язык C в Linux: вопросы начального уровня

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Olej » 21 окт 2014, 20:03

Попалась мне на глаза очень славненькая книжица ... особенно для "начального уровня" ;-) :
С. В. Шапошникова, "Особенности языка С. Учебное пособие. Лаборатория юного линуксоида", май 2012.

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Olej » 30 мар 2015, 19:46

Olej писал(а):выпала необходимость выполнить небольшой учебный курс для пары-тройки учеников, по использованию C в Linux...
По учебным курсам, которые можно использовать в качестве самоучителей, обсуждение (перечисление) сложилось в другой теме: C / C++.

Смотрите там ... или сами вписывайте URL учебных ресурсов, которые оказались полезными.

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Olej » 12 дек 2015, 02:52

Задачи этой темы, а их тут много, будут подвергнуты новой ревизии в теме решебник задач C/C++.

Гость

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Гость » 05 янв 2016, 01:01

Всем привет!
Начал осваивать СИ.;)

Возник такой вопрос, вроде бы очень простой, но тем не менее для меня это оказалась на данный момент непосильная задача:) : реализовать на C три способа получения последнего символа в строке.
На perl могу много вариантов придумать.;). Здесь я смог дойти только до этого:

Код: Выделить всё

char * lastChar(char s[]){
    return s + strlen(s) - 1;	
}

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Olej » 05 янв 2016, 01:31

Гость писал(а):Всем привет!
Начал осваивать СИ.;)

Возник такой вопрос, вроде бы очень простой, но тем не менее для меня это оказалась на данный момент непосильная задача:) : реализовать на C три способа получения последнего символа в строке.
На perl могу много вариантов придумать.;). Здесь я смог дойти только до этого:

Код: Выделить всё

char * lastChar(char s[]){
    return s + strlen(s) - 1;	
}
1. для того, чтобы спрашивать и получать ответы проще и быстрее, Гость - зарегистрируйтесь и получите имя ... чтобы было кого цитировать...

2. от вас требуется получить символ, т.е. не char*, а char.

Код: Выделить всё

char lastChar(char s[]) {
    return *( s + strlen(s) - 1 );	
}
или

Код: Выделить всё

char lastChar(char s[]) {
    return s[ strlen(s) - 1 ];	
}
или

Код: Выделить всё

char lastChar(char s[]) {
    char *p = s;
    while( *++p ) {};
    return *( --p );	
}

Vash
Интересующийся
Сообщения: 2
Зарегистрирован: 01 янв 2016, 23:57
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Vash » 05 янв 2016, 12:49

ОК. Спасибо.



Вам не кажется что 1й и 2й вариант по cути одно и тоже? Можно ли придумать еще один способ?

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Olej » 05 янв 2016, 13:30

Vash писал(а):Вам не кажется что 1й и 2й вариант по cути одно и тоже? Можно ли придумать еще один способ?
Собственно, и 3-й вариант "по cути одно и тоже" ;-) ... потому что функция strlen() ничего другого не делает, кроме как искать нулевой байт.
Строка символов C - это примитивный массив байт, заканчивающийся '\0', ничего там другого и придумать нельзя, задач то тривиальная: пробежать массив, найти ноль, выдернуть предшествующий байт...
Придумать ещё варианты наверняка можно ... но все они будут только синтаксически различающейся формой записи одного и того же.

P.S. Язык C не предназначался для обработки символьной информации (в отличие о того же Perl, или Python), или предназначалася только для самой примитивной обработки - поэтому в нём всё, что связано со строками, крайне упрощено.

P.P.S. Вот если вы в строку запишете русские символы (или китайские ... или арабские ...) то задача становится куда как веселее :lol:

Аватара пользователя
Olej
Писатель
Сообщения: 21336
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Olej » 05 янв 2016, 14:52

Гость писал(а):Начал осваивать СИ.;)
Я только-то (уже этим 2016-м годом ;-) ) собрал в единый текст + примеры кода - задачи по изучению программирования на C.
Вот здесь.

На сейчас (редакция 19) там 70 задач: от достаточно простых вопросов, до непростых задач, над которыми нужно изрядно посидеть...
Но все (даже простые вопросы) включены такие, которые имеют какую-то неочевидность, ... заковыку :lol: , которые требуют достаточно хорошего понимания того, о чём ведётся речь.
Причём, - это о современном C (стандарты C89, C99), который заметно отличается от описанного в K&R ... и во всех учебных курсах по C, которые списывались с K&R :lol:

Возможно, это поможет вам проще освоить C.


Katerina
Интересующийся
Сообщения: 3
Зарегистрирован: 09 янв 2016, 06:08
Контактная информация:

Re: язык C в Linux: вопросы начального уровня

Непрочитанное сообщение Katerina » 09 янв 2016, 06:15

Доброго времени суток Всем
А скажите пожалуйста какой из этих способов предпочтительнее и почему? Я нашла такой пример. Отличие по времени выполнения(если компилировать без каких либо доп. ключей с учетом особенностей архитектуры процессора) практически на порядок.

Спасибо.

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя