Từ 1 tới 5 trên tổng số 5 kết quả

Đề tài: Không biết bài struct này sai chỗ nào?

  1. #1
    Ngày gia nhập
    01 2008
    Bài viết
    22

    Unhappy Không biết bài struct này sai chỗ nào?

    Mọi người coi giùm em sai ở chỗ nào nhé, sao mình không xuất ra được sinh viên có điểm trung bình lớn nhất vậy?
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #define MAX 50
    4. struct DATE
    5. {
    6. unsigned char ngay,thang;
    7. int nam;
    8. };
    9. struct DIEM
    10. {
    11. int toan,ly,hoa;
    12. float tb;
    13. };
    14. typedef struct SINHVIEN
    15. {
    16. char hoten[31];
    17. char maso[8];
    18. struct DIEM diem;
    19. struct DATE ngaysinh;
    20. };
    21. float TrungBinh(int a,int b,int c)
    22. {
    23. float tb;
    24. tb=float((a+b+c))/3;
    25. return tb;
    26. }
    27. void NhapNgaySinh(DATE &d)
    28. {
    29. printf("Nhap ngay:\n");
    30. scanf("%u",&d.ngay);
    31. printf("Nhap thang:\n");
    32. scanf("%u",&d.thang);
    33. printf("Nhap nam:\n");
    34. scanf("%d",&d.nam);
    35. }
    36. void XuatNgaySinh(DATE d)
    37. {
    38. printf("%u/%u/%d\n",d.ngay,d.thang,d.nam);
    39. }
    40. void NhapDiem(DIEM &d)
    41. {
    42. printf("Nhap diem toan:\n");
    43. scanf("%d",&d.toan);
    44. printf("Nhap diem hoa:\n");
    45. scanf("%d",&d.hoa);
    46. printf("Nhap diem ly:\n");
    47. scanf("%d",&d.ly);
    48. }
    49. void XuatDiem(DIEM d)
    50. {
    51. printf("Diem toan la %d\n",d.toan);
    52. printf("Dien hoa la %d\n",d.hoa);
    53. printf("Diem ly la %d\n",d.ly);
    54. printf("Diem trung binh la %f",d.tb=TrungBinh(d.toan,d.hoa,d.ly));
    55. }
    56. void Nhap1SV(SINHVIEN &sv)
    57. {
    58. flushall();
    59. printf("Ho ten la:");
    60. gets(sv.hoten);
    61. printf("\nMa so la:\n");
    62. gets(sv.maso);
    63. printf("\nNgay sinh la:\n");
    64. NhapNgaySinh(sv.ngaysinh);
    65. printf("\nDiem la:");
    66. NhapDiem(sv.diem);
    67. }
    68. void Xuat1SV(SINHVIEN sv)
    69. {
    70. printf("\nHo ten la:%s",sv.hoten);
    71. printf("\nMa so la:%s",sv.maso);
    72. printf("\nNgay thang nam sinh la:");
    73. XuatNgaySinh(sv.ngaysinh);
    74. printf("\nDiem la:");
    75. XuatDiem(sv.diem);
    76. }
    77. void NhapMangSV(SINHVIEN sv[],int &n)
    78. {
    79. printf("Nhap so luong sinh vien:\n");
    80. scanf("%d",&n);
    81. for(int i=0;i<n;i++)
    82.  {
    83.  printf("\nNhap vao sinh vien thu %d\n",i+1);
    84.  Nhap1SV(sv[i]);
    85.  }
    86. }
    87. void XuatMangSV(SINHVIEN sv[],int n)
    88. {
    89. for(int i=0;i<n;i++)
    90.  {
    91.  printf("Thong tin sinh vien thu %d",i+1);
    92.  Xuat1SV(sv[i]);
    93.  }
    94. }
    95. SINHVIEN TimMax(SINHVIEN sv[],int n)
    96. {
    97. SINHVIEN max;
    98. max=sv[0];
    99. for(int i=1;i<n;i++)
    100.   {
    101.   if((max.diem).tb<(sv[i].diem).tb)
    102.    max=sv[i];
    103.    }
    104. return max;
    105. }
    106. void main()
    107. {
    108. SINHVIEN sv[MAX],max;
    109. int n;
    110. NhapMangSV(sv,n);
    111. XuatMangSV(sv,n);
    112. max=TimMax(sv,n);
    113. printf("\nThong tin cua sinh vien co diem trung binh lon nhat la:");
    114. Xuat1SV(max);
    115. getch();
    116. }

    --------
    Lần sau post bài có dấu rõ ràng nha bạn. Mình sửa lại dùm 1 lần thôi.
    Đã được chỉnh sửa lần cuối bởi Forlorn_hope : 17-04-2008 lúc 01:42 PM.
    Tôi yêu lập trình

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

    Code:
    SINHVIEN TimMax(SINHVIEN sv[],int n)
    {
    SINHVIEN max;
    max=sv[0];
    for(int i=1;i<n;i++)
      {
      if((max.diem).tb<(sv[i].diem).tb)
       max=sv[i];
       }
    return max;
    Hình như hàm tìm sinh viên có điểm trung bình lớn nhất này của mình bị sai.Mọi người giúp mình sửa lại với!
    Tôi yêu lập trình

  3. #3
    Ngày gia nhập
    01 2008
    Bài viết
    22

    Không ai giúp mình hết à.Tại sao vậy?
    Tôi yêu lập trình

  4. #4
    Ngày gia nhập
    10 2007
    Nơi ở
    Gameloft studio
    Bài viết
    175

    Đây cậu:
    Cậu có quên một điều là cậu chưa tính trung bình thì lấy gì mà cậu so sánh giữa các điểm trung bình.
    Có lẽ cậu nghĩ khi xuất sinh viên thì đồng thời có gọi hàm tính trung bình rồi nên điểm trung bình đã có, nhưng cậu quên rằng cậu chỉ truyền vào không phải là chính biến đó mà là truyền vào để tính tạm thời thôi.
    Cậu xem lại giá trị nhận vào của hàm khi xuất ra danh sách sinh viên đi:
    C Code:
    1. void XuatMangSV(SINHVIEN sv[],int n)
    2. {
    3. for(int i=0;i<n;i++)
    4.  {
    5.  printf("Thong tin sinh vien thu %d",i+1);
    6.  Xuat1SV(sv[i]);
    7.  }
    8. }
    Chính bắt đầu từ chỗ này, hàm này nhận vào hai tham số là:
    - SINHVIEN sv[]
    - int n
    Tham số SINHVIEN không phải nhận theo kiểu & như hàm nhập của cậu. Như hàm nhập: void Nhap1SV(SINHVIEN &sv).
    Cậu hiểu chứ, cho nên nó dần dần đi xuất danh sách sinh viên và đồng thời tính điểm trung binh, nhưng cái điểm trung bình này chỉ tồn tại trong hàm thôi.
    Chính vì thế mà điểm trung bình của danh sách gốc của bạn vẫn chưa được tính. -> nên không thể so sánh được chính xác (vì toàn bộ là do khi khai báo nó đưa ra một giá trị bất kỳ nào đó). Chứ không phải là điểm trung bình mà cậu nghĩ.
    Đến đây bạn hiểu rồi chứ.
    Cậu có thể thêm vào hàm main vài dòng tính điểm trung binh thế này:
    C Code:
    1. void main()
    2. {
    3. SINHVIEN sv[MAX];
    4. int max;
    5. int n;
    6. NhapMangSV(sv,n);
    7. XuatMangSV(sv,n);
    8. max=TimMax(sv,n);
    9. //Thêm ở đây
    10. for(int i=0;i<n;i++)
    11.     sv[i].diem.tb=TrungBinh(sv[i].diem.toan,sv[i].diem.hoa,sv[i].diem.ly);
    12. //
    13.  
    14. printf("\nThong tin cua sinh vien co diem trung binh lon nhat la:");
    15. Xuat1SV(sv[max]);
    16. getch();
    17. }
    Hoặc thêm toán tử & ở một vài hàm là ok rồi, nó sẽ tính trung bình trong khi xuất danh sách sinh viên luôn, khỏi tốn thêm thời gian tính.
    Không biết ghi gì luôn ...

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

    Mình hiểu rồi.Cảm ơn bạn nhiều nha
    Tôi yêu lập trình

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

  1. Bài tập C++ làm sao truy xuất biến của struct lồng trong struct
    Gửi bởi quangnam.tamky 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: 10-04-2013, 05:22 PM
  2. Thắc mắc về khai báo biến của struct !!!
    Gửi bởi zerocom trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 3
    Bài viết cuối: 10-05-2011, 11:54 PM
  3. vấn đề với swap 2 biến struct
    Gửi bởi vodanh229 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 4
    Bài viết cuối: 19-12-2009, 12:40 AM
  4. VC++ cách gán 2 biến của 1 struct với nhau
    Gửi bởi honey trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 02-09-2009, 05:29 PM
  5. Một bài tập đơn giản về struct,mà không biết sai cái gì...
    Gửi bởi Taylaptrinh trong diễn đàn Nhập môn lập trình C/C++
    Trả lời: 17
    Bài viết cuối: 11-04-2008, 12:20 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