Dersler

View on GitHub

EEM-119 Algoritma ve Programlama I Dersi

switch-case

#include <stdio.h>
int main(int argc, char *argv[]) {
    double sayi1, sayi2, sonuc;
    char islem;
    printf("İslemi giriniz(+, -, *, /):");
    scanf("%c",&islem);
    printf("Birinci sayiyi giriniz: ");
    scanf("%lf", &sayi1);
    printf("Ikinci sayiyi giriniz: ");
    scanf("%lf", &sayi2);
    
    switch(islem){
        case '+':
            sonuc=sayi1+sayi2;
            break;
        case '-':
            sonuc=sayi1-sayi2;
            break;
        case '*':
            sonuc=sayi1*sayi2;
            break;
        case '/':
            if(sayi2==0){
                printf("0'a bolme hatasi, 2. sayi 0 olamaz.");
                    return 1;
            }
            sonuc=sayi1/sayi2;
            break;
        default:
            printf("yanlis islem operatoru girildi.");
            return 1;
    }
    printf("Islem sonucu: %lf", sonuc);
    return 0;
}
İslemi giriniz(+, -, *, /):

 /


Birinci sayiyi giriniz: 

 10


Ikinci sayiyi giriniz: 

 3


Islem sonucu: 3.333333
#include <stdio.h>
int main(int argc, char *argv[]) {
    int gun, ay, yil;
    printf("gg/aa/yyyy seklinde tarihi giriniz");
    scanf("%d/%d/%d",&gun,&ay,&yil);
    printf("girilen tarih: %d/%d/%d\n",gun,ay,yil);
    
    printf("girilen tarih: %d/", gun);
    switch(ay){
        case 1:
            printf("Ocak/");
            break;
        case 2:
            printf("Subat/");
            break;
        case 3:
            printf("Mart/");
            break;
        //....
        case 11:
            printf("Kasim/");
            break;
        case 12:
            printf("Aralik/");
            break;
        default:
            printf("yanlis ay girildi/");
    }
    printf("%d", yil);
    return 0;
}
gg/aa/yyyy seklinde tarihi giriniz

 10/20/2021


girilen tarih: 10/20/2021
girilen tarih: 10/yanlis ay girildi/2021
#include <stdio.h>
int main(int argc, char *argv[]) {
    int ay;
    printf("ayin kac gun surdugunu gormek icin ay numarasini giriniz");
    scanf("%d",&ay);

    switch(ay){
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
            printf("Girilen ay 31 gunden oluşmaktadir.");
            break;
        case 4:
        case 6:
        case 9:
        case 11:
            printf("Girilen ay 30 gunden olusmaktadir.");
            break;
        case 2:
            printf("Subat ayi 28 veya 29 gundur.");
            break;
        default:
            printf("1 ie 12 arasinda bir deger girmelisiniz.");
    }
    return 0;
}
ayin kac gun surdugunu gormek icin ay numarasini giriniz

 13


1 ie 12 arasinda bir deger girmelisiniz.

İşaretli ve işaretsiz tamsayı türleri ve sınırları

Negatif sayı kullanılmayacaksa değişkenlerin önüne unsigned konulur.
Bu durumda tam sayı türleri:
char
unsigned char
short int
unsigned short int
int
unsigned int
long int
unsigned long int

Başka niteleyiciler kullanıldığında int yazılması zorunlu değildir. Yani sadece long yazmak long int anlamına gelir.

#include <stdio.h>
int main(){
  printf("char turu: %d byte\n",sizeof(char));
  printf("unsigned char turu: %d byte\n",sizeof(unsigned char));
  printf("short turu: %d byte\n",sizeof(short));
  printf("unsigned short turu: %d byte\n",sizeof(unsigned short));
  printf("int turu: %d byte\n",sizeof(int));
  printf("unsigned int turu: %d byte\n",sizeof(unsigned int));
  printf("long turu: %d byte\n",sizeof(long));
  printf("unsigned long turu: %d byte\n",sizeof(unsigned long));
  return 0;
}
    char turu: 1 byte
    unsigned char turu: 1 byte
    short turu: 2 byte
    unsigned short turu: 2 byte
    int turu: 4 byte
    unsigned int turu: 4 byte
    long turu: 8 byte
    unsigned long turu: 8 byte

