русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Использование и обработка массивов


Дата добавления: 2013-12-23; просмотров: 853; Нарушение авторских прав


Ввод и вывод массива

Элементы числового массива нужно вводить и выводить поэлементно в цикле.

 

/* вывод массива*/

#define N 20

float x[N];

int n,

i; /* индекс элемента*/

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

printf(“%f ”, x[i]);

 

Для ввода символьных строк можно использовать библиотечную функцию gets(), которая вместо символа перевода строки записывает в заданный массив после введенной строки символ ‘\0’ (нулевой байт) – признак конца строки. Например:

char s[81];

gets (s);

Вывод символьных строк, завершающихся нулевым байтом, можно выполнить либо с помощью библиотечной функции puts(), либо функции printf(), задав формат %s. Например:

сhar str[]= “Привет”;

puts(str); /* или printf(“%s\n”, str); */

 

Если в условии задачи даны переменные с индексами, для них не обязательно использовать массив. Массив нужен для входных или выходных данных, если их элементы обрабатываются неоднократно или не в том порядке, в котором вводятся или выводятся. В этих случаях приходится одновременно хранить в памяти все элементы в виде массива.

Рассмотрим задачи и решим, в каких задачах необходимы массивы для хранения данных:

7.1. Дано целое n>0 и последовательность вещественных чисел x1, x2,…, xn. Написать программу

а) для определения суммы и количества положительных элементов последовательности;

б) для определения количества элементов последовательности больших первого элемента x1;

в) для определения количества элементов последовательности больших последнего элемента xn.

7.2. Дано целое n>0 и последовательность вещественных чисел x1, x2,…, xn. Написать программу

а) для выдачи на экран только положительных чисел последовательности.

б) для выдачи на экран сначала всех отрицательных, а затем всех положительных чисел последовательности.



 

7.3. Даны значения температур каждого из 30 дней месяца.

Написать программу

а) определения среднемесячной температуры;

б) определения количества дней, когда температура была выше среднемесячной.

7.4. Дана строка символов.

Написать программы для решения следующих задач.

а) Переставить символы текста в обратном порядке.

б) Подсчитать количество слов длиной до 5 символов.

в) Вывести слова длиной до 5 символов.

Для задач 7.1в, 7.2б, 7.3б, 7.4а, 7.4в необходимо использование массивов, в остальных задачах не требуются массивы.

Задача 7.1. Дано целое n>0 и вещественные x1, x2, ..., xn . Составить программу подсчета количества чисел больших первого числа - 7.1б (больших последнего числа – 7.1в).

Тест 7.1б. Вход: 4 3 12 7 5 Тест 7.1в. Вход: 4 3 12 7 5

Выход: k = 3 Выход: k = 2

/* Программа 7.1б. */ /* Программа 7.1в. */

#include <stdio.h> #include <stdio.h>

#define N 20

void main () void main ()

{ int n, i, k=0; { int n, i, k=0;

float m1, m; float m[N];

scanf (“%d”, &n); scanf (“%d”, &n);

scanf (“%f”, &m1);

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

{ scanf (“%f”, &m); scanf (“%f”, &m[i]);

if (m > m1) k++; for (i=0; i < n-1; i++)

} if (m[i] > m[n-1]) k++;

printf (“k=%d\n”, k); printf (“k=%d\n”, k);

} }

Пояснения к программе.

1. Для решения задачи 7.1б достаточно хранить первое число в переменной m1, а остальные числа поочередно вводить в переменную m и сравнивать с величиной m1.

2. Для решения задачи 7.1в требуется хранить все числа в виде массива. Сначала данные в цикле вводятся в массив m, затем в следующем цикле каждый элемент массива сравнивается с последним элементом.

Задача 7.3б. Даны значения температур каждого из 30 дней месяца. Написать программу для решения следующей задачи. Определить среднюю температуру за месяц. Вывести дни, когда температура была выше средней, и количество таких дней.

/* Программа 7.3б Средняя температура */

#include <stdio.h>

#define N 31

main ()

{ int n,

i,

k=0;

float t[N],

s=0;

scanf (“%d”, &n);

 

for (i = 0; i < n; i++) // цикл ввода значений температур

{ scanf (“%f”, &t[i]);

s = s + t[i]; // с вычислением суммарного значения

}

s = s/n; // вычисление среднего значения температур

printf (“Средняя температура =%.1f\n”, s);

printf (“\n Дни с температурой выше средней:\n”);

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

if (t[i] > s)

{ printf (“%d ”, i+1); k++; }

printf (“\n количество дней = %d”, k);

return 0;

}

