Dersler

View on GitHub

EEM-120 Algoritma ve Programlama II Dersi

Makrolar

#include <stdio.h>
#define PI 3.14

int main(int argc, char *argv[]) {
    
    printf("%f \n", PI);
    
    return 0;
}
3.140000 
#include <stdio.h>
#define DONMA_NOKTASI 32.0f
#define OLCEK (5.0f / 9.0f)

int main(int argc, char *argv[]) {
    float fahr, celc;
    printf("Fahrenheit cinsinden dereceyi giriniz: ");
    scanf("%f",&fahr);
    
    celc=(fahr-DONMA_NOKTASI)*OLCEK;
    
    printf("Derece: %.1f \n", celc);
    
    return 0;
}
Fahrenheit cinsinden dereceyi giriniz: 

 70


Derece: 21.1 
#include <stdio.h>

#define PI 3.141
#define TRUE 1
#define FALSE 0
#define LEN 200

#define BEGIN {
#define END }

int main(int argc, char *argv[]) {
    
    int i;
    for(i=0;i<5;i++) BEGIN
        printf("%d ",i);
        printf("%d ",i);
    END
    
    return 0;
}
0 0 1 1 2 2 3 3 4 4 
#include <stdio.h>
#define uyari_yaz printf("Lutfen dikkatli olunuz!\n");

int main(int argc, char *argv[]) {
    
    uyari_yaz uyari_yaz uyari_yaz uyari_yaz
        
    return 0;
}
Lutfen dikkatli olunuz!
Lutfen dikkatli olunuz!
Lutfen dikkatli olunuz!
Lutfen dikkatli olunuz!
#include <stdio.h>
// #define arttir(n) n+1
#define arttir(n) ((n)+1)

int main(int argc, char *argv[]) {
    
    int i=10;
    printf("%d \n", arttir(i));
    // printf("%d \n", i+1);
    
    return 0;
}
11 
#include <stdio.h>
#define ucgen_alan(taban, yukseklik) (0.5f * (taban) * (yukseklik))

int main(int argc, char *argv[]) {
    
    int taban, yukseklik;
    printf("ucgen alan hesabi icin taban ve yuksekligi giriniz: ");
    scanf("%d %d",&taban, & yukseklik);
    
    printf("alan: %f", ucgen_alan(taban, yukseklik));
    
    return 0;
}
ucgen alan hesabi icin taban ve yuksekligi giriniz: 

 10 20


alan: 100.000000

Benzer program fonksiyon ile de yapılabilir.

#include <stdio.h>
float ucgen_alan(int taban, int yukseklik){
    return 0.5f * taban * yukseklik;
}

int main(int argc, char *argv[]) {
    
    float taban, yukseklik;
    printf("ucgen alan hesabi icin taban ve yuksekligi giriniz: ");
    scanf("%f %f",&taban, & yukseklik);
    
    printf("alan: %f", ucgen_alan(taban, yukseklik));
    
    return 0;
}
ucgen alan hesabi icin taban ve yuksekligi giriniz: 

 10.5 20.5


alan: 100.000000

Ancak benzer programda veri turu belirtildiğinden makro ile yapılan programda veri türü kullanımı daha esnek olabilir.

#include <stdio.h>
#define ucgen_alan(taban, yukseklik) (0.5f * (taban) * (yukseklik))

int main(int argc, char *argv[]) {
    
    float taban, yukseklik;
    printf("ucgen alan hesabi icin taban ve yuksekligi giriniz: ");
    scanf("%f %f",&taban, & yukseklik);
    
    printf("alan: %f", ucgen_alan(taban, yukseklik));
    
    return 0;
}
ucgen alan hesabi icin taban ve yuksekligi giriniz: 

 10.5 20.5


alan: 107.625000

Makro kullanımında parantezlerin kullanımı önemlidir.

#include <stdio.h>
#define min(x,y) (x<y)?x:y

int main(int argc, char *argv[]) {
    
    printf("kucuk sayi: %d", min(7,6));
    //(7<6)?7:6
    
    return 0;
}
kucuk sayi: 6
#include <stdio.h>
#define min(x,y) ((x<y)?x:y)

