Öğrencilere ait numara, ad, vize ve final bilgilerini tutan bir tek bağlı doğrusal liste uygulaması için:
o Kayıt ekleme silme
o Öğrencileri başarı notlarını hesaplayarak (Vize %40, Final %60) listeleme
o Sınıfın en yüksek başarı notuna sahip öğrenci bilgilerini listeleme
o Sınıfın başarı notu ortalamasını hesaplama
#include <stdio.h>
#include <stdlib.h>
struct ogrenci{
int no;
char adi[40];
int vize,final;
struct ogrenci *sonraki;
};
typedef struct ogrenci dugum;
dugum *head, *yenidugum, *oncekidugum,*enbasarili;
void listeOlustur()
{
int n,k;
printf("kac elemanli liste olusturacaksin?\n");
scanf("%d",&n);
for(k=0; k<n;k++)
{
if(k==0)
{
yenidugum=(dugum*)malloc(sizeof(dugum));
head=yenidugum;
}
else
{
yenidugum->sonraki=(dugum*)malloc(sizeof(dugum));
yenidugum=yenidugum->sonraki;
}
printf("ogrenci no:\n");
scanf("%d",¥idugum->no);
printf("ogrenci Adi:\n");
scanf("%s",yenidugum->adi);
printf("ogrenci vize:\n");
scanf("%d",¥idugum->vize);
printf("ogrenci final:\n");
scanf("%d",¥idugum->final);
}
yenidugum->sonraki=NULL;
}
void ogrenciListele()
{
double donemNotu=0;
dugum *p;
p=head;
while(p!=NULL)
{
printf("\n************\n");
printf("ogrenci no:%d\t",p->no);
printf("ogrenci adi:%s\t",p->adi);
printf("ogrenci vize:%d\t",p->vize);
printf("ogrenci final:%d\t",p->final);
donemNotu=p->vize*0.4+p->final*0.6;
printf("donem notu:%.2f\t",donemNotu);
printf("\n**************\n");
p=p->sonraki;
}
}
void ogrenciEkle()
{
int kayitNo;
dugum *p,*q;
yenidugum=(dugum*)malloc(sizeof(dugum));
printf("ogrenci no:\n");
scanf("%d",¥idugum->no);
printf("ogrenci Adi:\n");
scanf("%s",yenidugum->adi);
printf("ogrenci vize:\n");
scanf("%d",¥idugum->vize);
printf("ogrenci final:\n");
scanf("%d",¥idugum->final);
printf("hangi kayittan önce eklemek istiyorsunuz\n");
printf("liste sonuna eklemek icin 0 giriniz");
scanf("%d",&kayitNo);
p=head;
if(p->no==kayitNo)//basa ekle
{
yenidugum->sonraki=p;
head=yenidugum;
}
else
{
while(p->sonraki!=NULL)
{
q=p;
p=p->sonraki;
if(p->no==kayitNo)//araya ekleme
{
q->sonraki=yenidugum;
yenidugum->sonraki=p;
}
else if(p->sonraki==NULL)
{
p->sonraki=yenidugum;
yenidugum->sonraki=NULL;
}
}
}
}
void OgrenciSil()
{
int kayitNo;
dugum *p,*q;
printf("silmek istediginiz ogrenci no gir\n");
scanf("%d",&kayitNo);
p=head;
if(p->no==kayitNo)//bastakini sil
{
head=p->sonraki;
free(p);
}
else
{
while(p->sonraki!=NULL)
{
if(p->no==kayitNo)
break;
else
{
q=p;
p=p->sonraki;
}
}
if(p->no==kayitNo)//aradan silme
{
q->sonraki=p->sonraki;
free(p);
}
else if(p->sonraki==NULL)
{
printf("silinecek ogrenci no yok\n");
}
}
}
double basariNotuHesapla(int vize,int final)
{
return (0.4*vize)+(0.6*final);
}
void EnBasariliOgrenci()
{
double basariNotu=0;
dugum *p;
p=head;
enbasarili=head;
while(p->sonraki!=NULL)
{
p=p->sonraki;
if(basariNotuHesapla(p->vize,p->final)>basariNotuHesapla(enbasarili->vize,enbasarili->final))
enbasarili=p;
}
printf("en basarili ogrenci :\n");
printf("NO:%d -ADI:%s- BASARI NOTU:%.2f\n",enbasarili->no,enbasarili->adi,basariNotuHesapla(enbasarili->vize,enbasarili->final));
}
void sinifBasariortalamasi()
{
double basariNotuOrtalamasi=0;
double toplam=0;
int sayac=0;
dugum *p;
p=head;
if(p==NULL)
{
printf("listede kayit yok!!!");
}
else
{
do
{
toplam+=basariNotuHesapla(p->vize,p->final);
p=p->sonraki;
sayac++;
}
while(p!=NULL);
{
basariNotuOrtalamasi=toplam/sayac;
printf("basari notu ortalamasi: %.2f",basariNotuOrtalamasi);
}
}
}
int main()
{
int secim=0;
printf("1-liste olustur\n"
"2-yeni kayit ekle\n"
"3-kayit sil\n"
"4-en yuksek basari notu\n"
"5-sinif ortalamasi\n");
while(1)
{
printf("secim yap[1-5]:");
scanf("%d",&secim);
switch(secim)
{
case 1:listeOlustur();
ogrenciListele();
break;
case 2:ogrenciEkle();
ogrenciListele();
break;
case 3:OgrenciSil();
ogrenciListele();
break;
case 4:EnBasariliOgrenci();
// ogrenciListele();
break;
case 5:sinifBasariortalamasi();
ogrenciListele();
break;
}
}
}
o Kayıt ekleme silme
o Öğrencileri başarı notlarını hesaplayarak (Vize %40, Final %60) listeleme
o Sınıfın en yüksek başarı notuna sahip öğrenci bilgilerini listeleme
o Sınıfın başarı notu ortalamasını hesaplama
#include <stdio.h>
#include <stdlib.h>
struct ogrenci{
int no;
char adi[40];
int vize,final;
struct ogrenci *sonraki;
};
typedef struct ogrenci dugum;
dugum *head, *yenidugum, *oncekidugum,*enbasarili;
void listeOlustur()
{
int n,k;
printf("kac elemanli liste olusturacaksin?\n");
scanf("%d",&n);
for(k=0; k<n;k++)
{
if(k==0)
{
yenidugum=(dugum*)malloc(sizeof(dugum));
head=yenidugum;
}
else
{
yenidugum->sonraki=(dugum*)malloc(sizeof(dugum));
yenidugum=yenidugum->sonraki;
}
printf("ogrenci no:\n");
scanf("%d",¥idugum->no);
printf("ogrenci Adi:\n");
scanf("%s",yenidugum->adi);
printf("ogrenci vize:\n");
scanf("%d",¥idugum->vize);
printf("ogrenci final:\n");
scanf("%d",¥idugum->final);
}
yenidugum->sonraki=NULL;
}
void ogrenciListele()
{
double donemNotu=0;
dugum *p;
p=head;
while(p!=NULL)
{
printf("\n************\n");
printf("ogrenci no:%d\t",p->no);
printf("ogrenci adi:%s\t",p->adi);
printf("ogrenci vize:%d\t",p->vize);
printf("ogrenci final:%d\t",p->final);
donemNotu=p->vize*0.4+p->final*0.6;
printf("donem notu:%.2f\t",donemNotu);
printf("\n**************\n");
p=p->sonraki;
}
}
void ogrenciEkle()
{
int kayitNo;
dugum *p,*q;
yenidugum=(dugum*)malloc(sizeof(dugum));
printf("ogrenci no:\n");
scanf("%d",¥idugum->no);
printf("ogrenci Adi:\n");
scanf("%s",yenidugum->adi);
printf("ogrenci vize:\n");
scanf("%d",¥idugum->vize);
printf("ogrenci final:\n");
scanf("%d",¥idugum->final);
printf("hangi kayittan önce eklemek istiyorsunuz\n");
printf("liste sonuna eklemek icin 0 giriniz");
scanf("%d",&kayitNo);
p=head;
if(p->no==kayitNo)//basa ekle
{
yenidugum->sonraki=p;
head=yenidugum;
}
else
{
while(p->sonraki!=NULL)
{
q=p;
p=p->sonraki;
if(p->no==kayitNo)//araya ekleme
{
q->sonraki=yenidugum;
yenidugum->sonraki=p;
}
else if(p->sonraki==NULL)
{
p->sonraki=yenidugum;
yenidugum->sonraki=NULL;
}
}
}
}
void OgrenciSil()
{
int kayitNo;
dugum *p,*q;
printf("silmek istediginiz ogrenci no gir\n");
scanf("%d",&kayitNo);
p=head;
if(p->no==kayitNo)//bastakini sil
{
head=p->sonraki;
free(p);
}
else
{
while(p->sonraki!=NULL)
{
if(p->no==kayitNo)
break;
else
{
q=p;
p=p->sonraki;
}
}
if(p->no==kayitNo)//aradan silme
{
q->sonraki=p->sonraki;
free(p);
}
else if(p->sonraki==NULL)
{
printf("silinecek ogrenci no yok\n");
}
}
}
double basariNotuHesapla(int vize,int final)
{
return (0.4*vize)+(0.6*final);
}
void EnBasariliOgrenci()
{
double basariNotu=0;
dugum *p;
p=head;
enbasarili=head;
while(p->sonraki!=NULL)
{
p=p->sonraki;
if(basariNotuHesapla(p->vize,p->final)>basariNotuHesapla(enbasarili->vize,enbasarili->final))
enbasarili=p;
}
printf("en basarili ogrenci :\n");
printf("NO:%d -ADI:%s- BASARI NOTU:%.2f\n",enbasarili->no,enbasarili->adi,basariNotuHesapla(enbasarili->vize,enbasarili->final));
}
void sinifBasariortalamasi()
{
double basariNotuOrtalamasi=0;
double toplam=0;
int sayac=0;
dugum *p;
p=head;
if(p==NULL)
{
printf("listede kayit yok!!!");
}
else
{
do
{
toplam+=basariNotuHesapla(p->vize,p->final);
p=p->sonraki;
sayac++;
}
while(p!=NULL);
{
basariNotuOrtalamasi=toplam/sayac;
printf("basari notu ortalamasi: %.2f",basariNotuOrtalamasi);
}
}
}
int main()
{
int secim=0;
printf("1-liste olustur\n"
"2-yeni kayit ekle\n"
"3-kayit sil\n"
"4-en yuksek basari notu\n"
"5-sinif ortalamasi\n");
while(1)
{
printf("secim yap[1-5]:");
scanf("%d",&secim);
switch(secim)
{
case 1:listeOlustur();
ogrenciListele();
break;
case 2:ogrenciEkle();
ogrenciListele();
break;
case 3:OgrenciSil();
ogrenciListele();
break;
case 4:EnBasariliOgrenci();
// ogrenciListele();
break;
case 5:sinifBasariortalamasi();
ogrenciListele();
break;
}
}
}
Yorumlar
Yorum Gönder