- •Базовые типы данных
- •Пример простой программы на языке с
- •Ветвления
- •Последовательная обработка
- •Сумма числовой последовательности
- •Максимум числовой последовательности
- •Последовательная обработка символов
- •Подсчет строк, слов и символов
- •Массивы
- •Статические и динамические массивы
- •Двумерные массивы
- •Структурное программирование сверху вниз
- •Алгоритм сортировки методом обмена (методом пузырька)
- •Подпрограммы
- •Примеры зачетных задач
- •Рекурсия
Программирование и структуры данных (1- й семестр)
Базовые типы данных
Целые величины:
Тип Размер Диапазон значений
unsigned char 1 байт 8 бит от 0 до 255;
int 2 байта 16 бит от -215 до 215-1,
т. е. от -32768 до 32767
short (<= int) 2 байта 16 бит от -32768 до 32767
unsigned 2 байта 16 бит от 0 до 216-1
т. е. от 0 до 65535
unsigned short 2 байта 16 бит от 0 до 65535
long (>= int) 4 байта 32 бита от -231 до 231-1
т. е. приблизительно ±2*109
unsigned long 4 байта 32 бита от 0 до 232-1
т. е. приблизительно от 0 до 4*109
Размер памяти и диапазон значений зависят от реализации языка. Типичные для IBM PC-совместимых 16-битовых компьютеров характеристики разновидностей целого типа приведены выше. На 32-битовых компьютерах обычно используют четырехбайтовые целые числа.
Служебные слова имеют следующий смысл:
int (integer) - целое, short - короткое, long - длинное, signed - число со знаком, unsigned - беззнаковое (неотрицательное) число, char (character) - символьное (целочисленный код символа).
Вещественные величины:
Тип Размер Точность Диапазон значений
float 4 байта 6..7 значащих цифр ± (от 10-38 до 10+38)
double 8 байт 15 значащих цифр ± (от 10-308 до 10+308)
long double 10 байт 19 значащих цифр ± (от 3.4·10-4932 до 1.1·10+4932)
Служебные слова имеют следующий смысл:
float - плавающее (с плавающей точкой), double - двойной точности, long double – длинное двойной точности.
Прочие типы величин:
пустой – void;
перечислимый – enum.
Пример простой программы на языке с
/* Программа 1.1. Площадь прямоугольника (в стиле С) */
#include <stdio.h>
main ()
{ float a, b, /* стороны прямоугольника */
s; /* площадь прямоугольника */
printf ("\n Стороны прямоугольника = ");
scanf (“%f %f”, &a, &b);
s = a * b;
printf ("\n Площадь = %.2f \n ", s);
return 0;
}
Можно обойтись без дополнительной переменной s, тогда вычисление площади выполняется при выводе результата:
printf ("\n Площадь равна =%.2f \n ", a * b);
Пояснения к программе.
1. /* */ - комментарий языка С, не выполняется и не влияет на работу программы.
2. main() – заголовок главной функции, круглые скобки после имени main указывают на то, что это функция. Тело функции заключено в фигурные скобки { }.
3. Программа на языке С состоит из одной или нескольких функций, выполнение программы начинается с функции main().
4. float a, b, s; – объявлены переменные вещественного типа с именами a, b, s.
5. printf () - вызов стандартной функции для вывода сообщения и результата. В скобках задаются параметры вызова - форматная строка в кавычках и возможно список выводимых значений.
printf ("\n Стороны прямоугольника = ");
Форматная строка содержит текст в кавычках, где символ \n - переход на новую строку: printf ("\n Площадь = %.2f \n ", s);
Форматная строка, кроме текста, содержит формат вывода переменной s. Выводится значение переменной s или выражения a*b.
%f – формат ввода/вывода вещественного числа,
%.2f - формат вывода вещественного числа с точностью до 2-х знаков после запятой.
6. scanf() - вызов стандартной функции для ввода исходных данных.
Параметры вызова - форматная строка в кавычках и имена переменных. Символ & (амперсенд) перед именем переменной означает операцию получения адреса переменной.
7. #include <stdio.h> - директива препроцессора для использования стандартных функции ввода/вывода.
<stdio.h> - заголовочный файл, содержит объявления стандартных функций ввода/вывода.
8. return - оператор возврата, завершает выполнение функции. Оператор return 0; означает успешное завершение программы.
9. В любом языке есть зарезервированные (ключевые, служебные) слова, которые имеют специальное назначение и могут использоваться только по своему назначению, например, ключевое слово return – оператор возврата, завершающий выполнение функции.
Пример программы с вводом/выводом в стиле языка С++
// Программа 1.2. Площадь прямоугольника (в стиле С++)
#include <iostream.h>
void main ()
{ float a, b, // стороны прямоугольника
s; // площадь прямоугольника
cout << "\n Стороны прямоугольника = ";
cin >> a >>b;
s = a * b;
cout << "\n Площадь = “ << s;
}
Пояснения к программе.
1. // - строчный комментарий, используется в С++, наряду комментарием /* */.
2. <iostream.h> - заголовочный файл, содержит объявления стандартных объектов-потоков языка С++:
cin – поток для ввода с клавиатуры,
>> - операция для чтения данных из потока;
cout - поток для вывода на экран,
<< - операция для вывода данных в поток .
3. Ключевое слово void обозначает отсутствие значения функции main. Функция завершается после выполнения последнего оператора, оператор return не обязателен.
Задача 2.1. Составить программу табулирования функции
f(x)= 3+2x (шаг табулирования = 0.1).
/* Программа 2.1. Табулирование функции (в стиле С) */
#include <stdio.h>
void main ()
{ int n, i; /* количество строк, номер строки*/
float x; /* текущее значение х */
scanf (“%f %d”, &x, &n);
printf ("\n X F(X) ");
i=1;
while (i <= n)
{ printf(“\n%5.2f %5.2f”, x, 3+2*x);
i =i + 1; x = x + 0.1;
}
}
Тест. Вычислить 5 значений функции, начиная со значения х = 0.2 с шагом 0.1.
Вход: 0.2 5
Выход: X F(X)
0.2 3.40
0.3 3.60
0.4 3.80
0.5 4.00
0.6 4.20
Пояснения к программе.
1. Вводится начальное значение величины х и количество строк.
2. Выводится заголовок таблицы значений.
3. while - оператор цикла c предусловием. Позволяет повторить действия в { } n раз, т.е. вычислить и вывести n строк со значением функции. Переменная i – счетчик текущей строки.
Изменим программу 2.1. – для вычисления значения функции f(x) используем подпрограмму.
/*Программа 2.2. Табулирование функции (в стиле С) */
/* с использованием подпрограммы для вычисления функции f(x) */
#include <stdio.h>
/* подпрограмма вычисления функции f(x) */
float f ( float z )
{ float y;
y = 3 + 2*z;
return y; /* возврат значения функции */
}
void main ()
{ int n, i; /*количество строк, номер строки */
float x; /* текущее значение х */
scanf (“%f %d”, &x, &n);
printf ("\n X F(X) ");
for (i = 1; i <= n; i++)
{printf(“\n%5.2f %5.2f”, x, f ( x ) ); /* вызов функции */
x = x + 0.1;
}
}
Пояснения к программе.
1. Для вычисления значения функции f(x) вызывается подпрограмма - функция. Подпрограмма, получив в качестве аргумента очередное значение величины x, вычисляет и возвращает значение y = 3 + 2*x.
2. В подпрограмме можно обойтись без дополнительной переменной y: вычисление значения функции выполнить в операторе return.
float f ( float z )
{ return (3 + 2 * z); }
3. Использование подпрограммы позволяет менять функцию, не изменяя основную программу.