Мегаобучалка Главная | О нас | Обратная связь


Обработка статических массивов



2019-12-29 206 Обсуждений (0)
Обработка статических массивов 0.00 из 5.00 0 оценок




1. ЦЕЛЬ РАБОТЫ: приобретение практических навыков в составлении программ с  массивами.

ОСНОВНЫЕ СВЕДЕНИЯ

    Массивы - структурированный тип данных с элементами одного типа, имеющий одно имя и определенное количество элементов. Количество элементов определяет размер массива. Порядковый номер элемента массива называется его индексом. Число индексов называется размерностью массива, например, массив с двумя индексами называется двумерным массивом. Строка символов является массивом символов, вектор – массив чисел, матрица – массив векторов. Обработка массивов выполняется следующим образом: описание, ввод или инициализация элементов массива, преобразование и вывод.

    При описании массивов после имени в квадратных скобках указывается число его элементов. В языке Си индекс элемента массива начинается с нуля, поэтому индекс последнего элемента массива на 1 меньше числа элементов в данном массиве.

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

Дан массив из 50 целых чисел. Найти наибольший элемент в массиве и его порядковый номер.

 # include <stdio.h>

 #include <conio.h>

 # define n 50 // определение константы n=50

 int i, max, nom, a[n];  //описание массива целых чисел из n элементов

 main()

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

{ printf( “\n Введите элемент массива ”);

   scanf ("%d", &a[i]) };

   for (i=1,max=a[0],nom=0; i<n; i++)

if (max<a[i])

    {nom=i; max=a[i];}

printf("\n Вывод элементов исходного массива : \n");

for (i=0; i<n; i++)   printf ( "%6d", a[i] );

printf ("\n Максимальное число в массиве %4d, его индекс %4d " , max, nom+1);

getch();

}

Многомерные массивы задаются указанием каждого измерения в квадратных скобках. Например, оператор int matr [6] [8]; задает описание матрицы из 6 строк и 8 столбцов. Нумерация строк и столбцов начинается с 0. При инициализации двумерного массива он представляется как массив из массивов, при этом каждый массив заключается в свои фигурные скобки, либо задается общий список в том порядке, в котором элементы располагаются в памяти:

int mas [] [2]= { {1,2}, {0,2}, {1,0}};

int mas [3][2]={1,2,0,2,1,0};

ВЫПОЛНЕНИЕ РАБОТЫ

    Даны вещественные числа a,b. Значения функции (согласно вариантам) записать в массив. Затем, используя значения функции записанные в массиве вычислить значение интеграла, по:

1) Формуле трапеций

    I1=h*[f(a)/2+f(a+h)+f(a+2h)+…+f(a+(n-1)h)+f(b)/2]

2) Формуле Симпсона

    I2=h/3*(f(a)+f(b)+4*(f(a+h)+f(a+3h)+…+f(a+(n-1)h))+

    2*(f(a+2h)+f(a+4h)+…+f(a+(n-2)h)))

h=(b-a)/n, n=100.

 

1. f(x)=x2/(10+x3);                                  a=-2; b=5;

2. f(x)=(2.5x2-0.1)/(tg x+sin x);              a=4; b=6;

3. f(x)=(x+1)2√lg x;                                 a=2; b=10;

4. f(x)=x2 ln x /(1+x)2;                                  a=1; b=20;

5. f(x)=1/((0.5+0.1x3)√x);                        a=0.1; b=2.1;

6. f(x)=x 2√(2+3x)3;                                  a=0.5; b=2.5;

7. f(x)=1/√(0.02+0.01x);                          a=1; b=30;

8. f(x)=(1+2x+x2)/(5+2x2);                           a=-2; b=2;

9. f(x)=(2x+lg x)/(1+lg x);                        a=1; b=10;

10. f(x)=√(2+x)3/x2;                                  a=0.2; b=10;

11. f(x)=(1+x2)/(x3+√(1+x));                     a=0.5; b=5;

12. f(x)=(1-x) lg x/√(1-lg x);                     a=2; b=7;                      

КОНТРОЛЬНЫЕ ВОПРОСЫ

4.1. Что такое массив? индекс элемента массива?

4.2. Как ввести и вывести элементы вектора в строку и в столбец?

4.3. Способы описания и инициализации массивов.

 

Лабораторная работа №5

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

1. ЦЕЛЬ РАБОТЫ: Изучение описания символьных данных и операций над ними.