Buradaki formülleri doğru bir şekide görmek için tıklayınız

char: $-2^7$ - $2^7-1$
unsigned char: $0$ - $2^8-1$
short: $-2^{15}$ - $2^{15}-1$
unsigned short: $0$ - $2^{16}-1$
int: $-2^{31}$ - $2^{31}-1$
unsigned int: $0$ - $2^{32}-1$ long: $-2^{63}$ - $2^{63}-1$
unsigned long: $0$ - $2^{64}-1$

genel formu
eğer değişken m byte ise $n=m \times 8$ bittir. Dolayısyıla işaretli olarak $-2^{n-1}$ - $2^{n-1}-1$ sayısı arasında değer alır. İşaretsiz ise (unsigned) $0$ - $2^n-1$

#include <stdio.h>
  int main(){
  int a=10;
  printf("a: %d\n",a);
  // 8 tabaninda deger atama
  a=010; 
  printf("a: %d\n",a);
  //16 tabaninda deger atama
  a=0x10; 
  printf("a: %d\n",a);
  return 0;
}
    a: 10
    a: 8
    a: 16
#include <stdio.h>
  int main(){
  int a=47;
  printf("a: %d\n",a);
  // 8 tabaninda deger atama
  a=047; 
  printf("a: %d\n",a);
  //16 tabaninda deger atama
  a=0x47;
  printf("a: %d\n",a);
  return 0;
}
    a: 47
    a: 39
    a: 71
#include <stdio.h>
int main(){
  int a;
  a=0x4b7af3;
  printf("onluk a: %d\n",a);
  //8 tabani: octal
  printf("sekizlik a: %o\n",a);
  //16 tabani:hexadecimal
  printf("onluk a: %x\n",a);
  printf("onluk a: %X\n",a);
  return 0;
}
    onluk a: 4946675
    sekizlik a: 22675363
    onluk a: 4b7af3
    onluk a: 4B7AF3

Taşma

#include <stdio.h>
int main(){
  unsigned char a;
  a=0xFE; // 2 tabaninda a=1111 1110
  printf("onluk a: %d\n",a);
  printf("onluk a: %X\n",a);
  a++; // 2 tabaninda a=1111 1111
  printf("onluk a: %d\n",a);
  printf("onluk a: %X\n",a);
  a++; // 2 tabaninda a=1 0000 0000 taşma var (overflow)
  printf("onluk a: %d\n",a);
  printf("onluk a: %X\n",a);
  return 0;
}
    onluk a: 254
    onluk a: FE
    onluk a: 255
    onluk a: FF
    onluk a: 0
    onluk a: 0
#include <stdio.h>
int main(){
  signed char a;
  a=0x7E; // 2 tabaninda a=0111 1110
  printf("onluk a: %d\n",a);
  printf("onluk a: %X\n",a);
  a++; // 2 tabaninda a=0111 1111
  printf("onluk a: %d\n",a);
  printf("onluk a: %X\n",a);
  a++; // 2 tabaninda a=1000 0000 taşma var (overflow)
  printf("onluk a: %d\n",a);
  a++; 
  printf("onluk a: %d\n",a);
  return 0;
}
    onluk a: 126
    onluk a: 7E
    onluk a: 127
    onluk a: 7F
    onluk a: -128
    onluk a: -127
