Trang 1 trên tổng số 5 123... Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 41 kết quả

Đề tài: Chỉ em cách dừng câu lệnh if

  1. #1
    Ngày gia nhập
    03 2009
    Bài viết
    523

    Mặc định Chỉ em cách dừng câu lệnh if

    Giải phương trình bậc hai ax2 + bx + c = 0
    đoạn code này khi giải ra pt vô ngiệm, nó sẽ in lần lượt các câu lệnh if theo sau
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    void main() { float a, b, c; printf(“Program solving quadratic equation (pt bac 2) \n”);
     printf("Nhap a, b, c: "); scanf("%f%f%f", &a, &b, &c);
       float d = b*b - 4*a*c, d1 = sqrt(d); 
    printf("a=%f, b=%f, c=%f \n", a, b, c);   // Kiem tra xem kieu so nhap vao dung ko?
    if (a == 0) 
    {if (b == 0)
    {if (c == 0) printf(“Phuong trinh vo so ngiem”) break;	
    else printf(“Phuong trinh vo ngiem \n”);}
    if (b =! 0) {if (c == 0) printf(“Phuong trinh co ngiem x = 0”);
    	else printf(“Phuong trinh co ngiem x = %f.2”, – c / b);}}
    if (a =! 0) 
    {if (d < 0) printf("Phuong trinh vo ngiem \n");
    	if (d = 0) printf("Phuong trinh co ngiem kep x1 = x2 = %f", float (- b)/(2*a));
    	else printf("Phuong trinh co ngiem x1 = %f.2 \n", float (- b + d1)/(2*a));
          printf("Phuong trinh co ngiem x2 = %f.2", float (- b - d1)/(2*a));} 	
    getch();}
    (tiêu đề vậy rõ ràng chưa vậy?)

    đoạn code này nó in ra 4 câu tong gia tien
    Code:
    #include <stdio.h>
    #include <conio.h>
    #define G1 15000  	//sau lenh define ko co dau ;
    #define G2 13500
    #define G3 11000
    void main()
    { int n; float t; printf("Nhap so km thu n: "); scanf ("%d", &n);
    if (n == 1) t = G1; printf ("tong gia tien la: %f", t);
    if (n >= 2 && n <= 5) t = G1 + (n - 1)*G2; printf ("tong gia tien là: %f", t);
    if (n > 5) t = G1 + 4*G2 + (n - 1 - 4)*G3; printf ("tong gia tien la: %f", t);
    if (n > 120) t = G1 + 4*G2 + (n - 1 - 4)*G3; t = t*0.9; 
    printf ("tong gia tien la: %f", t); getch();}
    dùng lệnh break để dừng câu lệnh if thì trình dịch báo lỗi
    Đã được chỉnh sửa lần cuối bởi chuong01 : 06-03-2009 lúc 08:37 AM.

  2. #2
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Break chỉ đi chung với vòng lặp. Lệnh if ko dùng chung được với break. Mình đã sửa cho bạn rồi đây :

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #include <math.h>
    4.  
    5.  
    6. void main()
    7. {
    8.     double a, b, c;
    9.    
    10.     printf("Program solving quadratic equation (pt bac 2) \n");
    11.     printf("Nhap a, b, c: ");
    12.     scanf("%lf%lf%lf", &a, &b, &c);
    13.  
    14.     if (a == 0)
    15.     {
    16.         if (b == 0)
    17.         {
    18.             if (c == 0)
    19.                 printf("Phuong trinh vo so ngiem");
    20.             else
    21.                 printf("Phuong trinh vo nghiem\n");
    22.         }
    23.         else
    24.         {
    25.             printf("Phuong trinh co ngiem x = %.2lf", c / b);
    26.         }
    27.     }
    28.     else
    29.     {
    30.         double d = b * b - 4 * a * c, d1 = sqrt(d);
    31.         double a2 = a * 2;
    32.  
    33.         if (d < 0)
    34.             printf("Phuong trinh vo ngiem\n");
    35.         else if (d == 0)
    36.             printf("Phuong trinh co ngiem kep x1 = x2 = %.2lf\n", (-b) / a2);
    37.         else
    38.         {
    39.             printf("Phuong trinh co ngiem x1 = %.2lf\n",(-b + d1) / a2);
    40.             printf("Phuong trinh co ngiem x2 = %.2lf\n",(-b - d1) / a2);
    41.         }  
    42.     }
    43.    
    44.     getch();
    45. }
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  3. #3
    Ngày gia nhập
    03 2009
    Bài viết
    523

    sao cấu trúc này dùng else if nó báo lỗi vậy mấy anh?
    Code:
    #include <stdio.h>
    #include <conio.h>
    #define G1 15000  	//sau lenh define ko co dau ;
    #define G2 13500
    #define G3 11000
    void main()
    { int n; float t; printf ("Nhap so km thu n: "); scanf ("%d", &n);
    if(n == 1) t = G1; printf ("tong gia tien la: %f \n", t);
    else if(n >= 2 && n <= 5) t = G1 + (n - 1)*G2; 
    printf ("tong gia tien là: %f \n", t);
     else if(n > 5 && n < 120) t = G1 + 4*G2 + (n - 1 - 4)*G3; 
    printf ("tong gia tien la: %f \n", t);
    else(n >= 120) t = G1 + 4*G2 + (n - 1 - 4)*G3; t = t*0.9;
    printf ("tong gia tien la: %f \n", t); getch();}

  4. #4
    Ngày gia nhập
    07 2008
    Nơi ở
    /media/Anime
    Bài viết
    2,288

    Bài sửa đây :

    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3. #define G1 15000  
    4. #define G2 13500
    5. #define G3 11000
    6. void main()
    7. {
    8.     int n;
    9.     float t;
    10.    
    11.     printf ("Nhap so km thu n: ");
    12.     scanf ("%d", &n);
    13.     if(n == 1)
    14.     {
    15.         t = G1;
    16.         printf ("tong gia tien la: %f \n", t);
    17.     }
    18.     else if (n >= 2 && n <= 5)
    19.     {
    20.         t = G1 + (n - 1)*G2;
    21.         printf ("tong gia tien là: %f \n", t);
    22.     }
    23.     else if(n > 5 && n < 120)
    24.     {
    25.         t = G1 + 4*G2 + (n - 1 - 4)*G3;
    26.         printf ("tong gia tien la: %f \n", t);
    27.     }
    28.     else if (n >= 120)
    29.     {
    30.         t = G1 + 4*G2 + (n - 1 - 4)*G3;
    31.         t = t*0.9;
    32.         printf ("tong gia tien la: %f \n", t);
    33.     }
    34.  
    35.     getch();
    36. }
    Càng yêu mèo thì mèo càng mập. Mèo càng mập ta lại càng yêu.

  5. #5
    Ngày gia nhập
    03 2009
    Bài viết
    523

    hix hix ko hiểu sao thầy cho bài nào cũng làm sai
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    void main { int n, n_can_nguyen; printf(“Nhap n: ”); scanf(“%d”, &n); 
    n_can_nguyen = int(sqrt(n));
    if (n_can_nguyen*n_can_nguyen == n) {printf(“%d la so chinh phuong”, n);}
    else {printf (“%d khong la so chinh phuong”, n);} getch();}
    ko hiểu sai chỗ nào
    Đã được chỉnh sửa lần cuối bởi chuong01 : 06-03-2009 lúc 12:51 PM.

  6. #6
    Ngày gia nhập
    03 2009
    Bài viết
    523

    Mặc định Chỉ em cách dừng câu lệnh if

    Cho em hỏi sao chương trình này 29! ra số âm, còn 30! lại là số dương?
    Code:
    #include <stdio.h>
    #include <conio.h>
    void main()  {long n, i, s; 
    printf ("Program only can  sovle n <= 31, 31! = 738197504 \n");
    printf("Nhap n <= 31: "); scanf("%d", &n); s = 1;	 
    for (i = 2; i <= n; i++) s = s * i ;
    printf("%d! = %d", n, s); getch();}
    Đã được chỉnh sửa lần cuối bởi chuong01 : 06-03-2009 lúc 03:27 PM.

  7. #7
    Ngày gia nhập
    11 2006
    Bài viết
    633

    Bạn chỉ mới học lập trình đã viết code rối tung rối mù, ko canh lề, ko chịu coding style thì làm sao mà có thể debug lỗi cơ bản bằng mắt được. Sau này viết ứng dụng khó hơn mà code theo style của bạn thì e rằng ko debug nổi bằng máy chứ đừng nói bằng mắt.

  8. #8
    Ngày gia nhập
    03 2009
    Bài viết
    523

    em chỉ tập viết những chương trình nhỏ thôi mà, em đâu biết coding style làm sao đâu?

  9. #9
    Ngày gia nhập
    11 2007
    Nơi ở
    Hà Nội
    Bài viết
    520

    Trích dẫn Nguyên bản được gửi bởi chuong01 Xem bài viết
    em chỉ tập viết những chương trình nhỏ thôi mà, em đâu biết coding style làm sao đâu?
    đó là cách viết code đấy bạn ơi
    viết code không chỉ viết ra là xong mà phải viết sao cho dễ đọc ,dễ với mình và cả người dùng lại đoạn code đó (rất quan trọng nếu bạn làm bài thi trên trường, các thầy chấm bài sẽ rất bực nếu code viết lung tung)
    có 1 số chuẩn nhưng tớ không nhớ lắm chỉ nhớ 1 vài quy tắc là cứ các câu lệnh trong cùng 1 cặp dấu {} thì phải thẳng cột với nhau , các aaus {} phải thẳng hàng
    câu lệnh sau for phải lui vào 4 kí tự
    Code:
    for( ; ; )
        statement
    bạn có thể xem thêm code của mọi người trong diễn đàn và học theo
    viết code cũng là 1 nghệ thuật , và người viết cũng là nghệ sĩ

    như đoạn code của bạn có thể sửa cho đúng chuẩn thành
    C Code:
    1. #include <stdio.h>
    2. #include <conio.h>
    3.  
    4. int main()
    5.   {
    6.       long  n, i, s;
    7.      
    8.       printf ("Program only can  sovle n <= 31, 31! = 738197504 \n");
    9.       printf("Nhap n <= 31: ");
    10.       scanf("%d", &n); s = 1;    
    11.       for (i = 2; i <= n; i++)
    12.           s = s * i ;
    13.       printf("%d! = %d", n, s);
    14.       getch();
    15.       return 0;
    16.   }

    trường hợp bạn mắc phải giải thích như sau :
    Sự thật máy tính chỉ có thể lưu trữ hữu hạn các số, như kiểu nguyên là -32 768 tới 32 767; kiểu long :-2 147 483 648 --->2 147 483 647
    khi vượt qua giới hạn này , nghĩa là xảy ra tràn số , khi đó kết quả không còn chính xác nữa
    hiện tượng tràn số xảy ra , cờ OF được thiết lập(với tràn có dấu) hoặc CF(tràn không dấu)

    bạn có thể dùng lệnh debug <fileEXE> trong DOS(hay trong CMD của win ) để kiểm tra
    với cờ CF: CY ứng với CF dược thiết lập, NC ==không
    với cờ OF: OV=tràn, NV ==không
    khi tính 29!,30! thì xảy ra tràn , và kết quả hiện ra số âm hay số dương là phụ thuộc vào bit ngoài cùng bên trái Most significant bit(msb), nếu bit này là 1 --> số âm(do kiểu dữ liệu của bạn là long,nếu để unsigned long thì lại khác), nó là 0 --> số dương

    khi xử lý tính giai thừa các số lớn thì kiểu dữ liệu thông thường không còn phù hợp , khi đó phải dùng cách khác
    bạn có thể search trong forum
    đây là code của mình
    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #define MAX 4000
    4.  
    5. //In ket qua tinh toan
    6. void print_result(FILE *f,int s[],int n,int k)
    7. {    
    8.      int found=0,i=n-1;
    9.      while(i>0)
    10.      {
    11.      if((s[i]!=0)&&(found==0))
    12.        {
    13.          found=i;
    14.          break;
    15.        }
    16.      --i;
    17.      }  
    18.   fprintf(f,"Ket qua %d!:\n",k);
    19.   if(found==n-1)
    20.       fprintf(f,"\nCo the ket qua khong dung do da het bo nho.\n\n");
    21.   fprintf(f,"So chu so cua ket qua :%d\n",found+1);
    22.   for(int j=i;j>=0;--j)
    23.       fprintf(f,"%d",s[j]);
    24. }
    25.  
    26. void infile(int s[],int n,int k)
    27. {
    28.      char g[100],c='c';
    29.      FILE *f;
    30.      do{
    31.           printf("Nhap duong dan :");
    32.           fflush(stdin);
    33.           gets(g);
    34.           f=fopen(g,"r");
    35.           if(f!=NULL)
    36.           {
    37.               printf("Ban muon ghi de len file?(C/K)");
    38.               c=getchar();
    39.           }
    40.           else c='c';
    41.        }while ((g[0]==0)||c!='c');
    42.        
    43.         f=fopen(g,"w");
    44.         print_result(f,s,n,k);
    45.         fclose(f);
    46.         printf("Da xuat ket qua ra file.");
    47. }
    48.        
    49.      
    50. //khoi tao, gan gia tri 1 cho chuoi
    51. void khoitao(int s[],int n)
    52. {
    53.      int i;
    54.      for(i=0;i<n;++i)
    55.      s[i]=0;
    56.      s[0]=1;
    57. }    
    58. //nhan 1 chuoi so voi k
    59. void multiply(int s[],int n,int k)
    60. { int i,j;
    61.      for(i=0;i<n;++i)
    62.         s[i]=s[i]*k;
    63.      for(j=0;j<n-1;++j)
    64.      {
    65.           s[j+1]+=s[j]/10;
    66.           s[j]%=10;
    67.       }
    68. }
    69. //ham tinh giai thua su dung ham multiply
    70. void factorial(int s[],int n,int k)
    71. {
    72.      int i;
    73.    
    74.      khoitao(s,n);
    75.      for(i=1;i<=k;++i)
    76.      multiply(s,n,i);
    77.      
    78. }
    79.  
    80. main()
    81. {     int k;
    82.       int s[MAX];
    83.       do{
    84.           printf("\nDe ket thuc nhap -1:\n");
    85.           printf("Nhap so :");
    86.           scanf("%d",&k);
    87.           if(k>=0)
    88.           {
    89.               factorial(s,MAX,k);
    90.               print_result(stdout,s,MAX,k);
    91.               printf("\nBan muon in ket qau ra file?(C/K):");
    92.               if ((getchar()=='C')||(getchar()=='c'))
    93.                   infile(s,MAX,k);
    94.           }
    95.           else
    96.               printf("Khong co gia thua.");
    97.           getch();
    98.       }while (k!=-1);
    99. }
    Đã được chỉnh sửa lần cuối bởi quangnh89 : 06-03-2009 lúc 05:55 PM.

  10. #10
    Ngày gia nhập
    03 2009
    Bài viết
    523

    em mới học lập trình C à, mà tự học nữa, trên lớp thầy mới giảng tới bài 2 giải thuật, code của anh em chưa học tới nên chưa hiểu
    mấy anh giúp giùm em với, debug quài sai quài
    ngồi chơi game dc 6-7 tiếng, học lập trình C chỉ ngồi dc 3 tiếng >...<
    code em thấy có mấy dòng ngắn quá nên viết thêm
    chỉ em bài này với
    Code:
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    void main { int n, n_can_nguyen; printf(“Nhap n: ”); scanf(“%d”, &n); 
    n_can_nguyen = int(sqrt(n));
    if (n_can_nguyen*n_can_nguyen == n) {printf(“%d la so chinh phuong”, n);}
    else {printf (“%d khong la so chinh phuong”, n);} getch();}
    bài này sao nó ra 1000 nhỉ?
    Code:
    #include <stdio.h>
    #include <conio.h>
    void main() 
    {int n, i, a, b1, b, c, d; printf(“cac so thoa yeu cau la: \n”); d = 0;
    	for (i = 10; i <= 999; i++)
    	{ a = i / 100; b1 = i / 10; b = b1 % 10; c = i % 10;}
    	if (a*b*c == 3*(a + b + c)) d++; printf(“%d \n”, i); getch();}
    thuật toán Euclide thử số 5 và 6 thì nó ra uscln là 5???
    Code:
    #include <stdio.h>
    #include <conio.h>
    void main() {int a, b, uscln, r; printf("Nhap a va b: "); scanf("%d%d", &a, &b);
    printf ("a = %d, b = %d \n", a, b); if (a < b)  r = a % b; else  r = b % a;
    while ( r > 0) {a = b; b = r; uscln = b; if (a < b) r = a % b; else r = b % a;}
    printf("USCLN cua %d va %d la %d", a, b, uscln); getch();}
    bài này nhập số nào nó cũng ra 0?
    Code:
    #include <stdio.h>
    #include <conio.h>
    void main() {float s; int n, i; printf("Nhap n: "); scanf("%d", &n); s = 0;
    for (i = 2; i <= 2*n; i += 2) s = s + 1/i; 
    printf("1/2 + 1/4 + ... + 1/%d = %f", 2*n, s); getch();}
    Đã được chỉnh sửa lần cuối bởi chuong01 : 06-03-2009 lúc 07:06 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