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$
- 8, 10, 16 tabanında atama ve değerleri görme
#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
- Ondalıklı sayılardan pozitif yazılabilecek küçük sayılar ve en büyük sayılar:
float: 32 bit: $1.17 \times 10^{-38}$ - $3.34 \times 10^{38}$
double: 64 bit $2.22 \times 10^{-308}$ - $1.79 \times 10^{308}$
#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
- girilen bir ifadenin uzunluğu
#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
- getchar() fonskiyonu kullanımı
#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:
- Bir int ile bir short işleme girerse, short int’e çevrilir.
- Bir int ile float işleme girerse, int floate çevrilir.
- Bir double ile float işleme girerse float double çevrilir.
Bu tür çevrimlere implicit (kapalı) tür dönüşümü denir.
Kapalı çevrim aşağıdaki durumlarda olur:
- Aritmetik ve lojik işlemlerde operandlar aynı değilse.
- Atama durumunda atanan ve atanılanın türü farklı ise. Örnek int türündeki a değişkenine double türün atanması: a=3.13
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
- Kesirli sayının ondalık karşılığı
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",¶_girisi);
printf("para cikis miktarini giriniz:");
scanf("%f",¶_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",¶_girisi);
printf("para cikis miktarini giriniz:");
scanf("%f",¶_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