Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Использование массивов в качестве аргументов функции.Содержание книги
Поиск на нашем сайте
Поскольку имя массива означает адрес его 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; просмотров: 127; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.15 (0.007 с.) |
|||||||||||||||||||||||||||||||||||||||||||||||||||||