
- •Додатковий матеріал до лекцій із дисципліни "Програмування"
- •1 Структури та об’єднання
- •1.1 Структури
- •1.2 Об’єднання та бітові поля
- •2 Функції
- •2.1 Передача параметрів за значенням
- •2.2 Передача параметрів за покажчиком
- •2.3 Функції та масиви
- •2.4 Функції з параметрами за замовченням
- •2.5 Функції з змінним числом параметрів
- •2.6 Передача параметрів в функцію main()
- •2.7 Рекурсивні та інлайн-функції
- •2.8 Функції, що повертають покажчик
- •2.9 Функції та структури
- •2.10 Перевантаження функцій та шаблони функцій
- •2.11 Покажчик на функцію
- •3 Робота з файлами
- •3.1 Відкриття та закриття файлів
- •3.2 Введення даних в файл та виведення даних з файлу
- •3.3 Керування файлами та каталогами
- •4 Багатофайлова компіляція
- •Література
2.6 Передача параметрів в функцію main()
Приклад 2.16
#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]); |
puts(“\nСреда окружения”); |
while(*envp) |
puts(*envp++); |
getch(); |
return 0;} |
|
|
|
|
|
|
Приклад 2.17
#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) |
{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; |
printf("res1=%d\n”,res1); |
getch(); |
return 0;} |
|
|
|
|
2.7 Рекурсивні та інлайн-функції
Приклад 2.18
long fact(int k) |
{if(k<0) return 0; |
if (k==0} return 1; |
return k* fact(k-1);} |
void main() |
{int n=5; |
long F_n=fact(n); |
printf (“%d!=%ld”,n,F_n); |
} |
|
|
Приклад 2.19
double expo(double a, int n) |
{if (n==0) return 1; |
if (a==0) return 0; |
if(n>0) return a*expo(a,n-1); |
if(n<0) return expo(a,n+1)/a;} |
void main() |
{int n1=3,n2=-2; |
double arg1=2.0, arg2=5.0; |
double res1=expo(arg1,n1); |
printf (“%.3lf^(%d)=%.3lf\n”, arg1,n1,res1); |
double res2= expo(arg2,n2); |
printf (“%.3lf^(%d)=%.3lf\n”, arg2,n2,res2); |
} |
|
|
|
Приклад 2.20
inline float mod(float x=0,float y=0) |
{return sgrt(x*x+y*y);} |
inline int max(int a,int b) |
{return (a>b)?a:b; |
void main() |
{float f1=4.5,f1=-2.5,res1; |
res1=mod(f1,f2); |
int n1=7,n2=-5,res2; |
res2=max(n1,n2); } |
printf (“res1=%d res2=%d\n”, res1,res2); |
|
|
|
2.8 Функції, що повертають покажчик
Приклад 2.21
#include <stdio.h> |
int *func(int ,int []); |
int main() |
{const N=5; |
int *b,arr[N]={3,5,7,0,9}; |
if((b=func(N,arr))!=NULL) |
{*b=1; printf("b=%p *b=%d\n”,b,*b);} |
return 0;} |
int *func(int n,int a[]) |
{for(int i=0;i<n;i++) |
if(a[i]==0) return &a[i]; |
return NULL;} |
|
|
|
|
Приклад 2.22
#include <stdio.h> |
#include <string.h> |
char* fch(char *ch1,char *ch2) |
{char *str=ch2; |
if(strlen(ch1)>strlen(ch2)) str=ch1; |
return str; } |
int main() |
{char *st1="abcde"; |
char *st2="abcd"; |
char *st3=fch(st1,st2); |
printf("st1=%p st2=%p st3=%p\n”,st1,st2,st3); |
puts(st3); //или puts(fch(st1)); |
return 0;} |
|
|
|