Nhập vào danh sách gồm n học sinh. Sau đó thực hiền các công việc sau.
1,Chuẩn hóa tên hoc sinh,(Xóa các khoảng trắng không cần thiết,Viết hoa các chữ cái đầu tiên)
2.Viết hàm tính điểm trung bình của 1 HS bất kì
#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
struct HocSinh
{
char Hoten[30];
float Toan,Li,Hoa;
};
struct NgaySinh
{
int Ngay,Thang,Nam;
};
//Khai báo nguyên mẫu hàm.
void Nhap(HocSinh x[],NgaySinh a[],int n);
float TinhDiemTrungBinh(HocSinh x[],int n);
bool KiemTraHS(HocSinh x[],int n,char Ten [30]);
void Diem_Ten(HocSinh x[],int n,char Ten[30]);
void Xoakhoangtrang(char *a);
void Chuanhoa(HocSinh x[],int n);
void NhapTenHS(char Ten[30]);
void Xuat(HocSinh x[],NgaySinh a[],int n);
//=============================================
void Nhap(HocSinh x[],NgaySinh a[],int n)
{
printf("\n-------------------------------");
for(int i=0;i<n;i++)
{
fflush(stdin);
printf("\nNhap ho ten: ");
gets(x[i].Hoten);
/*
do
{
printf("\nNhap ngay sinh: ");
scanf("%d",&a[i].Ngay);
}
while(a[i].Ngay<1 || a[i].Ngay>32);
do
{
printf("\nNhap thang sinh: ");
scanf("%d",&a[i].Thang);
}
while(a[i].Ngay<1 || a[i].Thang>12);
do
{
printf("\nNhap nam sinh: ");
scanf("%d",&a[i].Nam);
}
while(a[i].Nam<1950 || a[i].Nam>2050);
printf("\nNhap diem toan: ");
scanf("%f",&x[i].Toan);
printf("\nNhap diem hoa: ");
scanf("%f",&x[i].Hoa);
printf("\nNhap diem li: ");
scanf("%f",&x[i].Li);*/
printf("\n-------------------------------");
}
}
float TinhDiemTrungBinh(HocSinh x[],int n)
{
for(int i=0;i<n;i++)
{
return (x[i].Toan+x[i].Hoa+x[i].Li)*1.0/3;
}
}
bool KiemTraHS(HocSinh x[],int n,char Ten [30])
{
for(int i=0;i<n;i++)
{
if(strcmp(x[i].Hoten,Ten)==1)
{
return false;
}
}
return true;
}
void Diem_Ten(HocSinh x[],int n,char Ten[30])
{
do
{
NhapTenHS(Ten);
if(KiemTraHS(x,n,Ten)==false)
{
printf("\nHoc sinh vua nhap khong co trong danh sach!");
}
}
while(KiemTraHS(x,n,Ten)==false);
for(int i=0;i<n;i++)
{
if(strcmp(x[i].Hoten,Ten)==0)
{
printf("\nDiem TB cua HS %s: %.2f",x[i].Hoten,TinhDiemTrungBinh(x,n));
}
}
}
void Xoakhoangtrang(char *a)
{
int n=strlen(a);
while(a[0]==' ')
{
strcpy(&a[0],&a[1]);
}
while(a[n-1]==' ')
{
strcpy(&a[n-1],&a[n]);
}
for(int i=0;i<n;i++)
{
if(a[i]==' ' && a[i+1]==' ')
{
strcpy(&a[i],&a[i+1]);
i--;
}
}
}
void Chuanhoa(HocSinh x[],int n)
{
for(int i=0;i<n;i++)
{
Xoakhoangtrang(x[i].Hoten);
strlwr(x[i].Hoten);
x[i].Hoten[0]=x[i].Hoten[0]-32;
int m=strlen(x[i].Hoten);
for(int j=0;j<m;j++)
{
if(x[i].Hoten[j]==' ')
{
x[i].Hoten[j+1]=x[i].Hoten[j+1]-32;
}
}
}
}
void NhapTenHS(char Ten[30])
{
fflush(stdin);
printf("\nNhap ten HS: ");
gets(Ten);
Xoakhoangtrang(Ten);
strlwr(Ten);
Ten[0]=Ten[0]-32;
int n=strlen(Ten);
for(int i=0;i<n;i++)
{
if(Ten[i]==' ')
{
Ten[i+1]=Ten[i+1]-32;
}
}
}
void Xuat(HocSinh x[],NgaySinh a[],int n)
{
for(int i=0;i<n;i++)
{
printf("\n+Ten HS: %s",x[i].Hoten);
printf("\n+Ngay sinh: %d/%d/%d",a[i].Ngay,a[i].Thang,a[i].Nam);
printf("\n-------------------------------");
}
}
void main()
{
int n=2;
HocSinh x[100];
NgaySinh a[100];
Nhap(x,a,n);
Chuanhoa(x,n);
char Ten[30];
Diem_Ten(x,n,Ten);
//Xuat(x,a,n);
getch();
}
Dòng do while chỗ này có vẫn đề,nó không lập lại
void Diem_Ten(HocSinh x[],int n,char Ten[30])
{
do
{
NhapTenHS(Ten);
if(KiemTraHS(x,n,Ten)==false)
{
printf("\nHoc sinh vua nhap khong co trong danh sach!");
}
}
while(KiemTraHS(x,n,Ten)==false);
for(int i=0;i<n;i++)
{
if(strcmp(x[i].Hoten,Ten)==0)
{
printf("\nDiem TB cua HS %s: %.2f",x[i].Hoten,TinhDiemTrungBinh(x,n));
}
}
}
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?