Программирование на Cи




Содержание:

Понятие символов в Си

В языке Си существует тип данных - char. Тип char является числом (от -127 до 128; код символа) которое соответствует определённому символу в кодовой таблице. Так, например букве (символу) Y соответствует код 89 (десятичное) или 0x59 в шестнадцатеричной нотации. К символам относятся также все цифры, знаки и управляющие клавиши, такие как Enter, Esc и так далее.
В языке Си символы можно записывать двояко, например 'Z' или 0x5A.
Тип char является так называемым перечислимым типом, который можно использовать для организации циклов. Напишем программу, которая будет выводить на экран латинские символы от a до z:

#include <stdio.h>
void main()
{
char c;
clrscr();
for (c='a'; c<= 'z'; c++) printf("%c",c);
}


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

for (c= 0x61; c<= 0x7A; c++) printf("%c",c);

Или используя десятичную запись кодов символов:

for (c= 97; c<= 122; c++) printf("%c",c);

Результат выполнения этих программ будет абсолютно одинаковым.
    Для ввода символов с клавиатуры можно воспользоваться функцией getch, а для вывода символа на экран функцией putch. Напишем программу "калькулятор", где аргументы (числа) и символ операции будут вводиться последовательно:

#include <stdio.h>
void main()
{
float x,y,z;
char ch;
clrscr();
printf("Vvedi X:");
scanf("%f",&x); /* Ввод первого числа */
printf("Vvedi znak:");
ch = getch(); /* Ввод знака операции */
putch(ch); /* Вывод знака на экран */
printf("\nVvedi Y:");
scanf("%f",&y); /* Ввод второго числа */
/* Вычисляем результат в зависимости от знака операции*/
if (ch == '-') z = x-y;
if (ch == '+') z = x+y;
if (ch == '*') z = x*y;
if (ch == '/') z = x/y;
printf("Z=%f",z);
}





Строки. Ввод - вывод строк
В языке Си нет явного типа "строка", поэтому строки в Си рассматриваются как массив символов. Для исключения ввода - вывода строк в цикле, в языке Си есть функции: ввода - puts и вывода gets.
Например:

#include <stdio.h>
void main()
{
char c[80]; /* Объявляем строку как массив из 80 символов */
clrscr();
puts("Input string:"); /* Выводим сообщение на экран */
gets(c); /* Считываем строку с клавиатуры */
puts(c); /* Выводим полученную строку на экран */
}




Обычно, в языке Си строки заканчиваются символом '/0' - конец строки.


Функции для работы со строками
В языке Си, в модуле <string.h> содержится несколько функций для работы со строками. Наибольший интерес представляют такие функции:
strlen(S1) - длина строки S1, исключая символ конца строки;
strcat (S1,S2) - к концу строки S1 подсоединяется строка S2.
Напишем программу с использованием этих функций:

#include <stdio.h>
#include <string.h>
void main()
{
char s1[80], s2[80];
int z;
clrscr();
puts("Input string1:");
gets(s1); /* вводим строку 1 */
puts("Input string2:");
gets(s2); /* вводим строку 2 */
z = strlen(s1); /* Вычисляем длину строки s1 */
printf("Dlina S1=%d \n",z);
strcat(s1,s2); /* Складываем две строки */
printf("S1 + S2 =%s \n",s1);
z = strlen(s1); /* Вычисляем длину результирующей строки */
printf("Dlina S1=%d \n",z);
}
Результат работы программы будет такой:



Доступ к элементам строк
Так как строка является линейным массивом из символов, то можно осуществлять произвольный доступ к любому элементу массива. В строке, первый элемент массива имеет индекс 0, а последний элемент массива strlen(s) - 1 (длина строки минус единица).
Напишем программу, которая, например, подсчитывает число символов "а" в ведённой с клавиатуры строки.

#include <stdio.h>
#include <string.h>
void main()
{
char s1[80];
int n,z,q;
clrscr();
puts("Input string:");
gets(s1); /* Вводим произвольную строку (не более 80 символов) */
printf("S1=%s \n",s1);
z = strlen(s1); /* Вычисляем длину введённой строки */
q = 0; /* Обнуляем счётчик символов "а" */
/* Создаём цикл для сканирования строки */
for (n=0; n<=z-1; n++)
{
if (s1[n] == 'a') q++; /* Если очередной символ равен "а", то увеличиваем счётчик на единицу */
}
printf("Sibols a=%d",q); /* Выводим число найденных символов "а" на экран */
}

Результат работы программы:






   ©Гуков Константин Михайлович 2006 - 2013     Почта: [email protected]