int main(int argc, char *argv[]) {
    
    printf("kucuk sayi: %d", min(7,min(6,9)));
    //(7<((6<9)?6:9))?7:((6<9)?6:9))
    
    return 0;
}
kucuk sayi: 6
#include <stdio.h>
#define min(x,y) (((x)<(y))?(x):(y))

int main(int argc, char *argv[]) {
    
    printf("kucuk sayi: %d", min(7+5,8+2));
    
    return 0;
}
kucuk sayi: 10

Aşağıdaki örneklerde parantez kullanımı eksik ve uygun kullanımlar verilmiştir.

#include <stdio.h>
#define cift(x) x%2==0

int main(int argc, char *argv[]) {
    
    printf("cift sayi mi: %d", cift(6));
    
    return 0;
}
cift sayi mi: 1
#include <stdio.h>
#define cift(x) ((x)%2==0)

int main(int argc, char *argv[]) {
    
    printf("cift sayi mi: %d", cift(7+1*7+1-9));
    // printf("cift sayi mi: %d", 7+1%2==0);
    
    return 0;
}
cift sayi mi: 1
#include <stdio.h>
// #define buyuk_harf(c) 'a'<=c && c<='z' ? c - ('a'-'A') : c
#define buyuk_harf(c) ('a'<=(c) && (c)<='z' ? (c) - ('a'-'A') : (c))


int main(int argc, char *argv[]) {
    
    printf("cift sayi mi: %c", buyuk_harf('y'));
    // printf("cift sayi mi: %d", 7+1%2==0);
    
    return 0;
}
cift sayi mi: Y
#include <stdio.h>

#define yaz(x) printf("%s\n", x);

int main(int argc, char *argv[]) {
    
    yaz("abc")
    yaz("cde")
    yaz("123")
    
    return 0;
}
abc
cde
123
#include <stdio.h>
#define N 100
#define N 10

int main(int argc, char *argv[]) {
    
    printf("%d", N);
    
    return 0;
}
/tmp/tmpjdis49rf.c:3: warning: "N" redefined
    3 | #define N 10
      | 
/tmp/tmpjdis49rf.c:2: note: this is the location of the previous definition
    2 | #define N 100
      | 


10
#include <stdio.h>
#define N 100

#ifndef N
    #define N 10
#endif

int main(int argc, char *argv[]) {
    
    printf("%d", N);
    
    return 0;
}
100
#include <stdio.h>


#ifndef N
    #define N 10
#endif

int main(int argc, char *argv[]) {
    
    printf("%d", N);
    
    return 0;
}
10
#include <stdio.h>

#define DEBUG

int main(int argc, char *argv[]) {
    
   #ifdef DEBUG
     printf("Debug modu\n");
   #endif
    
   #undef DEBUG
    
   #ifdef DEBUG
     printf("Debug modu\n");
   #endif
    
    return 0;
}
Debug modu
#include <stdio.h>

#define VERSIYON 2

int main(int argc, char *argv[]) {
    
   #if VERSIYON == 1
     printf("Versiyon 1 ile ilgili kodlamalar\n");
   #endif
    
   
    
    return 0;
}
#include <stdio.h>

#define VERSIYON 5

int main(int argc, char *argv[]) {
    
   #if VERSIYON == 1
     printf("Versiyon 1 ile ilgili kodlamalar\n");
   #elif VERSIYON == 2
     printf("Versiyon 2 ile ilgili kodlamalar\n");
   #else
     printf("Diger versiyonlarla ilgili kodlamalar\n");
   #endif
     
    return 0;
}
Diger versiyonlarla ilgili kodlamalar
#include <stdio.h>

int main(int argc, char *argv[]) {
    
   printf("Dosya adi: %s\n", __FILE__); //devcpp de olsa dosya adini gorebilirsiniz.
    
    printf("Tarih: %s\n", __DATE__);
    printf("Zaman: %s\n", __TIME__);
    
    printf("Satir numarasi: %d\n", __LINE__);
    
    return 0;
}
Dosya adi: /tmp/tmpnn3h_1x4.c
Dosya adi: May 18 2023
Dosya adi: 11:06:58
Dosya adi: 8