- •Конспект лекций по дисциплине "Программирование"(іі часть)
- •123 "Компьютерная инженерия"
- •1 Функции 6
- •1 Функции
- •1.1 Определение, описание, вызов функции
- •Void prn1(int X)
- •Void prn2()
- •Void main()
- •1.2 Передача параметров в функции по значению и по указателю
- •Void func(int intg,float fltp)
- •Void main()
- •Void main()
- •Void main()
- •Void main()
- •1.3 Функции и массивы
- •Int func1(int arr[]) {...}
- •Void main()
- •Void main()
- •Void main()
- •1.4 Функции с умалчиваемыми значениями параметров
- •Void main()
- •Void main()
- •1.5 Функции с переменным числом параметров
- •Void main()
- •Void main()
- •1.6 Передача параметров в функцию main()
- •Int main(int argc,char**argv,char**envp)
- •Int main(int argc,char **argv)
- •1.7 Рекурсивные и подставляемые функции
- •Void main()
- •Void main()
- •1.8 Функции, возвращающие указатель
- •Void main()
- •1.9 Функции и структуры
- •Void f1(stud a)
- •Void f3(stud *p)
- •Void main()
- •1.10 Перегрузка функций
- •Void main()
- •Void main()
- •Int mul(double X,double y)
- •Int sum(int X) {return 2*X;}
- •Void main()
- •1.11 Шаблоны функций
- •Int main()
- •Void func(a);
- •Int main()
- •1.12 Указатели на функции
- •Void main()
- •Int f2(int X){return X*X;};
- •Void main()
- •Void main()
- •2 Работа с файлами
- •2.1 Потоковый ввод-вывод
- •2.2 Открытие и закрытие потока
- •Int fclose(file *имя);
- •Int main()
- •Void perror(const char *str);
- •2.3 Посимвольный ввод-вывод
- •Int fputc(int ch, file *fp);
- •Int fgetc(file *fp);
- •2.4 Построчный ввод-вывод
- •Int fputs(char*string, file *fp);
- •2.5 Форматированный ввод-вывод
- •Int fprintf(file *fp, char *format [,аргумент]…);
- •Int fscanf(file *fp, char *format [,указатель]…);
- •2.6 Форматированные вывод в строку и ввод из строки
- •Int a2; long b2;
- •2.7 Блоковый ввод-вывод
- •Int fwrite(void *ptr, int size, int n, file *fp);
- •Int fread(void *ptr,int size,int n,file *fp);
- •2.8 Произвольный доступ к файлу
- •Int fseek(file *fp, long offset, int from_where);
- •Int main()
- •3 Многофайловая компиляция
- •Void main()
- •Void main()
- •4 Объекты и их атрибуты
- •Void main()
- •5 Ссылки
- •Int &хref; // ошибка!!
- •Int f2_ptr(int *a, int *b) {return *a-*b;}
- •Int f4_ref(const int&a, int &b)
- •Void main()
- •Литература
Void main()
{double a=2.5,b=2.0,md1,md2;
md1=mult(a,b,0.3,term);
md2=mult(0.5,a,4.0,b,1.1,term);
printf("md1=%.2lf md2=%.2lf\n",md1,md2);}
В результате работы программы на экран выведется:
md1=1.50 md2=11.00
При работе с функциями, имеющими переменное параметров, имеется набор макроопределений, помещенных в заголовочном файле stdarg.h:
Макрокоманда void va_start (va_list param, последний явный параметр) связывает вспомогательный параметр param с последним явным параметром в списке.
Макрокоманда type va_arg (va_list param,type) перемещает указатель param на число байт заданного типа type.
Макрокоманда va_end (va_list param) вызывается после обработки списка и организует корректный возврат из функции (вместо оператора return).
1.6 Передача параметров в функцию main()
В функцию main(), как и в любую другую функцию, могут передаваться параметры. Для передачи параметров в функцию main() ее следует описать в таких формах:
[тип] main(int argc, char **argv){...}
[тип] main(int argc, char **argv, char **envp){...}
[тип] – тип функции main может быть void или int.
Параметр int argc определяет число слов в командной строке.
Параметр char **argv ‑ указатель на массив строк, вводимых из командной строки. Массив строк –это массив указателей, являющихся адресами первых символов этих строк. Размер этого массива строк равен argc. Нулевое слово, на которое указывает указатель argv[0], всегда является спецификацией запускаемой на выполнение программы (именем программы с расширением .exe).
Параметр char **envp ‑ это указатель на массив указателей на строки среды программы. С помощью этого параметра в программу можно передать всю информацию среде окружения программы, которая определяет некоторые особенности операционной системы и др.
В следующих примерах демонстрируется передача параметров в функцию main. Для работы программ их необходимо запустить из командной строки, например в среде FAR, NC, VC, DN и др.
Пример.
#include <stdio.h>
#include <conio.h>
Int main(int argc,char**argv,char**envp)
{clrscr();
for(int i=0;i<argc;i++)
printf("argv[%d]=%s\n",i,argv[i]);
getch();
puts("Среда окружения");
while(*envp) puts(*envp++);
getch();
return 0;}
Пусть исполняемый файл этой программы prog1.exe расположен в корневом каталоге диска C:\ . Тогда, если в командной строке набрать c:\>prog1.exe my age 19, то результат работы программы может быть такой:
argv[0]=C:\PROG1.EXE
argv[1]=my
argv[2]=age
argv[3]=19
Среда окружения
PROMPT=$p$g
COMSPEC=C:\WINDOWS\COMMAND.COM
PATH=C:\BC31\BIN
Proccessor_ArcHitecture=x86
Proccessor_identifier=x86 Family 15 Model 47
Proccessor_Level=15
...
В следующей программе для ее выполнения необходимо набрать заданное слово в командной строке.
Пример.
#include <stdio.h>
#include <conio.h>
#include <string.h>
Int main(int argc,char **argv)
{clrscr();
char str[]="Secret";
if(strcmp(argv[1],str)!=0)// сравнение 2-х строк
{printf("Error\n"); getch(); return 1;}
printf("Programma ");
printf("%s %c.%c.\n",argv[2],argv[3][0],argv[4][0]);
int x, a=5, b=7,res1;
sscanf(argv[5],"%d",&x); //преобразование строки в целое число
res1=(a+b)*x; //(5+7)*100
printf("res1=%d\n",res1);
getch();
return 0;}
Пусть исполняемый файл этой программы prog2.exe расположен в корневом каталоге диска C:\. Для правильной работы этой программы в командной строке надо набрать вторым словом Secret. Если в командной строке набрать:
c:\>prog1.exe Secret Petrov Ivan Ivanovich 100:
то на экран выведется:
Programma Petrov I.I.
res1=1200
Если второе слово в командной строке будет другим, то на экран выведется Error, и программа завершится.
