Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб3.Кодирование текстовой информации.Си.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
91.87 Кб
Скачать

Задания

  1. Проверьте работу программы вводом символа B. Код этого символа равен 66.

  2. По введенному символу получите следующий символ и его код. Не забывайте, что тип char – это числовой тип.

  3. Разработайте вариант программы, выводящий код введенного символа в шестнадцатеричном и восьмеричном представлениях. (Указание: воспользуйтесь материалом Приложения 3)

  4. Для символов, составляющих слово SUM, выведите сумму их кодов.

  5. Для введенной прописной латинской буквы получите разность между кодом этой буквы и кодом буквы ‘A’.

  6. Напишите программу, которая выведет четвертую, четырнадцатую и двадцать четвертую букву латинского алфавита.

  7. Напишите программу, которая выведет подряд четыре буквы латинского алфавита, начиная с заданной буквы.

  8. По введенной прописной латинской букве получите соответствующую строчную букву и ее код.

  9. По введенной строчной латинской букве получите соответствующую прописную букву и ее код.

  10. По введенной цифре получите ее код и разность между этой цифрой и нулем.

  11. По введенной цифре, отличной от нуля и девяти, получите предыдущую и следующую цифру.

  12. Для двух введенных цифр выведите их сумму (как сумму однозначных чисел) и сумму их кодов. Например, для цифр 5 и 6 их сумма равна 11, а сумма их кодов равна 107.

  13. Попробуйте напечатать как символ число больше 255. Что получается?

Рекомендую к чтению материалы из Викиучебника Язык Си в примерах

Кроме латиницы Функция setlocale

#include <locale.h>

char *setlocale(int type, const char *locale);

Функция setlocale() позволяет получить или установить некоторые параметры, которые зависят от геополитической среды выполнения программы. Если указатель locale является нулем, функция setlocale() возвращает указатель на строку текущей локализации. В противном случае функция setlocale() попытается использовать строку locale для установки локальных параметров в соответствии с параметром type. Для задания стандартных С-параметров региональной привязки используйте строку "С", а для задания собственных параметров среды — пустую строку (""). Чтобы получить подробную информацию о строках локализации, поддерживаемых конкретным компилятором, обратитесь к документации.

Стандарт предусматривает ряд средств для поддержки письменностей, отличных от «базовой» (26-символьной) латиницы. В основе такой поддержки — два следующих понятия:

  1. локаль — набор сведений о письменности, языке и культуре, включающий, помимо прочего, таблицы соответствия символов верхнего и нижнего регистров;

  2. широкие символьные типы (wchar_t, wint_t; англ. wide character) — для представления ряда письменностей (например — основанных на иероглифах), а равно для представления текстов на нескольких языках, «байтового» типа char оказывается недостаточно; как следствие, в задачах, связанных с обработкой многоязычных текстов, его заменяет тип wchar_t; аналогично, в операциях ввода-вывода используется тип wint_t (и константа WEOF.)

Соответственно, в исходный вариант вносятся следующие изменения.

  1. Появляется вызов setlocale (LC_ALL, " "), инициализирующий локаль в соответствии с текущими настройками. (По умолчанию, при запуске программы полагается setlocale (LC_ALL, "C") — установка «стандартной» локали.)[5]

  2. Функции getwchar, towupper, putwchar заменяют соответствующие для «узких» символов (getchar, toupper, putchar.) Соответственно меняются тип (int → wint_t) и константа признака исчерпания входного потока (EOF → WEOF.)[6][7][8]

  3. Включаются соответствующие заголовки (locale.h, wchar.h, wctype.h.)

#include <assert.h>

#include <locale.h>

#include <stdio.h>

#include <wchar.h>

#include <wctype.h>

int

main ()

{

char *rl

= setlocale (LC_ALL, "");

assert (rl != 0);

wint_t c;

while ((c = getwchar ()) != WEOF) {

putwchar (towupper (c));

}

assert (! ferror (stdin));

return 0;

}

Отметим, впрочем, что принятые в конкретном языке правила обращения со строчными и заглавными могут оказаться сложнее простой зависимости символ → символ, предполагаемой в данном примере. Например, правила немецкого языка ставят в соответствие строчной «ß» пару заглавных — «SS» ( Straße → STRASSE), что ни коим образом не может быть реализовано функцией towupper.