ОСНОВНЫЕ СВЕДЕНИЯ

Символьная константа - это символ (единственный), заключенный в одиночные кавычки, как, например, 'Х'. Значением символьной константы является численное значение этого символа в машинном представлении набора символов. Все символы упорядочены в соответствии с принятым в ПК коде (например ASCII). При этом порядковый но­мер символов называется кодом (например, код латинского символа 'А ' равен 65; символа '3' равен 51). Для символьных данных не определены никакие арифметические операции, но они могут сравниваться по своим кодам, участвовать в чтении, печати, операторах присваивания.

Строка - это последовательность (массив) символов, заключенная в двойные кавычки, заканчивающаяся нуль-символом (\0 – символ с кодом равным нолю). По положению нуль-символа определяется фактическая длина строки. Например, длина строки char text[ ] = "Моя программа!" равна 14 байт (включая пробел).

Для форматного ввода и вывода символьных констант используется спецификатор %с, строк - %s и специальные функции: getchar(),gets()- ввод и putchar(), puts()-вывод. Библиотека Си содержит функции обработки строк, прототипы которых определяются в заголовочном файле string.h. Например:

strlen(str) – определяет длину строки str;

strcat(str1,str2) - сцепление строк в порядке их перечисления;

strncat(str1,str2,kol) – приписывает kol символов строки str2 к строке str1;

strcmp(str1,str2) – сравнивает две строки str1 и str2 и возвращает 0, если они одинаковы; результат отрицателен, если str1<str2 и положителен, если str1>str2;

strncmp(str1, str2, kol) – сравниваются части строк str1 и str2 из kol символов. Результат равен 0, если они одинаковы.

strcpy(str1,str2) – копирует строку str2 в строку str1.

Рассмотрим пример:

// lab6.c

#include <stdio.h>

#include <conio.h>

#include <string.h>

main ( )

{ char gwords [10] [40], temp [40];

int i=0;

printf (“Введите 10 слов, начинающихся с д: \n”);

while ( i < 10 )

{    gets (temp);

    if (temp [0] != ‘д’)            // проверка первого символа

    printf (“ %s не начинается с д! \n”, temp);

    else { strcpy (gwords [i], temp); i++;}

  }

puts (“Следующие слова соответствуют условию:”);

for (i=0; i< 10; i++) puts (gwords [i] );

getch();

return 0;

}

    Вводятся слова, сравнивается первый символ, если это не 'д', то вводится следующее слово, иначе слово копируется в новый массив слов gwords.

ВЫПОЛНЕНИЕ РАБОТЫ

1. Выполнить приведенную выше программу с разными исходными данными.

2. Текст  вводится с клавиатуры. Исходный текст и результаты распечатать. Составить программы согласно вариантам заданий.

Варианты заданий

1. Вывести на печать список слов, имеющих приставку (несколько букв), задаваемую с терминала.

2. Раздвинуть заданный текст, вставив введенную с клавиатуры последова­тельность символов после 1-го символа каждого слова.

3. В заданном тексте слова разделены запятыми. На­печатать список слов, начинающихся с символа, введенного с кла­виатуры.

4. Определить количество слов в заданном тексте, содержащих соче­тание символов, задаваемое с экрана.

5. Из заданной последовательности слов удалить слова, содержащие числа.

6. Каждое слово текста переписать наоборот.

7. Подсчитать количество слов, содержащих k гласных букв (k-задается с экрана).

8. Из введенного текста сначала распечатать слова, заканчивающиеся на согласную букву, а потом на гласную букву.

9. Во введенном тексте найти повторяющиеся слова.

10. Список фамилий вводится через запятую в виде строки. Упорядочить фамилии по алфавиту.

11. Из введенного текста распечатать отдельно гласные и согласные каждого слова.

12. Из введенного текста распечатать слова, в порядке убывания частоты повторения.

КОНТРОЛЬНЫЕ ВОПРОСЫ

4.1. Ввод и вывод символов и строк.

4.2. Функции для работы со строками.

4.3. Чем отличается инициализация символа от инициализации строки?

 

    Лабораторная работа № 6

            Функции

1. ЦЕЛЬ РАБОТЫ: Изучение методов использования функций языка Си.

ОСНОВНЫЕ СВЕДЕНИЯ

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

