- •1.Базовые элементы языка с. Алфавит и словарь языка
- •2. Основные типы данных. Классификация их типов. Модификация базовых типов.
- •3. Константы.
- •4. Переменные.
- •5. Структура с - программы. Понятие локальных и глобальных переменных. Функция main().Директивы препроцессора (#include и #define). Комментарии.
- •6. Операции языка с. Арифметические, логические операции. Поразрядные операции.
- •7. Операции языка с. Операция присваивания и отношения. Операция определения размера. Оператор последовательного вычисления.
- •8. Операции языка с. Условная операция. Операция (), операция [].
- •9. Приоритет операций и порядок вычислений.
- •11. Ввод-вывод символов
- •12. Форматированный ввод-вывод. Модификаторы формата. Спецификаторы преобразования. Подавление ввода.
- •13. Операторы языка с. Условные операторы (if и switch).
- •16. Одномерные массивы.
- •17. Строковый литерал. Чтение и запись строк.
- •18. Двухмерные массивы. Массивы строк.
- •20.Способы доступа к элементам массива
- •21. Понятие указателя. Инициализация указателей.
- •22. Указательные переменные. Операции получения адреса (&) и раскрытия ссылки(*).
- •23. Указательные выражения. Адресная арифметика.
- •Динамическое выделение памяти для массивов.
- •Функции. Определения функций. Оператор return.
- •Тип_результата id_функции (список);
- •Функции. Прототипы функций.
- •Тип_результата id_функции (список);
- •Функции. Вызов функций: вызов по значению и по ссылке.
- •Тип_результата id_функции (список);
- •Передача массива в функцию.
- •Классы памяти. Область видимости.
- •Аргументы функции main(): argv и argc.
- •Вызов библиотечных функций.
- •Директива препроцессора #define: создание макрофункций с помощью директивы #define.
- •Директивы условной компиляции #if, #else, #elif, #endif, #ifdef, #ifndef.
- •Понятие структуры. Доступ к членам структуры.
- •Присваивание структур.
- •Id_структуры . Id_поля
- •Передача членов структур функциям. Передача целых структур функциям.
- •Указатели на структуры. Средство typedef.
- •Понятия объединения и перечисления. Битовые поля.
- •Основы файловой системы. Стандартные потоки. Указатель файла. Открытие файла. Закрытие файла.
Id_структуры . Id_поля
или
(*указатель_структуры) . ID_поля
2) при помощи операции косвенной адресации (–>) в виде
указатель_структуры –> ID_поля
или
(&ID_структуры) –> ID_поля
Если в программе созданы объекты объявленного ранее шаблона:
Stud_Type s1, *s2;
то к полям объекта s1 можно обратиться следующим образом:
s1. Number, s1. Fio, s1. S_b;
или
(&s1) –> Number, (&s1) –> Fio, (&s1) –> S_b;
а к полям объекта, адрес которого s2:
s2 –> Number, s2 –> Fio, s2 –> S_b;
или
(*s2) . Number, (*s2) . Fio, (*s2) . S_b;
Массивы структур.
Структурный тип «struct ID_структуры», как правило, используют для декларации массивов, элементами которых являются структурные переменные. Это позволяет создавать программы, оперирующие с простейшими базами данных.
Например, массив структур, объявленного ранее типа:
struct Person spisok[100];
причем ключевое слово struct можно не писать. Декларацию массива можно выполнить и в описании шаблона следующим образом:
struct Рerson {
char fio[40];
int day, month, year;
} spisok[100];
В данном случае обращение к полю, например, day элемента массива с индексом i может быть выполнено одним из следующих способов:
spisok[i].day=22; *(spisok+i).day=22; (spisok+i)–>day=22;
Пример. Приведем часть программы, иллюстрирующей создание массива структур и передачу структурных данных в функции:
struct Spisok {
char Fio[20];
double S_Bal;
};
// Описание прототипов функций пользователя
void Out(int, Spisok);
void In(int, Spisok *);
void main(void)
{
Spisok Stud[50], *sved;
. . .
for(i=0;i<N;i++)
Vvod(i, &Stud[i]);
puts("\n Spisok Students");
for(i=0;i<N;i++)
Out(i+1, Stud[i]);
. . .
}
// Функция вывода на экран данных одного элемента структуры
void Out(int nom, Spisok dan) {
printf("\n %3d – %20s %4.2lf ",nom, dan.Fio, dan.S_Bal);
}
// Функция ввода данных одного элемента структуры
void In (int nom, Spisok *sved) {
printf("\n Введите сведения %d : ", nom+1);
fflush(stdin);
puts("\n ФИО – ");
gets(sved–>Fio);
puts("\n Средний балл – ");
scanf(“%lf”, &sved–>S_Bal);
}
Передача членов структур функциям. Передача целых структур функциям.
При передаче структур в функцию в качестве типа параметра неоходимо указвать имя структурного типа.
void func(key A){printf("Слово %s встречается %d раз",A[i].word,A[i].count); }
Передача масствов структур в функцию осуществляется как и передача обычных массивов.
Пример. Ввести изфайлаinputfile.dat информацию числе вхожденийключевого слова в текст программы на С. Вывести полученную информацию в файл output.dat.
#include
#include
struct key {// информация числе вхождений ключевого слова в текст программы на С
char word[10];// ключевое слово
int count;//число вхождений
};
key* input(int* n, char* fileName){// ввод из файла
//n - размер массива
//fileName - имя файла
// функция возвращает указатель на массив структур в динамической памяти
key* A;
FILE *fp;
// открытие файла на чтение
if ((fp = fopen(fileName, "r")) == NULL)
{ printf("Нельзя открыть %s\n", "inputfile.dat");
return NULL;
}
// ввод размера массива структур
fscanf(fp,"%d",n);
//выделение памяти под массив структур
A=(key*)calloc(*n,sizeof(key));
// ввод значений
for (int i=0;i<*n;i++){
fscanf(fp,"%s",&A[i].word);
fscanf(fp,"%d",&A[i].count);
}
fclose(fp);
return A;
}
void output(int n, key* A, char* fileName){// вывод в файл массива структур
//n - размер массива
//А - указатель на массив структур
//fileName - имя файла
FILE *fp;
if ((fp = fopen("outputfile.dat", "w")) == NULL)
{ printf("Нельзя открыть %s\n", "outputfile.dat");
return;
}
// вывод значение
for (int i=0;i< n;i++){
fprintf(fp,"%s ",A[i].word);
fprintf(fp,"%d ",A[i].count);
}
fclose(fp);
}
void main()
{ key *A; //указатель на массив структур
int n; // кол-во элементов
A=input(&n,"inputfile.dat");
output(n,A,"outputfile.dat");
free(A);
}