Воскресенье, 24.11.2024, 08:40 | Приветствую Вас Гость

...

Блог


18:45
Программирование на си

Программирование на си начинается с определения функции main(),которая имеются в любой программе на си.Также в программировании на си надо понимать,как работает директива #include - она включает другие файлы в главный файл программы.
Обычные кавычки применяются в директиве #include тогда,когда программист используют собственноручно написанные программные фрагменты.
Например можно включить содержание файла с помощью этой инструкции:
#include "hello.h"
Угловые скобки применяются в директиве #include тогда,когда в программе на си используются стандартные заголовочные файлы.
#include <stdio.h>
Вообще заголовочные файлы - это обычные текстовые файлы,составленные в соответствии с синтаксисом языка программирования си.
Давайте напишем первую программу,которая будет выводить на экран сообщение "привет,мир".

#include <stdio.h> //Заголовочный файл
#include <locale.h>
int main() // начало главной функции
{ // открывающая фигурная скобка
    setlocale(LC_ALL, ""); // устанавливаем локаль
    printf("привет,мир\n"); // печать строки в консоли
} // закрывающая фигурная скобка


Функция main(),как мы поясняли ранее другими словами, главная функция программы,именно с неё начинается запуск приложения.Открывающая фигурная скобка обозначает начало программы,а закрывающая фигурная скобка завершает программу.
Функция setlocale(LC_ALL, ""); устанавливает стандартную локаль.
Функция  printf("привет,мир"); отображает текст "привет,мир" в консоли,без кавычек.Также этот текст является параметром,который передаётся этой функции для печати.


Функции.

Функция - это специально составленная подпрограмма,которая выполняет какие-либо запрограммированные действия.Обычно подпрограммы исполняют то,что задал программист и ожидать от них чего-либо иного просто смешно.
Вызов функции осуществляется с помощью круглых скобок.
Функция может возвращать значение,а может ничего не возвращать.
Функция может принимать параметры,которые каким-либо образом используются в ней.Типы данных,что она принимает зависит от языка программирования.В нашем случае языком программирования является язык общего назначения си,являющийся близким к машинной кухне.

Основные типы данных.

Основные типы данных в языке си это char - символьный тип,int - целочисленный тип,float - формат числа с плавающей запятой одинарной точности,double - формат числа с плавающей запятой двойной точности.
Это самое важные типы,которые используются чаще других в программировании на си.


Давайте напишем программу,что считает сумму двух чисел и выводит их на экран.


#include <stdio.h>
#include <locale.h>
int main() 

setlocale(LC_ALL, ""); 
int number_1 = 10;
int number_2 = 20;
int summa = number_1+number_2;
printf("сумма двух чисел равна %d \n",summa); 

int number_1 = 10; - это определения в языке программирования си целочисленный переменной.
number_1 - это имя переменной,которой присваивается значение 10.Присваивание обозначается знаком равно.
На имя переменной накладываются ограничения:она должна начинаться с буквы,содержать любое количество  букв и  цифр,допускается знаки подчеркивания,но не в коем случае - пробелы.Пробел в имени переменной - это синтаксическая ошибка,поэтому пробелы в идентификаторах в си программистами не используются.

printf("сумма двух чисел равна %d \n",summa); 
%d - является спецификатором целого числа.Язык си вместо спецификатора %d в  строке "сумма двух чисел равна %d \n" подставить значение переменной summa в окончательном выводе текста на консоль.

Функции - вторая ступень.

#include <stdio.h>
#include <locale.h>

void print_summa(int number_1,int number_2)
{
setlocale(LC_ALL, ""); 
int summa = number_1+number_2;
printf("сумма двух чисел равна %d \n",summa); 
}
int main() 

print_summa(1,1);

void print_summa(int number_1,int number_2) - представляет собой прототип функции,в котором определяются два целочисленных параметра number_1 и number_2.
Параметры передаются через запятую,открывающая левая фигурная скобка обозначает начало функции,а закрывающая правая фигурная скобка завершает функцию.Пропуск фигурных скобок - это фатальная синтаксическая ошибка,компилятор языка си в своём логе явно опишет это.Слово void перед прототипом говорит компилятору о том,что функция не возвращает никакого значения.


