Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Количество индексов массива.Содержание книги
Поиск на нашем сайте Одномерные массивы содержат в описании только один индекс. Пример2: unsigned int vector[10]; // массив беззнаковых целых // чисел из 10 элементов char Control_String[20], Green_Line[5]; Пример3: имеется массив чисел, содержащий средний балл ball успеваемости трёх студентов, массивы mas1 и mas2 содержат отметки двух групп 25 студентов в каждой по математике. float ball[3]; int mas1[25], mas2[25]; int i,j,k; i=15; j=20; k=8; ball[0]=4.35; mas1[i]=mas2[j-k]; mas1[i+1]=mas2[k*2+5]; В программе одному массиву может быть присвоено значение другого массива, если их базовые типы и диапазоны индексов совпадают. Так как это требование выполняется для массивов mas1 и mas2, то в программе допустим оператор mas1=mas2; Пример 4: Составить программу, определяющую количество вхождений каждой строчной буквы латинского алфавита в текст, состоящий из 100 символов. // переменные stroka-массив символов; // k-массив количества вхождения букв; // i,x -параметры циклов; // n-количество обрабатываемых символов
#include <stdio.h> #include <conio.h> void main() { int i,n,k[26]; char x,Stroka[200]; clrscr(); printf(" введите количество обрабатываемых символов "); scanf("%d",&n); printf("введите %d латинских букв\n ",n); for (i=0; i<n; i++) scanf("%c",&Stroka[i]); printf(" в вашем тексте: "); for (i=0; i<n; i++) printf("%c",Stroka[i]); // обнуление массива k for (i=0; i<26; i++) k[i]=0; // подсчёт количества символов for (i=0; i<n; i++) // индекс эл-та массива находится как k[Stroka[i]-97]++; // разность кода соотв-его символа и кода i=0; // 1-ой строчной буквы «а», равного 97 for (x='a'; x<='z'; x++) {if (i%3==0) printf("\n"); printf(" число букв %c равно %d",x,k[x-97]); i++; } getch(); 5.2.2 Операция образования массива [ ]. Онаможет быть использована при описании несколько раз. В этом случае объявленный массив называется многомерным. Если число индексов в описании массива равно N, то массив называется N- мерным. Ограничения на число измерений массива отсутствует. Количество оперативной памяти, занимаемой элементами многомерного массива, определяется произведением величин его размерностей на длину элемента массива, т.е. для массива Object: sizeof(int)*2*15. Во избежания ошибок не следует определять массивы, занимающие более одного сегмента оперативной памяти (более 64 Кбайт). На практике часто используются двумерные массивы, соответствующие понятию матрицы. Например, предложение int Object[2][15]; определяет двумерный массив Object, состоящий из элементов целого типа. Двумерные массивы называются также матрицами. Тогда первый размер в описании массива определяет количество строк, а второй - количество столбцов. Элементы многомерных массивов располагаются в памяти ЭВМ таким образом, что наиболее быстро меняется значение самого последнегоиндекса, т.е. для рассмотренного примера: Object[0][0], Object[0][1], Object[0][2], …, Object[0][14], Object[1][0], Object[1][1], Object[1][2], …, Object[1][14]. Многомерные массивы представляют собой чистую абстракцию, поскольку память у ЭВМ одномерна и многомерные массивы хранятся в ней в виде линейных последовательностей значений. Рассмотрим матрицу А, состоящую из 2х3 элементов. | а11 а12 а13 | А= | а21 а22 а23 |. Элементы этой матрицы размещены в памяти ЭВМ «по строкам», формируемая при этом последовательность будет а11, а12, а13, а21, а22, а23. Переменная А имеет смысл массива из двух строк, в каждую из которых включено по 3 элемента. Ссылка на элемент матрицы А, лежащий на пересечение i –ой строки и j -ого столбца, может иметь следующий вид: a[i][j]. Пример: массив а[4][3][2] (a[i][j][k])
Элементы массива могут использоваться в операторах и выражениях языка С наравне с переменными. При этом в квадратных скобках могут употребляться любые арифметические выражения, возвращающие целые положительные значения. Ввод-вывод массивов. Кроме операторов присваивания, значения элементам массива можно задать оператором ввода данных. Для простых типов данных в языке применяется поэлементный ввод-вывод. При вводе компоненты массива обычно отделяются друг от друга пробелом. По окончанию ввода очередной порции данных набирается символ возврата каретки или перевода строки. Алгоритм заполнения одномерного массива
Пример 5: Осуществить ввод-вывод элементов массива. #include <stdio.h> #include <conio.h> void main() { int i,j, mas[2][3]; float v[3][5]; clrscr(); randomize(); // ввод массива printf("Введите массив mas \n"); for (i=0; i<2; i++) for (j=0; j<3; j++) scanf("%d", &mas[i][j]); printf("Введите массив v \n"); for (i=0; i<3; i++) {for (j=0; j<5; j++) //заполнение случайным образом {v[i][j]= random(50)*0.1; //элемента строки, печать printf(“ v[%d][%d]=%5.1f”,i,j, v[i][j]); // текущего элемента } printf(“\n”); // переход на новую строку } Пример 6. Ввод и вывод одномерного массива. #include <stdio.h> #include <conio.h> void main() { int i,n; int a[100]; clrscr(); printf("введите количество элементов массива "); scanf("%d",&n); printf("введите %d чисел\n ",n); for (i=0; i<n; i++) scanf("%f",&a[i]); printf(" исходный массив: "); // вывод массивов for (i=0; i<n; i++) printf("a[%d]=%d ",i,a[i]); getchar(); }
Пример 7: Осуществить ввод-вывод целых вектора V, двумерного массива MAS, символьных массивов S1 и S2. #include <stdio.h> #include <conio.h> #define pr5" " void main() { char s1[10],s2[10]; int i,j,v[3],mas[2][3]; clrscr(); // ввод массива printf("Введите массив v \n"); scanf("%d %d %d", &v[0],&v[1],&v[2]); printf("Введите массив mas \n"); for (i=0; i<2; i++) for (j=0; j<3; j++) scanf("%d", &mas[i][j]); printf("Введите массивы s1 и s2 \n"); scanf("%s %s", s1,s2); // вывод массивов printf("%s %5d %5d %5d \n",pr5,v[0],v[1],v[2]); printf("%s Массив mas \n",pr5); for (i=0; i<2; i++) { printf("%s",pr5); for (j=0; j<3; j++) printf("%5d",mas[i][j]); printf("\n"); } printf("%s s1=%s %s s2=%s \n",pr5,s1,pr5,s2); getchar(); } Пример 8. Написать программу, которая обеспечивает ввод 10 чисел в одномерный массив, а затем складывает их и выводит результат на экран.
#include <stdio.h> #include <conio.h> void main() { int i; int s,a[100]; clrscr(); printf("введите 10 чисел\n "); for (i=0; i<10; i++) scanf("%f",&a[i]); printf(" исходный массив: "); // вывод массивов for (i=0; i<10; i++) printf("a[%d]=%d ",i,a[i]); s=0; /*обнуление ячейки памяти, в которой будет накапливаться сумма элементов массива*/for (i=0; i<n; i++) s=s+a [i]; //вычисление суммы элементов массива printf("сумма 10 элементов массива a равна %d ",s); getchar(); } Пример 9. Написать программу, которая обеспечивает ввод 25 чисел в одномерный массив. Запрашивает ввод ещё одного числа, определяет находится ли вновь введённое число в массиве.#include <stdio.h> #include <conio.h> void main() { int i,r,s; int a[25]; clrscr(); printf("введите 25 чисел\n "); for (i=0; i<25; i++) scanf("%d",&a[i]); printf("введите число, которое следует найти в массиве "); scanf("%d",&s); // вывод массивов for (i=0; i<10; i++) printf("a[%d]=%d ",i,a[i]); r=0; //количество совпадений числа s с элементами массива for (i=0; i<10; i++) if (a[i]=s) r=r+1; //элемент массива равен s=> r+1 if (r!=0) //если r не равен 0,то имеются совпадения printf (“число %d встречается в массиве a %d раз”,s,r); else printf (“число %d не встречается в массиве a \n”,s);getchar(); }
Инициализация массивов. Инициализация -это процесс присвоения начальных значений переменным различного типа. Для инициализации массивов в языке С используются списки инициализации, представляющие собой перечисление через запятую начальных значений элементов массивов. Многомерные массивы в списке инициализации могут содержать разделительные фигурные скобки. int mas[4]={1,2,3,4}; int mas[4]={1,2,3}; //недостающий Эл-т будет проинициализирован 0 // массивы str и str1 будут проинициализированы одинаково char str[3][2]={{‘1’,’2’},{‘3’,’4’},{‘5’,’6’}}; char str1[3][2]={ ‘1’,’2’,‘3’,’4’,‘5’,’6’}; Если размерность массива меньше, чем инициализируемых значений, то компилятор выдаст ошибку. int mas[4]={1,2,3,4,5}; // ошибка При явной инициализации размерность массива можно не указывать. Компилятор сам определит размерность массива, исходя из количества инициализированных значений. int mas[ ]={1,2,3,4}; Следует учитывать, что нет возможности проинициализировать средний или последний элемент массива, не проинициализировав первый. Для удобства работы со строками символов в языке С считается, что символьный массив, оканчивающийся 16-ричным нулём, является символьной строкой. Поскольку символьные строки могут использоваться в тексте программы в качестве констант (в этом случае они заключаются в двойные кавычки), то указанные ниже 2 способа инициализации символьного массива являются равнозначными: char L[ ]={ ‘С’,’т’,‘р’,’о’,‘к’,’а’,'\0'}; char L[ ]={ «Строка»};
Примеры программ с использованием матриц. Ø Транспонирование матрицы Дана квадратная матрица N x N. Транспонировать ее, то есть отразить все элементы относительно главной диагонали, то есть диагонали из левого верхнего угла в правый нижний. Исходная матрица Вывод: N = 3 1 2 1 1 2 3 2 3 2 2 3 4 3 4 5 1 2 5 Эта задача похожа на задачу перестановки элементов массива в обратном порядке. Достаточно менять местами элементы a[i][j] и a[j][i], но делать это нужно только в половине массива. Это можно организовать так. for (i=0; i<n; i++) for (j=0; j<n; j++) if (j < i) { t=a[i][j]; a[i][j]=a[j][i]; a[j][i] = t;} Обрабатывается только часть массива, где номер столбца меньше номера строки, то есть элементы, расположенные ниже главной диагонали. Сама главная диагональ (i = j) не подвержена транспонированию.Того же эффекта можно достичь, если внутренний цикл запустить до i–1 – го элемента: все значения j будут гарантированно меньше i. for (i=0; i<n; i++) for (j=0; j<i-1; j++) { t=a[i][j]; a[i][j]=a[j][i]; a[j][i] = t;}Этот способ быстрее, поскольку не делается холостых шагов внутреннего цикла. Ø Удаление столбца Рассмотрим задачу: дана матрица M x N. Удалить k-тый столбец. Пример 5. Вывод: M = 3 K = 1 N = 4 1 2 3 4 1 3 4 2 3 4 5 2 4 5 3 4 5 6 3 5 6 Эта задача сводится к удалению второго элемента из каждой строки (строку матрицы можно рассматривать как одномерный массив). После сдвига каждой строки значение n (количества столбцов) нужно уменьшить на 1. for (i=0;i<m;i++) for (j= K;j< N – 1;j++) a[i][j] = a[i][j + 1]; n = n – 1;Методы сортировки. Для решения многих задач необходимо упорядочить исходные данные по определённому признаку. Процесс такого упорядочивания называется сортировкой. Элементы массива можно сортировать: § по возрастанию – каждый следующий элемент больше предыдущего: А[0] < А[1]<... <А[N-1]; § по неубыванию – каждый следующий элемент не меньше предыдущего, т.е. больше или равен ему: А[0] £ А[1] £... £А[N-1]; § по убыванию – каждый следующий элемент меньше предыдущего: А[0] > А[1] >... >А[N-1]; § по не возрастанию – каждый следующий элемент не больше предыдущего, т.е. меньше или равен ему: А[0] ³ А[1] ³... ³А[N-1].
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
Последнее изменение этой страницы: 2020-12-09; просмотров: 147; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.006 с.) |
|||||||||||||||||||||||||||||||||||||||||||||||||||