Пояснения к программе.

1. Определяется массив t размером до 31 элемента (по количеству дней в самом длинном месяце). Количество используемых элементов массива задается вводом значения величины n.

2. В первом цикле вводятся элементы массива t – значения температур каждого дня месяца и вычисляется суммарная температура за месяц.

3. После ввода температур и вычисления суммарной температуры, определяется средняя температура за месяц.

4. Во втором цикле температура каждого из дней месяца проверяется на отклонение от средней температуры.

Задача 7.4а. Написать фрагмент программы для перестановки символов текста в обратном порядке.

Тест. Вход: ПИРАМИДА Выход: АДИМАРИП

0 1 2 3 4 5 6 7 - индексы символов в массиве

/* перестановка символов текста в обратном порядке */

char s, t[100];

int i, j, n;

gets (t); /* ввод строки */

n= strlen(t); /*определение длины строки */

for (i=0, j=n-1; i<j; i++, j--)

{ s=t[i]; t[i]=t[j]; t[j]=s; } /* Обмен t[i] <--> t[j] */

Пояснения к программе.

1. Строка просматривается с двух концов: от начала до середины строки с увеличением индекса символа i, от конца до середины строки с уменьшением индекса j, и выполняется обмен символа t[i] с символом t[j] через дополнительную переменную s.

Для приведенного теста цикл повторяется 4 раза до середины строки, с изменением i от 0 до 3, а j - от 7 до 4.

Задача 7.4в. Входная строка содержит последовательность слов, разделенных пробелами. Вывести слова длиной до пяти символов.

 

Первый вариант программы:

/* Вывод слов длиной до 5 символов */

#include <stdio.h>

#include <conio.h>

#define DLSL 80 /* макс. длина слова */

 

main()

{ char s; /* текущий символ */

char sl[DLSL]; /* текущее слово */

int i,j; /* индексы тек. символа в слове */

int psl=1; /* признак, что слово длиной до 5 симв. первое */

printf ("\n\nВведите строку символов\n");

s=getchar();

while (s!='\n')

{

if (s==' ') s=getchar();

else

{ i=0;

do

{ sl[i++]=s;

s=getchar();

}

while ((s!=' ') && (s!='\n'));

if (i<5)

{ if (psl) /* если слово первое */

{ printf ("Слова длиной до 5 символов:\n");

psl=0;

}

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

putchar(sl[j]);

putchar(' ');

}

}

}

if (psl) printf ("Слов длиной до 5 символов нет");

printf ("\nДля завершения нажмите любую клавишу");

getch(); /* чтение символа без отображения его на экране */

return 0;

}

 

 

Пример результатов тестирования программы:

 

Введите строку символов

май апрель март весна лето

Слова длиной до 5 символов:

май март лето

Для завершения нажмите любую клавишу

 

Введите строку символов

декабрь январь февраль

Слов длиной до 5 символов нет

Для завершения нажмите любую клавишу

 

 

Второй вариант программы:

/* Вывод слов длиной до 5 символов */

#include <stdio.h>

#include <conio.h>

#define DLSTR 80 /* макс.длина строки */

 

main()

{ char str[DLSTR]; /* текущая строка */

int i,j; /* индексы текущего символа в строке */

int n,k; /* индексы первого и последнего символов

текущего слова в строке */

int net_sl=1; /* признак, что слов длиной до 5 симв. нет */

printf ("\n\nВведите строку символов\n");

gets(str); /* ввод строки в массив str c заменой символа '\n'

на признак конца строки '\0' */

printf ("Результат:\n");

i=0;

while (str[i]!='\0')

{

if (str[i]==' ') i++;

else

{ n=i;

do i++; while ((str[i]!=' ') && (str[i]!='\0'));

k=i;

if ( k-n < 5 )

{ for (j=n; j<k; j++)

putchar(str[j]);

putchar(' ');

net_sl=0;

}

}

}

if (net_sl) printf ("Слов длиной до 5 символов нет.");

printf ("\nДля завершения нажмите любую клавишу");

getch(); /* чтение символа без отображения его на экране */

return 0;

}

 

 

Пример результатов тестирования программы:

 

Введите строку символов

весна лето осень зима

Результат:

лето зима

Для завершения нажмите любую клавишу

 

Введите строку символов

декабрь январь февраль

Результат:

Слов длиной до 5 символов нет.

Для завершения нажмите любую клавишу

 

 



<== предыдущая лекция | следующая лекция ==>
Объявление массива | Лекция 7. Структура баз данных в MS SQL Server


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.008 сек.