Справочник по языку программирования си с примерами программ
Общая структура программы на си | //объявление заголовочных файлов #include < название подключаемого файла > //объявление переменных тип переменной имя переменной; main() // начало основной программы < Операторы через ; |
Пример подключения заголовочного файла в Cи
#include //
Пример объявления переменной в Cи
int a;
Пример условия в Cи. Программа выводит
«Значение переменной a больше двух»,
если значение переменной a больше двух.
if (a>2) printf(«Значение переменной a больше двух»);
>
if (( условие 1 ) || ( условие 2 )) <
Операторы через ;
>
Пример логической операции И в Cи.
Программа выведет «Значение переменной a больше 2 и меньше 10»,
Язык C за 100 секунд [перевод на русский]
если значение переменной a больше 2 и меньше 10.
if ((a>2) (a <10)) <
printf(«Значение переменной a больше 2 и меньше 10»);
>
Пример логической операции ИЛИ в Cи.
Программа выведет «Модуль числа a больше 10»,
если значение переменной а меньше -10 или больше 10.
if ((a<-10) || (a>10)) printf(«Модуль числа a больше 10»);
>
for ( счетчик=начальное значение;
условие на счётчик; оператор изменения счётчика )
<
Операторы через ;
>
Структура программы с графикой в Си
#include // подключение заголовочного файла с графическими функциями
#include
main()
<
i nitwindow ( 500, 500 ); // инициализировали и открыли окно размером 500 на 500
Графические операторы через ;
getch(); // ждем нажатия клавиши
closegraph(); // закрываем графический режим
>
void имя процедуры ( тип параметра 1 параметр1, тип параметра2 параметр2 …. )
<
Операторы через ;
>
main()
<
имя процедуры ( значения параметров );
>
Пример программы с функцией на C расчет среднего арифметического
#include
#include
float srar(float a,float b)
float s;
s =(a+b)/2;
return s;
>
main()
float a;
float b;
printf(«Введите значение a «);
scanf(«%f»,
Пример программы с массивом в Cи
ввод массива с клавиватуры и вывод на экран
Пример программы с матрицей в C++. Программа задаёт целочисленную матрицу размером 10 на 10
и заполняет ее случайными числами в диапазоне,
который укажет пользователь и выводит ее на экран.
#include
#include
#include
main()
int a[9][9];
int i,j;
int range;
scanf(«%d»,
for (i=0; i for(j=0; j a[i][j]=rand() % range+1;
Создание сборщика мусора | С
>
>
for (i=0; i for(j=0; j printf(» %d», a[i][j]);
>
printf(» «);
>
getch();>
Считывание информации из файла
Задание указателя на файл в Cи
FILE * имя указателя на файл;
Открытие файла в режиме чтения в Cи
Имя указателя на файл = fopen(» путь к файлу «, «r»);
Считывание из файла в Cи
fscanf( указатель на файл,»%формат ввода данных1% форматввода данных2…»,переменная2… );
Закрытие файла в Cи
fclose( имя указателя на файл )
Пример задания указателя на файл в Cи
FILE *fin;
Пример открытия файла в режиме чтения
fin = fopen(«C:\Users\user\Desktop\data.txt», «r»);
Пример считывания данных из файла
Пример закрытия файла
Работа с файлами в Cи
Запись информации в файл
Источник: itrobo.ru
7. ПРИМЕРЫ на языке Си (+литература)
Привет, сегодня поговорим про примеры на языке си, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое примеры на языке си , настоятельно рекомендую прочитать все из категории Алгоритмизация и программирование. Структурное программирование. Язык C. Рассмотрим примеры программ, в которых используются различные конструкции языка Си. Первый из них демонстрирует использование управляющих символов n в функциях printf( ) и scanf( ).
/* Пример 1 */ #include void main(void)
Результаты работы этой программы имеют вид:
Введите целое число от -32768 до 32767 234 x = 234 n1 = 3, n2 = 7
Значение n1 определяет число введенных цифр, а n2 — число выведенных символов в строке x = 234 (с пробелами). Следующий пример показывает использование спецификаций %[], а также символов * и #.
/* Пример 2 */ #include void main(void) < char str_b[21], str_c[21]; /* Последний элемент резервируем под */ int x, n1, n2; float y; printf(«Введите строку до 20 символовn»); scanf(«%[Computer]%s», str_b, str_c); printf(«str_b = %s, str_c = %sn», str_b, str_c); y = 12.345678; n1 = 8; n2 = 3; x = 0x100; printf(«y = %*.*fn», n1, n2, y); printf(«x(16) = %#x, x(16) = %x, x(10) = %in», x, x, x); >
Результаты работы программы имеют следующий вид:
Введите строку до 20 символов Comp-1-2-3-4-5 str_b = Comp, str_c = -1-2-3-4-5 у = 12.346 x(16) = 0x100, x(16) = 100, x(10) = 256
Здесь пользователем введена строка Comp-1-2-3-4-5. Из нее только четыре символа (Comp) совпадают с первыми символами, заданными в квадратных скобках рассматриваемой спецификации [Computer].
Поэтому только эти четыре символа попадут в первую строку, а оставшиеся символы (1-2-3-4-5) попадут во вторую строку. Число n1 определяет минимальную ширину поля для вывода, а число n2 = 3 — количество цифр после запятой. В результате число 12.345678 будет смещено относительно левой границы, и после запятой будут выведены три цифры. Шестнадцатеричное число 0х100 выведено функцией printf( ) с префиксом 0x, без префикса 0x и в десятичной форме. Третья программа демонстрирует использование условного оператора if. else и оператора for для организации цикла.
/* Пример 3 */ #include #define SYM ‘X’ /* Выводимый символ */ #define SPACE ‘ ‘ /* Определение пробела */ #define LF 10 /* Перевод строки */ #define CR 13 /* Возврат каретки */ #define LEFT 24 /* Левая граница символа */ #define RIGHT 51 /* Правая граница символа */ #define BOTTOM 25 /* Нижняя граница символа */ void main(void) < int col, line; /* col — номер колонки для вывода символа */ /* line — номер линям для вывода символа */ clrscr( ); for (line = 1; line getch( ); /* Ожидание нажатия клавиши */ >
После ее запуска на весь экран будет выведен символ X. Новая библиотечная функция clrscr( ) имеет следующий прототип:
void clrscr (void);
Она выполняет очистку экрана и объявлена в заголовочном файле conio.h. Четвертая программа демонстрирует использование рекурсивной функции для вычисления факториала. (Отметим, что определение функции factorial( ) может находиться и после функции main( ), но в этом случае функция factorial( ) должна быть объявлена перед функцией main( ), т.е. до main( ) необходимо поместить строку: long factorial(int);.)
/* Пример 4 */ #include #include #include long factorial(int value) /* Рекурсивная функция */ < long result = 1; if (value != 0) < result = factorial(value — 1); /* Проверка возможности вычисления факториала */ if (result >MAXLONG / (value + 1)) < fprintf(stderr, «Очень большое числоn»); getch( ); /* Ожидание нажатия клавиши */ exit (1); >result *= value; > return(result); > /* Рекурсивное вычисление факториала числа value */ void main(void) < int value; /* Факториал этого значения вычисляется */ long result; /* Переменная для результата */ puts(«Факториал какого числа?»); scanf(«%d», result = factorial(value); printf(«Результат: %ldn», result); getch( ); /* Ожидание нажатия клавиши */ >
Результаты работы этой программы:
Факториал какого числа? 10 Результат: 362880
Пятая программа подсчитывает число символов и слов во вводимых строках (новые символы и слова суммируются с предыдущими; пробелы входят в число введенных символов).
/* Пример 5 */ #include #include #define ESC 27 /* 27 — ASCII-код клавиши ESC */ void CountOfLines(void) < /* Статические переменные будут сохранять старые значения при каждом новом вызове функции CountOfLines */ static int words = 0, symbols = 0; /* words-число слов, symbols-число символов */ char temp, t = 0; /* Временные переменные */ ++symbols; /* Число символов и слов выдается после нажатия клавиши */ while ((temp = getche( )) != ‘r’ ) < ++symbols; /* Подсчитывается каждый символ */ /* После одного или нескольких пробелов подсчитывается слово */ if ((temp == ‘ ‘) (t == 1)) continue; if (temp == ‘ ‘) < t = 1; ++words; >else t = 0; > if (t == 1) —words; else ++words; printf («n Слов: %d; символов: %dn», words, symbols); > void main(void) < puts(«Для завершения программы нажмите в начале строки»); puts(«Строка не должна начинаться с пробела и с нажатия клавиши» «»); puts(«Строка не должна завершаться пробелом»); while (getche( ) != ESC) CountOfLines(); putch(‘b’); putch(‘ ‘); putch(‘b’); >
Результаты работы этой программы:
Для завершения программы нажмите в начале строки Строка не должна начинаться с пробела и с нажатия клавиши Строка не должна завершаться пробелом Mouse Keyboard Слов: 2 символов: 14
- занесение фамилии абонента и номера телефона в справочник;
- поиск в справочнике номера телефона по фамилии абонента;
- удаление из справочника фамилии абонента и номера его телефона.
Ниже приведен текст головной программы main.c:
// Пример 6 //——————————————————— // Головная программа для работы с телефонным справочником //——————————————————— #include «A:my.h» //Заголовочный файл с глобальными //переменными и константами #include «A:findt.c» //Поиск строки str в файле #include «A:choicet.c» //Проверка наличия строки в файле #include «A:addt.c» //Добавление строки в файл #include «A:subt.c» //Удаление строки из файла void main(int argc, char *argv[ ]) < if (argc == 3) if (*argv[1] == ‘+’) //Добавить запись < if (Choice(argv[2]) == 0) //Нет ли такой //записи в файле? < puts(«Эта фамилия есть в справочнике»); exit(1); >Add(argv[2]); //Добавление записи > else if (*argv[1] == ‘-‘) Sub(argv[2]); //Удалить запись else puts(«Ошибочное значение аргумента»); else if (argc == 2) Find(argv[1]); //Поиск записи else puts(«Ошибочное число аргументов»); >
С помощью директив #include в головную программу включаются файлы: my.h, findt.c, choicet.c, addt.c и subt.c. Считается, что все они находятся в корневом каталоге диска A:. Если это не так, то необходимо изменить соответствующие директивы #include. В файле my.h определены глобальные переменные и некоторые символьные значения.
//Файл заголовков my.h //——————————————————— //Определения глобальных переменных и символьных значений //——————————————————— #include #include #include #define MAX_NAME 20 //Максимальное число символов в фамилии #define MAX_NUMBER 10 //Максимальное число цифр в телеф. номере char Name[MAX_NAME]; // Массив фамилий char Number[MAX_NUMBER]; //Массив для телефонного номера char File[ ] = «A:\tel\tel_num.txt»; //Имя файла справочника int Count; //Число фамилий в справочнике FILE *F_tel; //Логическое имя файла справочника
Файл my.h, в частности, определяет, что телефонный справочник будет организован в каталоге tel диска A:. Поэтому необходимо перед запуском программы main.exe создать этот подкаталог либо использовать другой подкаталог. В последнем случае необходимо изменить строку:
char File[ ] = «A:\tel\tel_num.txt»;
которая задает имя файла с телефонным справочником (tel_num.txt).
Модуль findt.c, текст которого приведен ниже, содержит функцию Find( ) для поиска строки str в файле tel_num.txt.
//Модуль findt.c //———————————————————- //Функция Find( ) для поиска строки str в файле tel_num.txt //———————————————————- void Find(char *str) < int i; //Если файл невозможно открыть для чтения, то программа //завершает работу if ((F_tel = fopen(File, «r»)) == NULL) < fprintf(stderr, «»%s» : невозможно открытьn», File); exit(1); >//Чтение числа записей (Count) в файле if (fread( fprintf(stderr, «»%s» : ошибка чтенияn», File); exit(1); >//В цикле for осуществляется поиск нужной записи for (i = 1; i < Count; i++) < fread(Name, 1, MAX_NAME, F_tel); //Чтение имени fread(Number, 1, MAX_NUMBER, F_tel); //Чтение номера if (ferror(F_tel)) //Проверка отсутствия ошибки < fprintf(stderr, «»%s» : ошибка чтенияn», File); exit(1); >if (strcmp(str, Name) == 0) //Если имя совпадает //с введенным, то фамилия //и найденный номер //выводятся на экран < printf(«Фамилия : %sn», Name); printf(«Номер телефона: %sn», Number); fclose(F_tel); return; >> //Если результат поиска отрицательный, то выводится //следующее сообщение fprintf(stderr,»»%s» : запись в файле отсутствуетn», File); fclose(F_tel); return; >
Модуль choicet.c содержит функцию Choice( ), позволяющую проверить есть ли заданная строка в файле tel_num.txt.
// Модуль choicet.c //———————————————————————- //Функция Choice( ), проверяющая есть ли строка str в файле tel_num.txt //———————————————————————- int Choice(char *str) < int i; char temp[MAX_NAME + MAX_NUMBER]; if ((F_tel = fopen(File, «r»)) == NULL) return 1; //Строки str нет в файле if (fread( fprintf(stderr, «»%s» : ошибка чтенияn», File); exit(1); >for (i = 0; i < Count; i++) < fread(temp, 1, MAX_NAME + MAX_NUMBER, F_tel); if (ferror(F_tel)) < fprintf(stderr, «»%s» : ошибка чтенияn», File); exit(1); >if (strcmp(str, temp) == 0) < fclose(F_tel); return 0; //Строка str есть в файле >> fclose(F_tel); return 1; //Строки str нет в файле >
Модуль addt.c содержит функцию Add( ), которая добавляет заданную строку в файл tel_num.txt.
//Модуль addt.c //——————————————————- //Функция Add( ) добавляет строку str в файл tel_num.txt //——————————————————- void Create(void) //Создает файл, если он не существует < if ((F_tel = fopen(File, «wb+»)) == NULL) < fprintf(stderr, «%s» : невозможно открытьn», File); exit(1); >Count = 0; if ( ! fwrite( fprintf(stderr, «»%s» : ошибка записиn», File); exit(1); >> void Add(char *s) //Добавляет запись в файл < char str[MAX_NAME], sn[MAX_NUMBER]; //Временные массивы int i; for (i = 0; i < MAX_NAME; i++) str[i] = ‘ ‘; //Пробелы в str strcpy(str, s); //Копирование строки в str if ((F_tel = fopen(File, «rb+»)) = = NULL) Create(); //Создаем файл, если он не //существует else if (fread( fprintf(stderr, «»%s» : ошибка чтенияn», File); exit(1); >printf(«Номер телефона : «); //Запрашивается и вводится номер if (gets(Number) == NULL || *Number == ‘