пʼятниця, 29 вересня 2017 р.

11 клас С++ Лекція 1

C  + +           Л Е К Ц І Я   1.1
Программа печати сообщения “Hello World!” имеет вид:

#include <stdio.h>
void main(void)
{
 printf("Hello World!\n");
}

Для использования функций ввода-вывода следует подключить библиотеку стандартного ввода-вывода (STanDart Input-Output). Библиотека подключается ключевым словом include, перед которым ставится символ #.
Строки в языке Си выделяются двойными кавычками (в Паскале – одинарными). Символ перевода курсора на новую строку имеет вид ‘\n’. При помощи функции printf в программе выводится строка "Hello World!", после чего производится перевод курсора на новую строку.
После компиляции программы на языке Си операционная система вызывает функцию main. Слово main являет ключевым – оно является именем функции, которая вызывается операционной системой при старте программы. Функция main обязана присутствовать в любой программе Си, так как она является точкой входа в программу.
Открывающаяся и закрывающаяся скобки { … } в Си являются аналогом begin .. end в Паскале.

ПЕРЕМЕННЫЕ И ИХ ОБЪЯВЛЕНИЯ

Переменные представляют собой область памяти для хранения данных. Имя переменных называют идентификатором.

Имя переменной может содержать от одного до 32 символов. Разрешается использовать строчные и прописные буквы, цифры и символ подчёркивания, который в Си считается буквой. Первым символом обязательно должна быть буква. Имя переменной не может совпадать с зарезервированными словами.

Объявление переменных происходит в операторе описания, состоящем из спецификации типа и списка имён переменных, разделённых запятой. В конце оператора должна стоять точка с запятой.
Например, объявить две целочисленные переменные x, y и одну символьную c можно следующим образом:
int x,y;
char c;

ФОРМАТ ВВОДА-ВЫВОДА. ВЫЧИСЛЕНИЕ СУММЫ ДВУХ ЧИСЕЛ

Для форматированного ввода-вывода данных пользуются функциями scanf и printf. Первый аргумент функций содержит формат ввода-вывода. Далее следуют вводимые (выводимые) переменные. Следующая таблица представляет формат ввода-вывода элементарных типов данных в Си:

описание типа
тип
формат
целочисленный, 4 байта
int
%d
целочисленный, 8 байт
__int64
%I64d
целочисленный, 8 байт
long long
%lld
действительный, 4 байта
float
%f
действительный, 8 байт
double
%lf
символьный, 1 байт
char
%c
строка, массив символов
char[], строка
%s

Оператор присваивания в языке Си имеет вид знака равенства ‘=’.
Операторы в языке Си разделяются знаком ‘;’.
Комментарии в языке Си выделяются символами /* … */.
Комментарии до конца строки следуют после символов //.

Пример 1. Инициализируем переменные i (целое), j (вещественное), c (символьное) соответственно значениями 4, 5,4, ‘A’ и выведем их на экран. В дальнейшем операции ввода-вывода будем комментировать, указывая вводимые и выводимые значения.

#include <stdio.h>
int i = 4;
double j = 5.4;
char c = 'A';
void main(void)
{
  printf("%d %lf %c\n", i, j, c);  // 4 5.400000 A
}

Символьным переменным можно присваивать не только символы, но и значения от 0 до 255. В таком случае переменная будет принимать значение того символа, ASCII код которого ей присвоен. Значения символьных переменных можно выводить как символы (используя формат вывода %c) или как числа – ASCII коды символов (используя формат вывода %d).
Напоминание! Сокращение ASCII расшифровывается как American Standart Code for Information Interchange.

Пример 2. Присвоим символьной переменной с значение 65 и выведем ее, используя форматы %c и %d. Напомним, что ASCII код символа ‘A’ равен 65.

#include <stdio.h>
char c = 65;
void main(void)
{
  printf("%c %d\n", c, c);  // A 65
}

Упражнение 1. Напишите программу, которая выведет на экран строку из четырех символов, ASCII коды которых соответственно равны 3, 4, 5 и 6.
#include <stdio.h>
char c1 = 3;c2=4;c3=5;c4=6;
void main(void)
{
  printf("%c %c %c %c\n", c1, c2, c3,c4); 
}

Пример 3. Рассмотрим программу, которая вводит два целочисленных числа a и b, вычисляет их сумму в переменной res и выводит на печать пример в формате
«слагаемое + слагаемое = сумма»
В качестве второго аргумента функции scanf следует передавать адреса переменных. Адрес переменной x обозначается &x.

#include <stdio.h>
int a, b, res;
void main(void)
{
  scanf("%d %d",&a,&b);                    // a = 3, b = 5
  res = a + b;
  printf("%d + %d = %d\n", a, b, res);     // 3 + 5 = 8
}

Операции ввода-вывода можно также выполнять при помощи потоковых бесформатных функций cin и cout библиотеки <iostream.h> (тільки в C++). Но они работают значительно медленнее, чем prinf и scanf (прийшло з мови С). Поэтому для выполнения операций ввода-вывода рекомендуется пользоваться библиотекой <stdio.h>.

Пример. Перепишем программу из примера 2.3.3. вычисления суммы двух чисел с использованием функций cin и cout:

#include <iostream.h>
int a, b, res;
void main(void)
{
  cin >> a >> b;          // a = 3, b = 5
  res = a + b;
  cout << res << endl;    // 8
}


Упражнение 2. Напишите программу, которая по заданным двум действительным числам a и b находит и выводит значение выражения a2 + b2.
#include <stdio.h>
     #include <math.h>
int a, b, res;
void main(void)
{
  scanf("%d %d",&a,&b);                   
  res = a*a + pow (b,2);
  printf("%lf ^2 + %lf ^2 = %d\n", a, b, res);    
}

2.6. БИТЫ. БАЙТЫ. СЛОВА
Битом называется единица информации. В одну ячейку памяти размером 1 бит можно занести два значения: 0  или 1.
Байтом называется ячейка памяти, состоящая из 8 битов.
Словом называется ячейка памяти, состоящая из двух байт или 16 битов.
Двойным словом называется ячейка памяти, состоящая из четырех байт или 32 битов.
 В языках программирования различают, как правило, знаковые и беззнаковые типы данных. Беззнаковые типы данных хранят только неотрицательные значения, знаковые могут содержать как положительные, так и отрицательные числа.
 Беззнаковые типы данных. В трех битах можно хранить значения от 0 до 7:
 содержимое 3 битов
значение
000
0
001
1
010
2
011
3
100
4
101
5
110
6
111
7

В n битах можно хранить числа от 0 до 2n – 1. Например, в беззнаковом байте можно записать любое число от 0 до 255, а в беззнаковом двойном слове – число от 0 до 232 – 1 = 4294967295.
 При выводе десятичных значений переменных беззнаковых типов вместо %d (decimal) пользуются %u (unsigned).
Знаковые типы данных. Старший бит знакового типа данных отвечает за знак числа. Число является положительным, если бит равен 0 и отрицательным, если бит равен 1. Например, в трех битах можно хранить знаковые значения от -4 до 3:
 содержимое 3 битов
значение
011
3
010
2
001
1
000
0
111
-1
110
-2
101
-3
100
-4
 В n битах можно хранить знаковые числа от -2n-1 до 2n-1 – 1. Например, в байте можно записать любое число от -128 до 127, в двойном слове – число от -231 = -2147483648 до 231 – 1 = 2147483647.
Целочисленный тип int в языке Си четырехбайтовый, поэтому переменные типа int могут хранить значения в промежутке [-231; 231 – 1] = [-2147483648; 2147483647].
Целочисленный тип long long в языке Си восьмибайтовый, поэтому переменные типа long long могут хранить значения в промежутке [-263; 263 – 1] = [-9223372036854775808; 9223372036854775807].
Пример 4. Если к максимальному целочисленному значению прибавить 1, то получится наименьшее целочисленное значение. Аналогично если из наименьшего значения типа int вычесть 1, то получится  наибольшее значение типа int.
#include <stdio.h>
int i = 2147483647;
void main(void)
{
  printf("%d %d\n", i, i + 1);  // 2147483647 -2147483648
  i++;
  printf("%d %d\n", i, i - 1);  // -2147483648 2147483647
}
 Константы INT_MIN и INT_MAX, объявленные в библиотеке <limits.h>, соостветственно равны наименьшему и наибольшему значению, которое может принимать переменная типа int.
Упражнение 3. Вывести значения переменных INT_MIN, INT_MAX и их сумму.
#include <stdio.h>
#include <limits.h>
int i = INT_MIN, j = INT_MAX, sum;
void main(void)
{
  printf("Min Value:%d \nMax Value: %d\n", i, j);
 // Min Value: -2147483648
  // Max Value: 2147483647
  sum = i + j;
   printf("Summa: %d \n", sum);
}
Пример. Выведем наибольшее и наименьшее значение восьмибайтового целочисленного знакового типа  long long. Для того чтобы число имело тип long long, а не int, после него следует писать суффикс LL. Например, значение (1LL << 63) – 1 будет иметь тип long long и равняться 9223372036854775807 =2^63-1 , а (1 << 63) – 1 будет типа int и равняться -1 (значение 1 << 63 при вычислении на 32 битах равно нулю, потому что слищком большое и не поместится в 32 бита).
#include <stdio.h>
long long i;
int j;
void main(void)
{
  i = (1LL << 63) - 1;
    j = (1 << 63) - 1;
  printf("max long long i =: %lld\n  min long long: i + 1 = %lld\n",i,i+1);
  // max long long: i = 9223372036854775807 = 2 ^ 63 - 1
  // i + 1 = -9223372036854775808 = -2 ^ 63
  printf("int j =: %d\n", j);
  // int j = -1
}
Пример. Выведем наибольшее значение беззнаковых 32 и 64 – битовых целочисленных типов (потому что 0 - наименшее беззнаковое число, а менше его -1 - и берется наибольшее беззнаковое число соот ветственного типа).
#include <stdio.h>
unsigned int i = -1;
unsigned long long j = -1;
void main(void)
{
  printf("%u %llu\n",i,j);
  // 4294967295 = 2 ^ 32 - 1, 18446744073709551615 = 2 ^ 64 - 1
}
Пример. Выведем восьмеричное, десятичное и шестнадцатиричное представление числа 255. Шестнадцатиричное представление чисел можно выводить как прописными (%x), так и заглавными (%X) буквами.
#include <stdio.h>
int i = 255;
void main(void)
{
  printf("%o %d %x %X\n",i,i,i,i);
  // 377 255 ff FF

}

Немає коментарів:

Дописати коментар