Функция scanf().

Функция scanf() является функцией ввода информации в программу на языке си.

#include <stdio.h>
#include <locale.h>

int main()
{
int number_1 = 0,number_2 = 0;
setlocale(LC_ALL, "");
printf("Введите первое число\n");
scanf("%d", &number_1);
printf("Введите второе число\n");
scanf("%d", &number_2);
int summa = number_1+number_2;
printf("сумма двух чисел равна %d \n",summa);
}

scanf("%d", &number_1); - записывает в переменную number_1 значение полученное от пользователя.
scanf("%d", &number_2); - также записывает в переменную number_2 значение полученное от пользователя.
Как видно из вышенаписанного функция scanf в первом параметре принимает спецификатор %d,означающий целое число.Во втором параметра функция scanf ожидает адрес переменной.Чтобы получить адрес переменной - нужно перед переменной в языке программирования си поставить знак амперсанда.Если перед переменной стоит знак амперанда,то программист получает адрес.

Псевдослучайное число.

#include <stdio.h>
#include <locale.h>
#include <time.h>
int main()
{
srand(time(NULL));
int number_1 = rand()%10,number_2 = rand()%10;
setlocale(LC_ALL, "");
printf("первое число %d \n",number_1);
printf("второе число %d \n",number_2);
int summa = number_1+number_2;
printf("сумма двух чисел равна %d \n",summa);
}
Генератор псевдослучайных чисел можно использовать во многих программах,ничто не может заменить их при построении определенных программ.Генератор создаёт псевдослучайные числа,но их "случайности" вполне достаточно для применения.Зная зерно - можно восстановить значение псевдослучайного числа.

time(NULL) - представляет собой число в секундах.
srand(time(NULL)); - задаёт зерно для генератора чисел.
int number_1 = rand()%10 - присваивает переменной число в диапозоне от 0 до 9.
int summa = number_1+number_2; - складывает два псевдослучайных числа и потом выводит их сумму на консоль.


Функции - третья ступень.

Функции - это составные блоки программы,их даже можно назвать компонентами-модулями,что составляют приложение при чисто процедурном приограммировании на си.Процедурное программирование,если я ничего не путаю,появилось гораздо раньше,чем объектно-ориентированное.Функция выполняет определенную задачу,вызывается из главной функции main().Программу надо разделять на отдельные функции,каждая функция исполняет свою работу.Например,первая функция получает ввод чисел,вторая функция складывает эти числа,а третья функция выводит результат на консоль.

#include <stdio.h>
#include <locale.h>
int number_1 = 0,number_2 = 0;

void input_numbers(){
setlocale(LC_ALL, "");
printf("Введите первое число\n");
scanf("%d", &number_1);
printf("Введите второе число\n");
scanf("%d", &number_2);
}
int get_summa(){
int summa = number_1+number_2;
return summa;
}

void print_numbers(int summa){
printf("сумма двух чисел равна %d \n",summa);
}
int main()
{
input_numbers();
int summa = get_summa();
print_numbers(summa);

}

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

Переменные number_1 и number_2 - являются глобальными переменными,потому что определены вне всех функций программы.Локальные переменные напротив объявляются и определяются в какой-либо функции.Обычные параметры функций также являются переменными и относятся к локальной области видимости.

Функция get_summa() возращает целочисленное значение int с помощью оператора return.Вообще в функциях может быть много таких операторов,но дойдя до одного такого оператора - производится выход из функции.


Оператор принятия решений if в программах на си.

#include <stdio.h>
#include <locale.h>
#include <time.h>
int main()
{
srand(time(NULL));
int number_1 = rand()%10,number_2 = rand()%10;
int summa = 0;
setlocale(LC_ALL, "");
printf("%d  + %d \n",number_1,number_2);
scanf("%d", &summa);
if ((number_1+number_2) == summa){
printf("верная сумма \n");
}
else{
printf("неверная сумма \n");
}
}


