Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы алгоритмизации и программирования. Часть 1. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
7. Вычислить произведение P = S1 • S2 суммы S1 элементов массива xi и
№ СР
Вариант
1
2 3 4
1
1 1 11 1 11
1
2
2 2 12 2 12
2
3
3 3 13 3 13
3
4
4 4 14 4 14
4
5
5 5 15 5 15
5
6
6 6 16 6 16
6
7
7 7 17 7 17
7
8
8 8 18 8 18
8
9
9 9 19 9 19
9
10
10
10
20
10
20
10
суммы S2 элементов массива yi, i = 1, 2, 3, меньших 5.
8. Вычислить сумму S = P1 + P2 произведения P1 четных элементов
массива xi и произведения P2 четных элементов массива yi, i = 1, 2, 3.
9. Определить максимальное значение xymax = max {xmin, ymin}
минимальных элементов xmin = min {xi} массива xi и ymin = min {yi} массива
yi, i = 1, 2, 3.
10. Определить минимальное значение Srmin = min {Sr1, Sr2} среднего
значения Sr1 массива xi и среднего значения Sr2 массива yi, i = 1, 2, 3.
В табл. 1.8 приводятся варианты заданий с номерами задач,
закреплёнными за номерами самостоятельных работ (№ СР).
Таблица 1.8
41
2. Основы программирования на C в
#include <stdio.h> void main() { //вывод сообщения на экран
printf(“Hello”); }
Microsoft Visual Studio Ultimate 2010
2.1. Структура программы
Программа на языке программирования С состоит из оболочки,
включающей описание и директивы препроцессора, и одной или нескольких
функций, одна из которых носит имя main и обязательно должна
присутствовать в законченной программе, поскольку исполнение программы
начинается именно с нее. Однако объявленные внутри нее переменные не
являются глобальными, и их область видимости простирается только на
функцию main().
Рассмотрим структуру простейшей программы на языке С,
представленной в виде функции main() и изображенной на рис. 2.1.
Рис. 2.1
Первая строка программы начинается директивами препроцессора с
символа #, который записывается в отдельной строке. Препроцессор языка С -
это программа, которая, обрабатывая исходный файл до компилятора, в том
числе подключает необходимые файлы. В первой строке программы на С,
изображенной на рис. 2.1, директива #include присоединяет к программе
заголовочный файл stdio.h. В C функции ввода-вывода не являются частью
языка, т.е. в C нельзя просто вызвать функцию printf(), предназначенную
для вывода данных, так как в самом C ее нет. Эту функцию, а также ряд
других можно подключить с помощью заголовочного файла stdio.h.
Именно для этого в начале программы прописана строка #include
<stdio.h>. Include с английского переводится как “включить”, а stdio есть
сокращение от “стандартный ввод-вывод (input-output)”.
42
Если функция не возвращает никакого значения, то ее тип void.
Тип данных
Диапазон значений
Char
от -128 до +127
unsigned char
от 0 до 255
Int
от -32768 до +32767
unsigned
от 0 до 65636
float
от ±3,4Е-38 до ±3,4Е+38
double
от ±1,7Е-308 до ±1,7Е+308
Функция main() с помощью функции вывода данных printf() выводит на экран сообщение “Hello”. Символы {} являются логическими скобками, по аналогии с begin end в языке Basic. Каждый оператор заканчивается символом ;.
Однострочный комментарий начинается символами //.
Указание: компилятор различает большие и малые латинские буквы. Это следует помнить при вводе имен, команд и т.д.
Основные типы данных языка С [3] представлены в табл. 2.1.
Таблица 2.1
Описание целочисленной переменной a и вещественной переменной b может быть записано следующим образом
int a
float b
Вывод данных осуществляется с помощью функции
printf(строка формата, список вывода),
в которой аргументом является строка формата - обязательное сообщение, поясняющее смысл вводимой величины, содержащее обычные символы, заключенные в “”, специальные символы (например \n - перехода на следующую строку) и элементы формата данных. Элементы формата данных представляют собой последовательность:
%[-][длина поля][.точность][спецификация типа],
43
где “-” означает сдвиг выводимых данных по левому краю, длина поля - количество позиций для вывода,.точность - количество дробных цифр для чисел. Используются следующие основные спецификации типов:
d, i - для данных типа int;
f - для данных типа float, double;
с - для данных типа char;
s - для строк.
Запись выражения для вывода значения вещественной переменной a с
двумя знаками после запятой, с переходом на следующую строку, будет иметь вид
printf(“a= %.2f\n”, a).
Ввод данных осуществляется функцией scanf
scanf(строка формата, список ввода),
где список ввода содержит адреса переменных, описанных в программе, а строка формата содержит элементы формата данных вида:
d, i - для ввода целых чисел;
c - для ввода символов;
f - для ввода вещественных чисел.
Указание: для использования функций ввода/вывода данных директивой
#include следует присоединить к программе заголовочный файл stdio.h.
Запись выражения для ввода значения вещественной переменной a будет иметь вид
scanf("%f",&a).
Причина, по которой в scanf() передается адрес &a, а не значение переменной a заключается в том, что она должна изменять значения
переменных тех функций, из которых вызывается, поэтому получает адреса областей памяти.
В первой главе пособия аргументы передавались в функцию по значению. Это значит, что когда функция вызывается, ей передаются в
44
качестве фактических параметров (аргументов) не указанные переменные, а копии значений этих переменных. В вызываемой функции эти значения присваиваются переменным-параметрам, которые локальны. Отсюда следует, что изменение переданных значений никакого влияния на переменные, переданные в функцию при вызове, не оказывают.
Однако можно организовать изменение локальной переменной одной функции с помощью другой функции. Сделать это можно, передав в функцию адрес переменной или указатель на нее. На самом деле, в этом случае также передается копия значения адреса на область памяти. На один и тот же участок памяти может существовать множество ссылок, и с помощью каждой из них можно поменять находящееся там значение.
Переменные и указатели. Переменная - это область памяти, к которой обращаемся за находящимися там данными, используя имя переменной. При этом у этой помеченной именем области есть еще и адрес, выраженный числом и понятный компьютерной системе. Этот адрес можно получить и записать в особую переменную.
Переменную, содержащую адрес области памяти, называют указателем. Когда мы меняем значение обычной переменной, то просто удаляем из конкретной области памяти данные и записываем туда новые. Когда мы меняем значение переменной-указателя, то начинаем работать с совершенно иным участком памяти, так как меняем содержащийся в ней адрес.
Когда программа компилируется, то под объявленные переменные выделяются участки памяти. Потом размер этих участков не меняется, может меняться только их содержимое (значения или данные). Однако именно с помощью указателей можно захватывать и освобождать новые участки памяти уже в процессе выполнения программы. Адрес любой переменной можно получить следующим образом:
int i = 0;
printf ("i=%d, &i=%p \n", i, &i);
45
в результате выполнения данного программного кода на экране появится
Выражение
Функция
abs(x)
для целого х
fabs(x)
для вещественного х
exp(x)
- экспонента
Log10(x)
Log(x)
fmod(x)
Остаток от деления х на y
sqrt(x)
- квадратный корень
pow(x,y)
примерно следующее:
i=0, &i=0x5сffс40а5fac.
Знак амперсанда & перед переменной позволяет получить ее адрес в
памяти. Для вывода адреса переменной на экран используется специальный формат %p. Адреса обычных переменных (не указателей) в процессе выполнения программы никогда не меняются.
2.2. Арифметические операции
В языке С определены следующие основные операции:
арифметические (+ сложение, - вычитание, * умножение, / деление,
% остаток от деления);
сравнения (= равно, != не равно, > больше, >= больше или равно,
< меньше, <= меньше или равно);
логические (! отрицание, && логическое и, || логическое или);
преобразования типов (тип) выражение.
Стандартные математические функции записаны в табл. 2.2. Указание: для использования математических функций директивой #include присоедините к программе заголовочный файл math.h.
Таблица 2.2
46
2.3. Функции
Язык C позволяет создавать программы, состоящие из множества функций, а также из одного или нескольких файлов исходного кода. В рамках этого пособия остановимся на создании только однофайловых программ, содержащих более чем одну функцию. До сих пор мы видели только функцию main(), которая является главной в программе на языке C, поскольку
выполнение кода всегда начинается с нее. Однако в процессе работы потребуется создавать другие функции, которые будут вызываться из
main().
В языке программирования C глобальные (внешние) переменные объявляются вне какой-либо функции. С их помощью удобно организовывать обмен данными между функциями.
Локальные переменные в языке программирования C называют автоматическими. Область действия автоматических переменных распространяется только на ту функцию, в которой они были объявлены. Параметры функции также являются локальными переменными.
Структурная организация файла программы на языке C, содержащего несколько функций, может выглядеть немного по-разному. Поскольку выполнение начинается с main(), то ей должны быть известны
спецификации (имена, количество и тип параметров, тип возвращаемого значения) всех функций, которые из нее вызываются, поэтому объявляться функции должны до того, как будут вызваны. А вот определение функции уже может следовать и до и после main().
Любая функция имеет имя, количество и тип параметров, тип возвращаемого значения
тип имя([список параметров]) { тело функции } и тела функции. Тело функции - это последовательность операторов в фигурных скобках {}.
Для каждого параметра функции тип данных указывается отдельно.
47
Описание функции first, возвращающей целое число, полученное в
int first(int a, int b) { int m; m=a+b; return m; }
теле функции в результате расчета суммы двух целых параметров a и b, будет иметь вид, представленный на рис. 2.2
Рис. 2.2
Оператор return возвращает результат выполнения переданного ему
выражения m, после return функция завершает свое выполнение.
Если тип функции void, т.е. она не возвращает значения, то оператор
return не пишется, как в примере на рис. 2.1.
В языке С нет понятия процедуры. Процесс набора и отладки программы на языке C рассмотрим на
примере вывода на экран текстового сообщения.
ЗАДАНИЕ 1
Выведите на экран текстовое сообщение “Hello, world”.
ТЕХНОЛОГИЯ РАБОТЫ
В среде Microsoft Visual Studio изучение основ языка C и создание
консольного приложения удобнее всего выполнять в пустом проекте.
1. Для того чтобы создать пустой проект, запустите Microsoft
Visual Studio Ultimate 2010, в открывшемся окне “Toolbox - Microsoft Visual Studio” в меню File выберите пункт New, Project. В левой
части открывшегося окна “New Project” выберите Visual C++, а в правой выделите пункт Empty Project. В нижней части окна в поле Name введите название проекта First_C и обратите внимание на путь к папке, в которой сохранится проект, после чего нажмите ОК.
2. После создания пустого проекта добавьте основной файл, для этого в
меню Project выберите пункт Add New Item. В правой части открывшегося
48
окна “Add New Item - First_C” выберите C++ File(.cpp) и в нижней части окна
#include <stdio.h> void main() { //вывод сообщения на экран printf("Hello, world"); }
в поле Name введите название проекта First_C и нажмите кнопку Add. В результате файл будет добавлен в папку проекта и его название First_C.cpp отобразится в окне панели Solution Explorer, а сам файл будет открыт на отдельной вкладке с именем First_C.cpp, изображенной на рис. 2.3.
3. В открытой вкладке с именем First_C.cpp введите следующий текст
программы, изображенный на рис. 2.4
Язык С++ полностью поддерживает средства ввода-вывода языка С.
Рис. 2.3
Рис. 2.4
49
4. Скомпилируйте и запустите программу. Для этого в меню Build
#include <stdio.h> #include <conio.h> void main() { //вывод сообщения на экран printf("Hello, world"); getch(); }
выберите пункт Build Solution. В результате в окне “Output” отобразится следующая информация
1> First_C.vcxproj -> C:\Documents and Settings\--\First_C\Debug\First_C.exe
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
Данная информация показывает отсутствие ошибок в программе и
успешное создание файла First_basic.exe.
Для того чтобы посмотреть результат выполнения программы, в меню
Debug выберите команду Start Debugging или нажмите клавишу F5.
После исполнения программа сразу закрывается и результат невозможно
увидеть. Чтобы этого не происходило, добавьте две строки (#include <conio.h>, getch()), как на рис. 2.5
Рис. 2.5
Функция getch() возвращает значение, соответствующее нажатой
клавише, не высвечивая введенный символ.
Заново скомпилируйте и исполните программу. В результате откроется
окно результата с текстовым сообщением “Hello, world”, для закрытия которого нажмите любую кнопку.
5. По команде File, Save all сохраните проект First_C.
запускается функция main(), для упорядочивания выполнения работы
6. Поскольку в языке C в среде Microsoft Visual Studio первой
50
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]