Эта шпаргалка будет полезна тем людям, которые уже знакомы с языком Си и хотят восстановить в памяти особенности данного языка.
Типичная структура программы
[code language=»cpp»]
#include <stdio.h>
int main(void)
{
printf("Привет, это VIRAND.RU");
return 0;
}
[/code]
Типы данных
int — основной целочисленный тип. Си отводит под int не менее 16 разрядов.
long — целое число, которое не меньше наибольшего int. C гарантирует, что под long выделяется 32 разряда.
short — целочисленный тип, не превосходит наибольшего значения int. Однако C гарантирует, что под short будет выделено по меньшей мере 16 разрядов.
signed
unsigned
char — применяется для хранения символов, однако с точки зрения компьютера данный тип является целочисленным
float — тип данных с плавающей запятой. По меньшей мере 6 значащих цифр.
double — тип данных с плавающей запятой. По меньшей мере 10 значащих цифр.
void
_Bool
_Complex
_Imaginary
Объявление переменных
[cpp]
int boys = 32;
int boys = 32, girls = 15;
int boys, girls = 15; //Так делать не рекомендуется. Инициализируется только переменная girls
char ch = ‘Z’; //правильное объявление char
char ch = Z;//Неправильное объявление char, компилятор примет Z за переменную
char ch = "Z";//Неправильное объявление переменной. Компилятор примет Z за строку.
char ch =’\007′;//Цифровой код управляющей последовательности
[/cpp]
Ввод/вывод
Функция printf
Спецификаторы формата функции printf
%с — символ
%d, %i — десятичное число со знаком
%e — научный формат: число с плавающей запятой, e-представление
%o — восьмеричное число без знака
%u — десятичное число без знака
%x — шестнадцатеричное число без знака
%p — указатель (обычно отражает шестнадцатеричные числа)
%% — знак %
scanf(«%f», &weight);
Пример printf
printf(«Это пример: %c, %d, %f, %s, %p», ‘G’, 10, 7.4, «строка», &a);
Модификаторы printf
%10.4f — выводит число, у которого количество цифр не превышает 10, четыре из которых размещаются после десятичной точки.
%3.8s — строка, которая состоит минимум из трех символов, но не превышает 8
Функция scanf
scanf(«%f», &weight);
scanf(«%s»,&name);//при записи вводимой строки в массив name — функция scanf сама добавит null-символ.
Функция sizeof
sizeof(int);//определяет размер объекта int в байтах
sizeof(name);//если name — строка, то sizeof вернет размер массива, учитывая нулевой символ
Константы и препроцессор
#define MONTHS 12;//происходит подстановка во время компиляции, переменная MONTHS называется символической константой или литералом.
const int MONTHS 12;// второй способ задания символической константы, но в данном случае MONTHS можно использовать только для чтения.
Строки
В C нет никакого специального типа для представления строк. Строки хранятся в массивах из char. В последней позиции массива хранится нулевой (null) символ — ‘\0’. Таким образом, массив должен иметь хотя бы на одну ячейку больше, чем количество символов, которые мы хотим сохранить.
strlen();//возвращает длину строки без null символа
Массивы
char password[15];
char password[15] = {‘q’,’w’,’e’,’r’,’t’,’y’};//оставшиеся элементы будут инициализированы нулями
int days[MONTHS] = {31,28, [4] = 31,30,31, [1]=29};
ТАК ДЕЛАТЬ НЕЛЬЗЯ:
int oxen [SIZE] { 5 , 3 ,2,8 ) ;
int yaks [SIZE ] ;
yaks = oxen ;
yaks [ SIZE] oxen [ SIZE] ;
yaks [ S I ZE] = { 5 , 3,2 , 8 ) ;
Массив только для чтения необходимо объявлять с ключевым словом const
Многомерные массивы
float revenue[5][12];
int matrix[2][2] =
{
{4,7},
{3,1}
}
Указатели и массивы
array == &array[0];//данное выражение истинно
[cpp]
short dates[SIZE];
short *pti;
pti=dates;
for (index = 0; index < SIZE; index++)
printf("указатели + %d: %10p\n", index, pti+index);
[/cpp]
Когда мы говорим: «прибавить 1 к указателю», то язык Си добавляет одну единицу хранения. Для массивов это означает, что адрес увеличивается до адреса следующего элемента, НО НЕ ДО СЛЕДУЮЩЕГО БАЙТА. Это одна из причин, почему необходимо объявлять вид объекта, на который указывает указатель. Адреса недостаточно, так как компьютер должен знать, сколько нужно байтов для хранения объекта.
Благодаря этому, следующие выражения истинны:
[cpp]
dates + 2 == &date[2]
*(dates + 2) == dates[2]
[/cpp]
Определения функций, работающих с массивами
[cpp]
int sum(int *array, int n)
{
}
int sum(int ar[], int n)
{
}
[/cpp]
int sum(int rows, int cols, int ar[rows][cols])