#include <stdio.h>
int main(){
  unsigned int a;
  //işaretsiz (unsigned)değişkenlerin değeri için %u kullanilir.
  a=0xFFFFFFFE; // 2 tabaninda a=1111 1111 1111 1111 1111 1111 1111 1110
  printf("onluk a: %u\n",a);
  printf("onluk a: %X\n",a);
  a++; // 2 tabaninda a=1111 1111 1111 1111 1111 1111 1111 1111
  printf("onluk a: %u\n",a);
  printf("onluk a: %X\n",a);
  a++; // a=1 0000 0000 0000 0000 0000 0000 0000 0000  taşma var (overflow)
  printf("onluk a: %u\n",a);
  printf("onluk a: %X\n",a);
  a++; 
  printf("onluk a: %u\n",a);
  printf("onluk a: %X\n",a);
  return 0;
}
    onluk a: 4294967294
    onluk a: FFFFFFFE
    onluk a: 4294967295
    onluk a: FFFFFFFF
    onluk a: 0
    onluk a: 0
    onluk a: 1
    onluk a: 1
#include <stdio.h>
int main(){
  // ondalikli sabit sayılarin türü double dır
  // a+1.0 ifadesindeki 1.0 sayısının türü double dir.
  // bundan dolayı eğer a değişkenin türü float ise
  // 1.0 sayısının türünün de float olması için bazen
  // 1.0f şeklinde yazılabilir.
  return 0;
}

Karakter türü

#include <stdio.h>
int main(){
  char ch;
  ch='a';
  printf("ch: %d, ch:%c\n",ch,ch);
  ch='A';
  printf("ch: %d, ch:%c\n",ch,ch);
  ch='0';
  printf("ch: %d, ch:%c\n",ch,ch);
  ch=' ';
  printf("ch: %d, ch:%c\n",ch,ch);
  return 0;
}
    ch: 97, ch:a
    ch: 65, ch:A
    ch: 48, ch:0
    ch: 32, ch: 
#include <stdio.h>
int main(){
  //karakter kucuk ise buyuk harfe cevirme icin
  char ch;
  printf("bir karakter giriniz: ");
  scanf("%c",&ch);
  printf("ch: %d, ch:%c\n",ch,ch);
  if('a'<= ch && ch <= 'z')
    ch = ch - ('a'-'A');
  printf("ch: %d, ch:%c\n",ch,ch);
  return 0;
}
    bir karakter giriniz: 
     c

    ch: 99, ch:c
    ch: 67, ch:C
    bir karakter giriniz: 
     B

    ch: 66, ch:B
    ch: 66, ch:B
#include <stdio.h>
int main(){
  //kucuk harfler
  char ch;
  for(ch='a';ch<='z';ch++)
    printf("%c ",ch);
  return 0;
}
    a b c d e f g h i j k l m n o p q r s t u v w x y z 
#include <stdio.h>
int main(){
  //buyuk harfler
  char ch;
  for(ch='A';ch<='Z';ch++)
    printf("%c ",ch);
  return 0;
}
    A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
#include <stdio.h>
int main(){
  //karakter kucuk ise buyuk harfe cevirme icin
  char ch;
  for(ch=45;ch<=65;ch++)
    printf("%c ",ch);
  return 0;
}
    - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A 
#include <stdio.h>
int main(){
  char ch;
  int len=0;
  printf("bir metin giriniz: ");
  do{
    scanf("%c", &ch);
    len++;
  }while(ch!='\n');
    printf("metnin uzunlugu: %d",len);
  return 0;
}
    bir metin giriniz
     abc
    
    metnin uzunlugu: 4
#include <stdio.h>
int main(){
  char ch;
  int len=0;
  printf("bir metin giriniz: ");
  do{
    ch=getchar();
    len++;
  }while(ch!='\n');
    printf("metnin uzunlugu: %d",len-1);
  return 0;
}
    bir metin giriniz: 
     abcdef

    metnin uzunlugu: 6