В языке Си существует один вид подпрограмм - функции. Каждая программа в своем составе должна иметьглавную функцию main(), служащую точкой входа в программу. Кроме функции main(), в программу может входить произвольное число функций, выполнение которых инициализируется либо прямо, либо вызовами из функции main(). Каждая функция по отношению к другой является внешней. Для того, чтобы функция была доступной, необходимо, чтобы до ее вызова о ней было известно компилятору. Форма записи функции:

<тип > <имя функции>(<формальные параметры>){<тело функции >}

Если тип возвращаемого функцией значения не указан, то подразумевается int. Если с именем функции не связан результат, то нужно указать тип функции void.  Параметры, записываемые в обращении к функции, называются фактическими; параметры, указанные в описании функции - формальными. Фактические пара­метры должны соответствовать формальным по количеству, порядку следования и типу. Объекты, объявленные вне функции, действуют в любой функции и называются глобальны­ми. Объекты, объявленные в функции, действуют только в ней и называются локальными. В теле функции обычно присутствует оператор return <выражение>, определяющий возвращаемое функцией значение.

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

Прототип функции может указываться до вызова функции вместо описания функции для того, чтобы компилятор мог выполнить проверку соответствия типов аргументов и параметров. Прототип функции по форме такой же, как и заголовок функции. В конце него ставится «;».

Функции можно подключать с помощью директивы #include <имя файла>. Такие файлы с функциями удобно использовать в диалоговых программах с пользовательским меню, позволяющих выбрать один из режимов.

Пример 1:  Функция с параметрами-значениями. Результат связан с именем функции. В программе объявляется прототип функции, а сама функция описывается ниже.

//lab8_1

#include <stdio.h>

#include <conio.h>

int max(int,int); //Прототип функции

void main()

{ int x,y,z;

printf(" input x,y ");

scanf("%d %d",&x,&y);

z=max(x,y); //Вызов функции с фактическими параметрами

printf("x=%d y=%d max=%d",x,y,z);

getch();

}

int max(int a ,int b) //Заголовок функции с формальными параметрами

{ int c;

if (a>b) c=a;

else c=b;

return c;

}

 

Пример 2: Функция с параметрами-указателями. Здесь передаются адреса фактических параметров, по которым и получаем результат. Функция меняет местами переменные x,y.

//lab8_2

#include <stdio.h>

#include <conio.h>

main()

{ float x,y;

void swap(float *, float *); // Прототип функции с параметрами - указателями

printf("\n  введите x,y ");

scanf("%f %f",&x,&y);

swap(&x,&y); // Передаём адреса переменных

printf("\n x=%4.2f y=%4.2f ",x,y);

getch();

}

void swap(float * a, float * b)

{float c;

c=*a; // *a - содержимое по адресу a

*a=*b;

*b=c;

}

 

Пример 3: Подключение файлов с функциями и создание меню.

! Внимание! Следите за тем, чтобы константы, объявленные директивой #define, не переобъявлялись в функциях.

//lab8_3

#include <stdio.h>

#include <conio.h>

#include "lab3.c"

#include "lab5.c"

#include "lab6.c"

main()

{ int nom;

while(1)

{ clrscr();

printf("\n 1. Сумма ряда \n");

printf(" 2. Матрица \n");

printf(" 3. Строки \n");

printf(" 4. Выход \n");

scanf("%d",&nom);

switch(nom)

{

  case 1:lab3();break;

  case 2:lab5();break;

  case 3:lab6();break;

  case 4:return 0;

  default:printf("Неверный режим");

}

}

getch();

}

Пример 4: Передача в функцию массива с использованием указателя. Результат – элементы массива возводятся в квадрат. Функция описывается до вызова, поэтому прототип не объявляется.

//lab8_4

#include <stdio.h>

#include <conio.h>

void quart(int n, float * x) // Можно void quart(int n, float x[])

{ int i;

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

x[i]=x[i]*x[i];

}

main()

{ float z[]={1,2,3,4};int j;

clrscr();

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

printf(" %6.2f",z[j]);

quart(4,z);

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

 printf("\n %6.2f",z[j]);

getch();

}

 

ВЫПОЛНЕНИЕ РАБОТЫ

3.1. Проанализировать приведенные выше программы.

3.2. Оформить свое задание по лабораторной работе 4 в виде функций. Организовать меню с вызовом  этих функций.

3.3. Используя функции, написать программу по своему варианту.

Варианты заданий



2019-12-29 206 Обсуждений (0)
Обработка статических массивов 0.00 из 5.00 0 оценок









Обсуждение в статье: Обработка статических массивов

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...
Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (206)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)