- •1. Цель работы
- •2. Базовые понятия языка
- •2.1. Алфавит языка Си
- •2.2. Константы
- •2.3. Идентификатор
- •2.4. Объявление переменных
- •2.5. Стандартные типы данных
- •2.6. Данные вещественных типов
- •2.7. Инициализация переменных
- •3. Операции языка си
- •3.1. Арифметические операции
- •3.2. Поразрядные операции
- •3.3. Операции отношения (сравнения)
- •3.4. Логические операции
- •3.5. Операции присваивания
- •3.6. Операция sizeof
- •3.7. Операция условие
- •3.8. Разделитель точка с запятой
- •3.9. Приоритеты операций и порядок вычислений
- •4. Операторы языка си
- •4.1. Составной оператор
- •4.2. Условный оператор
- •4.3. Оператор switch
- •4.4. Оператор break
- •4.5. Оператор for
- •4.6. Оператор while
- •4.7. Оператор do while
- •4.8. Оператор continue
- •4.9. Оператор goto
- •5. Указатели, массивы, строки
- •5.1. Указатели
- •5.2. Массивы
- •5.3. Строки
- •5.6. Двумерные массивы
- •5.7. Инициализация массивов
- •5.8. Связь указателей и массивов
- •6. Функции
- •6.1. Определение и вызов функций
- •6.2. Передача параметров функции main
- •7. Структуры и объединения
- •7.1. Структуры
- •7.2. Объединения (смеси)
- •7.3. Поля битов
- •8. Ввод-вывод
- •8.1. Консольный ввод-вывод
- •8.2. Потоковый файловый ввод-вывод
- •9. Вопросы для самостоятельного изучения
- •10. Порядок выполнения лабораторных работ и содержание отчета
- •11. Литература
6.2. Передача параметров функции main
Функция main, с которой начинается выполнение СИ-программы, может быть определена с параметрами, которые передаются из внешнего окружения, например, из командной строки. Во внешнем окружении действуют свои правила представления данных, а точнее, все данные представляются в виде строк символов. Для передачи этих строк в функцию main используются два параметра, первый параметр служит для передачи числа передаваемых строк, второй для передачи самих строк. Общепринятые (но не обязательные) имена этих параметров argc и argv. Параметр argc имеет тип int, его значение формируется из анализа командной строки и равно количеству слов в командной строке, включая и имя вызываемой программы (под словом понимается любой текст не содержащий символа пробел). Параметр argv это массив указателей на строки, каждая из которых содержит одно слово из командной строки. Если слово должно содержать символ пробел, то при записи его в командную строку оно должно быть заключено в кавычки.
Функция main может иметь и третий параметр, который принято называть argp, и который служит для передачи в функцию main параметров операционной системы (среды) в которой выполняется СИ-программа.
Заголовок функции main имеет вид:
int main (int argc, char *argv[], char *argp[])
Если, например, командная строка СИ-программы имеет вид:
A:\>cprog.exe working 'C program' 1
то аргументы argc, argv, argp содержат следующие данные
argc = 4
argv[0] = "A:\\cprog.exe"
argv[1] = "working"
argv[2] = "C program"
argv[3] = "1"
argp[0] = "path=A:\\;C:\\"
argp[1] = "lib=D:\\LIB"
argp[2] = "include=D:\\INCLUDE"
argp[3] = "conspec=C:\\COMMAND.COM"
Следующий пример представляет программу печати фактических аргументов, передаваемых в функцию main из операционной системы и параметров операционной системы.
int main ( int argc, char *argv[], char *argp[])
{ int i=0;
printf ("\n Имя программы %s", argv[0]);
for(i=1; i>=argc; i++)
printf ("\n аргумент %d равен %s", argv[i]);
printf ("\n Параметры операционной системы:");
while(*argp)
{ printf ("\n %s",*argp);
argp++;
}
return (0);
}
7. Структуры и объединения
7.1. Структуры
Структуры — это составной объект, в который входят элементы любых типов, за исключением функций. В отличие от массива, который является однородным объектом, структура может быть неоднородной. Тип структуры определяется записью вида:
struct имя_структурного_типа
{ список определений };
Пример:
struct koordinata
{ double x;
double y; };
В данном примере задан шаблон структуры или говорят, задан тип структуры, но сама структура еще не создана, память под структуру не выделена. Для выделения памяти под структуру необходимо объявить переменную типа koordinata.
koordinata t1,t2;
После чего программе будут доступны две переменные t1 и t2 типа koordinata.
Возможно следующее объявление
struct compl
{ double x;
double y; } a1,a2,a3[10];
В данном случае создан тип структуры compl, объявлены две переменные и массив типа compl. Переменные a1, a2 определяются как структуры, каждая из которых состоит из двух компонент х и у. Переменная a3 определяется как массив из деcяти структур.
Доступ к компонентам структуры осуществляется с помощью указания имени структуры и следующего через точку имени выделенного компонента, например:
a1.x=0;
a2.y=12.01;
a3[5].x=2;
Элементами структуры могут быть массивы и другие структуры. В следующем примере создана структура gruppa, состоящая из двух полей — student и avballgr.
struct stud{
float avball;
int stip;
char name[40];
};
struct gruppa{
stud student[30];
float avballgr;
}gr;
gr.student[0].avball=4.5;
gr.student[0].stip=100;
strcpy(gr.student[0].name,"Иванов П.П.");
gr.student[1].avball=4.8;
. . . //Заполняем данные для остальных студентов
gr.avballgr=0;
for (int i=0; i<30; i++)
gr.avballgr+=gr.student[i].avball;
gr.avballgr/=30;
