- •Министерство образования и науки российской федерации
- •Содержание
- •Лабораторная работа 1. "Одномерные массивы"
- •Пример решения задачи
- •Лабораторная работа 2. "Двумерные массивы (с использованием указателей)"
- •Пример решения задачи
- •Лабораторная работа 3. "Символьные строки. Подпрограммы"
- •Выбор варианта
- •Пример решения задачи
- •If(*s)//как только обнаружена русская буква,
- •Лабораторная работа 4. "Структуры. Файлы "
- •Примеры решения задач
- •Void input (tv *tv, int *k) //ввод массива телевизоров
- •Input(tv, &k);//ввод массива телевизоров
- •Void input (tv *tv, int *k)//чтение данных из файла
- •Input(tv, &k);//ввод массива структур из файла
- •Лабораторная работа 5. "Списки. Динамические переменные"
- •Выбор варианта
- •Пример решения задачи
- •Void vivod(stul* stack, char name[])//вывод списка в файл
- •Vivod(first,name2);//вывод результата в файл
- •Лабораторная работа 6. "Рекурсия"
- •Примеры решения задач
- •Void setleft(node*p, int X)//присоединение числа X к узлу p слева
- •Void setright(node*p, int X) //присоединение числа X к узлу p справа
- •Int max,min;//максимальное и минимальное число в дереве
- •Int numb;//искомое число
- •If (!der) puts("дерево пустое");
- •Пример использования рекурсии для проверки правильности записи арифметического выражения
- •If (fae () || *pf ) /* то есть в выражении есть ошибка,
- •109028 Москва, б. Трехсвятительский пер., 3/12.
- •113054 Москва, ул. М. Пионерская, 12.
Примеры решения задач
Задача 4.1. Дан массив телевизоров. Найти названия городов, в которых выпускаются самые дешевые телевизоры.
#include <stdio.h>
#include <conio.h>
#include <string.h>
//пропуск символов до конца строки
#define CLR while (getchar()!='\n')
//максимальное число структур
#define Kmax 10
//максимальная длина строки
#define Lmax 81
#define TV struct tv
#define PROIZV struct proizv
PROIZV
{ char gorod[Lmax], zavod[Lmax], fam[Lmax];
};
TV
{ char name[Lmax], color;
PROIZV pr;
int price, diag;
};
Void input (tv *tv, int *k) //ввод массива телевизоров
{ int i;
do
{
printf("Введите количество телевизоров ");
scanf("%d", k);//k – указатель на количество структур
}
while (*k<=0 || *k>Kmax);
CLR; //необходим пропуск символов до конца строки, т.к. дальше
//функция gets - читается строка
for (i=0; i<*k; i++)
{
printf("Телевизор # %d\n", i+1);
printf("Название: "); gets(tv[i].name);
printf("Цена: "); scanf("%d", &tv[i].price);
printf("Размер по диагонали: "); scanf("%d", &tv[i].diag);
CLR;//цветной или ч\б обозначается одной буквой (ц или ч)
printf("Цвет изображения: "); tv[i].color=getchar();
CLR;//пропуск символа ‘\n’
printf("Город: "); gets(tv[i].pr.gorod);
printf("Завод: "); gets(tv[i].pr.zavod);
printf("Фамилия: "); gets(tv[i].pr.fam);
printf("\n");
}
printf("Ввод телевизоров окончен\n");
getch();
}
//вывод массива телевизоров
void output (TV *tv, int k)
{ int i;
clrscr();
printf("Были введены телевизоры: \n");
for (i=0; i<k; i++)
{
printf("Телевизор # %d\n", i+1);
printf("Название: %s\n", tv[i].name);
printf("Цена: %d\n", tv[i].price);
printf("Размер по диагонали: %d\n", tv[i].diag);
printf("Цветной или ч\б: %c\n", tv[i].color);
printf("Город: %s\n", tv[i].pr.gorod);
printf("Завод: %s\n", tv[i].pr.zavod);
printf("Фамилия: %s\n", tv[i].pr.fam);
printf("Нажмите любую клавишу для продолжения просмотра\n");
getch();//ожидание нажатия клавиши
}
clrscr();
printf("Вывод закончен\n");
printf("Нажмите любую клавишу\n");
getch();
}
//формирование массива городов (города в массиве не повторяются)
void search (TV *tv, char goroda[][Lmax], int k, int *kg)
{ int min=32767, i, j;
for (i=0; i<k; i++)//поиск телевизора с минимальной ценой
if (tv[i].price<min) min=tv[i].price;
//формирование массива городов
for (i=0; i<k; i++)
if (tv[i].price==min)//если цена совпадает с минимальной
{
//проверка отсутствия города в массиве городов
for (j=0; j<*kg && strcmp(tv[i].pr.gorod, goroda[j]); j++);
if (j==*kg) //если отсутствует, запишем город в массив
strcpy(goroda[(*kg)++], tv[i].pr.gorod);
}
}
void main()
{ TV tv[Kmax];
int k, kg=0, i;
char goroda[Kmax][Lmax];
clrscr();
Input(tv, &k);//ввод массива телевизоров
output(tv, k);//вывод массива телевизоров на экран
search(tv, goroda, k, &kg);//формирование массива городов
clrscr();
printf("Получено %d городов, в которых производятся самые дешевые телевизоры:\n",kg);
for (i=0; i<kg; i++)
puts(goroda[i]);
getch();
}
Задача 4.2. Модифицировать программу таким образом, чтобы она вводила структуры из текстового файла и записывала результаты в файл.
В решении данной задачи приведены те описания данных и функции, которые будут отличаться от предыдущей задачи. На месте остальных функций расположены комментарии.
#include <stdio.h>
#include <conio.h>
#include <string.h>
//пропуск символов до конца строки в файле
#define FCLR while (getc(fin)!='\n')
//замена символа '\n' на '\0'
void zamena(char *str)
{ char *s;//указатель на текущий символ
s=str;
while (*s!='\n') s++;
*s='\0';
}