Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прога.docx
Скачиваний:
14
Добавлен:
06.08.2019
Размер:
93.3 Mб
Скачать

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=Аmaxmax, где А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