Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь 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; просмотров: 91; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.148.104.103 (0.007 с.) |