- •1. Понятие информации. Виды информации. Единицы измерения информации. Информация и данные.
- •Информация может существовать в виде:
- •6. Форматы представления вещественных чисел. Структура представления числа: мантисса, порядок. Диапазон вещественного числа и количество значащих цифр.
- •11. Синтаксические и логические ошибки. Тестирование и отладка программы.
- •15. Функции форматного ввода и вывода. Параметры. Управляющая строка. Спецификаторы формата. Управляющие символы.
- •Спецификаторы формата:
15. Функции форматного ввода и вывода. Параметры. Управляющая строка. Спецификаторы формата. Управляющие символы.
Управляющая строка содержит спецификации преобразования и используется для установления количества и типов аргументов. В нее могут включаться:
пробелы, символы табуляции и перехода на новую строку (все они игнорируются);
спецификации преобразования, состоящие из знака %, возможно, символа * (запрещение присваивания), возможно, числа, задающего максимальный размер поля, и самого символа преобразования;
обычные символы, кроме % (считается, что они должны совпадать с очередными неизвестными символами во входном потоке).
Функция printf() это функция форматированного вывода. Это означает, что в параметрах функции необходимо указать формат данных, которые будут выводиться. Формат данных указывается спецификаторами формата. Спецификатор формата начинается с символа % за которым следует код формата.
Спецификаторы формата:
%с |
символ |
%d |
целое десятичное число |
%i |
целое десятичное число |
%e |
десятичное число в виде x.xx e+xx |
%E |
десятичное число в виде x.xx E+xx |
%f |
десятичное число с плавающей запятой xx.xxxx |
%F |
десятичное число с плавающей запятой xx.xxxx |
%g |
%f или %e, что короче |
%G |
%F или %E, что короче |
%o |
восьмеричное число |
%s |
строка символов |
%u |
беззнаковое десятичное число |
%x |
шестнадцатеричное число |
%X |
шестнадцатеричное число |
%% |
символ % |
%p |
Указатель |
%n |
Указатель |
Кроме спецификаторов формата данных в управляющей строке могут находиться управляющие символы:
\b |
BS, забой |
\f |
Новая страница, перевод страницы |
\n |
Новая строка, перевод строки |
\r |
Возврат каретки |
\t |
Горизонтальная табуляция |
\v |
Вертикальная табуляция |
\" |
Двойная кавычка |
\' |
Апостроф |
\\ |
Обратная косая черта |
\0 |
Нулевой символ, нулевой байт |
\a |
Сигнал |
\N |
Восьмеричная константа |
\xN |
Шестнадцатеричная константа |
\? |
Знак вопроса |
Чаще всего вы будете использовать символ \n. С помощью этого управляющего символа вы сможете переходить на новую строку.
16.Алгоритмическая конструкция ветвления: полная и неполная форма, блок-схемы. Условная операция. Условный оператор в языке Си: структура оператора, полная и неполная формы, использование сложных условий. Пример на языке Си.
Ветвление - управляющая структура, организующая выполнение лишь одного из двух указанных действий в зависимости от справедливости некоторого условия. Условие - вопрос, имеющий два варианта ответа: да или нет. Запись ветвления выполняется в двух формах: полной и неполной. Полная форма: Неполная форма:
17.Алгоритмическая конструкция выбора: понятие, блок-схема. Оператор выбора в языке Си: структура оператора. Пример программы на Си.
18.Циклические алгоритмы: понятие, виды (перечислить). Алгоритмическая конструкция цикла с предусловием (понятие, использование, блок-схема). Оператор цикла for: структура оператора, пример использования.
Цикл "до": Исполнение цикла начинается с выполнения действия. Таким образом тело цикла будет реализовано хотя бы один раз. После этого происходит проверка условия. Поэтому цикл "до" называют циклом с постусловием. Если условие не выполняется, то происходит возврат к выполнению действий. Если условие истинно, то осуществляется выход из цикла. Таким образом условие цикла "до" - это условие выхода. Для предотвращения зацикливания необходимо предусмотреть действия, приводящие к истинности условия.
19.Циклические алгоритмы: понятие, виды (перечислить). Алгоритмическая конструкция цикла с предусловием (понятие, использование, блок-схема). Оператор цикла с предусловием while в языке Си: структура оператора, допустимые и недопустимые условия, пример использования.
Цикл "пока": Выполнение цикла "пока" начинается с проверки условия, поэтому такую разновидность циклов называют циклы с предусловием. Переход к выполнению действия осуществляется только в том случае, если условие выполняется, в противном случае происходит выход из цикла. Можно сказать что условие цикла "пока" - это условие входа в цикл. В частном случае может оказаться что действие не выполнялось ни разу. Условие цикла необходимо подобрать так, чтобы действия выполняемые в цикле привели к нарушению его истинности, иначе произойдет зацикливание. Зацикливание - бесконечное повторение выполняемых действий.
20. Циклические алгоритмы: понятие, виды (перечислить). Алгоритмическая конструкция цикла с постусловием (понятие, использование, блок-схема). Оператор цикла с постусловием в языке Си: структура оператора, допустимые и недопустимые условия, пример использования.
21. Типовые циклические алгоритмы: максимум/минимум, сумма/произведение, количество.
Дополнительно:
22. Линейный массив: понятие массива, объявление, инициализация массива, индексация элементов. Формирование и вывод массива.
23. Типовые алгоритмы для работы с линейными массивами.
24. Задача сортировки массива. Алгоритм сортировки линейного массива методом "пузырька".
25. Двумерный массив. Объявление, инициализация двумерного массива, индексация элементов. Формирование и вывод двумерного массива.
26. Типовые алгоритмы для обработки двумерного массива (целиком).
28. Указатели. Понятие указателя, объявление, инициализация. Операции, применимые к указателям. Указатель на указатель.
30. Функции в языке Си: понятие, объявление, прототипы функций. Вызов функции. Типы возвращаемых значений.
31. Функции в языке Си: параметры формальные и фактические, механизм передачи параметров. Передача параметров «по значению» и «по ссылке». Пример использования.
33. Локальные и глобальные переменные. Области действия и области видимости. Экранирование переменных.
35. Рекурсивное описание функций: база рекурсии, рекурсивный вызов, использование стека. Пример использования.
36-37. Динамическая память: выделение и освобождение памяти, размещение данных в динамической памяти. Выделение и освобождение памяти при работе с одиночными переменными и с массивами, изменение размера массива. Выделение и освобождение памяти при работе с матрицами. Особенности обработки матриц при работе с динамической памятью.
39. Строка в языке Си: библиотечные функции для обработки строк. Примеры использования.
1. Поменять местами значения максимальных элементов массива А (35) и матрицы В (8х9).
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void Input(int*, int);
void Output(int*, int, int);
int* Maximal(int*, int);
void Change(int*, int*);
main()
{
int A[35], B[8][9];
srand(time(0));
Input(&A[0], 35);
Input(&B[0][0], 72);
Output(&A[0], 1, 35);
Output(&B[0][0], 8, 9);
Change(Maximal(&A[0], 35), Maximal(&B[0][0], 72));
Output(&A[0], 1, 35);
Output(&B[0][0], 8, 9);
getch();
return 0;
}
void Input(int* x, int n)
{
int i;
for(i=0; i<n; i++)
*(x+i) = -50 + rand()%100;
}
void Output(int* x, int n, int m)
{
int i, j;
printf(“Array:\n”);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
printf(“%5d”, *(x+i*m+j)) ;
printf(“\n”);
}
}
int* Maximal(int* x, int n)
{
int i, *vsp;
for(i=1, vsp=x; i<n; i++)
if(*vsp<*(x+i))
vsp = x+i;
return vsp;
}
void Change(int* x, int* y)
{
int vsp = *x;
*x = *y;
*y = vsp;
}
2. Вычислить S=Аmax/Вmax, где Аmax и Вmax – максимальные значения элементов массива А (35) и матрицы В(8х9) соответственно.
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void Input(int*, int);
void Output(int*, int, int);
int Maximal(int*, int);
main()
{
int A[35], B[8][9];
float x;
srand(time(0));
Input(&A[0], 35);
Input(&B[0][0], 72);
Output(&A[0], 1, 35);
Output(&B[0][0], 8, 9);
x = Maximal(&B[0][0], 72);
if(x)
printf(“S = %.3f\n”, Maximal(&A[0],35)/x);
else
printf(“Error!!! Divide by 0!!!\n”);
getch();
return 0;
}
void Input(int* x, int n)
{
int i;
for(i=0; i<n; i++)
*(x+i) = -50 + rand()%100;
}
void Output(int* x, int n, int m)
{
int i, j;
printf(“Array:\n”);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
printf(“%5d”, *(x+i*m+j)) ;
printf(“\n”);
}
}
int Maximal(int* x, int n)
{
int i, vsp;
for(i=1, vsp=*x; i<n; i++)
if(vsp<*(x+i))
vsp = *(x+i);
return vsp;
}
3. Отсортировать массив А(35) и строки матрицы А(8х9) в порядке убывания.
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void Input(int*, int);
void Output(int*, int, int);
void Sort(int*, int, int);
main()
{
int A[35], B[8][9];
srand(time(0));
Input(&A[0], 35);
Input(&B[0][0], 72);
Output(&A[0], 1, 35);
Output(&B[0][0], 8, 9);
Sort(&A[0], 1, 35);
Sort(&B[0][0], 8, 9);
Output(&A[0], 1, 35);
Output(&B[0][0], 8, 9);
getch();
return 0;
}
void Input(int* x, int n)
{
int i;
for(i=0; i<n; i++)
*(x+i) = -50 + rand()%100;
}
void Output(int* x, int n, int m)
{
int i, j;
printf(“Array:\n”);
for(i=0; i<n; i+)
{
for(j=0; j<m; j++)
printf(“%5d”, *(x+i*m+j)) ;
printf(“\n”);
}
}
void Sort(int* x, int n, int m)
{
int vsp, i, j, k;
for(k=0; k<n; k++)
for(i=0; i<m; i++)
for(j=i+1; j<m; j++)
if(*(x+k*m+i)<*(x+k*m+j))
{
vsp = *(x+k*m+i);
(x+k*m+i) = *(x+k*m+j);
*(x+k*m+j) = vsp;
}
}
4. Заполнить матрицы А(8х7) и В (7х8) нулями и единицами по следующему правилу: если сумма индексов элемента четная, элемент будет равен 0, если нечетная будет равен 1.
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void Input(int*, int, int);
void Output(int*, int, int);
main()
{
int A[8][7], B[7][8];
Input(&A[0][0], 8, 7);
Input(&B[0][0], 7, 8);
Output(&A[0][0], 8, 7);
Output(&B[0][0], 7, 8);
getch();
return 0;
}
void Input(int* x, int n, int m)
{
int i, j;
for(i=0; i<n; i++)
for(j=0; j<m; j++)
if((i+j)%2)
*(x+i*m+j) = 1;
else
*(x+i*m+j) = 0;
}
void Output(int* x, int n, int m)
{
int i, j;
printf(“Array:\n”);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
printf(“%5d”, *(x+i*m+j)) ;
printf(“\n”);
}
}
5. Удалить из массивов А(35) и В(40) максимальные по значению элементы.
#include <time.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void Input(int*, int);
void Output(int*, int);
void Delete(int*, int);
main()
{
int A[35], B[40];
srand(time(0));
Input(&B[0], 40);
Output(&A[0], 35);
Output(&B[0], 40);
Delete(&A[0], 35);
Delete(&B[0], 40);
Output(&A[0], 34);
Output(&B[0], 39);
getch();
return 0;
}
void Input(int* x, int n)
{
int i;
for(i=0; i<n; i++)
*(x+i) = -50 + rand()%100;
}
void Output(int* x, int n)
{
int i;
printf(“Array:\n”);
for(i=0; i<n; i++)
printf(“%5d”, *(x+i)) ;
printf(“\n”);
}
void Delete(int* x, int n)
{
int i, j, *m;
for(i=1, m=x; i<n; i++)
if(*m<*(x+i))
m=x+i;
for( ; m<=x+n-2; m++)
*m = *(m+1);
}
1