
- •2. Общие рекомендации к выполнению и требования к оформлению контрольной работы
- •3. Темы заданий для выполнения контрольной работы
- •4. 1. Базовые средства языка
- •Алфавит языка
- •Ключевые слова языка
- •Идентификаторы
- •Комментарии
- •4.1.5. Типы данных Си
- •Логический тип
- •4.1.8. Операции и выражения
- •Операции присваивания
- •Арифметические операции
- •Логические операции
- •Операции отношения
- •Условная операция
- •Операция преобразования типа
- •Операция определения размера
- •4.1.9. Стандартные функции
- •4.1.10. Структура программы
- •4.1.11. Ввод и вывод данных
- •Функции ввода- вывода
- •Объектно-ориентированные средства ввода-вывода.
- •4.2. Операторы управления
- •4.2.1. Понятие алгоритма
- •4.2.2. Изображение алгоритма в виде блок-схемы
- •2.3. Составной оператор
- •2.4. Операторы ветвления
- •If (выражение) оператор;
- •4.2.5. Примеры программ
- •4.2.6. Оператор варианта
- •4.2.7. Алгоритмы циклической структуры
- •Оператор цикла с предусловием
- •Оператор цикла с постусловием
- •Оператор цикла с параметром
- •Операторы передачи управления
- •4.2.8. Решение задач с использованием циклов
- •4.3. Обработка массивов
- •4.3.1. Описание массивов
- •4.3.2. Основные операции над массивами
- •4.3.3. Ввод-вывод элементов массива
- •4.3.4. Вычисление суммы элементов массива
- •4.3.5. Вычисление произведения элементов массива
- •4.3.6. Поиск максимального элемента и его номера
- •4.3.7. Сортировка элементов в массиве
- •4.3.8. Удаление элемента из массива
- •4.3.9. Решение задач с использованием массивов
- •4.4. Обработка матриц
- •4.4.1. Ввод-вывод матрицы
- •4.4.2. Примеры алгоритмов обработки матрицами
- •4.5.1. Передача параметров в функцию
- •4.5.2. Возврат результата с помощью оператора return
- •4.6. Указатели и динамические массивы
- •4.6.2. Операции * и & при работе с указателями
- •4.6.3. Операция присваивания указателей
- •4.6.4. Арифметические операции над адресами
- •4.6.5. Динамические массивы
- •4.6.6. Использование указателей в качестве аргументов функций
- •Литература
4.3.9. Решение задач с использованием массивов
ЗАДАЧА 12. Дан массив А состоящий из k целых положительных чисел. Записать все четные по значению элементы массива А в массив В.
int main()
{
int a[20], b[20], k, i, m;
printf("k="); scanf("%d",&k);
for (m=-1,i=0; i<k; i++)
{
printf("\n a[%d]=",i);
scanf("%d",&a[i]);
if (a[i]%2==0)
{
m++;
b[m]=a[i];
}
}
if (m=-1) printf("\n There are not even elements! \n");
else
for (i=0;i<=m;i++)
printf("\n b[%d]=%d \t", i, b[i]);
}
ЗАДАЧА 13. Дан массив Х = (х0, …,хn-1). Переписать 7 первых положительных элементов массива Х подряд в массив Y = (y0, …, y6).
#include <iostream.h>
int main()
{
float X[20], Y[20]; int k, i, n;
cout<<"n="; cin>>n;
for (i=0;i<n;cin>>X[i++]);
for (k=-1,i=0;i<n;i++)
if (X[i]>0)
{
Y[++k]=X[i];
if (k==6) break;
}
if (k>-1) for (i=0;i<=k;cout<<Y[i++]<<"\t");
else cout<<"ERROR!!!";
}
ЗАДАЧА 14. Все наименьшие элементы массива Х(n) заменить средним арифметическим его значений.
#include<iostream.h>
int main()
{
float X[20],S,min;int n,i;
cout<<"n="; cin>>n;
for (i=0;i<n;cin>>X[i++]);
for (S=0,min=X[0],i=0; i<n;S+=X[i],i++)
if (X[i]<min)min=X[i];
S=S/n;
cout<<"min="<<min<<"\t S="<<S<<endl;
for (i=0;i<n; cout<<X[i++]<<"\t");
cout<<endl;
for (i=0;i<n;i++)
if (X[i]==min) X[i]=S;
for (i=0;i<n; cout<<X[i++]<<"\t");
}
ЗАДАЧА 15. Удалить из массива последний нулевой элемент.
#include<iostream.h>
int main()
{float X[20]; int n,i,nom;
cout<<"n="; cin>>n;
for (i=0;i<n;cin>>X[i++]);
for (nom=n,i=n-1;i>=0;i--)
if (X[i]==0)
{nom=i;break;}
cout<<"nom="<<nom<<endl;
for (i=0;i<n; cout<<X[i++]<<"\t");
for (i=nom;i<n-1; X[i]=X[i+1],i++);
if (nom!=n) n--;
for (i=0;i<n; cout<<X[i++]<<"\t");
}
4.4. Обработка матриц
Рассмотрим основные операции, выполняемые над матрицами.
4.4.1. Ввод-вывод матрицы
Матрицы, как и массивы, нужно вводить (выводить) поэлементно. Далее приведен текст программы, в которой организован поэлементный ввод матрицы А и вывод ее на экран в виде таблицы.
Вариант 1.
#include <stdio.h>
int main()
{int i,j,n,m; float b,a[25][25];
printf("Введите размеры матрицы\n"); scanf("%d%d",&n,&m);
printf("Ввод матрицы A\n");
for(i=0;i<n;i++)
for(j=0;j<m; scanf("%g",&a[i][j]);j++)
printf("Матрица A\n");
for(i=0;i<n; printf("\n");i++)
for(j=0;j<m; printf("%g\t",a[i][j]);j++)
}
Вариант 2
#include<iostream.h>
void main()
{int A[10][10],N,M,i,j;
cout <<"\n N="; cin >>N;cout <<"\n M="; cin >>M;
for (i=0;i<N;i++)
for (j=0;j<M;cout<<"\n A["<<i<<","<<j<<"]=";
cin>>A[i][j];j++)
for (i=0;i<N; cout <<"\n";i++)
for (j=0;j<M; cout <<"\t"<<A[i][j];j++)
}
4.4.2. Примеры алгоритмов обработки матрицами
Рассмотрим несколько задач обработки матриц, зная их свойства (рис. 24):
Рис. 24. Свойства матриц
ЗАДАЧА 16. Найти сумму элементов матрицы, лежащих выше главной диагонали (рис. 25-26).
Рис. 25. Алгоритм решения Рис. 26. Алгоритм решения
задачи 16 (первый способ) задачи 16 (второй способ)
//Первый способ
int main()
{int S,i,j,N,M,a[20][20];
cout<<"N="; cin>>N; cout<<"M="; cin>>M;
cout<<"Input Matrix A"<<endl;
for(i=0;i<N;i++)
for(j=0;j<M;j++) cin>>a[i][j];
for(S=i=0;i<N;i++)
for(j=0;j<M;j++) if (j>i) S+=a[i][j];
cout<<"S="<<S<<endl;}
//Второй способ
for(s=0,i=0;i<n;i++)
for(j=i+1;j<m; s+=a[i][j], j++)
printf("s =%f \n",s);}
ЗАДАЧА 17. Вычислить количество положительных элементов квадратной матрицы, расположенных по ее периметру и на диагоналях.
#include <stdio.h>
#include <math.h>
int main()
{int n,i,j,k; float b,a[25][25];
scanf("%d",&n);
for(i=0;i<n;i++)
for(j=0;j<n; scanf("%g",&b); a[i][j]=b;j++)
for(k=0,i=0;i<n;i++)
{
if (a[i][i]>0) k++;
if (a[i][n-i-1]>0) k++;
}
for(i=1;i<n-1;i++)
{
if (a[0][i]>0) k++;
if (a[n-1][i]>0) k++;
if (a[i][0]>0) k++;
if (a[i][n-1]>0) k++;
}
if ((n%2!=0)&&(a[n%2+1][n%2+1]>0)) k--;
printf("k=%d",k);
}
4.5. Функций в С++
Подпрограмма – именованная, логически законченная группа операторов языка, которую можно вызвать для выполнения любое количество раз из различных мест программы. В С++ подпрограммы реализованы в виде функций
Функция - поименованный набор описаний и операторов, выполняющих определенную задачу. Функция может принимать параметры и возвращать значение. Параметр функции это информация, передаваемая в нее для обработки. Значение функции - результат ее вычислений. Обращение к функции называют вызовом.
Любая программа на С++ состоит из одной или нескольких функций.
При запуске программы первой выполняется функция main. Если среди операторов функции main встречается вызов функции, то управление передается операторам функции. Когда все операторы функции будут выполнены, управление возвращается оператору, следующему за вызовом функции.
Перед вызовом функция должны быть обязательно описана. Описание функции состоит из заголовка и тела функции:
тип имя_функции(список_перем)
{
тело_функции
}
Заголовок функции содержит:
тип – тип возвращаемого функцией значения (может быть любым; если функция не возвращает значения, то тип void);
имя_функции – имя, с которым она будет вызываться;
список_переменных – перечень передаваемых в функцию величин (аргументов), которые отделяются друг от друга запятыми; для каждой переменной из списка указывается тип и имя; если функция не имеет аргументов, то в скобках указывают либо тип void, либо ничего.
Тело функции представляет собой последовательность описаний и операторов, заключенных в фигурные скобки.
В общем виде структура программы на С++ может иметь вид:
директивы компилятора
тип имя_1(список_перем)
{
тело_функции_1;
}
тип имя_2(список_перем)
{
тело_функции_2;
}
...
тип имя_n(список_перем)
{
тело_функции_n;
}
int main(список_перем)
{
тело__основной_функции;
имя_1;
имя_2;
...,
имя_n;
}
Вызвать функцию можно в любом месте программы. Для вызова функции необходимо указать ее имя и в круглых скобках, через запятую перечислить имена или значения аргументов, если таковые имеются:
имя_функции(список_переменных);
Если тип возвращаемого значения не void, то функция может входить в состав выражений.
Типы и порядок следования переменных в определении и при вызове функции должны совпадать.
Для того чтобы функция вернула какое-либо значение, в ней должен быть оператор:
return (выражение);
Локальные переменные это переменные, описанные внутри функции, а так же переменные из списка аргументов. Область действия локальной переменной не выходит за рамки функции. Значения локальных переменных между вызовами одной и той же функции не сохраняются.
Глобальные переменные это переменные, определенные до объявления всех функций и доступные всем функциям.