#include <stdio.h>
int main(){
  char ch;
  int len=0;
  printf("bir metin giriniz: ");
  ch=getchar();
  while(ch!='\n'){
    len++;
    ch=getchar();
  }
    printf("metnin uzunlugu: %d",len);
  return 0;
}
    bir metin giriniz: 
     abc

    metnin uzunlugu: 3
#include <stdio.h>
int main(){
  int len=0;
  printf("bir metin giriniz: ");
  while(getchar() !='\n') 
    len++;
  printf("metnin uzunlugu: %d",len);
  return 0;
}
    bir metin giriniz: 
     abc

    metnin uzunlugu: 3

Tür dönüşümü

örnekler:

Bu tür çevrimlere implicit (kapalı) tür dönüşümü denir.

Kapalı çevrim aşağıdaki durumlarda olur:

Açık tür dönüşümü (explicit)

Değişkenin önüne parantez içinde dönüşmesini istediğimiz türü yazarız.

Sayının tam ve ondalıklı kısımlarının ayrılması.

#include <stdio.h>
int main(){
  float ondalikli_sayi, ondalik;
  printf("ondalikli bir sayi giriniz");
  scanf("%f",&ondalikli_sayi);
  printf("sayinin tam kismi: %d\n",(int)ondalikli_sayi);
  ondalik=ondalikli_sayi-(int)ondalikli_sayi;
  printf("sayinin ondalikli kismi: %f\n",ondalik);
  return 0;
}
    ondalikli bir sayi giriniz
     3.14

    sayinin tam kismi: 3
    sayinin ondalikli kismi: 0.140000

Hatalı program

#include <stdio.h>
int main(){
  // a/b sayisinin karsiligi
  int a, b;
  float sayi;
  printf("a/b seklinde bir sayi giriniz:");
  scanf("%d/%d",&a,&b);
  sayi=a/b;
  printf("girilen sayinin karsiligi: %f",sayi);
  return 0;
}
    a/b seklinde bir sayi giriniz:
     5/3

    girilen sayinin karsiligi: 1.000000
#include <stdio.h>
int main(){
  // a/b sayisinin karsiligi
  int a, b;
  float sayi;
  printf("a/b seklinde bir sayi giriniz:");
  scanf("%d/%d",&a,&b);
  sayi=(float)a/b;
  // sayi=(float)a/(float)b;
  // sayi=a/(float)b;
  printf("girilen sayinin karsiligi: %f",sayi);
  return 0;
}
    a/b seklinde bir sayi giriniz:
     5/3

    girilen sayinin karsiligi: 1.666667

Tür tanımlama

#include <stdio.h>
#define TL float
int main(){
  TL para_girisi, para_cikisi, mevcut_para;
  printf("mevcut para miktarini giriniz:");
  scanf("%f",&mevcut_para);
  printf("para giris miktarini giriniz:");
  scanf("%f",&para_girisi);
  printf("para cikis miktarini giriniz:");
  scanf("%f",&para_cikisi);
  printf("yeni para miktari: %.2f",mevcut_para-para_cikisi+para_girisi);
  return 0;
}
    mevcut para miktarini giriniz:
     5000

    para giris miktarini giriniz:
     2000

    para cikis miktarini giriniz:
     1500

    yeni para miktari: 5500.00
#include <stdio.h>
typedef  float TL;
int main(){
  TL para_girisi, para_cikisi, mevcut_para;
  printf("mevcut para miktarini giriniz:");
  scanf("%f",&mevcut_para);
  printf("para giris miktarini giriniz:");
  scanf("%f",&para_girisi);
  printf("para cikis miktarini giriniz:");
  scanf("%f",&para_cikisi);
  printf("yeni para miktari: %.2f",mevcut_para-para_cikisi+para_girisi);
  return 0;
}
    mevcut para miktarini giriniz:
     5000

    para giris miktarini giriniz:
     2000

    para cikis miktarini giriniz:
     1500

    yeni para miktari: 5500.00