Оператор if может содержать блок else,а может его не содержать.Если условие,заданное в круглых скобках выполняется,то наша программа печатает на консоли "верная сумма".Иначе,если наше условие не выполняется,то печатается "неверная сумма".
Оператор if может использоваться и без блока else.
В данной программе условие выглядит как ((number_1+number_2) == summa).Это означает,что оператор принятия решений if складывает два числа и проверяет на равенство с значением переменной summa,которое получит из функции стандартного ввода на языке си scanf().Равенство в условии обозначается,как два знака равно ==,один знак равно = в языке си является операцией присвоения и скорей всего в данном случае был бы ошибочным оператором,приводящим к бессмысленнице.

Цикл while.


#include <stdio.h>
#include <locale.h>
#include <time.h>
int main()
{
int summa = 0;
while (1){
srand(time(NULL));
int number_1 = rand()%10,number_2 = rand()%10;
setlocale(LC_ALL, "");
printf("%d  + %d \n",number_1,number_2);
scanf("%d", &summa);
if ((number_1+number_2) == summa){
printf("верная сумма \n");
}
else{
printf("неверная сумма \n");
}
}
}


Цикл while - это разновидность циклической конструкции в языке программирования си,которое используется для многократного повторения выполнения программного кода.Тело цикла while  заключается в левую и правую фигурне скобки.
В данной программе while (1) - обозначает бесконечный цикл.Вообще в круглых скобках в цикле while указывается условие продолжения повторения инструкций.
Бесконечный цикл можно прекратить с помощью инструкции break.

#include <stdio.h>
#include <locale.h>
int main()
{
int inputsym = 0;
setlocale(LC_ALL, "");
while (1){
printf("для выхода из бесконечного цикла введите 1 \n");
printf("бесконечный цикл продолжает выполняться \n");
printf("бесконечный цикл продолжает выполняться \n");
printf("бесконечный цикл продолжает выполняться \n");
scanf("%d",&inputsym);

if (inputsym == 1) break;
}

}


if (inputsym == 1) break; - здесь проверяется условие выхода из бесконечного цикла.как только переменная inputsym примет значение 1 - цикл немеделенно завершиться.


Цикл for - еще одна разновидность цикла,что часто используется для так называемого  счетчика.Счетник - это программный код,выполняющий инструкции строго заданное количество раз.

int i;
for(i = 0;i < 10;i++ ){
printf("Тело цикла выполнилось %d раз",i);
}

Цикл for -можно сделать бесконечным,если использовать такую конструкцию for(;;).Это эквивалент цикла while с условием 1.В данном случае они могут быть взаимозаменяемыми.Бесконечный цикл  for также легко завершается оператором break. 

int i = 0;

for(;;){

if (i == 5) break;

i++;
printf("Тело цикла выполнилось %d раз",i);
}

Но кроме оператора break,существует еще оператор continue,который прекращает текущую итерацию и переходит к заголовку цикла,хоть цикла for,хоть цикла while.

#include <stdio.h>
#include <locale.h>
int main()
{
setlocale(LC_ALL, "");
int i;
for(i = 0;i < 10;i++ ){
if (i%2 == 0) continue;
printf("Я люблю только нечетные числа %d \n",i);
}
}

Просмотров: 178 | Добавил: moskov | Рейтинг: 0.0/0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Меню сайта

Мини-чат

Статистика


Онлайн всего: 22
Гостей: 22
Пользователей: 0

Форма входа

Календарь

«  Март 2021  »
ПнВтСрЧтПтСбВс
1234567
891011121314
15161718192021
22232425262728
293031

Архив записей

Друзья сайта

  • ЗОВ КОСМОСА

  • Хулиган Вселенной

  • Тюремная поэзия

  • Религиозная поэзия

  • Сайт клана ЛеГиоН
  • Поиск