Программирование на языке Си/§8

Материал из Викиверситета

Для представления текстовой информации в языке Си используются константы, символьные переменные и строковые константы (строки). в Си строка - это массив символов. Мы уже имели дело с символьными константами и с типом данных char. Также вспомним специальные функции обмена: getchar() - позволяет читать из входного потока по одному символу за обращение. Чтение данных также начинается с нажатием "Enter". putcar (X) - выводит символьное значение X в стандартный выходной поток.

Программа 8.1[править]

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

#include <stdio.h>
#include <stdlib.h>

void main()
{
  char z,s;
  puts("Наберите предложение\n");
  for (z=s=' ';z!='.';s=z)
  { 
        scanf("%c",&z); // напомню что спецификатор c обеспечивает по символьный ввод, а s ввод строки. 
        if(z==' ' && s==' ') continue; // проверяем на условие повторяющихся пробелов.
        printf ("%c",z); // посимвольная печать
    }
}

В этой программе мы производим посимвольную обработку введённого нами текста. Признаком окончания обработки является символ точки.

Усовершенствуем программу так, чтобы она удаляла все следующие друг за другом повторяющиеся символы

#include <stdio.h>
#include <stdlib.h>

void main()
{
  char z,s, m[10],i;
  puts("nap predloj\n");
  for (i=0;z!='.';i++)
  { 
        scanf("%c",&z); // вводим текст по символам 
        m[i]=z; // загоняем каждый символ в массив
        if(m[i]==m[i-1]) continue; // проверяем на повторы
        printf ("%c",z); // печатаем результат 
    }
}

Программа 8.2[править]

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

#include <stdio.h>
#include <stdlib.h>

void main()
{
  char z;
  for(z='A';z<='Z';z++)
    printf ("%c - %x - %o\n",z,z,z); // напомню, что спецификаторы: x - шестнадцатеричный, o - восьмеричный. 
   getch ();
}

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

Программа 8.3[править]

Напишем программу преобразования прописных букв в строчные.

#include <stdio.h>
#include <stdlib.h>
void main()
{

  unsigned char mas[20]; //объявляем массив символов
  int i;
  puts("Введите символы");
  gets(mas); // вводим строку символов 

  for(i=0;mas[i];i++)
  {
         if (((mas[i]>='a') && (mas[i]<='z')) || ((mas[i]>='а') && (mas[i]<='п'))) //проверяем введённые символы на буквы
             {
            mas[i]-=32; // преобразуем в строчные
        }
        else
          if(mas[i]>='р' && mas[i]<='я')
            {
           mas[i]-=80;
             }
}
        printf("\n%s\n",mas);
        getchar ();

}

При вводе русских букв в программе могут возникнуть ошибки, так как не все компиляторы языка Си дружат с русским языком.

Программа 8.4[править]

Домашнее задание[править]

  1. Напишите программу подсчёта количества пробелов в предложении. Переделайте её так, чтобы она могла подсчитывать количество символов отличных от нуля.
  2. Напишите программу, которая просит пользователя ввести его имя и отчество, признаком окончания ввода клавиша "Enter".
  3. Напишите программу подсчёта длины введённой пользователем последовательности символов, признаком окончания ввода считать точку.
  4. Напишите программу преобразования двоичного, восьмеричного и шестнадцатеричного числа в десятичное. Организуйте ввод посредством меню, где пользователь выбирает из какой системы счисления преобразовать число в десятичную систему счисления.