Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование массивов в качестве аргументов функции.⇐ ПредыдущаяСтр 15 из 15
Поскольку имя массива означает адрес его 0-го элемента, то массив всегда передается по ссылке. Оформим в виде функции вычисление суммы элементов массива, описанное в разделе 4.1.4. float summ(int n, float *mas); { int i; float s=0; for (i=1;i<n;i++) // Для каждого элемента s+=mas[i]; // Увеличение суммы на mas[i] return s; } Сравним теперь средние арифметические двух массивов, введенных с клавиатуры, используя функцию summ. Здесь vvod_ mas1() - функция для ввода одномерного массива, которую нужно написать самостоятельно. #define MAX_SIZE 100 void main(void) { float a[MAX_SIZE],b[MAX_SIZE]; // описание массивов float sa, sb; // их средние значения int na, nb; // количества введенных элементов этих массивов
vvod_mas1(&na,a) // Ввод количества элементов na и массива a vvod_mas1(&nb,b) // Ввод количества элементов nb и массива b sa=summ(na,a)/na; // среднее арифметическое массива a sb=summ(nb,b)/nb; // среднее арифметическое массива b ········· // обработка sa и sb } Если в функцию надо передать двумерный массив, то в качестве соответствующего формального параметра надо использовать указатель на одномерный массив с размером, равным длине строки передаваемого массива, например, int (*mas)[4]. Вместо такого указателя можно использовать и просто двумерный массив, указав только количество его столбцов - int mas[ ][4]. Такое описание необходимо транслятору, чтобы знать, в каком месте одномерной памяти начинается новая строка двумерного массива, и уметь находить элемент с заданными индексами:
Пример 24. Напишем, как будет выглядеть заголовок описания функции vvod_mas2() ввода с клавиатуры двумерного массива, количество столбцов для которого было отведено в памяти в соответствии с именованной константой K_STOLB. Функция должна также заполнять значения количеств строк и столбцов вводимого массива по адресам, находящимся в указателях n_str и n_stlb, вводя их с клавиатуры: void vvod_mas2(int *n_str, int *n_stlb, int mas[][K_STOLB]) или (см. Пример 23) void vvod_mas2(int &n_str, int &n_stlb, int (*mas)[K_STOLB]) Пример 25. Оформим в виде функции password() ввод с клавиатуры пароля и сравнение его с образцом (см. Пример 19). В функцию передается образец пароля, а возвращается истина, если введенный пароль верен.
int password(char *parol) { int i unsigned char mas[81];
gets(mas); // Ввели пароль for (i=0; mas[i] == *(parol+i);i++); if (mas[i] == '\0') // Строки совпали полностью return 1; return 0; } Обращение к функции может выглядеть так: if password("Мой пароль") cout << "Пароль верный, доступ открыт"; Пример 26. Оформим функцию wrd_let(), определяющую количество букв и слов в передаваемой ей строке (см. Пример 20). Поскольку определяются значения двух параметров, то в функцию передаются адреса переменных, а не их значения. void wrd_let(int *k_sl, int *k_sim, char *mas) { int i=0; // Номер текущего символа unsigned char ch; // Текущий символ
*k_sl=1,*k_sim=0; // Количество слов и символов gets(mas); while ((ch = *mas++)!= '\0') if (ch==' ') // Текущий символ - пробел - *k_sl++; // увеличили кол-во слов else if (ch>64 && ch<240) // Текущий символ - буква - *k_sim++; // увеличили кол-во букв } После такого обращения к функции: wrd_let(&slova, &bukvy, "Мы изучаем Си!"); переменные slova и bukvy примут значения соответственно 3 и 11. Работа с внешними файлами в Си. Файловый указатель. Открытие файла. Язык Си позволяет считывать данные из файла и записывать результаты работы в файл для последующего использования. Прототипы всех функций для работы с файлами, описанные ниже, находятся в в файле stdio.h. Для работы с файлом надо описать указатель на файл. Описание имеет вид: FILE *имя_переменной Здесь FILE - имя специальной структуры для работы с файлами. Она описана в файле stdio.h. Например: FILE *fin, *fout; Чтобы файл был доступен для чтения или записи, его нужно открыть. Файловый указатель связывается с конкретным файлом в момент его открытия функцией fopen(): указатель = fopen(строка с именем файла, режим открытия) Режим открытия указывает, с какой целью открыт файл:
Например, fin = fopen("test_in.txt","r"); fout = fopen("test_out.txt","w"); Первый файл test_in.txt открыт для чтения из него информации. Второй - test_out.txt - будет создан заново, даже если он уже существует, и открыт для записи.
При любой ошибке открытия fopen() возвращает значение NULL, описанное в stdio.h.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2020-12-09; просмотров: 63; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.138.175.180 (0.006 с.) |