- •Содержание работы
- •1 Элементы языка с
- •1.1 Символы
- •2 Простые типы данных
- •3 Операции над числовыми данными
- •4 Объявление переменных
- •5 Структура программы на с
- •7 Директива #define
- •9 Библиотека математических функций
- •Содержание работы
- •1 Условный оператор if
- •Пример 1 Поиск наибольшего значения
- •Пример 2 Определение принадлежности точки фигуре
- •2 Составной оператор
- •Пример 3 Проверка условия существования треугольника
- •3 Вложенный оператор
- •Пример 4 Вложенное ветвление
- •4 Оператор выбора switch
- •Содержание работы
- •1 Определение цикла
- •Пример 1 Виды циклов
- •Задание 1
- •2 Оператор цикла for
- •3 Оператор цикла while
- •4 Оператор цикла do while
- •5 Табулирование функций
- •Пример 2 Табулирование непрерывной функции
- •Пример 3 Табулирование сложной функции
- •6 Вычисление конечных сумм и произведений
- •Пример 4 Вычисление суммы
- •Пример 5 Вычисление произведения
- •7 Управляющие конструкции break, continue, return, goto
- •Содержание работы
- •1 Понятие и описание массивов
- •Пример 1 Объявление одномерного массива
- •Пример 2 Объявление двумерного массива
- •2 Одномерные массивы Пример 3 Ввод элементов одномерного массива
- •Пример 4 Нахождение суммы и среднего значения элементов массива
- •Пример 5 Нахождение наибольшего элемента массива и его номера
- •3 Двумерные массивы (матрицы)
- •Пример 6 Суммирование матриц
- •4 Символьные массивы
- •Пример 7 Описание символьного массива
- •Пример 8 Сравнение строк
- •5 Указатели и операции над указателями
- •Пример 9 Описание указателей
- •Пример 10 Операции над указателями
- •Пример 11 Сравнение указателей
- •6 Связь между массивом и указателем
- •Содержание работы
- •1 Модульное программирование
- •2 Объявление функции
- •Пример 1 Объявление функции
- •Задание 1
- •Это важно
- •2 Формальные и фактические параметры функции
- •Задание 3
- •Содержание работы
- •1 Создание класса
- •Пример 1 Объявление класса
- •Задание 1
- •Пример 2 Доступ к членам класса
- •Задание 2
- •2 Полиморфизм
- •Пример 3 Перегрузка функций
- •Задание 3
- •Содержание работы
- •1 Понятие формы. Конструктор форм Windows Forms
- •2 Элементы управления
- •3 Создание приложений с помощью Windows Forms Application Пример 1 Создание простейшего оконного приложения
- •Пример 2 Создание идентификационной формы
- •Пример 3 Изменение параметров MessageBox.Show
- •5 Анализ кода
- •6 Расчетные формы Пример 4 Создание расчетной формы
- •Пример 5 Создание простейшего меню
- •7 Создание оконных приложений на базе mfc
Пример 10 Операции над указателями
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
int Dec =10;
int *Ptr;
using namespace System;
int main(array<System::String ^> ^args)
{
// присваивание указателю Ptr адреса переменной Dec
Ptr=&Dec;
*Ptr = *Ptr+3;
// вывод на экран значений *ptr, ptr и &Dec
printf("\n%d\n",*Ptr);
printf("%d\n",Ptr);
printf("%d\n",&Dec);
getch();
return 0;
}
Тестирование:
Операции ++ и -- значение указателя увеличивают или уменьшают на длину типа, на который ссылается используемый указатель:
int *ptr, a[10];
ptr=&a[5];
ptr++; /* равно адресу элемента a[6] */
ptr--; /* равно адресу элемента a[5] */
В бинарных операциях сложения и вычитания могут участвовать указатель и величина типа int. При этом результатом операции будет указатель на исходный тип, а его значение будет на указанное число элементов больше или меньше исходного:
int *ptr1, *ptr2, a[10];
int i=2; ptr1=a+(i+4); /* равно адресу элемента a[6]*/
ptr2=ptr1-i; /* равно адресу элемента a[4]*/
В операции вычитания могут участвовать два указателя на один и тот же тип. Результат такой операции имеет тип int и равен числу элементов исходного типа между уменьшаемым и вычитаемым, причем если первый адрес младше, то результат имеет отрицательное значение:
int *ptr1, *ptr2, a[10];
int i;
ptr1=a+4;
ptr2=a+9;
i=ptr1-ptr2; /* равно 5 */
i=ptr2-ptr1; /* равно -5 */
Пример 11 Сравнение указателей
Значения двух указателей на одинаковые типы можно сравнивать в операциях ==, !=, <, <=",">, >= при этом значения указателей рассматриваются просто как целые числа, а результат сравнения равен 0 (ложь) или 1 (истина).
int *ptr1, *ptr2, a[10];
ptr1=a+5;
ptr2=a+7;
if (prt1>ptr2) a[3]=4;
В данном примере значение ptr1 меньше значения ptr2 и поэтому оператор a[3]=4 не будет выполнен.
6 Связь между массивом и указателем
Указатели позволяют эффективно организовать работу с массивами. Действительно, обозначение массива представляет собой скрытую форму использования указателей. Например, имя массива определяет также его первый элемент, т.е. если arr[][]– массив, то arr==&arr[0][0].
Пример 12
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
int arr [4][2];
int *ref1,*ref2;
using namespace System;
int main(array<System::String ^> ^args)
{
arr[0][0] =11;
arr[0][1] =12;
arr[1][0] =21;
arr[1][1] =22;
arr[2][0] =31;
arr[2][1] =32;
arr[3][0] =41;
arr[3][1] =42;
ref1=(int*)arr;
ref2=(int*)arr;
printf("\n%d \n", arr);
printf("\n%d %d %d %d %d \n", *ref1,ref1,ref2,*ref2,*(arr[0]));
ref1++;
ref2=&arr[0][0]+1;
printf("%d %d %d %d %d\n", *ref1,ref1,ref2,*ref2,*(arr[1]));
ref1++;
ref2=&arr[0][0]+2;
printf("%d %d %d %d %d\n", *ref1,ref1,ref2,*ref2,*(arr[2]));
ref1++;
ref2=&arr[0][0]+3 ;
printf("%d %d %d %d %d\n", *ref1,ref1,ref2,*ref2,*(arr[3]));
ref1++;
ref2=&arr[0][0]+4;
printf("%d %d %d %d %d\n", *ref1,ref1,ref2,*ref2,*(arr[4]));
getch();
return 0;
}
Тестирование:
Имя массива является адресом его первого элемента.
Задачи
Одномерные массивы
-
Пригодность детали оценивается по размеру В, который должен соответствовать интервалу (А+s, А-s). Определить имеются ли в партии из N деталей бракованные. Если да, то подсчитать их количество, иначе выдать отрицательный результат.
-
При поступлении в вуз абитуриенты, получившие «двойки» на первом экзамене, ко второму не допускаются. В массиве res[n] записаны оценки экзаменующихся, полученные на первом экзамене. Подсчитать, сколько человек не допущено ко второму экзамену.
-
Написать программу, которая определяет количество учеников в классе, чей рост превышает средний.
-
Составить программу, которая вычисляет среднюю (за неделю) температуру воздуха.
-
Задан целочисленный одномерный массив а состоящий из n элементов. Написать программу подсчета количества ненулевых элементов массива.
-
Задан целочисленный одномерный массив а состоящий из n элементов. Написать программу вычисления суммы, разности и произведения наибольшего и наименьшего элементов массива.
Двумерные массивы
-
Написать программу транспонирования матрицы АТ. Если в матрице А поменять местами столбцы со строками, то получим транспонированную матрицу АТ. Каждый элемент транспонированной матрицы определяется по формуле
aijT = aji, i=1,2,...,n; j=1,2,...,m.
Транспонирование матрицы реализовать двумя способами.
Первый способ – имя транспонированной матрицы не совпадает с именем исходной матрицы, т.е. когда исходная и транспонированная матрицы хранятся в разных областях памяти.
Второй способ – выполнить транспонирование в той же области памяти, где располагается исходная матрица, т.е. когда транспонированная матрица должна иметь такое же имя, как и исходная (например, для экономии памяти).
-
Написать программу умножения матриц.
При умножении каждый элемент матрицы-произведения определяется как сумма произведений элементов строки матрицы-множимого на соответствующие элементы столбца матрицы-множителя. Например, если требуется вычислить С=А*В, где А и В – матрицы, то каждый элемент матрицы С определяется по формуле:
сi,j = aik *b kj, i=1,2,...,n; j=1,2,...,l ; k=1,2,...,m
где
n – число строк матрицы А;
l – число столбцов матрицы В;
m – число столбцов матрицы А и строк матрицы В. Из формулы следует, что перемножать можно только такие матрицы, у которых число столбцов матрицы-множимого равно числу строк матрицы множителя, т.е. [aij]n*m*[bij]m*l= [cij]n*l.