Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 15 kết quả

Đề tài: Bài tập về kiểu cấu trúc.

  1. #1
    No Avatar
    amikato Khách

    Angry Bài tập về kiểu cấu trúc.

    Đây là code em viết:
    Code:
     #include<stdio.h>
      #include<conio.h>
      #include<string.h>
       struct NgayThang      // khai bao bien cau truc ngay thang nam
    {
        int ngay,thang;
        unsigned int nam;
    };
     
       struct Sinhvien
      {
    	char HoTen[30];
    	NgayThang ngaysinh;
    	float TrungBinh;
    	char XepLoai [10];
      };
      void nhap(Sinhvien sv[10],int n)
      {
    	
    
    	//Nhap du lieu cho sinh vien
    	for(int i=0;i<n;i++)
    	{
    		printf("\n Nhap thong tin cho sinh vien thu %d\n",i+1);
    		printf("\n Ho ten sinh vien:");
    		fflush(stdin);
    		gets(sv[i].HoTen);
    		printf("\n Diem TB:");
    		scanf("%f",&sv[i].TrungBinh);
    		printf("\n Nhap ngay thang nam sinh:");
    		scanf("%d",&sv[i].ngaysinh.ngay);
    		scanf("%d",&sv[i].ngaysinh.thang);
    		scanf("%d",&sv[i].ngaysinh.nam);
    		if(sv[i].TrungBinh<7)
    		  printf("\n Xep loai hoc sinh:Trung binh");
    			else if(sv[i].TrungBinh>=7&&sv[i].TrungBinh<8)
    				printf("\n Xep loai hoc sinh:Kha");
    				else if(sv[i].TrungBinh>=8)
    					printf("\n Xep loai hoc sinh:Gioi");
    
    
    	}
    }	
    	 // In danh sach sinh vien
    void in(Sinhvien sv[10],int n)
    {
    	 printf("\n\n Danh sach sinh vien:\n");
    	 for(int i=0;i<n;i++)
    	 {
    		 printf("\n Ho ten hoc sinh:%s",sv[i].HoTen);
                     printf("\n Diem TB:%.2f",sv[i].TrungBinh);
                     printf("\n Ngay sinh:%d/%d/%d",sv[i].ngaysinh.ngay,sv[i].ngaysinh.thang,sv[i].ngaysinh.nam);
    		 printf("\n Xep loai:%s",sv[i].XepLoai);
    	 }
    }
        // In ra HoTen, ngay sinh cua nhung sinh vien loai Gioi, Kha hoac Trung binh theo yeu cau 
    void yeucau(Sinhvien sv[10],int n)
    {
        char xl[10];
        printf("\n Nhap xep loai cua sinh vien muon tim: ");
        scanf("%s",&xl);
        for (int i=0;i<n;i++)
        {
        
            if ( strcmpi(xl,sv[i].XepLoai)==0) 
            {
                printf("\n Ho ten:%s",sv[i].HoTen);
                printf("\n Ngay sinh:%d/%d/%d",sv[i].ngaysinh.ngay,sv[i].ngaysinh.thang,sv[i].ngaysinh.nam);
            }
        }    
    }
        //Nhap vao ten 1 sinh vien, hay in ra ngay sinh và xep loai hoc luc 
    void timkiem(Sinhvien sv[10],int n)	 
    {
        char tensv[30];
        printf("\n Nhap ten sinh vien: ");
        fflush(stdin);
        gets(tensv);
        for (int i=0;i<n;i++)
        {
    		  if ( strcmpi (tensv,sv[i].HoTen)==0)
                {
    		printf("\n  Sinh vien %s co:",sv[i].HoTen);
                    printf("\n Ngay sinh:%d/%d/%d",sv[i].ngaysinh.ngay,sv[i].ngaysinh.thang,sv[i].ngaysinh.nam);
                    printf("\n Xep loai:%s",sv[i].XepLoai);
    	   }
    
        }
    }    
    int main()
    {
            struct Sinhvien sv[10];
    	int n;
    	printf("\n Nhap vao so sinh vien:");
    	scanf("%d",&n);
    	nhap(sv,n);
    	in(sv,n);
    	yeucau(sv,n);
    	timkiem(sv,n);
    	getch();
    
    }
    Bài của em còn nhiều lỗi mong các anh chị chỉ giúp.Thank you
    Đã được chỉnh sửa lần cuối bởi amikato : 18-01-2009 lúc 08:32 PM.

  2. #2
    Ngày gia nhập
    04 2008
    Bài viết
    336

    scanf("%f",&sv[i].TrungBinh);
    cái này sai nặng, scanf ko cho phép gán trực tiếp dữ liệu khác int vào các thành phần của struct.
    Giải pháp: gán vào biến tạm nào đó rồi gán cho sv[i].Trungbinh
    Đã được chỉnh sửa lần cuối bởi 6220119 : 11-01-2009 lúc 06:28 PM.
    code ra gió bão

  3. #3
    No Avatar
    amikato Khách

    Cảm ơn anh 6220119,nhưng còn chỗ xếp loại em không in ra được.

  4. #4
    No Avatar
    ngocbig Khách

    Hi! amikato

    Mình cũng xem qua code và specification của cậu rồi. Nếu là mình thì sẽ làm theo cách này. Cậu thử xem qua nhé.

    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<string.h>
    4. #include <stdlib.h>
    5.  
    6. typedef struct tagNgayThang
    7. {
    8.     int Ngay, Thang,Nam;
    9. }NgayThang,*PNgayThang;
    10. typedef struct tagSinhVien
    11. {
    12.     char HoTen[50];
    13.     NgayThang NgaySinh;
    14.     float TrungBinh;
    15.     char XepLoai[30];
    16. }SinhVien,*PSinhVien;
    17. void NhapThongTin(PSinhVien pSv)
    18. {
    19.     int ngay=0,thang=0,nam=0;
    20.     float tb=0.0;
    21.     printf("Nhap thong tin sinh vien:\n");
    22.     printf("Ho ten:");
    23.     fflush(stdin);
    24.     gets(pSv->HoTen);
    25.     printf("Ngay sinh (VD: 31 12 1984):");
    26.     scanf("%d%d%d",&ngay,&thang,&nam);
    27.     pSv->NgaySinh.Ngay= ngay;
    28.     pSv->NgaySinh.Thang= thang;
    29.     pSv->NgaySinh.Nam = nam;
    30.     printf("Diem trung binh:");
    31.     scanf("%f",&tb);
    32.     pSv->TrungBinh=tb;
    33. }
    34.  
    35. void XepLoaiSV(PSinhVien pSv)
    36. {
    37.     char xepLoai[30];
    38.     if(pSv->TrungBinh>=8)
    39.         strcpy(xepLoai,"Gioi");
    40.     else if(pSv->TrungBinh==7)
    41.         strcpy(xepLoai,"Kha");
    42.     else
    43.         strcpy(xepLoai,"Trung binh");
    44.     strcpy(pSv->XepLoai,xepLoai);
    45. }
    46. void InSVTheoLoai(PSinhVien ds, int n, char* loai)
    47. {
    48.     printf("\n===== Danh sach sinh vien theo xep loai =====\n");
    49.     int i;
    50.     for (i=0;i<n;i++)
    51.     {
    52.         if(strcmp(ds[i].XepLoai,loai)==0)
    53.         {
    54.             printf("Ho ten:%s\n",ds[i].HoTen);
    55.             printf("Ngay sinh:%d/%d/%d\n",ds[i].NgaySinh.Ngay,ds[i].NgaySinh.Thang,ds[i].NgaySinh.Nam);
    56.             printf("Hoc luc:%s\n",ds[i].XepLoai);
    57.         }
    58.     }
    59.     printf("=============================================\n\n");
    60. }
    61. void InSVTheoTen(PSinhVien ds, int n,char* hoTen)
    62. {
    63.     printf("======= Danh sach sinh vien theo ten =======\n");
    64.     int i;
    65.     for (i=0;i<n;i++)
    66.     {
    67.         if (strcmp(ds[i].HoTen,hoTen)==0)
    68.         {
    69.             printf("Ho ten:%s\n",ds[i].HoTen);
    70.             printf("Ngay sinh:%d/%d/%d\n",ds[i].NgaySinh.Ngay,ds[i].NgaySinh.Thang,ds[i].NgaySinh.Nam);
    71.             printf("Hoc luc:%s\n",ds[i].XepLoai);
    72.         }
    73.     }
    74.     printf("=============================================\n");
    75. }
    76. int main()
    77. {
    78.     int i=0,n=0;
    79.     printf("So sinh vien can nhap thong tin:");
    80.     fflush(stdin);
    81.     scanf("%d",&n);
    82.     PSinhVien dsSV = (PSinhVien)malloc(n*sizeof(SinhVien));
    83.     for (i=0;i<n;i++)
    84.     {
    85.         NhapThongTin(&dsSV[i]);
    86.         XepLoaiSV(&dsSV[i]);
    87.     }
    88.     char loai[30],ten[50];
    89.  
    90.     printf("In danh sach sinh vien theo loai(Gioi, Kha, Trung binh):");
    91.     scanf("%s",loai);
    92.     InSVTheoLoai(dsSV,n,loai);
    93.     printf("In sinh vien theo ten:");
    94.     fflush(stdin);
    95.     gets(ten);
    96.     InSVTheoTen(dsSV,n,ten);
    97.     getch();
    98.     free(dsSV);
    99.     return 0;
    100. }
    Đã được chỉnh sửa lần cuối bởi ngocbig : 11-01-2009 lúc 08:51 PM.

  5. #5
    Ngày gia nhập
    02 2008
    Bài viết
    15

    Trích dẫn Nguyên bản được gửi bởi 6220119 Xem bài viết
    cái này sai nặng, scanf ko cho phép gán trực tiếp dữ liệu khác int vào các thành phần của struct.
    Giải pháp: gán vào biến tạm nào đó rồi gán cho sv[i].Trungbinh
    ủa vậy hử sao mình chưa thấy cái này nha !!! từ trước đến nay mình vẫn scanf đều mà sao trình biên dịch ko báo lỗi nhỉ ???

    ví dụ 1 cái struct vớ vẩn sau
    PHP Code:
    #include<stdio.h>
    #include<conio.h>


    struct a {
           
    float as;
           };
    int main(){
               
    struct a anh;
               
    float d;
               
    scanf("%f",&anh.as);         
               
    printf("%f",anh.as);
    getch();
    return 
    0;

    compiler ngon mà chạy ko có lỗi gì hết
    I dlatego lubię mówić z tobą !!!

  6. #6
    No Avatar
    ngocbig Khách

    Mặc định Bài tập về kiểu cấu trúc.

    Bạn vẫn có thể dùng như thế nhưng nó không an toàn bằng việc "scan" vào biến tạm.

  7. #7
    Ngày gia nhập
    02 2008
    Nơi ở
    AYS 107
    Bài viết
    41

    Trích dẫn Nguyên bản được gửi bởi ngocbig Xem bài viết
    Bạn vẫn có thể dùng như thế nhưng nó không an toàn bằng việc "scan" vào biến tạm.
    Không an toàn ở chỗ nào??
    I don't wanna waste another day

  8. #8
    No Avatar
    ngocbig Khách

    "...Theo kinh nghiệm, nếu áp dụng trực tiếp hàm scanf() lên trên các thành phần cấu trúc thì nhiều trường hợp sẽ xảy ra hiện tượng treo máy. Biện pháp được đề nghị sử dụng là sử dụng biến trung gian..." (trang 125)

    Nhập môn Lập Trình NGÔN NGỮ C của Khoa CNTT - Trường ĐH Bách Khoa Hà Nội.
    NXB KH&KT 2003.

  9. #9
    Ngày gia nhập
    11 2008
    Nơi ở
    vngameday.com
    Bài viết
    62

    bạn ngocbich ko an toàn chỗ nào mình ko hiểu ý bạn, tớ thấy dùng con trỏ mới là ko an toàn ! tuy nó có nhiều ưu điểm. hì

    À thì ra là vậy, sorry !
    vngameday.com - khi niềm đam mê luôn rực cháy. Rất mong nhận được sự đóng góp từ các bạn...

  10. #10
    No Avatar
    amikato Khách

    Cảm ơn chị Ngocbig.Hic,Không bít cái Dve & Borland nhà em nó sao nữa mà chạy đoạn code mỗi cái lại chạy 1 kiểu.

Các đề tài tương tự

  1. Trả lời: 0
    Bài viết cuối: 07-07-2013, 07:29 PM
  2. Bài tập về cấu trúc trong c | Cấu trúc sinh viên???
    Gửi bởi dddzzzjjjiii trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 14
    Bài viết cuối: 21-07-2012, 05:06 PM
  3. Chiếu trúc, Chiếu trúc cao cấp, Hàng Sản xuất tại Việt Nam: Giá rẻ nhất thị trường
    Gửi bởi tqt.tranquoctuan trong diễn đàn Giới thiệu website, sản phẩm của bạn
    Trả lời: 0
    Bài viết cuối: 13-05-2012, 08:33 PM
  4. cấu trúc bảng băm là cấu trúc như thế nào?
    Gửi bởi minh_quang1202 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 06-01-2011, 07:03 PM
  5. Cấu trúc file excel | Cấu trúc file xls. Giúp mình với?
    Gửi bởi knightofit trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 2
    Bài viết cuối: 02-04-2009, 10:44 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn