- •Додатковий матеріал до лекцій із дисципліни "Програмування"
- •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.9 Функції та структури
Приклад 2.23
#include <string.h> |
#include <stdio.h> |
struct STUD{char name[20];int age;}; |
void f1(STUD a) |
{strcpy(a.name,"Петров"); |
a.age+=1; |
printf("%s %d\n",a.name,a.age); } |
STUD f2(STUD b,STUD с) |
{if(b.age>с.age) return b; return с;} |
int main() |
{STUD st1={"Иванов",19},st2={"Орлов", 22},st3; |
f1(st1); |
printf("%s %d\n",st1.name,st1.age); |
st3=f2(st1,st2); |
printf("%s %d\n",st3.name,st3.age); |
return 0;} |
|
|
|
Приклад 2.24
#include <string.h> |
#include <stdio.h> |
struct STUD{char name[20];int age;}; |
void f3(STUD *p) |
{strcpy(p->name,"Сидоров"); |
p->age=21; |
printf("%s %d\n", p->name, p->age); } |
STUD *f4(STUD *r1,STUD *r2) |
{if(r1->age>r2->age) return r1; return r2;} |
int main() |
{STUD st4={"Сергеев",18}, st5={"Алешин",25}, *pst; |
f3(&st4); |
printf("%s %d\n",st4.name,st4.age); |
pst=f4(&st4,&st5); |
printf("%s %d\n",pst->name,pst->age); |
return 0;} |
|
|
|
2.10 Перевантаження функцій та шаблони функцій
Приклад 2.25
#include <stdio.h> |
int FF(int x,int y) {return x*x+y*y;} |
long FF(long x, long y) {return x*x+y*y;} |
float FF(float x, float y) {return x*x+y*y;} |
int main() |
{int a1=3,a2=4,a3; |
a3=FF(a1,a2); |
long b1=20,b2=400,b3; |
b3=FF(b1,b2); |
float d1=5.5,d2=7.5,d3; |
d3=FF(d1,d2); |
printf("a3=%d b3=%ld d3=%.2f\n", a3,b3,d3); |
return 0;} |
|
|
Приклад 2.26
#include <stdio.h> |
int max(int arr[],int n) |
{int val=arr[0]; |
for(int i=1;i<n;i++) |
if(arr[i]>val) val=arr[i]; |
return val;} |
double max(double arr[],int n) |
{double val=arr[0]; |
for(int i=1;i<n;i++) |
if(arr[i]>val) val=arr[i]; |
return val;} |
float max(float arr[],int n) |
{float val=arr[0]; |
for(int i=1;i<n;i++) |
if(arr[i]>val) val=arr[i]; |
return val;} |
int main() |
{int xmax, x[5]={1,3,10,2,7}; |
double ymax, y[6]={3.5,3.4,10.2,11.5,2.2,3.1}; |
float zmax, z[4]={1.5,3.8,10.1,2.3}; |
xmax=max(x,5); |
ymax=max(y,6); |
zmax=max(z,4); |
printf("xmax=%d ", xmax); |
printf("ymax=%.2lf zmax=%.2f\n", xmax,ymax,zmax); |
return 0; } |
|
|
Приклад 2.27
#include <stdio.h> |
double mul(double x) |
{return x*x*x;} |
double mul(double x,double y) |
{return x*y*y;} |
double mul(double x,double y,double z) |
{return x*y*z;} |
int main() |
{double M1=mul(0.2); |
double M2=mul(0.2,0.4); |
double M3=mul(0.2,0.3,0.4); |
printf("M1=%.2lf M2=%.2lf M3=%.2lf\n", M1,M2,M3); |
return 0; } |
|
|
|
Приклад 2.28
#include <stdio.h> |
int sum(int x) {return 2*x;} |
int sum(int x, int y=5) {return x+y;} |
int sum(int x=2,int y=3,int z=4){return x+y+z;} |
void main() |
{int S1=sum(10); |
int S2=sum(50,10); |
…} |
|
|
Приклад 2.29
template <class Tip> |
Tip max(Tip x, Tip y ) |
{if(x>y)return x; |
return y;} |
int main() |
{int a1=-7, a2=40,res1; |
res1=max(a1,a2); |
float f1=-3.6,f2=-10.5,res2; |
res2=max(f1,f2); |
printf("res1=%d res2=%.1f\n",res1,res2); |
return 0; } |
|
|
Приклад 2.30
#include <stdio.h> |
template <class A> |
void swp(A *x,A *y) |
{A z=*x; |
*x=*y; |
*y=z;} |
int main() |
{double d1=3.3, d2=2.2; |
swp(&d1,&d2); |
printf(“d1_n=%.2lf d2_n=%.2lf\n”,d1,d2); |
char c1='M', c2='Z'; |
swp(&c1,&c2); |
printf(“c1_n=%c c2_n=%c\n”,c1,c2); |
char *st1=”Москва”, *st2=”Киев”; |
swp(&st1,&st2); |
printf(“st1_n=%s st2_n=%s\n”,st1,st2); |
swp(st1,st2); |
printf(“st1_nn=%s st2_nn=%s\n”,st1,st2); |
return 0;} |
|
|
|
Приклад 2.31
template <class T> |
int func_max(T x[], int n) |
{T m=x[0]; int k=0; |
for(int i=0; i<n; i++) |
if(x[i]>max){max=x[i]; k=i;} |
return k;} |
int main() |
{int arr[5]={5,12,40,23,4}, in1, in2; |
in1=func_max(arr,5); |
printf(“max1=arr[%d]=%d \n”,in1,arr[in1]); |
float mas[4]={5.3,1.2,4.0,20.3}; |
in2=func_max(mas,4); |
printf(“max2=mas[%d]=%.2f\n”,in2,arr[in2]); |
return 0;} |
|
|
|
Приклад 2.32
#include <stdio.h> |
template <class E, class D> |
void sz(int, E*,int, D*); |
int main() |
{int a[]={1,2,3,4,5}; |
float f[]={6.1,7.2,8.3}; |
int na=sizeof(a)/sizeof(a[0]); |
int nf=sizeof(f)/sizeof(f[0]); |
puts("Массив а"); |
for(int i=0;i<na;i++) printf("%5d",a[i]); |
puts("Массив f"); |
for(i=0;i<nf;i++) printf("%5.1f",f[i]); |
printf("Сума масивів a та f в масиві а\n"); |
sz(na,a,nf,f); |
puts("Массив а"); |
for(i=0;i<na;i++) printf("%5d",a[i]); |
printf("Сума масивів f та a в масиві f\n"); |
sz(nf,f,na,a); |
puts("Массив f"); |
for(i=0;i<nf;i++) printf("%5.1f",a[i]); |
return 0;} |
template <class M,class N> |
void sz(int n1,M *arr1,int n2,N *arr2); |
{int k; |
if(n1<n2) k=n1; else k=n2; |
for(int i=0;i<k;i++) |
arr1[i]+=(M)arr2[i]; |
} |
|
|
