Скачать книгу
Если нет возможности читать онлайн, скачайте книгу Программирование на С, С++ файлом для электронной книжки и читайте офлайн.
Начало
Вычислительная техника создавалась для обработки информации. Информация бывает звуковая, графическая, текстовая и т.д. Компьютер не общается на естественном нам языке. Он общается последовательностями 0 и 1. Язык программирования – это команды компьютеру, что-то выполнить, сделать. Есть языки высокого уровня и машинные языки, например. Мы изучим язык С, С++. Почему С, С++? На языке С написаны большинство операционных систем и языков программирования. Зная один язык, легко освоить другой язык.
Мы научимся давать компьютеру простые команды. Напишем первую программу, см. Листинг 1.
Листинг 1
Первая программа
1 #include
2 main()
3 {
4 printf(“Привет!”);
5 }
В 1 строке мы подключаем библиотеку. В программах есть функции. В библиотеке хранятся самые употребляемые функции. Во второй строке объявляем функцию main (). Далее с 3 по 5 строку тело функции, оно взято в фигурные скобки: ‘{‘, ‘}’. В четвертой строке функция библиотеки из файла stdio.h. Эта функция выводит на экран строку с символами: “Привет!”. Все строки заключаются в двойные кавычки, например, “слова”, литералы в одинарные кавычки, например, ‘в’.
Рекомендуется выучить наизусть написание простой программы. Для того, чтобы легче выучить, следует пописать похожие простые программы, на практике быстрее учиться.
Каждый оператор заканчивается точкой с запятой, делается это для компилятора, которому объявляется, где конец одного оператора и начало другого.
Если при выполнении программы, русская кодировка выдается у вас в консоли белибердой, то возможно добавить строки 2 и 5:
Листинг 2
Первая программа
1 #include
2 #include
3 main()
4 {
5 system("chcp 1251 > nul");
6 printf(“Привет!”);
7 }
Функция system заголовочного файла stdlib.h передает строку "chcp 1251 > nul" в операционную систему для выполнения. Возможны и другие настройки.
Усложним первую программу, научим компьютер обращаться к нам по имени, см. Листинг 3.
Листинг 3
Программа: “Знакомство”
1 #include
2 main()
3 {
4 char b[10];
5 printf(“Привет! Как тебя зовут?\n”);
6 scanf(“%s”,&b);
7 printf(“Привет! %s”,b);
8 }
В 4 строке объявляется массив из 10 переменных символьного типа b. Переменная – это имя какого-то участка памяти. В 5 строке оператор выводит на консоль строку, формат задан, переводит на новую строку: ‘\n’ – управляющий символ, символ перевода строки. В 6 строке считывается ввод с консоли, задается формат считывания – %s, означает, что считывается строка, &b – адрес, по которому будет сохранен массив символов. В строке 7 вывод на консоль форматированной строки, %s – означает, что будет выведена строка, b – это та строка, которую выведут на экран (форматирование %s).
Задания:
Написать простой диалог: Привет! Как тебя зовут! – Как дела?
Выучить написание простой программы.
Оператор if-else
Формальный синтаксис:
if (выражение)
оператор1
else
оператор2
Напишем следующую программу с использованием оператора if-else. Пользователь вводит число, компьютер сравнивает с 10, и выводит результат на экран.
Листинг 4
Программа “Сравнение”
1 #include
2 main()
3 {
4 int a;
5 printf(“Vvedite 4islo \n”);
6 scanf(“%d”,&a);
7 if(a>10)
8 printf(“%d > 10”,a);
9 else
10 printf(“%d<=10”,a);
11 }
Задания:
1. Пользователь вводит число. Компьютер сравнивает с 20 и выводит результат.
В операторе if-else есть условие, правила составления условий рассказано в алгебре логике. Рассмотрим логическое или и логическое и в С:
&& – логическое И,
|| – логическое ИЛИ.
Таблица истинности для них, смотри Таблица 1-Таблица 2.
То есть ветвь if(условие) оператор1 выполняется , если условие равно 1.
Например,
if((a>10)&&(a<20))
оператор1
Если a>10 – истинно, в Таблице 1, это 1, если a>10 – ложь, это 0.
Таблица 1
Таблица 2
Оператор switch, цикл while
Один из требований к программе, это удобство использования пользователем, поэтому напишем программу с меню, см. Листинг 5.
Строка 15, оператор break, он прерывает цикл и т.п.
Листинг 5
Программа с меню
1 #include
2 main()
3 {
4 int a, d;
5 do
6 {
7 printf(" MENU \n1. Kvadrat chisla\n2. Kub chisla\n3. Vuhod\nVuberite punkt menu\n");
8 scanf("%d",&d);
9 switch(d)
10 {
11 case 1:
12 printf("Vvedite chislo\n");
13 scanf("%d",&a);
14 printf("Kvadrat chisla raven %d\n",a*a);
15 break;
16 case 2:
17 printf("Vvedite chislo\n");
18 scanf("%d",&a);
19 printf("Kub chisla raven %d\n",a*a*a);
20 break;
21 case 3:
22 break;
23 default:
24 printf("Nevernui vvod!\n\n");
25 }
26 }
27 while(d!=3);
28 }
Оператор switch используется для выбора одного из вариантов, указанных в case. Также для написания программы мы использовали цикл do-while. Цикл проверяет условие в конце.
В default мы указали случай, в котором пользователь вводит цифру, не являющуюся номером пункта меню. А что будет если пользователь введет букву. Возможно зацикливание и т.п. Чтобы этого не было. Нам необходимо предусмотреть ввод не цифр, а букв.
Листинг 6
Программа с меню
1 #include
2 main()
3 {
4 int a;
5 char d;
6 do
7 {
8 printf(" MENU \n1. Kvadrat chisla\n2. Kub chisla\n3. Vuhod\nVuberite punkt menu\n");
9 scanf("%s",&d);
10 switch(d)
11 {
12 case ‘1’:
13 printf("Vvedite chislo\n");
14 scanf("%d",&a);
15 printf("Kvadrat chisla raven %d\n",a*a);
16 break;
17 case ‘2’:
18 printf("Vvedite chislo\n");
19 scanf("%d",&a);
20 printf("Kub chisla raven %d\n",a*a*a);
21 break;
22 case ‘3’:
23 break;
24 default:
25 printf("Nevernui vvod!\n\n");
26 }
27 }
28 while(d!=3);
Задания:
Спроектировать меню. Написать программу.
Оператор for
Оператор for – это оператор цикла, обобщение оператора while [4]. Оператор for:
for (int i=0; i
{
….
}
int i=0 – инициализация,
i
i++ – модификация.
Каждый раз выполняется тело цикла, в конце идет модификация (в данном случае i++), поэтому цикл будет выполняться столько раз, сколько указано в условиях, если условие верно, то выполняется тело еще раз.
Задание: вычислить значение функции y=x*x-4*x при х от 100 до 200 включительно, начиная от 100 с шагом 20. Решение задачи в Листинге 7, результат решения Листинга 7 на Рисунке 1.
Листинг 7
#include
using namespace std;
int main()
{
int y;
for(int x=100;x<=200;x=x+20)
{
y=x*x-4*x;
cout<<"y("<
}
}
Рисунок 1
Типы данных
Типы данных:
char хранит символ (один байт),
int – целочисленные значения,
float – вещественные значения с одинарной точностью,
double – вещественное значения с двойной точностью и т.д.
Модификаторы:
short – короткое целое,
long – длинное целое.
Диапазон значений зависит от аппаратной и системной платформы.
Например, int будет или 16, или 32. Узнать это возможно, используя операцию sizeof(), она возвращает размер в байтах, смотри Листинг 8, Рисунок 2.
Листинг 8
#include
using namespace std;
int main()
{
cout<
}
Рисунок 2
Время жизни и область видимости переменной
Программный блок – это часть программы между фигурными скобками.
Локальные переменные живут только во время программного блока. Локальные переменные объявлены внутри блока.
Глобальная переменная живет на протяжении всей жизни программы. Глобальная переменная объявляется вне блоков программы.
Пример в Листинге 9. Если убрать скобки в строках 8 и 9, компилятор выдаст ошибку.
Листинг 9
1#include
2using namespace std;
3
4 int main()
5 {
6 int i=10;
7 cout<
8 {
9 int i=11;
10 cout<
11 }
12}
Преобразование типов
В зависимости от версии компилятора, округление будет либо в большую, либо в меньшую сторону. Смотри Листинг 10, Рисунок 3.
Листинг 10
#include
using namespace std;
int main()
{
int y;
y=(int)(3/10);
cout<
y=(int)(10/3);
cout<
}
Рисунок 3
Поразрядные операции
Напишите программу, которая переводит введенное положительное число в двоичное систему счисления и выводит на экран результат перевода.
Пример решения задания в Листинге 11.
Листинг 11
#include
using namespace std;
void dv(int a)
{
int b[100];
int i=0;
while(a>1)
{
b[i]=a%2;
a=(a-a%2)/2;
i++;
}
b[i]=a;
for(int j=i;j>=0;j–)
cout<
}
int main()
{
int a;
cin>>a;
dv(a);
return 0;
}
Ниже даны тесты для проверки задач программы.
Тест 1
a=10
Результат
1010
Тест 2
a=2
Результат
10
Тест 3
a=8
Результат
1000
Поразрядные операции применимы только к целочисленным аргументам (char, short, int и long).