Программирование >>  Элементы языков с и с++ 

1 ... 14 15 16 [ 17 ] 18 19 20 ... 200


Глава 3 Л\ш ПВш!

Работа с массивами данных

Одномерные массивы

Создадим программу, которая вводит файл с клавиатуры и подсчитывает, сколько раз в нем встречается каждая из цифр от О до 9. Если использовать тот опыт, который мы получили в предыдущих главах, то для составления такой программы потребуется объявить десять счетчиков, в каждом из которых станем накапливать данные о том, сколько раз встретилась каждая цифра. Первый счетчик - для накапливания данных о количестве имеющихся в файле нулей, второй - для единиц и т. д.

А представим себе, что надо подсчитать количество каких-то объектов, которых, скажем, сто, и каждый может встречаться в файле разное количество раз. Надо было бы объявить сто счетчиков? Это очень неудобно. Для нашей цели удобнее воспользоваться конструкцией языка С, которая называется массив .

Массив- это множество однотипных данных, объединенных под одним именем. Объявляется массив данных так:

<тип данных в массиве> <имя массива> [количество элементов массива];

Последнее значение должно быть целым числом без знака. Например, массив из 100 целых чисел можно объявить как int m[lOO]; массив символов - как char s[20]. Так как элементы массива располагаются в памяти последовательно друг за другом, то массив символов - это не что иное, как строка символов. Причем в языке С принято, что строка символов обязательно оканчивается признаком конца, которым служит символ с кодом \о.

Если мы сами формируем символьный массив, то сами же должны позаботиться о том, чтобы его последним элементом был символ \0, иначе такую строку, полученную с помощью массива, никогда не распознает ни одна стандартная программа.



( Примечание

Элемент массива называют переменной с индексами. Если у такой переменной один индекс (в нашем случае именно так и есть), то массив таких переменных называют одномерным, если более одного индекса - то многомерным (двумерным, трехмерным и т. д.). Часто количество индексов в массиве называют длиной массива или размерностью.

Чтобы массив инициализировать, т. е. придать его элементам какие-то значения, надо придать соответствующие значения каждому элементу массива.

Если имеем массив int m [ 2 ];, то следует написать: m [ о ] =1; m [ i ] =8;.

Этот же эффект получим, если напишем: int m[2l = { 1, 8);.

Для символьного массива char s[3]; можно писать либо так:

s[0]=a; s[l]=b; s[2]=c;,

либо так:

char s[3]={ a,b,c);, либо даже так: S[3]= abc ;.

( Примечание

В одинарных кавычках Ь записывают символы, в двойных кавычках - строки символов, потому что последний символ строки символов - признак конца строки \0: когда мы пишем строку в двойных кавычках, то компилятор по этому признаку сам формирует признак конца строки - символ \0. Поэтому ь - это один символ, а Ь - два символа.

Коль скоро мы заговорили о символах, то сделаем еще одно замечание. Если в переменной с находится символ цифры (точнее - код цифры), то выражение С- С дает значение самого числа, код которого находится в с.

Как доставать элементы из описанной выше конструкции? Если имеем, например, массив чисел int m[lOO];,

то любой его элемент - это m [i ];, где i - номер элемента (i=0,1, - / 99).

Видим, что нумерация элементов начинается с нуля: порядковый номер первого элемента массива - О, второго - 1 и т. д. Порядковый номер элемента массива называют индексом.



Работа с массивами данных 53

Действительно: таблица кодов ASCII построена так, что коды всех символов английского алфавита расположены в ней по возрастанию. За кодом нуля идет код единицы (т. е. разность между кодом нуля и кодом единицы равна единице). За кодом единицы следует код двойки. Разность между кодом двойки и кодом единицы тоже равна единице. Но разность между кодом двойки и кодом нуля равна двум и т. д. Следовательно, разность между кодом числа i и кодом нуля равна числу i.

Наша программа будет выглядеть так, как показано в листинге 3.1.

Листинг 3.1

12.СРР : Defines the entry point for the console application. Kinclude stdafx.h

iinclude <stdio.h> for getchar(),putchar()

♦include <conio.h> for getch()

(tdefine eof -1 признак конца файла

♦define maxind 10 количество элементов массива

int main О

int с; для ввода символа

int nd[maxind]; /*для подсчета количества обнаруженных в файле цифр: в nd[01 будет накапливаться количество встреченных нулей, в nd[l] - единиц, в nd[2] - двоек и т. д.*/

int i;

for(i=0; Kmaxind; i++)

nd[i]=0; /*обнуление элементов массива - заготовка их под счетчики*/

printf( Enter your string and then press the key <Enter> >\n ); while((c=getchar()) !=eof) if(c >= O && с <= Э)

++nd[c-0]; накопление в счетчике

printf( Number of digits are:\n ); for(i=0; i<maxind; i++)

printf( for i=%d number of digits=%d\n ,i,nd[i]); getch0; задержка изображения на экране 1 от tmain О



1 ... 14 15 16 [ 17 ] 18 19 20 ... 200

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика