SORU 1. Kullanıcıdan tamsayı tipinde 2 vektor değeri alınacak.(negatif ve pozitif sayılar olabilir) Girilen 2 vektör değeri toplanacak. Eğer toplam değeri 10 dan büyük veya 10 a eşitse toplam değerinden başlayıp 1 e kadar, 2 şer azaltılıp alt alta ekrana bu sayılar yazdırılacaktır. Ekrana alt alta azalan sayıların yazdırımı mutlaka while yapısı kullanılacaktır. Toplam değeri 10 dan küçükse sadece toplam değeri ekrana yazılacaktır. #include <stdio.h> int vektor_1,vektor_2,toplam; printf("birinci vektor kac birim: "); scanf("%d",&vektor_1); printf("ikinci vektor kac birim: "); scanf("%d",&vektor_2); toplam=vektor_1+vektor_2; if(toplam>=10) while(toplam>=1) printf("%d\n",toplam); toplam=toplam-2; printf("2 vektor toplami %d birim", toplam); SORU 2. Kullanıcıdan tamsayı tipinde 2 sayı alınacak. (negatif veya pozitif sayı girilebilir) Girilen 1. sayıdan 2. sayı çıkarılacaktır. Fark değeri eğer sıfırdan büyükse fark değerinin faktöriyeli hesaplanacak. Faktöriyel hesaplanırken mutlaka while yapısı kullanılacaktır. (Örnek:sayi1=7, sayi2=1 fark=6 fark>0 olduğundan 6!=720) 0 dan küçükse sadece fark değeri ekrana yazılacaktır.
#include <stdio.h> int sayi_1,sayi_2,fark,faktoriyel; printf("birinci sayiyi giriniz: "); scanf("%d",&sayi_1); printf("ikinci sayiyi giriniz: "); scanf("%d",&sayi_2); fark=sayi_1-sayi_2; faktoriyel=1; if(fark>0) while(fark>1) faktoriyel = faktoriyel * fark; fark--; printf("faktoriyel: %d",faktoriyel); printf("fark degeri: %d", fark); SORU 3. Kullanıcıdan x ve y tamsayı değerleri alınacak (negatif veya pozitif girebilir kullanıcı); x-y nin mutlak değeri hesaplanacak; Eğer x-y nin mutlak değeri 5 den büyükse 0 dan x e kadar olan sayılar toplanacak, toplam ekrana yazılacak. 0 dan x e kadar olan sayıların toplamı bulunurken while yapısı mutlaka kullanılacaktır. Aksi halde ekrana x-y nin mutlak değeri yazılacaktır. #include <stdio.h> #include <math.h> //abs() fonksiyonu kullanacaklar icin int x,y,toplam,fark; printf("x degeri: "); scanf("%d",&x); printf("y degeri: "); scanf("%d",&y); fark=x-y;
if(fark<0) fark=fark*(-1); //veya kısaca fark=abs(x-y); toplam=0; if(fark>5) if(x<0) while(x<=0) toplam=toplam+x; x++; printf("toplam: %d", toplam); while(x>=0) toplam=toplam+x; x--; printf("toplam: %d", toplam); printf("x-y mutlak degeri: %d", fark); SIK YAPILAN YANLIŞLAR 1. Degiken tanimlandiktan sonra deger atamasi yapmadan onu kullanmaya calismak negin; asagidaki kodda "sayi" isimli degiskene hic deger atanmadan dongu icinde kullanilmis. Bir degiskene deger atanmazsa o degiskenin degeri ne olur, bu konuyu arastirmanizi tavsiye ederim. int sayi; sonuc=1; printf("sayi1 giriniz:"); scanf("%d",&x); printf("sayi2 giriniz:"); scanf("%d",&y); sonuc=x-y; printf("fark degeri: %d\n",sonuc);
if(sonuc>0) while(sayi<=1) sayi=sayi-1; sonuc=sonuc*sayi; sayi++; printf("sonuc %d\n",sonuc); 2. Eger herhangi bir kosul operatoru veya dongu icinde birden fazla statement isletilecekse suslu parantez icinde olmali. Tek statement varsa gerek yok. if (0<c) while (i!=c) i=c*i ; i++ ; printf("sonuc : %d", i) ; printf("sonuc: %d", c) ; Ornegin yukridaki kodda if kismina ait bir cok statement var, suslu parantez gerekli. Asagidaki hali dogrusudur. if (0<c) while (i!=c) i=c*i ; i++ ; printf("sonuc : %d", i) ; printf("sonuc: %d", c) ; Tek stament icin ornek while (1) printf("basaracagim");
3. Operator onceliklerinde hala sıkıntı var. Ornegin asagidaki if icinde ne kasdedilmis? if (sayi1-sayi2>0) while (a!=0) fark_degeri=(sayi1-sayi2); carpim=carpim*fark_degeri; fark_degeri++; printf("\nfaktoriyel:%f",carpim); sayi2>0 ise sonuc dogru olup sayi1-1 e doner olay, sayi2>0 dogru degiise sonuc yanlis olup sayi1-0 e doner olay yoksa if ((sayi1-sayi2)>0) mi kasdedildi??? 4. break anahtar kelimesine rastlanirsa bulundugu blok icinden cikilir. O yuzden kullanirken dikkatli olmak lazim while(fark>0) carpim=carpim*sayac; sayac++; printf("faktoriyel %d dir", carpim); break; Yukaridaki kodda dongu zaten fark>0 oldugu muddetce aktif olacak, tersi durumda donguden cikilmis olacak. Ekstra dongu sonuna break koymaya gerek yok. Genelde sonsuz dongulerde istenilen olay gerceklesmesi durumunda donguden cikis icin falan kullanilir. Bir de switch-case deki kullanim amacini da unutmamak gerek. 5. Normal bir statement'i paranteze almaya gerek yok (fark = x - y ); yanlistir. 6. Sonsuz dongu kullanmak cok sık tercih edilmemelidir. Eger kullanilacaksa da bir sekilde sonsuz donguden cikilmalidir (break ile)