Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Программирование циклических процессов




С использованием одномерных массивов и строк

 

Цель работы:

Изучить правила работы с одномерными массивами, а также особенности работы со строковы­ми объектами как одномерными символьными массивами.

 

Краткие теоретические сведения

Массив – конечномерная последовательность данных одного типа. Массив – объект сложного типа. Каждый элемент массива определяется именем массива и индексом (целое число), по которому к элементу массива производится доступ. Рассмотрим одномерные массивы. Индексы массивов в языке С начинаются с 0. В программе одномерный массив объявляется следующим образом:

<Тип> <имя массива>[размер];

где размер – количество элементов одномерного массива.

Размер массива может задаваться константой или константным выражением. Нельзя задавать массив переменного размера, для этого существует отдельный механизм – динамическое выделение памяти.

Пример объявления массива целого типа:

int a[5];          

в массиве а первый элемент а[0], второй – а[1], …, пятый - а[4]. В языке С не проверяется выход индекса за пределы массива. Корректность использования индексов элементов массива должен контролировать программист.

Пример работы с одномерным массивом

В массиве целых чисел найти индекс и значение максимального эле­мента и переставить его с первым элементом. Программа также дол­ж­на подсчитать количество положительных и отрицательных элементов данного массива.

Текст программы может быть следующим:

 

#include <stdio.h>

#include <conio.h>

void main(void)

 {                                       // Объявление с инициализацией,

int a[4]={-1,-20,4,100}; // индексы принимают значения от 0 до 3

int i,index,max,kp=0,ko=0,zam,n=4;

clrscr();

puts("\n Исходный массив ");

    for (i=0; i<n; i++)

              printf("%d ",a[i]); // Вывод элементов исходного массива

    max=a[0];

    for (i=1; i<n; i++)

              { 

if (a[i]>max)    

{

                       max=a[i]; index=i; }

              }

      zam=a[0];a[0]=a[index];a[index]=zam;

for (i=0;i<n;i++)

              {

    if (a[i]<0) ko++;

                        else kp++;

    }

  puts("\n Результаты работы программы ");

for (i=0; i<n; i++)

printf("%d ",a[i]);                 // Вывод элементов массива

printf("\n положительных элементов: %d \n",kp);

printf("\n отрицательных элементов: %d \n\n Press any key...",ko);

  getch();

}

Строки как одномерные массивы символов

Работа со строками в языке С реализована путем использования одномерных мас­сивов типа char, т.е. строка символов – это одномерный массив типа char, заканчиваю­щийся нулевым байтом. Нулевой байт – это байт, каждый бит которого равен нулю, при этом для нулевого байта определена символьная константа ´\0´ (признак окончания строки или нуль-терминатор). Поэтому, если строка должна состоять из k символов, то в описании массива необходимо указать размер k+1.

Например, описание char a[7], означает, что строка содержит шесть символов, а последний байт отведен под нуль-терминатор.

Строковая константа в языке С – это набор символов, заключенных в двойные кавычки. Например: “Лабораторная работа по строкам”. В конце строковой константы явно указывать символ ´\0´ не нужно, так как это сделает компилятор языка С.

Строки можно инициализировать при декларировании, например:

            char S1[10]=”123456789”, S2[ ]=”12345”;

в последнем случае размер строки будет установлен по фактическому количеству символов.

Для ввода строки с клавиатуры дисплея используются две стандартные библи­отечные функции, прототипы которых приведены в файле stdio.h.

Функция scanf( ) вводит значения для строковых переменных спецификатором ввода %s. Но надо помнить, что функция scanf( ) вводит символы до появления первого символа “пробел”.

Библиотечная функция gets( ) обеспечивает ввод строки с пробелами внутри этой строки. При этом ввод строки символов завершается нажатием клавиши ENTER.

Обе функции автоматически ставят в конец строки нулевой байт. И, кроме того, так как строка – это символьный массив, а имя массива – это указатель на его начало в памяти, то символ «&» перед именами строк при использовании этих функций указывать не надо.

Вывод строк выполняют функции printf( ) или puts( ). Обе функции выводят символьный массив до первого нулевого байта. Функция printf( ) не переводит курсор после вывода на начало новой строки, программист должен предусмотреть такой перевод в строке формата. Функция puts( ) автоматически переводит курсор после вывода строковой информации в начало новой строки.

Операции над строками как объектами сложного типа, рекомендуется выполнять, используя стандартные функции. Декларации функций для работы со строками размещены в файле string.h. Рассмотрим наиболее часто используемые:

1. Функция strcpy(S1, S2) - копирует содержимое строки S2 в строку S1.

2. Функция strcat(S1, S2) - присоединяет строку S2 к строке S1 и помещает ее в массив, где находилась строка S1, при этом строка S2 не изменяется. Нулевой байт, который завершал строку S1, заменяется первым символом строки S2.

3. Функция strcmp(S1, S2) сравнивает строки S1 и S2 и возвращает значение =0, если строки равны, т.е. содержат одно и то же число одинаковых символов; значение <0, если S1<S2; значение >0, если S1>S2.

4. Функция strlen(S) возвращает длину строки, т.е. количество символов, начиная с первого (S[0]) и до нуль-терминатора, который не учитывается.

5. Функции преобразования строки S в число:

- целое: int atoi(S);

- длинное целое: long atol(S);

- действительное: double atof(S);

при ошибке данные функции возвращают значение 0.

6. Функции преобразования числа V в строку S:

- целое: itoa(int V,char S,int kod);

- длинное целое: ltoa(long V,char S,int kod); 2<=kod<=36, для отрицательных чисел kod=10.

Операция sizeof

Для определения размера памяти, необходимого для размещения объектов в языке С, используется унарная операция sizeof(параметр), параметр – тип объекта или его идентификатор (только не имя функции). Операция sizeof вычисляет размер памяти в байтах, отводимый под объект. Если указан идентификатор сложного объекта (массив, структура, объединение), то результатом является размер всего сложного объекта. Например:

              sizeof(int)                результат 2 байта;

    int b[5]; sizeof(b)   результат 10 байт;

    int c[3][4]; sizeof(c) результат 24 байта.










Последнее изменение этой страницы: 2018-05-10; просмотров: 177.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...