Представление нуля, неопределенности и бесконечности.
Чтобы представить дробную часть в двоичной системе счисления нужно умножать на 2 и выписывать целую часть.
Можно писать так (объявление переменной и присваивание значение):
int x;
x = 1;
Но есть и другой вариант (инициализация):
int x = 1;
Эти 2 способа могут работать по-разному, хоть и используется для обозначения операции один и тот же знак.
Сейчас чаще всего рекомендуется использовать инициализацию.
Допустим, нам нужно работать с однотипными элементами, например, оценками.
#include <iostream>
int main() {
// можно писать так:
int mark_1;
int mark_2;
int mark_3;
// однако это слишком массивно и неудобно для использования.
// гораздо чаще для этой цели используют массивы.
int marks[8]; // совокупность из 8 оценок.
marks[0] = 3;
marks[1] = 4;
marks[2] = 5;
return 0;
}
Причем при создании массива в квадратных скобках можно указывать только константное выражение, т.к. компьютер должен точно понимать, сколько памяти ему нужно выделить для массива.
Например, такой код выдаст ошибку, т.к. переменная можем изменяться, т.е. не является константным выражением:
int n = 10;
int marks[n];
Если мы знаем элементы массива, то мы можем задать его просто перечислив элементы:
int marks[] = {5,5,3,5,4};
// получим массив из 5 элементов.
// Компилятор сам подсчитает размер массива и подставит число.
int marks[10] = {5,5,3,5,4}
// здесь же получим массив из 10 элементов, где недостающие 5 элементов будут равны 0.
Узнать размер массива можно с помощью оператора sizeof().
sizeof{marks} // вычислит, сколько места в памяти занимает массив.
sizeof{marks[0]} // вычислит, сколько места в памяти занимает элемент массива.
// тогда размер массива равен:
sizeof{marks} / sizeof{marks[0]}
Вывести все элементы массива можно с помощью использования цикла:
int marks[] = {4,5,3,5,4,3,5,4,3,5,3,4,3,4,3};
int N = sizeof{marks} / sizeof{marks[0]};
std::cout << "Marks: ";
for (int i = 0; i < N; ++i) {
std::cout << ' ' << marks[i];
}
Заполним массив рандомными числами и выведем его:
#include <time.h>
srand( (unsigned int) time(NULL) ) // задает начальное значение для рандомных чисел.
// в качестве начального значения передаем текущее время.
for (int i=0; i<N; ++i) {
marks[i] = 2 + rand() % 4;
}
std::cout << "Rand marks: ";
for (int i=0; i<N; ++i) {
std::cout << ' ' << marks[i];
}
std::cout << std::endl;
Посчитаем среднее арифметическое оценок:
int summa = 0;
for (int i = 0; i < N; ++i) {
summa += marks[i];
}
std::cout << "Average: " << (double)summa/(double)N << std::endl;
Попробуем вывести массив символов.
char str[] = {'H', 'e', 'l', 'l', 'o'};
int len1 = sizeof{str} / sizeof{str[0]};
for (int i = 0; i < len1; ++i) {
std::cout << str[i];
}
std::cout << std::endl;
// Хотелось бы выводить быстрее.
// Однако система не знает размер массива и до куда нужно выводить.
std::cout << str1 << std::endl;
// поэтому данный код выведет далеко не только символы массива.
Для таких случаев есть терминатор - ‘\0’. Будут выводиться символы вплоть до первого терминатора.
char str2[] = {'H', 'e', 'l', 'l', 'o', '\0'};
// или
char str3[] = "Hello";
std::cout << str2 << std::endl;
std::cout << str3 << std::endl;
// выведет одинаковые строки, т.к. терминатором обозначается конец строки.
Попробуем заменить маленькие символы на большие и наоборот.
char str[] = "Hello";
for (int i=0; str[i] != 0; ++i) {
if (str[i] >= 'a' && str[i] <= 'z') {
str[i] = 'A' + str[i] - 'a';
} else if (str[i] >= 'A' && str[i] <= 'Z') {
str[i] = 'a' + str[i] - 'A';
}
}
std::cout << str << std::endl;