Главная страница

Методичка по С. Методические указания к лабораторному практикуму по дисциплине Программирование на языках высокого уровня (язык Си) москва 2005


Скачать 429.5 Kb.
НазваниеМетодические указания к лабораторному практикуму по дисциплине Программирование на языках высокого уровня (язык Си) москва 2005
АнкорМетодичка по С.doc
Дата23.09.2018
Размер429.5 Kb.
Формат файлаdoc
Имя файлаМетодичка по С.doc
ТипМетодические указания
#25022
КатегорияИнформатика. Вычислительная техника
страница4 из 6
1   2   3   4   5   6

Примеры решения задач



Задача 4.1. Дан массив телевизоров. Найти названия городов, в которых выпускаются самые дешевые телевизоры.
#include

#include

#include
//пропуск символов до конца строки

#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

{

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

//формирование массива городов

for (i=0; 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

puts(goroda[i]);

getch();

}
Задача 4.2. Модифицировать программу таким образом, чтобы она вводила структуры из текстового файла и записывала результаты в файл.

В решении данной задачи приведены те описания данных и функции, которые будут отличаться от предыдущей задачи. На месте остальных функций расположены комментарии.
#include

#include

#include
//пропуск символов до конца строки в файле

#define FCLR while (getc(fin)!='\n')
//замена символа '\n' на '\0'

void zamena(char *str)

{ char *s;//указатель на текущий символ
s=str;

while (*s!='\n') s++;

*s='\0';

}

void input (TV *tv, int *k)//чтение данных из файла

{ char *s; int i;

FILE *fin;
printf("Введите имя входного файла: "); gets(s);

fin=fopen(s, "r");

if (fin==NULL)

{ printf ("Нет такого файла\n");

getch();

}

else

{//на первой строке в файле расположено число структур

fscanf(fin, "%d", k);

FCLR; //пропуск символов до конца строки файла

for (i=0; i<*k; i++)

{//каждое поле структуры занимает в файле отдельную строку

fgets(tv[i].name, Lmax, fin); zamena(tv[i].name);

fscanf(fin, "%d", &tv[i].price);

fscanf(fin, "%d", &tv[i].diag);

FCLR;

tv[i].color=fgetc(fin);

fgets(s, Lmax, fin);

fgets(tv[i].pr.gorod, Lmax, fin); zamena(tv[i].pr.gorod);

fgets(tv[i].pr.zavod, Lmax, fin); zamena(tv[i].pr.zavod);

fgets(tv[i].pr.fam, Lmax, fin);

}

fclose(fin);

}

}
// вывод данных на экран и формирование массива городов- аналогично

//предыдущей задаче
void main()

{ TV tv[Kmax];

int k, kg=0, i;

char goroda[Kmax][Lmax];

FILE *fout;
clrscr();

input(tv, &k);//ввод массива структур из файла

output(tv, k);//вывод массива структур на экран

search(tv, goroda, k, &kg);//поиск городов

clrscr();

//вывод результата на экран и в файл

fout=fopen("result.txt", "w");

printf("Город(а), в которых производятся самые дешевые телевизоры:\n");

fprintf(fout, "Получено %d городов, в которых производятся самые дешевые телевизоры:\n",kg);

for (i=0; i

{

puts(goroda[i]);

fprintf(fout, "%s\n", goroda[i]);

}

fclose(fout);

puts("Результат записан в файл result.txt");

getch();

}

    1. Лабораторная работа 5. "Списки. Динамические переменные"



Написать программу, которая вводит из файла структуры вида:

р
азмещает их в

  1. стеке;

  2. очереди;

реализованном(ой) с помощью

  1. линейного списка;

  2. циклического списка;

  3. двунаправленного линейного списка;

  4. двунаправленного циклического списка;

и выполняет следующие действия:

  1. удаляет из списка стулья заданного цвета;

  2. удаляет из списка стулья из заданного материала;

  3. удаляет из списка все стулья, расположенные между первым и последним стулом заданного цвета;

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

  5. вставляет в список новый стул после первого стула из заданного материала;

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

  7. вставляет в список новый стул перед самым низким стулом;


Результат (содержимое стека или очереди) выводится в файл.

Таблица 2

Выбор варианта




    1. 1   2   3   4   5   6


написать администратору сайта