forkser iç sayfa2

/*Girilen sayıya kadar olan asalları listeleyen rekürsif bir algoritma yazınız.*/
#include <stdio.h>
#include <conio.h>
int asallik(int n, int i){
if (n==i) return 1;
if (n%i==0) return 0;
i++;
return asallik(n,i);
}
void main(){
int m,k;
printf("HANGI SAYIYA KADAR OLAN ASALLAR LISTELENSIN ? : \n");
scanf("%d",&m);
for (int j=2;j<=m;j=j+1) {
k=asallik(j,2);
if (k==1) printf ("%d\n",j);
}
}
/*Belirsiz sayıda girilen her tamsayı ikilisi için sırayla birinci sayının karesini, ikinci
sayının karesini, birinci sayının kübünü, ikinci sayının kübünü, sayıların çarpımlarını
ve büyük olanı ekrana yazdıran bir program yazınız. Bunları makro fonksiyonlar
yardımıyla yapınız. */
#include <stdio.h>
#include <conio.h>
#define karesi(a) ((a)*(a));
#define kup(a) (a*a*a)
#define carpma(a,b) (a*b);
#define buyukolan(a,b) (a>b ? a:b);
#define devam() (printf("devam etmek istiyor musunuz? e-h\n"));
void main(){
int a,b,kare_a,kare_b,kup_a,kup_b,carpim,buyuk;
char c;
bas: printf ("Sayilari Giriniz:\n");
scanf ("%d %d", &a,&b);
kare_a=karesi(a);
kare_b=karesi(b);
kup_a=kup(a);
kup_b=kup(b);
printf("Sayilarin Kareleri : %d , %d\n", kare_a,kare_b);
printf("Sayilarin Kupleri : %d , %d\n", kup_a,kup_b);
carpim=carpma(a,b);
printf("Sayilarin Carpimi : %d \n",carpim);
buyuk=buyukolan(a,b);
printf("Buyuk olan sayi : %d\n", buyuk);
devam();
c=getch();
if (c=='e') goto bas;
}
Aynı Fonksiyona Farklı Sayıda Veri Aktarımı
Bir fonksiyona aktarılacak verilerin kaç tane olacağı fonksiyon tanımlanırken belirlenir.
Ancak bir fonksiyona her çalıştırılışında farklı sayıda veri aktarmak olasıdır. Örneğin toplam
adı ile tanımlanmış bir fonksiyonu tanımladıktan sonra bu fonksiyona bir çalıştırılışında 5
veriyi, bir başka çalıştırılışında ise 8 veriyi aktarıp işlem yaptırabiliriz. Bunun için stdarg.h
başlık dosyası ile kullanacağımız 3 adet fonksiyona gereksinimimiz vardır ve bu tip bir
fonksiyon aşağıdaki gibi tanımlanabilir.
Fonksiyon tipi fonksiyon adı(tip isimli parametresi, ...)
{ ...
va_list ai;
...
va_start(ai,isimli parametresi);
...
va_arg(ai,isimsiz parametreler tipi);
...
va_end(ai);
...
}
Burada gelen parametrelerden birincisine bir isim verilip diğerleri için ... konulur. Bunun
anlamı diğer parametrelerin isimsiz olduğunu belirtir. Verilerin hepsi bellekte peşpeşe bulunur
ve arguman işaretçisi (ai) isimli parametreyi belirtir. Gerekli olan fonksiyonlar:
va_start():
Genel kullanımı void va_start(va_list ai,isimli arguman); şeklindedir.
Arguman işaretçisini (ai) gelen verilerden isimsiz olanların ilki üzerine konumlandırır. Önce
bu fonksiyon kullanılmalıdır.
va_arg()
Genel kullanımı
arguman tipi va_arg(valist ai, arguman tipi);
şeklindedir.
(ai) gelen verilerden ilki üzerine konumlanmış ise bu fonksiyon her çağırılışında belirtilen
tipte bir sonraki veriyi gönderir.
va_end()
Genel kullanımı void va_end(va_list ai); şeklindedir. Fonksiyona gelen isimsiz veriler
va_arg() fonksiyonu ile alınmışşa fonksiyondan çıkmadan önce bu fonksiyon kullanılmalıdır.
ÖRNEK: Aynı fonksiyon hem 6 sayının ortalamasını bulmak için hem de 3 sayının
ortalamasını bulmak için kullanılmıştır.
#include<stdio.h>
#include<stdarg.h>
#include<conio.h>
float ortalama(const int tane,...){
va_list veriler;
int veri1,i,toplam=0; float ort1;
va_start(veriler,tane);
for (i=0;i<tane;i++){
veri1=va_arg(veriler,int);
toplam+=veri1;
}
va_end(veriler);
ort1=(float)toplam/tane;
return ort1;
}
void main(){
float ort;
ort=ortalama(6,23,31,24,30,48,62);
printf("6 sayinin ortalamasi=%f\n",ort);
ort=ortalama(3,10,20,30);
printf("3 sayinin ortalamasi=%f\n",ort);
getch();
}