Введение в
С
Введение в программирование на с
ВВЕДЕНИЕ
При записи программ и их отладке нужно соблюдать следующие правила:
1) Если компилятор не русифицирован, то все русскоязычные тексты записывать латинскими буквами.
2) На внешнем носителе (флешке) и в памяти компьютера завести папку со своей фамилией, куда необходимо записывать программы.
3) В начальном комментарии каждой программы необходимо записывать свои выходные данные (фамилию, группу, дату и т.д.).
4) По возможности, индивидуализировать ввод и вывод информации, предусмотренные в программе.
5) Если работа происходит в компиляторе Dev-C++, то при отладке и запуске программы нужно выбрать команды СОЗДАТЬ/ИСХОДНЫЙ ФАЙЛ, записать в окне программу и воспользоваться командами СКОМПИЛИРОВАТЬ И ВЫПОЛНИТЬ (F9). Отлаженную программу сохранить в своей папке.
6) Чтобы результаты работы программы не исчезали с экрана тут же, необходимо в конце функции main() перед оператором return, поместить оператор ввода символа getchar().
1.СТРУКТУРА ПРОГРАММ НА ЯЗЫКЕ С
В языке С любая программа состоит из одной или более функций, задающих действия, которые нужно выполнить. Различным функциям можно давать какие угодно имена. Среди них есть одно особое main. Выполнение любой программы начинается с функции main.
Одним из механизмов взаимодействия между функциями являются аргументы. Список аргументов в круглых скобках идет следом за именем функции. Функция main чаще всего аргументов не имеет, поэтому список выглядит так: (). Скобки {} обрамляют начало и конец тела программы.
В С каждый оператор, а также каждая строка с обращением к функции оканчивается точкой с запятой. Исключение составляют команды препроцессора и имена функций с аргументами, стоящие в начале функции (скобки {} только обрамляют операторы и точку с запятой после них ставить не надо).
ОБЪЯВЛЕНИЯ И ТИПЫ ДАННЫХ
Существует различие между описанием переменной и ее определением (объявлением). Описание устанавливает свойства переменной: ее тип, размер и т.д. Объявление наряду с этим вызывает выделение памяти. В объявлениях и описаниях присутствуют имена переменных (идентификаторы). Любой идентификатор в С – это последовательность букв латинского алфавита и арабских цифр, в которой первый символ – обязательно буква. Подчеркивание считается буквой. В идентификаторе имеют значение лишь первые 8 символов, хотя их может быть и больше. Допустимые типы данных и их размеры показаны в приводимой ниже программе Р1:
/*типы данных и их размеры*/
#include<stdio.h>
main(){
Int a; /*объявление целой переменной длиной 2 байта*/
char b; /*объявление символьной переменной длиной 1 байт*/
float c; /*объявление переменной с плавающей точкой одинарной точности длиной 4 байта*/
double d; /*объявление переменной с плавающей точкой двойной точности длиной 8 байт*/
short x; /*объявление короткой целой переменной длиной 2 байта*/
long y; /*объявление длинной целой переменной длиной 4 байта*/
unsigned z; /*объявление целой переменной без знака*/
/*ввод с клавиатуры переменных*/
scanf(“%d %c %f %1f %d %1d %u”, &a, &b, &c, &d, &x, &y, &z);
/*вывод на экран значений переменных*/
printf(“%d %c %9.5f %19.11f\n %d %1d %u”, a, b, c, d, x, y, z);
getchar();
}
В программе используется библиотечная функция scanf() для ввода значений переменных a, b, c, d, x, y, z с клавиатуры. Затем используется библиотечная функция printf() для вывода на экран дисплея переменных a, b, c, d, x, y, z. Функции scanf() и printf()содержат управляющие строки в кавычках.
Управляющая строка функции printf() содержит объекты 3-х типов: обычные символы, которые просто выводятся на экран (копируются в выходной поток), спецификации преобразования, каждая из которых вызывает вывод на экран значения очередного аргумента из последующего списка, управляющие символьные константы.
Каждая спецификация преобразования начинается с символа % и заканчивается символом, задающим преобразование. Между знаком % и символом преобразования могут встретиться:
- знак минус, указывающий, что преобразованный параметр должен быть выравнен влево в своем поле;
- строка цифр, задающая минимальный размер поля;
- точка, отделяющая размер поля от последующей строки цифр;
- строка цифр, задающая максимальное число символов, которое нужно вывести, или число цифр, которое нужно вывести справа от 10-чной точки в значениях типов float или double;
- символ длины 1, указывающий, что соответствующий аргумент имеет тип long.
Далее записывается один из следующих символов преобразования:
d – аргумент преобразуется в 10-ичное представление;
о – аргумент преобразуется в 8-ричное представление;
х – аргумент преобразуется в 16-ричное представление;
с – значением аргумента является символ;
s – значением аргумента является строка символов (символы строки выводятся до тех пор, пока не встретится признак конца строки или не выведется число символов, заданное точностью);
е – значением аргумента является величина типа float или double;
f – значением аргумента является величина типа float или double;
g – используется как %е или %f и исключает печать незначащих нулей;
u – значением аргумента является беззнаковое целое число;
р – значением аргумента является указатель (адрес).
Если после знака % записан не символ преобразования, то он выводится на экран. Функция printf() использует управляющую строку, чтобы определить, сколько всего аргументов и каковы их типы.
Среди управляющих символьных констант наиболее часто используются следующие:
\а – кратковременная подача звукового сигнала;
\n – переход на новую строку;
\t – горизонтальная табуляция;
\b – возврат курсора назад на один шаг;
\r – возврат каретки.
Примеры: 1) printf(“\t i= %1d ; \n j=%d.\n”, i, j); 2) printf(“\tЭВМ\n%d\n”, i);
Во втором примере сначала будет выполнена горизонтальная табуляция (\t), т.е. курсор сместится от края экрана, затем на экран выведется слово «ЭВМ». Курсор переведется на начало следующей строки (\n), будет выведено значение i по формату d и курсор перейдет в начало новой строки (\n).
Функция scanf() формально описывается следующим образом:
scanf(“управляющая строка”, аргумент1, аргумент2, . . . );
Аргументы scanf() должны быть указателями на соответствующие значения (перед именем переменной записывается символ &). Управляющая строка содержит спецификации преобразования и используется для установления количества и типов аргументов. В нее могут включаться:
- пробелы, символы табуляции и переходы на новую строку (все они игнорируются);
- спецификации преобразования, состоящие из знака %, возможно символа * (запрещения присваивания), возможно, числа, задающего максимальный размер поля, и самого символа преобразования.
В функции scanf() допустимы следующие символы преобразования:
d – на входе ожидается 10-ичное целое;
о – на входе ожидается 8-ричное целое;
х – на входе ожидается 16-ричное целое;
с – ожидается одиночный символ;
s – ожидается строка символов;
f – ожидается число с плавающей точкой;
u – ожидается беззнаковое целое число;
р – ожидается появление указателя (адреса) в виде 16-ричного числа.
Перед символами d, o, x, f может стоять буква l, при этом, если она стоит перед d, o, x, то соответствующие переменные должны иметь тип long, а если перед f, то тип double.
Примеры:
-
scanf(“ %d %f %c %s”, &i, &j, &k, l);
Здесь &i – 10-ичное целое, %j – вещественное, &k – символ, l – строка.
-
scanf(“%d %*d %d”, &i, &i);
Здесь *d пропускается.
Ниже приведен пример – программы Р43, демонстрирующей функцию форматного вывода printf().
/*Демонстрация функции форматного вывода printf()*/
#include<stdio.h>
main(){
char a[30]; /*объявление строки символов*/
float a=86.531; /*объявление вещественной переменной а и присвоение ей значения*/
printf(“%s\n”,”функция форматного вывода”);
/*вывод строки символов*/
printf(“введите строку символов\n”);
scanf(“%s”, s);
printf(“( 20s): $20s\n”, s); /*задан минимальный размер поля (20 символов)*/
printf(“( -20s): $-20s\n”, s); /*строка s будет выводиться, начиная с левой границы поля (выравнивание влево)*/
printf(“( 20.10s): $20.10s\n”, s); /*цифра после точки задает максимальное число символов, которое нужно вывести из строки s (при выравнивании вправо)*/
printf(“( -20.10s): $-20.10s\n”, s); /*цифра после точки задает максимальное число символов, которое нужно вывести из строки s (при выравнивании влево)*/
printf(“( .10s): $.10s\n”, s); /*из строки s будет выведено 10 символов в поле из 10 символов; лишние правые символы отбрасываются*/
printf(“%%\n”); /*пример вывода символа % */
/*примеры вывода значений переменной а с различными управляющими параметрами*/
printf(“параметр е; а=%e\n”, a);
printf(“параметр f; а=%f\n”, a);
printf(“параметр g; а=%g\n”, a);
}
Ниже приводится пример программы P44, демонстрирующей функции форматного ввода scanf():
/*Демонстрация функции форматного ввода scanf()*/
#include<stdio.h>
main(){