|
Программирование >> Элементы языков с и с++
Глава 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 О
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |