4.Hafta BİL 105-02-06 Soruların Çözümleri SORU1. Kullanıcının girdiği bir sayının tek mi, yoksa çift mi olduğunu bulan bir C programı yazınız. Yazdığınız programın algoritmasını yazınız ve akış çizeneğini çiziniz. #include <stdio.h> main() { int n,a,b,x,z ; printf(" \n\ta ve b tamsayilarini giriniz : "); scanf("%d %d" , &a, &b); z=(a>b) ? a : b ; printf("%d\n",z); n=z; (((n/2)*2) == n ) ? printf("%d cift bir sayidir.\n") : printf("%d tek bir sayidir.\n"); x = n%3 ; x = (x < 12 ) ? x : -1 ; printf("%d\n",x) ; } 1. SORU2. a,b,c katsayılarını kullanıcının girdiği ikinci dereceden bir denklemin köklerini bulan bir C programını ve algoritmasını yazınız. Programın akış çizeneğini iziniz. A) Katsayıların tamsayı olması durumu: #include <stdio.h> #include <math.h> main() { int a,b,c; float x1; float x2; float diskriminant; printf(" \n Denklemin a,b,c tamsayi katsayilarini giriniz : \n"); scanf("%d%d%d" , &a,&b,&c); printf("Denklem %dx^2 + %dx +%d = 0 dir \n" , a,b,c); diskriminant = b*b -4*a*c; if (diskriminant < 0) printf("Denklemin gercel kokleri yoktur. \n"); else { x1 = (-b + sqrt(diskriminant) ) / (2*a); x2 = (-b - sqrt(diskriminant) ) / (2*a); printf("Kokler: \n"); printf("x1 = %f ve x2 = %f dir. \n" , x1,x2); } return 0; } SORU2. Katsayıların float olması durumu: #include <stdio.h> #include <math.h> int main() { float a,b,c,x1,x2,d,dsq; printf("ax^2 + bx + c = 0 "); printf("\n a,b,c katsayılarini virgulle ayirark giriniz : \n"); scanf("%f,%f,%f",&a,&b,&c); d = b*b-(4*a*c); if(d>=0) { dsq=sqrt(d); x1 = (-b+dsq)/(2*a); x2 = (-b-(dsq))/(2*a); printf("\nRoot 1 : %f\nRoot 2 : %f",x1,x2); } if(d<0) { d = ((4*a*c)-pow(b,2))/(2*a); printf("\nRoot 1 : %f+%fi",((-b)/(2*a)),d); printf("\nRoot 2 : %f-%fi",((-b)/(2*a)),d); return 0; } } SORU3. Kullanıcının gireceği iki tam sayının maksimumunu bulan bir C programını ve algoritmasını yazınız. Akış çizeneğini çiziniz. Çözüm 1: #include<stdio.h> #include<math.h> int main() { int a,b,max,min; printf("İki tamsayı giriniz. "); scanf("%d%d",&a,&b); (a > b) ? max = a : max = b ; printf("Grdiğiniz sayıların maksimumu %d dir \n" , max); return 0; } Çözüm 2: #include <stdio.h> #include <math.h> main() { int n ; printf(" \n\t Bir tamsayi giriniz : "); scanf("%d" , &n); (((n/2)*2) == n ) ? printf("%d cift bir sayidir.\n" ,n) : printf("%d tek bir sayidir.\n",n); } Çözüm 2: Fonksiyon ile Çözüm even(n) int n; { if (n%2) return 0; else return 1; } 1. SORU4. Aşağıdaki programı çözümleyiniz ve çıktılarını yazınız. #include <stdio.h> int main() { int x = 11,y = 11,z = 11; char a = 40,b = 40,c = 40; float r = 12.987,s = 12.987,t = 12.987; if (x == y) z = -13; if (x > z) a = 'A'; if (!(x > z)) a = 'B'; if (b <= c) r = 0.0; if (r != s) t = c/2; printf("z = %i\n ", z); printf("a = %i\n ", a); printf("a = %i\n ", a); printf("r = %f\n ", r); printf("t = %f\n ", t); return 0; } if (x == y) z = -13; if (x > z) a = 'A'; if (!(x > z)) a = 'B'; if (b <= c) r = 0.0; if (r != s) t = c/2; Çıktılar: z = -13 a = 65 a = 65 r = 0.000000 t = 20.000000 /* bu satir z = -13 konumunu yapar*/ /* a = 65 yapar */ /* bu satir bir sey degistirmez */ /* r = 0.0 yapar */ /* t = 20 yapar */ 1. SORU 5 Aşağıdaki programı çözümleyiniz ve çıktılarını yazınız. #include <stdio.h> int main() { int x = 11,y = 11,z = 11; char a = 40,b = 40,c = 40; float r = 12.987,s = 12.987,t = 12.987; if (x = (r != s)) z = 1000; printf("z = %i\n ", z); if (x = y) z = 222; printf("z = %i\n ", z); if (x != 0) z = 333; printf("z = %i\n ", z); if (x) z = 444; printf("z = %i\n ", z); return 0; } if (x = (r != s)) z = 1000; printf("z = %i\n ", z); if (x = y) z = 222; printf("z = %i\n ", z); if (x != 0) z = 333; printf("z = %i\n ", z); if (x) z = 444; printf("z = %i\n ", z); Çıktılar: z = 11 z = 222 z = 333 z = 444 /* x = positif bir sayi ve z = 1000 yapar */ /* x = y, ve z = 222 yapar */ /* z = 333 yapar */ /* z = 444 yapar */ 1. SORU 6. Aşağıdaki programı çözümleyiniz ve çıktılarını yazınız. #include <stdio.h> İnt main() { int x = 11,y = 11,z = 11; char a = 40,b = 40,c = 40; float r = 12.987,s = 12.987,t = 12.987; x = y = z = 77; if ((x == y) && (x == 77)) z = 33; printf("z = %i\n ", z); if ((x > y) || (z > 12)) z = 22; printf("z = %i\n ", z); if (x && y && z) z = 11; printf("z = %i\n ", z); if ((x = 1) && (y = 2) && (z = 3)) r = 12.00; printf("z = %i\n ", z); if ((x == 2) && (y = 3) && (z = 4)) r = 14.56; printf("z = %i\n ", z); return 0; } x = y = z = 77; if ((x == y) && (x == 77)) z = 33; /* z = 33 yapar */ printf("z = %i\n ", z); if ((x > y) || (z > 12)) z = 22; /* z = 22 yapar */ printf("z = %i\n ", z); if (x && y && z) z = 11; /* z = 11 yapar */ printf("z = %i\n ", z); if ((x = 1) && (y = 2) && (z = 3)) r = 12.00; /* bu satir x = 1, y = 2, z = 3, r = 12.00 yapar */ printf("z = %i\n ", z); if ((x == 2) && (y = 3) && (z = 4)) r = 14.56; printf("z = %i\n ", z); Çıktılar: z = 33 z = 22 z = 11 z=3 /* bu satir hiçbir şey degistirmez */ SORU 7. Aşağıdaki programı çözümleyiniz ve çıktılarını yazınız. #include <stdio.h> int main() { int x = 11,y = 11,z = 11; char a = 40,b = 40,c = 40; float r = 12.987,s = 12.987,t = 12.987; if (x == x); z = 27.345; printf("z = %i\n ", z); if (x != x) z = 27.345; printf("z = %i\n ", z); if (x = 0) z = 27.345; printf("z = %i\n ", z); return 0; } if (x == x); z = 27.345; printf("z = %i\n ", z); if (x != x) z = 27.345; printf("z = %i\n ", z); if (x = 0) z = 27.345; printf("z = %i\n ", z); Çıktılar: z = 27 z = 27 z = 27 /* z her zaman degisir */ /* hicbir sey degismez */ /* x = 0 yapar, ama z 'yi degistirmez */ 8. Kullanıcının gireceği üç float sayının maksimumunu bulan bir C programı ve algoritmasını yazınız. Çözüm 1. Yalnız if kullanarak #include <stdio.h> int main() { float a, b, c; printf("3 sayi giriniz: "); scanf("%f %f %f", &a, &b, &c); if(a>=b && a>=c) printf("Girilen 3 sayinin en buyugu = %.2f", a); if(b>=a && b>=c) printf("Girilen 3 sayinin en buyugu = %.2f", b); if(c>=a && c>=b) printf("Girilen 3 sayinin en buyugu = %.2f", c); return 0; } Çözüm 2. if-else kullanarak #include <stdio.h> int main() { float a, b, c; printf("Enter three numbers: "); scanf("%f %f %f", &a, &b, &c); if (a>=b) { if(a>=c) printf("Girilen 3 sayinin en buyugu = %.2f",a); else printf("Girilen 3 sayinin en buyugu = %.2f",c); } else { if(b>=c) printf("Girilen 3 sayinin en buyugu = %.2f",b); else printf("Girilen 3 sayinin en buyugu = %.2f",c); } return 0; } Çözüm 3. if-else kullanarak #include <stdio.h> int main() { float a, b, c; printf("3 float sayi giriniz: "); scanf("%f %f %f", &a, &b, &c); if(a>=b && a>=c) printf("Girilen 3 sayinin en buyugu = %.2f", a); else if(b>=a && b>=c) printf("Girilen 3 sayinin en buyugu = %.2f", b); else printf("Girilen 3 sayinin en buyugu = %.2f", c); return 0; } 9. Kullanıcının gireceği iki tamsayının en büyük ortak bölenini (ebob) bulan bir C programı yazınız. Çözüm 1: #include <stdio.h> int main() { int num1, num2, i, ebob; printf("İki tamsayı giriniz: "); scanf("%d %d", &num1, &num2); for(i=1; i<=num1 || i<=num2; ++i) { if(num1%i==0 && num2%i==0) /* i 'nin bir çarpan olup olmadığı denetleniyor */ ebob=i; } printf("%d ve %d nin ebob = %d", num1, num2, ebob); return 0; } Çözüm 2: #include <stdio.h> int main() { int num1, num2, min,i; printf("İki tam sayı giriniz: "); scanf("%d %d", &num1, &num2); min=(num1>num2)?num2:num1; /* girilen sayıların minimumuna min denildi */ for(i=min; i>=1; --i) { if(num1%i==0 && num2%i==0) { printf("%d ve %d nin ebob = %d", num1, num2, i); break; } } return 0; } 10. ax + by = m ve cx + dy = n doğrusal denklemlerinin tek çözümü olası için a*d-b*c != 0 olmalıdır. Bu durumda çözüm x = (m * d) - (b * n)) / ((a * d) - (c * b); y = ((n * a) - (m * c)) / ((a * d) - (c * b)); dir. Değilse sonsuz çözüm vardır. Katsayılarını kullanıcının gireceği bir dnklem sisteminin çözümünü bulan bir C programı yazınız. #include<stdio.h> int main() { int a,b,c,d,m,n; float x, y printf("Katsayi giniz : a \n"); scanf("%d",&a); printf("Katsayi giniz : b \n"); scanf("%d",&b); printf("Katsayi giniz : c \n"); scanf("%d",&c); printf("Katsayi giniz : \n"); scanf("%d",&d); printf("Katsayi giniz : m \n"); scanf("%d",&m); printf("Katsayi giniz : n \n"); scanf("%d",&n); if((a*d)-(c*b) == 0) printf("\nSonsuz cozum var \n"); else { x = (float)((m * d) - (b * n)) / ((a * d) - (c * b)); printf("\nx = %f ",x); y = (float)((n * a) - (m * c)) / ((a * d) - (c * b)); printf("\ny = %f ",y); } return 0; }