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

Đề tài: Ai giúp em tìm lỗi sai bài cấu trúc C này với ạ.

  1. #1
    Ngày gia nhập
    12 2018
    Bài viết
    5

    Mặc định Ai giúp em tìm lỗi sai bài cấu trúc C này với ạ.

    Em mới học dùng hàm khi chạy thì không bị lỗi gì nhưng mà in ra phần tinhTongDiem lại sai và không in ra được DanhSachSapXep ạ.
    Code:
    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    typedef struct thiSinh{ char HT[30], T[30]; float SD;
    };
    void nhapThiSinh();
    void sapXep();
    void inDanhSachSapXep();
    double tinhTongDiem();
    
    void nhapThiSinh(thiSinh ts[], int n)
    {
    	int i;
    	printf("Nhap so thi sinh Olympic tin hoc:");
    	scanf("%d",&n);
    	printf("\tNhap thong tin cho thi sinh\n");
    	for(i=0; i<n; i++)
    	{
    		printf("Thi sinh thu %d\n",i+1);
    		printf("Ho va ten: "); fflush(stdin);
    		gets(ts[i].HT);
    		printf("Truong: "); fflush(stdin);
    		gets(ts[i].T);
    		printf("So Diem:");
    		scanf("%f",&ts[i].SD);
    	}
    }
    double tinhTongDiem(thiSinh ts[], int n)
    {
    	int i;
    	char x[30];
    	double tong=0;
    	printf("Nhap ten truong can tinh tong diem:"); fflush(stdin);
    	gets(x);
    	for(i=0; i<n; i++)
    	 if(strcmp(ts[i].T , x)==0)
    	   {
    		 tong+=ts[i].SD;
           }
    	else printf("Khong co ten truong can tim.");
    	return tong;
    }
    void sapXep(thiSinh ts[], int n)
    {
    	int i,j;
    	float temp;
    	for(i=0; i<n-1; i++)
    	  for(j=i+1; j<n; j++)
    	     if(ts[i].SD < ts[j].SD)
    	      temp = ts[i].SD;
    	      ts[i].SD = ts[j].SD;
    	      ts[j].SD = temp;
    }
    void inDanhSachSapXep(thiSinh ts[], int n)
    {
    	int i;
    	printf("Danh sach thi sinh sap xep theo diem so giam dan\n");
    	for(i=0; i<n; i++)
        	printf("Ho va ten: %s, truong: %s, diem: %.2f\n",ts[i].HT,ts[i].T,ts[i].SD);
    }
    int main()
    {
    	int n;
    	double kq;
    	thiSinh ts[1000];
    	nhapThiSinh(ts, n);
    	printf("Tong diem truong can tim la %.2f\n",tinhTongDiem(ts, n));
    	sapXep(ts, n);
    	inDanhSachSapXep(ts, n);
    	return 0;
    }

  2. #2
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    543

    Code mình đã chữa. Nhưng chưa hoàn chỉnh.

    C++ Code:
    1. #include<stdio.h>
    2. #include<math.h>
    3. #include<string.h>
    4.  
    5. typedef struct thiSinh{ char HT[30], T[30]; float SD;
    6. } thiSinh;
    7.  
    8. void nhapThiSinh();
    9. void sapXep();
    10. void inDanhSachSapXep();
    11. double tinhTongDiem();
    12.  
    13. void nhapThiSinh(thiSinh ts[], int& n)
    14. {
    15.     int i;
    16.     printf("Nhap so thi sinh Olympic tin hoc:");
    17.     scanf("%d",&n);
    18.     printf("\tNhap thong tin cho thi sinh\n");
    19.     for(i=0; i<n; i++)  {
    20.         printf("Thi sinh thu %d\n",i+1);
    21.         printf("Ho va ten: "); fflush(stdin);
    22.         gets(ts[i].HT);
    23.         printf("Truong: "); fflush(stdin);
    24.         gets(ts[i].T);
    25.         printf("So Diem:");
    26.         scanf("%f",&ts[i].SD);
    27.     }
    28. }
    29.  
    30. double tinhTongDiem(thiSinh ts[], int n)
    31. {
    32.     int i;
    33.     char x[30];
    34.     double tong=0;
    35.     printf("Nhap ten truong can tinh tong diem:"); fflush(stdin);
    36.     gets(x);
    37.     for(i=0; i<n; i++) {
    38.         if(strcmp(ts[i].T , x)==0) {
    39.             tong+=ts[i].SD;
    40.         }
    41.         else {
    42.             printf("Khong co ten truong can tim.");
    43.         }
    44.     }
    45.     return tong;
    46. }
    47.  
    48. void sapXep(thiSinh ts[], int n)
    49. {
    50.     int i,j;
    51.     float temp;
    52.     for(i=0; i<n-1; i++) {
    53.         for(j=i+1; j<n; j++) {
    54.             if(ts[i].SD < ts[j].SD) {
    55.                 temp = ts[i].SD;
    56.                 ts[i].SD = ts[j].SD;
    57.                 ts[j].SD = temp;
    58.             }
    59.         }
    60.     }
    61. }
    62.  
    63. void inDanhSachSapXep(thiSinh ts[], int n)
    64. {
    65.     int i;
    66.     printf("Danh sach thi sinh sap xep theo diem so giam dan\n");
    67.     for(i=0; i<n; i++) {
    68.         printf("Ho va ten: %s, truong: %s, diem: %.2f\n",ts[i].HT,ts[i].T,ts[i].SD);
    69.     }
    70. }
    71.  
    72. int main()
    73. {
    74.     int n;
    75.     double kq;
    76.     thiSinh ts[1000];
    77.     nhapThiSinh(ts, n);
    78.     printf("Tong diem truong can tim la %.2f\n",tinhTongDiem(ts, n));
    79.     sapXep(ts, n);
    80.     inDanhSachSapXep(ts, n);
    81.     return 0;
    82. }
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  3. #3
    Ngày gia nhập
    12 2018
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi Ada Xem bài viết
    Code mình đã chữa. Nhưng chưa hoàn chỉnh.

    C++ Code:
    1. #include<stdio.h>
    2. #include<math.h>
    3. #include<string.h>
    4.  
    5. typedef struct thiSinh{ char HT[30], T[30]; float SD;
    6. } thiSinh;
    7.  
    8. void nhapThiSinh();
    9. void sapXep();
    10. void inDanhSachSapXep();
    11. double tinhTongDiem();
    12.  
    13. void nhapThiSinh(thiSinh ts[], int& n)
    14. {
    15.     int i;
    16.     printf("Nhap so thi sinh Olympic tin hoc:");
    17.     scanf("%d",&n);
    18.     printf("\tNhap thong tin cho thi sinh\n");
    19.     for(i=0; i<n; i++)  {
    20.         printf("Thi sinh thu %d\n",i+1);
    21.         printf("Ho va ten: "); fflush(stdin);
    22.         gets(ts[i].HT);
    23.         printf("Truong: "); fflush(stdin);
    24.         gets(ts[i].T);
    25.         printf("So Diem:");
    26.         scanf("%f",&ts[i].SD);
    27.     }
    28. }
    29.  
    30. double tinhTongDiem(thiSinh ts[], int n)
    31. {
    32.     int i;
    33.     char x[30];
    34.     double tong=0;
    35.     printf("Nhap ten truong can tinh tong diem:"); fflush(stdin);
    36.     gets(x);
    37.     for(i=0; i<n; i++) {
    38.         if(strcmp(ts[i].T , x)==0) {
    39.             tong+=ts[i].SD;
    40.         }
    41.         else {
    42.             printf("Khong co ten truong can tim.");
    43.         }
    44.     }
    45.     return tong;
    46. }
    47.  
    48. void sapXep(thiSinh ts[], int n)
    49. {
    50.     int i,j;
    51.     float temp;
    52.     for(i=0; i<n-1; i++) {
    53.         for(j=i+1; j<n; j++) {
    54.             if(ts[i].SD < ts[j].SD) {
    55.                 temp = ts[i].SD;
    56.                 ts[i].SD = ts[j].SD;
    57.                 ts[j].SD = temp;
    58.             }
    59.         }
    60.     }
    61. }
    62.  
    63. void inDanhSachSapXep(thiSinh ts[], int n)
    64. {
    65.     int i;
    66.     printf("Danh sach thi sinh sap xep theo diem so giam dan\n");
    67.     for(i=0; i<n; i++) {
    68.         printf("Ho va ten: %s, truong: %s, diem: %.2f\n",ts[i].HT,ts[i].T,ts[i].SD);
    69.     }
    70. }
    71.  
    72. int main()
    73. {
    74.     int n;
    75.     double kq;
    76.     thiSinh ts[1000];
    77.     nhapThiSinh(ts, n);
    78.     printf("Tong diem truong can tim la %.2f\n",tinhTongDiem(ts, n));
    79.     sapXep(ts, n);
    80.     inDanhSachSapXep(ts, n);
    81.     return 0;
    82. }
    hình như bạn chỉ thêm ngoặc thôi đúng k hay còn gì sửa nữa ạ?

  4. #4
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    543

    Trích dẫn Nguyên bản được gửi bởi triutuat Xem bài viết
    hình như bạn chỉ thêm ngoặc thôi đúng k hay còn gì sửa nữa ạ?
    Mình chữa hàm nhapThiSinh().
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  5. #5
    Ngày gia nhập
    12 2018
    Bài viết
    5

    Trích dẫn Nguyên bản được gửi bởi Ada Xem bài viết
    Mình chữa hàm nhapThiSinh().
    bạn sửa thành int &n đúng k? Mà hình như trước mình đọc ở đâu đấy thì trong C không có &n như của bạn thì phải mà trên C++ mới có.

  6. #6
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    543

    Mặc định Ai giúp em tìm lỗi sai bài cấu trúc C này với ạ.

    Trích dẫn Nguyên bản được gửi bởi triutuat Xem bài viết
    bạn sửa thành int &n đúng k? Mà hình như trước mình đọc ở đâu đấy thì trong C không có &n như của bạn thì phải mà trên C++ mới có.
    Ừ. Đấy là C++. Còn trong C thì ta có thể viết như thế nào nhỉ?
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

  7. #7
    Ngày gia nhập
    08 2017
    Bài viết
    2,573

    cần cù bù thông minh, ...
    Genius is one percent inspiration and ninety-nine percent perspiration



    menu File. Compare By Content ...

  8. #8
    Ngày gia nhập
    02 2016
    Bài viết
    305

    Code:
    void nhapThiSinh(thiSinh ts[], int *n)
    {
    	int i;
    	printf("Nhap so thi sinh Olympic tin hoc:");
    	scanf("%d", n);
    	printf("\tNhap thong tin cho thi sinh\n");
    	for(i=0; i<*n; i++)
    	{
    		printf("Thi sinh thu %d\n",i+1);
    		printf("Ho va ten: "); fflush(stdin);
    		gets(ts[i].HT);
    		printf("Truong: "); fflush(stdin);
    		gets(ts[i].T);
    		printf("So Diem:");
    		scanf("%f",&ts[i].SD);
    	}
    }
    ...
    
        int main()
        {
        	int n;
        	double kq;
        	thiSinh ts[1000];
        	nhapThiSinh(ts, &n);
        	printf("Tong diem truong can tim la %.2f\n",tinhTongDiem(ts, n));
        	sapXep(ts, n);
        	inDanhSachSapXep(ts, n);
        	return 0;
        }
    Hoặc là:

    Code:
    int nhapSoThiSinh()
    {
    	int n;
    	printf("Nhap so thi sinh Olympic tin hoc:");
    	scanf("%d",&n);
    	return n;
    }
    
    void nhapThiSinh(thiSinh ts[], int n)
    {
    	int i;
    	for(i=0; i<n; i++)
    	{
    		printf("Thi sinh thu %d\n",i+1);
    		printf("Ho va ten: "); fflush(stdin);
    		gets(ts[i].HT);
    		printf("Truong: "); fflush(stdin);
    		gets(ts[i].T);
    		printf("So Diem:");
    		scanf("%f",&ts[i].SD);
    	}
    }
    ...
    
        int main()
        {
        	int n;
        	double kq;
        	thiSinh ts[1000];
        	n = nhapSoThiSinh();
        	nhapThiSinh(ts, n);
        	printf("Tong diem truong can tim la %.2f\n",tinhTongDiem(ts, n));
        	sapXep(ts, n);
        	inDanhSachSapXep(ts, n);
        	return 0;
        }
    Chú: hình như bài nguyên bản của thớt từ đầu đã là code C++.
    Nếu compile bằng trình C thuần túy thì sẽ bị lỗi vì nó khai báo một mớ hàm không có tham ngay đầu. C++ cho phép khai báo hàm trùng tên (hàm chồng) nhưng C thì không.
    Mặt khác, cũng có thể tôi sai. Lâu ngày không theo dõi phiên bản mới, có thể chuẩn C mới cho như vậy.

  9. #9
    Ngày gia nhập
    01 2008
    Nơi ở
    Rất đông người
    Bài viết
    543

    Code của bạn chủ thớt không phải là C theo chuẩn 2011 và các bản trước bởi vì câu

    Code:
    typedef struct thiSinh{ char HT[30], T[30]; float SD; };
    không tạo ra kiểu (thiSinh), nên sẽ gây lỗi biên dịch ở bất cứ câu nào sử dụng kiểu này.

    Thực nghiệm bằng GCC v8.1.
    -...- -.- .. .-.. .-.. - .... . -... . .- ... - .-.-.

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