книги / Программирование на языке Си
..pdf514 |
Программирование на языке Си |
два слова из базы, после чего - опять слово из предложения и т.д. "База" - набор слов, допустимых при выполнении програм мы, либо набор пар слов, как в приведенном ниже примере.
2. Напишите дешифратор.
Допустимые символы - прописные русские буквы; символразделитель
П рим ер .
Шифруемое предложение:
ДЕЛ0_ЗАК0НЧЕН0_ХАДС0Н_РАССКАЗАЛ_ВСЕ_БЕРЕГИТЕСЬ
База шифра:
С_ДИЧЬЮ_Я_ПОЛАГАЮ_ГЛАВА_ПРЕДПРИЯ ТИЯ_ ПО_СВЕДЕНИЯМ_0_МУХОВОЙКАХ_ФАЗАНЬИХ_КУРОЧЕК
Результат шифровки:
С_ДИЧЬЮ_ДЕ Л0_Я_Л0ЛАГАЮ_3АКОНЧЕНО_
ГЛАВА_ПРЕДПРИЯТИЯ_ХАДСОН_ПО_СВЕДЕНИЯМ_ РАССКАЗМ1_0_МУХ0В0ЙКАХ_ВСЕ_ ФАЗАНЬИХ_КУРОЧЕК_БВ РЕГИТЕСЬ
Вариант 20.
В программе английским буквам поставлены в соответствие наиболее часто ими передаваемые звуки, записанные русскими
буквами, например |
а - |
э, b - |
б, |
с - с, d - д, е - э, f —ф, g - г, |
h - (пустой символ), |
i - |
и, j - |
ж |
и т.д. С клавиатуры задается не |
которое предложение на английском языке. (Слова разделяются символами подчеркивания: Программа выводит "по ее мне нию" правильный вариант произношения каждого слова. Если пользователь соглашается с вариантом произношения, предло женным программой, он нажимает <Enter>. Если не соглашается^ - вводит свой вариант произношения.
Допустимые символы - прописные английские буквы; сим вол-разделитель
П рим ер .
(В кавычках - выводимые программой произношения)
Введите предложение на английском языке: ТНIS_IS_A_TABLE
THIS - "тис" -> Зис
516 |
Программирование на языке Си |
Символы с другими кодами выводятся без изменения. Допустимые символы - символы с кодами от 33(0x21) до
255(0xFF), за исключением цифр (48(0x30)^57(0x39)).
Пример выполнения программы:
Введите исходную строку: Hello! Строка не зашифрована. Шифр: 72е11оЗЗ
2. Если исходная строка содержит цифры, то она по опреде лению считается зашифрованной. Напишите дешифратор. При невозможности дешифрации напечатайте сообщение об ошибке и укажите место в строке, где произошла ошибка.
Примерный диалог с программой:
Введите исходную строку: 72е11оЗЗ Строка зашифрована. Расшифровка: Hello!
Введите исходную строку: 72е131оЗЗ Строка зашифрована.
Ошибка в исходной строке: 72е13
Вариант 23.
Из двух заданных с клавиатуры слов составить различные виды кроссвордов. При невозможности составить кроссворд (во введенных словах нет ни одной одинаковой буквы) напечатать сообщение об ошибке.
Допустимые символы - прописные русские буквы.
Пример выполнения программы:
Введите два слова, разделенных пробелом:
КАРАБАС БАРАБАС |
|
Кроссворд 1: |
Кроссворд |
Б |
Б |
КАРАБАС |
А |
Р |
Р |
А |
А |
Б |
Б |
А |
КАРАБАС |
С |
С |
518 |
Программирование на языке Си |
Выбирая из каждого массива с помощью датчика случайных чисел по одному слову, составить и напечатать заданное коли чество текстовых строк.
Допустимые символы - прописные русские буквы.
П ри ме р д и а л о г а с пр ог раммо й:
Введите массив существительных: СТОЛЯР-КРАСНОДЕРЕВЩИК ТОРМОЗ ДИСКОВОД
Введите массив глаголов: ЕСТ САЖАЕТ ТРАВИТ ВАРИТ КОСИТ ПИЛИТ
Введите количество предложений: 2
Результат:
СТОЛЯР-КРАСНОДЕРЕВЩИК ТРАВИТ ЯДОВИТЫЕ ЗАБОРЫ. ДИСКОВОД ПИЛИТ НЕВЗРАЧНЫЕ ДИСКЕТЫ.
Вариант 27.
С клавиатуры вводится предложение. Выведите это предло жение на экран, расположив буквы "по вашей любимой функ ции" (экспонента, квадратный корень и т.п.).
Допустимые символы - прописные русские буквы; знаки препинания.
П рим ер (выбрана синусоида):
БАТЬ |
|
_К |
ОЛЕБ |
Л_ВЕ |
ЛИ |
|
ЛЕ |
СЯ |
|
АТ |
ЩА |
||
О |
_ |
_ |
И |
'Ь |
Е |
К |
К |
|
С |
В |
|
||
|
к |
Я |
|
Я |
А |
I |
|
ол |
ЬС |
|
3 |
|
|
|
ЕБАТ |
|
ТАК |
|
ИНУС |
Глава 10. Задачи по программированию |
521 |
Н еверно-. Array++[i] - имя массива есть константа, по опре делению ее нельзя изменять.
5. Варианты перебора элементов массива,
int |
i; |
0; |
i < |
25; i++) {Array[i]...} |
|
for |
(i= |
||||
for |
(i= |
0; |
i < |
25; i++) {*(Array+i)...} |
|
for |
(i= |
0; |
i < |
25; |
i++) {*(p+i)...} |
for |
(i= |
0; |
i < |
25; |
i++) {p[i]...} |
Опасный вариант (можно забыть начало массива):
for (i = 0; i < 25; i++)
{*p++...}
6.Строки в языке Си "размещаются" в символьных массивах. Признаком окончания строки служит '\0'.
Если определен массив
char string[25] = "это строка";
то в массиве string[ ] длиной 25 байт будет размещена строка длиной в 11 байт и string[10] = = '\0'.
Строки могут быть заданы в программе и так:
char |
*ps |
= "строка"; |
/* Длина строки 7 байт; |
|
char |
str |
p s [6]=='\0'; |
* (ps+ б ) = ’\0' */ |
|
[ ] = "это |
строка"; |
/* Строка и |
||
|
|
|
массив одинаковой длины */ |
7. Для ввода строк (набираемых на клавиатуре) удобно ис пользовать функцию char* gets(char* s), которая размещает введенную последовательность символов в область памяти, ад ресуемую указателем s. При этом признак конца ввода '\п', до бавляемый во входной поток при нажатии клавиши <Enter>, функция gets() заменяет признаком конца строки '\0'.
Использование для ввода строк функции scanf("%s"...) не позволяет вводить последовательности символов, в которых со держатся пробелы или обобщенные пробельные символы. Ввод по спецификации %s выполняется до ближайшего пробела.
8. Вычислить длину (1еп) строки, находящуюся в массиве string или адресуемую указателем char * string; можно так:
Глава 10. Задачи по программированию |
523 |
10.3.3.Пример выполнения задания по обработке строк
Ввести символьную строку и разделить ее на части фиксиро ванной длины. Вывести на экран полученные части строки "в столбик", т.е. каждую часть с новой строки дисплея. Пусть в каждой части строки будет не более трех символов.
Текст программы:
/* Динамические символьные массивы, указатели и строки */
#include <stdio.h> #include <string.h> void main ()
{
int LenMax, Len = 0; |
|
|
|
|
|||||
char |
*h, |
*input; |
|
"частей" строки |
*/ |
|
|||
int ks; |
/* Количество |
*/ |
|||||||
/* Указатель |
на массив |
указателей |
на части: |
||||||
char |
**с; |
|
|
|
|
|
|
||
int |
п = |
0; |
|
|
|
|
|
|
|
int |
j = |
0; |
|
|
|
|
|
|
|
int |
i ; |
|
|
|
|
|
|
|
|
printf("\n Введите максимальный размер" |
|
|
|||||||
|
|
" строки:"); |
|
|
|
|
|
||
scanf("%d", |
fiLenMax); |
вводимой строки: |
*/ |
|
|||||
/* Выделить |
память |
для |
|
||||||
input = |
(char *)malloc(LenMax); |
|
|
|
|||||
printf("\n Введите |
строку:"); |
|
|
*/ |
|||||
/* Удаление |
символа |
'\п' из входного потока: |
|||||||
getchar () ; |
|
|
|
|
|
|
|||
/* |
Чтение строки: */ |
|
|
|
|
||||
while |
((*(input+Len++)=getchar())!='\п'); |
|
|||||||
Len— |
; |
|
|
|
|
|
|
|
|
/* Len - количество введенных символов */ |
|
||||||||
/* Добавить |
признак |
конца строки: |
*/ |
|
|
||||
* (input+Len)= ’\0'; |
для |
введенной |
строки: */ |
|
|||||
/* Выделить |
память |
|
|||||||
h=(char |
*)malloc(Len+1); |
|
|
|
|||||
/* Копируем информацию из исходной строки */ |
|
||||||||
while |
(*(h+j++)=*input++); |
|
*/ |
|
|||||
/* Удаление из памяти исходной строки: |
|