double f1(int n,double a[]);
int main() { int n,i; double max,a[1000];
scanf("%d",&n); for(i=0;i<n;i++) scanf("%lf",&a[i]);
max=f1(n,a); printf("max=%f\n",max);
}
double f1(int n,double a[])
{ double max; int i;
max=a[0];
for(i=1;i<n;i++) if(a[i]>max)max=a[i];
return max; } |
- informacja dla kompilatora o funkcji f1
- deklaracje zmiennych i tablicy
- czytanie ilości elementów i elementów tablicy
- wywołanie funkcji - drukowanie elementu maksymalnego
- deklaracja funkcji i parametrów formalnych procedury
- deklaracja zmiennych funkcji
- przejęcie elementu zerowego tablicy, jako maksymalnego
- sprawdzanie kolejnych elementów tablicy
- przekazanie obliczonego max do funkcji main |
Zadanie obliczyć wartość wielomianu postaci:
za pomocą schematu Hornera
double horner(int m,double x,double b[]);
int main()
{
int n,i;
double x,w,a[1000];
scanf("%d",&n);
for(i=0;i<=n;i++)
scanf("%lf",&a[i]);
scanf("%lf",&x);
w=horner(n,x,a);
printf("w(%f)=%f\n",x,w);
}
double horner(int n,double x,double a[])
{
double w;
int i;
w=a[0];
for(i=1;i<=n;i++)
w = w*x + a[i];
return w;
}
Funkcje matematyczne - standardowa biblioteka math.h .
W języku C mamy dostępne następujące funkcje operujące na argumentach double:
sin(x) - sinus x,
wartość podana w radianach
cos(x) - cosinus
tan(x) - sin(x)/cos(x)
atan2(y,x) - arcus tangens y/x
pow(x,y) - xy
sqrt(x) - pierwiastek kwadratowy z x ≥ 0
fabs(x) - wartość bezwzględna z x
exp(x) - ex
log(x) - logarytm naturalny
log10(x) - logarytm dziesiętny
Zadanie. Napisać program obliczający:
#include<math.h>
int main()
{
int i,n;
double a,b,c,d;
scanf("%d",&n);
for(i=1;i<=n;i++)
{
d=i;
a=2.0;
b=1.0/d;
c=pow(a,b);
printf("Pierwiastek %d-go stopnia z 2
= %18.16f\n",i,c);
}
}
Pierwiastek 1-go stopnia z 2 =
2.0000000000000000
Pierwiastek 2-go stopnia z 2 =
1.4142135623730951
Pierwiastek 3-go stopnia z 2 =
1.2599210498948732
Pierwiastek 4-go stopnia z 2 =
1.1892071150027210
Pierwiastek 5-go stopnia z 2 =
1.1486983549970351
Pierwiastek 6-go stopnia z 2 =
1.1224620483093730
Pierwiastek 7-go stopnia z 2 =
1.1040895136738123
Pierwiastek 8-go stopnia z 2 =
1.0905077326652577
Pierwiastek 9-go stopnia z 2 =
1.0800597388923061
Funkcje rekurencyjne.
W języku C funkcja może wywoływać samom siebie. Podczas wywołania rekurencyjnego sporządzana jest kopia wszystkich zmiennych używanych przez funkcję wywołującą. Następnie przekazywane są argumenty do funkcji do funkcji wywołanej. Przedstawmy obecnie rekurencyjny algorytm obliczania silni i porównajmy go z algorytmem tradycyjnym wykorzystującym pętlę.
int silnia(int n)
{
if(n>0) return n*silnia(n-1);
else return 1;
}
int main()
{
int k,r;
printf("Podaj n=");
scanf("%d",&k);
r=silnia(k);
printf("silnia(%d)=%d\n",k,r);
}
int silnia(int n);
int main()
{
int k,r;
printf("Podaj n=");
scanf("%d",&k);
r=silnia(k);
printf("silnia(%d)=%d\n",k,r);
}
int silnia(int n)
{
int i,s;
s=1;
for(i=1;i<=n;i++)
s*=i;
return s;
}
Ogólnie rekurencja nie przyspiesza działania programu ani nie zmniejsza ilości zajmowanego przez program miejsca w pamięci operacyjnej. Jednak postać rekurencyjna jest często bardziej czytelna od programu napisanego za pomocą pętli i z użyciem tablic. Zadanie odwracania ciągu znaków w tekście pokazuje, jak można zrealizować program za pomocą funkcji rekurencyjnej, jaki zwykłej pętli while.
#include<stdio.h>
int od(char a[],int k,int l)
{
char z;
if(k<l){
z=a[k];
a[k]=a[l];
a[l]=z;
od(a,k+1,l-1);
}
else return 0;
}
int main()
{
int i;
char w[1024];
i=0;
while((w[i]=getchar())!='\n')
i++;
w[i]='\0';
od(w,0,i-1);
printf("%s\n",w);
}
int od(char a[],int k,int l)
{
char z;
while(k<l)
{ z=a[k];
a[k]=a[l];
a[l]=z;
k++;
l--;
}
return 0;
}